diff --git a/.buildkite/pipeline-resource-definitions/kibana-package-registry.yml b/.buildkite/pipeline-resource-definitions/kibana-package-registry.yml index bde46b4050221..fb38d028bc94f 100644 --- a/.buildkite/pipeline-resource-definitions/kibana-package-registry.yml +++ b/.buildkite/pipeline-resource-definitions/kibana-package-registry.yml @@ -21,7 +21,8 @@ spec: env: SLACK_NOTIFICATIONS_CHANNEL: "#kibana-operations-alerts" ELASTIC_SLACK_NOTIFICATIONS_ENABLED: "true" - REPORT_FAILED_TESTS_TO_GITHUB: 'true' + REPORT_FAILED_TESTS_TO_GITHUB: "true" + FLEET_PACKAGE_REGISTRY_DOCKER_IMAGE: "docker.elastic.co/package-registry/distribution:lite" repository: elastic/kibana branch_configuration: main default_branch: main diff --git a/.buildkite/pipelines/artifacts.yml b/.buildkite/pipelines/artifacts.yml index 49373fff910e2..cc5bfaea6acf2 100644 --- a/.buildkite/pipelines/artifacts.yml +++ b/.buildkite/pipelines/artifacts.yml @@ -6,7 +6,7 @@ steps: imageProject: elastic-images-prod provider: gcp machineType: c2-standard-16 - diskSizeGb: 125 + diskSizeGb: 150 timeout_in_minutes: 120 retry: automatic: diff --git a/.buildkite/scripts/pipelines/pull_request/pipeline.ts b/.buildkite/scripts/pipelines/pull_request/pipeline.ts index 272823dd84fe3..9751cb75e589d 100644 --- a/.buildkite/scripts/pipelines/pull_request/pipeline.ts +++ b/.buildkite/scripts/pipelines/pull_request/pipeline.ts @@ -236,7 +236,7 @@ const getPipeline = (filename: string, removeSteps = true) => { if ( (await doAnyChangesMatch([ /^packages\/kbn-securitysolution-.*/, - /^x-pack\/solutions\/security\/platform\/plugins\/shared\/security_solution/, + /^x-pack\/solutions\/security\/plugins\/security_solution/, /^x-pack\/test\/defend_workflows_cypress/, /^x-pack\/test\/security_solution_cypress/, /^fleet_packages\.json/, @@ -256,9 +256,9 @@ const getPipeline = (filename: string, removeSteps = true) => { /^x-pack\/platform\/plugins\/shared\/data_views\/common/, /^x-pack\/solutions\/security\/plugins\/lists/, /^x-pack\/platform\/plugins\/shared\/rule_registry\/common/, - /^x-pack\/solutions\/security\/platform\/plugins\/shared\/security_solution/, - /^x-pack\/solutions\/security\/platform\/plugins\/shared\/security_solution_ess/, - /^x-pack\/solutions\/security\/platform\/plugins\/shared\/security_solution_serverless/, + /^x-pack\/solutions\/security\/plugins\/security_solution/, + /^x-pack\/solutions\/security\/plugins\/security_solution_ess/, + /^x-pack\/solutions\/security\/plugins\/security_solution_serverless/, /^x-pack\/platform\/plugins\/shared\/task_manager/, /^x-pack\/solutions\/security\/plugins\/timelines/, /^x-pack\/platform\/plugins\/shared\/triggers_actions_ui\/public\/application\/sections\/action_connector_form/, @@ -341,9 +341,9 @@ const getPipeline = (filename: string, removeSteps = true) => { /^x-pack\/solutions\/security\/plugins\/elastic_assistant/, /^x-pack\/solutions\/security\/plugins\/lists/, /^x-pack\/platform\/plugins\/shared\/rule_registry\/common/, - /^x-pack\/solutions\/security\/platform\/plugins\/shared\/security_solution/, - /^x-pack\/solutions\/security\/platform\/plugins\/shared\/security_solution_ess/, - /^x-pack\/solutions\/security\/platform\/plugins\/shared\/security_solution_serverless/, + /^x-pack\/solutions\/security\/plugins\/security_solution/, + /^x-pack\/solutions\/security\/plugins\/security_solution_ess/, + /^x-pack\/solutions\/security\/plugins\/security_solution_serverless/, /^x-pack\/platform\/plugins\/shared\/task_manager/, /^x-pack\/solutions\/security\/plugins\/threat_intelligence/, /^x-pack\/solutions\/security\/plugins\/timelines/, @@ -363,7 +363,7 @@ const getPipeline = (filename: string, removeSteps = true) => { ((await doAnyChangesMatch([ /^x-pack\/platform\/plugins\/shared\/osquery/, /^x-pack\/test\/osquery_cypress/, - /^x-pack\/solutions\/security\/platform\/plugins\/shared\/security_solution/, + /^x-pack\/solutions\/security\/plugins\/security_solution/, ])) || GITHUB_PR_LABELS.includes('ci:all-cypress-suites')) && !GITHUB_PR_LABELS.includes('ci:skip-cypress-osquery') @@ -376,8 +376,8 @@ const getPipeline = (filename: string, removeSteps = true) => { if ( (await doAnyChangesMatch([ /^x-pack\/packages\/kbn-cloud-security-posture/, - /^x-pack\/solutions\/security\/platform\/plugins\/shared\/cloud_security_posture/, - /^x-pack\/solutions\/security\/platform\/plugins\/shared\/security_solution/, + /^x-pack\/solutions\/security\/plugins\/cloud_security_posture/, + /^x-pack\/solutions\/security\/plugins\/security_solution/, /^x-pack\/test\/security_solution_cypress/, ])) || GITHUB_PR_LABELS.includes('ci:all-cypress-suites') diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 1eba14ec39735..e57bfee2fccd0 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -249,7 +249,6 @@ packages/kbn-scout-info @elastic/appex-qa packages/kbn-scout-reporting @elastic/appex-qa packages/kbn-screenshotting-server @elastic/appex-sharedux packages/kbn-set-map @elastic/kibana-operations -packages/kbn-shared-ux-utility @elastic/appex-sharedux packages/kbn-some-dev-log @elastic/kibana-operations packages/kbn-sort-package-json @elastic/kibana-operations packages/kbn-sort-predicates @elastic/kibana-visualizations @@ -288,57 +287,8 @@ packages/serverless/settings/common @elastic/appex-sharedux @elastic/kibana-mana packages/serverless/settings/observability_project @elastic/appex-sharedux @elastic/kibana-management @elastic/obs-ux-management-team packages/serverless/storybook/config @elastic/appex-sharedux packages/serverless/types @elastic/appex-sharedux -packages/shared-ux/avatar/solution @elastic/appex-sharedux -packages/shared-ux/button_toolbar @elastic/appex-sharedux -packages/shared-ux/button/exit_full_screen @elastic/appex-sharedux -packages/shared-ux/card/no_data/impl @elastic/appex-sharedux -packages/shared-ux/card/no_data/mocks @elastic/appex-sharedux -packages/shared-ux/card/no_data/types @elastic/appex-sharedux -packages/shared-ux/chrome/navigation @elastic/appex-sharedux packages/shared-ux/code_editor/impl @elastic/appex-sharedux packages/shared-ux/code_editor/mocks @elastic/appex-sharedux -packages/shared-ux/error_boundary @elastic/appex-sharedux -packages/shared-ux/file/context @elastic/appex-sharedux -packages/shared-ux/file/file_picker/impl @elastic/appex-sharedux -packages/shared-ux/file/file_upload/impl @elastic/appex-sharedux -packages/shared-ux/file/image/impl @elastic/appex-sharedux -packages/shared-ux/file/image/mocks @elastic/appex-sharedux -packages/shared-ux/file/mocks @elastic/appex-sharedux -packages/shared-ux/file/types @elastic/appex-sharedux -packages/shared-ux/file/util @elastic/appex-sharedux -packages/shared-ux/link/redirect_app/impl @elastic/appex-sharedux -packages/shared-ux/link/redirect_app/mocks @elastic/appex-sharedux -packages/shared-ux/link/redirect_app/types @elastic/appex-sharedux -packages/shared-ux/markdown/impl @elastic/appex-sharedux -packages/shared-ux/markdown/mocks @elastic/appex-sharedux -packages/shared-ux/markdown/types @elastic/appex-sharedux -packages/shared-ux/modal/tabbed @elastic/appex-sharedux -packages/shared-ux/page/analytics_no_data/impl @elastic/appex-sharedux -packages/shared-ux/page/analytics_no_data/mocks @elastic/appex-sharedux -packages/shared-ux/page/analytics_no_data/types @elastic/appex-sharedux -packages/shared-ux/page/kibana_no_data/impl @elastic/appex-sharedux -packages/shared-ux/page/kibana_no_data/mocks @elastic/appex-sharedux -packages/shared-ux/page/kibana_no_data/types @elastic/appex-sharedux -packages/shared-ux/page/kibana_template/impl @elastic/appex-sharedux -packages/shared-ux/page/kibana_template/mocks @elastic/appex-sharedux -packages/shared-ux/page/kibana_template/types @elastic/appex-sharedux -packages/shared-ux/page/no_data_config/impl @elastic/appex-sharedux -packages/shared-ux/page/no_data_config/mocks @elastic/appex-sharedux -packages/shared-ux/page/no_data_config/types @elastic/appex-sharedux -packages/shared-ux/page/no_data/impl @elastic/appex-sharedux -packages/shared-ux/page/no_data/mocks @elastic/appex-sharedux -packages/shared-ux/page/no_data/types @elastic/appex-sharedux -packages/shared-ux/page/solution_nav @elastic/appex-sharedux -packages/shared-ux/prompt/no_data_views/impl @elastic/appex-sharedux -packages/shared-ux/prompt/no_data_views/mocks @elastic/appex-sharedux -packages/shared-ux/prompt/no_data_views/types @elastic/appex-sharedux -packages/shared-ux/prompt/not_found @elastic/appex-sharedux -packages/shared-ux/router/impl @elastic/appex-sharedux -packages/shared-ux/router/mocks @elastic/appex-sharedux -packages/shared-ux/router/types @elastic/appex-sharedux -packages/shared-ux/storybook/config @elastic/appex-sharedux -packages/shared-ux/storybook/mock @elastic/appex-sharedux -packages/shared-ux/table_persist @elastic/appex-sharedux src/core @elastic/kibana-core src/core/packages/analytics/browser @elastic/kibana-core src/core/packages/analytics/browser-internal @elastic/kibana-core @@ -495,6 +445,13 @@ src/platform/packages/private/kbn-repo-packages @elastic/kibana-operations src/platform/packages/private/kbn-ui-shared-deps-npm @elastic/kibana-operations src/platform/packages/private/kbn-ui-shared-deps-src @elastic/kibana-operations src/platform/packages/private/kbn-unsaved-changes-badge @elastic/kibana-data-discovery +src/platform/packages/private/shared-ux/page/analytics_no_data/impl @elastic/appex-sharedux +src/platform/packages/private/shared-ux/page/analytics_no_data/mocks @elastic/appex-sharedux +src/platform/packages/private/shared-ux/page/analytics_no_data/types @elastic/appex-sharedux +src/platform/packages/private/shared-ux/page/kibana_no_data/impl @elastic/appex-sharedux +src/platform/packages/private/shared-ux/page/kibana_no_data/mocks @elastic/appex-sharedux +src/platform/packages/private/shared-ux/page/kibana_no_data/types @elastic/appex-sharedux +src/platform/packages/private/shared-ux/storybook/config @elastic/appex-sharedux src/platform/packages/shared/cloud @elastic/kibana-core src/platform/packages/shared/deeplinks/analytics @elastic/kibana-data-discovery @elastic/kibana-presentation @elastic/kibana-visualizations src/platform/packages/shared/deeplinks/devtools @elastic/kibana-management @@ -579,6 +536,7 @@ src/platform/packages/shared/kbn-server-route-repository @elastic/obs-knowledge- src/platform/packages/shared/kbn-server-route-repository-client @elastic/obs-knowledge-team src/platform/packages/shared/kbn-server-route-repository-utils @elastic/obs-knowledge-team src/platform/packages/shared/kbn-shared-svg @elastic/obs-ux-infra_services-team +src/platform/packages/shared/kbn-shared-ux-utility @elastic/appex-sharedux src/platform/packages/shared/kbn-sse-utils @elastic/obs-knowledge-team src/platform/packages/shared/kbn-sse-utils-client @elastic/obs-knowledge-team src/platform/packages/shared/kbn-sse-utils-server @elastic/obs-knowledge-team @@ -604,6 +562,48 @@ src/platform/packages/shared/presentation/presentation_publishing @elastic/kiban src/platform/packages/shared/response-ops/rule_params @elastic/response-ops src/platform/packages/shared/serverless/settings/search_project @elastic/search-kibana @elastic/kibana-management src/platform/packages/shared/serverless/settings/security_project @elastic/security-solution @elastic/kibana-management +src/platform/packages/shared/shared-ux/avatar/solution @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/button_toolbar @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/button/exit_full_screen @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/card/no_data/impl @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/card/no_data/mocks @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/card/no_data/types @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/chrome/navigation @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/error_boundary @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/file/context @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/file/file_picker/impl @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/file/file_upload/impl @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/file/image/impl @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/file/image/mocks @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/file/mocks @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/file/types @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/file/util @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/link/redirect_app/impl @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/link/redirect_app/mocks @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/link/redirect_app/types @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/markdown/impl @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/markdown/mocks @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/markdown/types @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/modal/tabbed @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/page/kibana_template/impl @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/page/kibana_template/mocks @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/page/kibana_template/types @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/page/no_data_config/impl @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/page/no_data_config/mocks @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/page/no_data_config/types @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/page/no_data/impl @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/page/no_data/mocks @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/page/no_data/types @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/page/solution_nav @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/prompt/no_data_views/impl @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/prompt/no_data_views/mocks @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/prompt/no_data_views/types @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/prompt/not_found @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/router/impl @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/router/mocks @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/router/types @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/storybook/mock @elastic/appex-sharedux +src/platform/packages/shared/shared-ux/table_persist @elastic/appex-sharedux src/platform/plugins/private/advanced_settings @elastic/appex-sharedux @elastic/kibana-management src/platform/plugins/private/files_management @elastic/appex-sharedux src/platform/plugins/private/ftr_apis @elastic/kibana-core @@ -963,6 +963,7 @@ x-pack/solutions/search/plugins/search_inference_endpoints @elastic/search-kiban x-pack/solutions/search/plugins/search_notebooks @elastic/search-kibana x-pack/solutions/search/plugins/search_playground @elastic/search-kibana x-pack/solutions/search/plugins/search_solution/search_navigation @elastic/search-kibana +x-pack/solutions/search/plugins/search_synonyms @elastic/search-kibana x-pack/solutions/search/plugins/serverless_search @elastic/search-kibana x-pack/solutions/security/packages/data_table @elastic/security-threat-hunting-investigations x-pack/solutions/security/packages/data-stream-adapter @elastic/security-threat-hunting @@ -2542,7 +2543,6 @@ x-pack/solutions/security/plugins/security_solution/server/lib/security_integrat # Observability design /x-pack/platform/plugins/shared/fleet/**/*.scss @elastic/observability-design -/x-pack/platform/plugins/private/monitoring/**/*.scss @elastic/observability-design # Ent. Search design /x-pack/solutions/search/plugins/enterprise_search/**/*.scss @elastic/search-design diff --git a/.i18nrc.json b/.i18nrc.json index 58ca65b9778f4..b20d17ce789f8 100644 --- a/.i18nrc.json +++ b/.i18nrc.json @@ -110,7 +110,7 @@ "searchConnectorsPlugin": "x-pack/solutions/search/plugins/search_connectors", "server": "src/legacy/server", "share": ["src/platform/plugins/shared/share", "packages/kbn-reporting-share"], - "sharedUXPackages": "packages/shared-ux", + "sharedUXPackages": ["packages/shared-ux", "src/platform/packages/shared/shared-ux", "src/platform/packages/private/shared-ux/"], "searchApiKeysComponents": "x-pack/solutions/search/packages/kbn-search-api-keys-components", "searchApiPanels": "src/platform/packages/shared/kbn-search-api-panels/", "searchErrors": "src/platform/packages/shared/kbn-search-errors", diff --git a/api_docs/actions.devdocs.json b/api_docs/actions.devdocs.json index 6fdcde7c50d0e..dd0c1f8f47de6 100644 --- a/api_docs/actions.devdocs.json +++ b/api_docs/actions.devdocs.json @@ -2834,6 +2834,20 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "actions", + "id": "def-server.ActionType.subFeature", + "type": "string", + "tags": [], + "label": "subFeature", + "description": [], + "signature": [ + "\"endpointSecurity\" | undefined" + ], + "path": "x-pack/platform/plugins/shared/actions/server/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "actions", "id": "def-server.ActionType.getKibanaPrivileges", @@ -2844,7 +2858,15 @@ "\nAdditional Kibana privileges to be checked by the actions framework.\nUse it if you want to perform extra authorization checks based on a Kibana feature.\nFor example, you can define the privileges a users needs to have to execute\na Case or OsQuery system action.\n\nThe list of the privileges follows the Kibana privileges format usually generated with `security.authz.actions.*.get(...)`.\n\nIt only works with system actions and only when executing an action.\nFor all other scenarios they will be ignored" ], "signature": [ - "((args?: { params?: Params | undefined; } | undefined) => string[]) | undefined" + "((args?: { params?: Params | undefined; source?: ", + { + "pluginId": "actions", + "scope": "server", + "docId": "kibActionsPluginApi", + "section": "def-server.ActionExecutionSourceType", + "text": "ActionExecutionSourceType" + }, + " | undefined; } | undefined) => string[]) | undefined" ], "path": "x-pack/platform/plugins/shared/actions/server/types.ts", "deprecated": false, @@ -2874,6 +2896,27 @@ "path": "x-pack/platform/plugins/shared/actions/server/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "actions", + "id": "def-server.ActionType.getKibanaPrivileges.$1.source", + "type": "CompoundType", + "tags": [], + "label": "source", + "description": [], + "signature": [ + { + "pluginId": "actions", + "scope": "server", + "docId": "kibActionsPluginApi", + "section": "def-server.ActionExecutionSourceType", + "text": "ActionExecutionSourceType" + }, + " | undefined" + ], + "path": "x-pack/platform/plugins/shared/actions/server/types.ts", + "deprecated": false, + "trackAdoption": false } ] } @@ -3665,7 +3708,20 @@ "initialIsOpen": false } ], - "enums": [], + "enums": [ + { + "parentPluginId": "actions", + "id": "def-server.ActionExecutionSourceType", + "type": "Enum", + "tags": [], + "label": "ActionExecutionSourceType", + "description": [], + "path": "x-pack/platform/plugins/shared/actions/server/lib/action_execution_source.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], "misc": [ { "parentPluginId": "actions", @@ -5108,6 +5164,20 @@ "path": "x-pack/platform/plugins/shared/actions/common/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "actions", + "id": "def-common.ActionType.subFeature", + "type": "string", + "tags": [], + "label": "subFeature", + "description": [], + "signature": [ + "\"endpointSecurity\" | undefined" + ], + "path": "x-pack/platform/plugins/shared/actions/common/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -5918,6 +5988,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "actions", + "id": "def-common.EndpointSecurityConnectorFeatureId", + "type": "string", + "tags": [], + "label": "EndpointSecurityConnectorFeatureId", + "description": [], + "signature": [ + "\"endpointSecurity\"" + ], + "path": "x-pack/platform/plugins/shared/actions/common/connector_feature_config.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "actions", "id": "def-common.ExecutionLogSortFields", @@ -6119,6 +6204,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "actions", + "id": "def-common.SubFeature", + "type": "Type", + "tags": [], + "label": "SubFeature", + "description": [], + "signature": [ + "\"endpointSecurity\"" + ], + "path": "x-pack/platform/plugins/shared/actions/common/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "actions", "id": "def-common.UptimeConnectorFeatureId", @@ -6288,6 +6388,53 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "actions", + "id": "def-common.EndpointSecurityConnectorFeature", + "type": "Object", + "tags": [], + "label": "EndpointSecurityConnectorFeature", + "description": [], + "path": "x-pack/platform/plugins/shared/actions/common/connector_feature_config.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "actions", + "id": "def-common.EndpointSecurityConnectorFeature.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "path": "x-pack/platform/plugins/shared/actions/common/connector_feature_config.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "actions", + "id": "def-common.EndpointSecurityConnectorFeature.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "x-pack/platform/plugins/shared/actions/common/connector_feature_config.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "actions", + "id": "def-common.EndpointSecurityConnectorFeature.compatibility", + "type": "string", + "tags": [], + "label": "compatibility", + "description": [], + "path": "x-pack/platform/plugins/shared/actions/common/connector_feature_config.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "actions", "id": "def-common.executionLogSortableColumns", diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index e70604bac457e..3c03420645ae3 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] --- import actionsObj from './actions.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 321 | 0 | 315 | 37 | +| 331 | 0 | 325 | 37 | ## Client @@ -48,6 +48,9 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o ### Interfaces +### Enums + + ### Consts, variables and types diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index 4f6891bb5c6ee..510b7cf26e28d 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-01-06 +date: 2025-01-07 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 6a1a4bb0054be..6214d00dda0de 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-01-06 +date: 2025-01-07 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 859803e058755..75b9a3178bc0d 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-01-06 +date: 2025-01-07 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 f91d82e99455c..cce514fb67280 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-01-06 +date: 2025-01-07 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 19b45910aa3d0..3c2ce0b2ce79d 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-01-06 +date: 2025-01-07 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 f7593b17c4810..b22824b89fa02 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/asset_inventory.mdx b/api_docs/asset_inventory.mdx index e241a4e819e55..d8a23e4a875ce 100644 --- a/api_docs/asset_inventory.mdx +++ b/api_docs/asset_inventory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetInventory title: "assetInventory" image: https://source.unsplash.com/400x175/?github description: API docs for the assetInventory plugin -date: 2025-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetInventory'] --- import assetInventoryObj from './asset_inventory.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index 82e4d9deaba9f..987faa2b56ea2 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-01-06 +date: 2025-01-07 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 59183cfbb83d5..f5b022977e360 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-01-06 +date: 2025-01-07 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 c1e90dbce5bee..ffe41330cc4a1 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-01-06 +date: 2025-01-07 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 adccf6d17e0bc..80f0510d2e593 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-01-06 +date: 2025-01-07 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 19c6effdde758..54a8b50d4d2c3 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-01-06 +date: 2025-01-07 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 517a4c75ad574..7b94395368b48 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-01-06 +date: 2025-01-07 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 69eb3b4e36bb0..9129f52dc89da 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-01-06 +date: 2025-01-07 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 9627142070356..2433f5e12fc7f 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-01-06 +date: 2025-01-07 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 17a222fbf7f45..f52c73469eb05 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-01-06 +date: 2025-01-07 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 8fbf9d8ecd8b0..ec9a4a3af7eea 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'contentManagement'] --- import contentManagementObj from './content_management.devdocs.json'; diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index 6cce74661486d..d6a56d9ca584f 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls'] --- import controlsObj from './controls.devdocs.json'; diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx index 7f7a0bc86dd9a..f34a73393cd04 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations'] --- import customIntegrationsObj from './custom_integrations.devdocs.json'; diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx index 6363724ee978b..909c631fa4e7c 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboard'] --- import dashboardObj from './dashboard.devdocs.json'; diff --git a/api_docs/dashboard_enhanced.mdx b/api_docs/dashboard_enhanced.mdx index e0bfeca63e9d0..cebaca69fed34 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-01-06 +date: 2025-01-07 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 d54aaaddd8537..431010f0234e6 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-01-06 +date: 2025-01-07 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 | |-------------------|-----------|------------------------|-----------------| -| 3208 | 31 | 2593 | 25 | +| 3207 | 31 | 2592 | 25 | ## Client diff --git a/api_docs/data_quality.mdx b/api_docs/data_quality.mdx index 17d46f0bfff4a..23e4f8a0d0999 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataQuality'] --- import dataQualityObj from './data_quality.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index bd5ca1ff089d6..62cb911d760d8 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-01-06 +date: 2025-01-07 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 | |-------------------|-----------|------------------------|-----------------| -| 3208 | 31 | 2593 | 25 | +| 3207 | 31 | 2592 | 25 | ## Client diff --git a/api_docs/data_search.devdocs.json b/api_docs/data_search.devdocs.json index 3c8c913ea7696..c206083e9d607 100644 --- a/api_docs/data_search.devdocs.json +++ b/api_docs/data_search.devdocs.json @@ -13401,6 +13401,68 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "data", + "id": "def-common.getEsPreference", + "type": "Function", + "tags": [], + "label": "getEsPreference", + "description": [], + "signature": [ + "(getConfigFn: ", + { + "pluginId": "@kbn/data-service", + "scope": "common", + "docId": "kibKbnDataServicePluginApi", + "section": "def-common.GetConfigFn", + "text": "GetConfigFn" + }, + ", sessionId: string) => any" + ], + "path": "src/plugins/data/common/search/search_source/fetch/get_search_params.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "data", + "id": "def-common.getEsPreference.$1", + "type": "Function", + "tags": [], + "label": "getConfigFn", + "description": [], + "signature": [ + { + "pluginId": "@kbn/data-service", + "scope": "common", + "docId": "kibKbnDataServicePluginApi", + "section": "def-common.GetConfigFn", + "text": "GetConfigFn" + } + ], + "path": "src/plugins/data/common/search/search_source/fetch/get_search_params.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "data", + "id": "def-common.getEsPreference.$2", + "type": "string", + "tags": [], + "label": "sessionId", + "description": [], + "signature": [ + "string" + ], + "path": "src/plugins/data/common/search/search_source/fetch/get_search_params.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "data", "id": "def-common.getEsqlFn", @@ -14163,53 +14225,6 @@ "returnComment": [], "initialIsOpen": false }, - { - "parentPluginId": "data", - "id": "def-common.getPreference", - "type": "Function", - "tags": [], - "label": "getPreference", - "description": [], - "signature": [ - "(getConfig: ", - { - "pluginId": "@kbn/data-service", - "scope": "common", - "docId": "kibKbnDataServicePluginApi", - "section": "def-common.GetConfigFn", - "text": "GetConfigFn" - }, - ") => any" - ], - "path": "src/plugins/data/common/search/search_source/fetch/get_search_params.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "data", - "id": "def-common.getPreference.$1", - "type": "Function", - "tags": [], - "label": "getConfig", - "description": [], - "signature": [ - { - "pluginId": "@kbn/data-service", - "scope": "common", - "docId": "kibKbnDataServicePluginApi", - "section": "def-common.GetConfigFn", - "text": "GetConfigFn" - } - ], - "path": "src/plugins/data/common/search/search_source/fetch/get_search_params.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [], - "initialIsOpen": false - }, { "parentPluginId": "data", "id": "def-common.getRangeBucketAgg", @@ -14451,53 +14466,6 @@ "returnComment": [], "initialIsOpen": false }, - { - "parentPluginId": "data", - "id": "def-common.getSearchParams", - "type": "Function", - "tags": [], - "label": "getSearchParams", - "description": [], - "signature": [ - "(getConfig: ", - { - "pluginId": "@kbn/data-service", - "scope": "common", - "docId": "kibKbnDataServicePluginApi", - "section": "def-common.GetConfigFn", - "text": "GetConfigFn" - }, - ") => { preference: any; }" - ], - "path": "src/plugins/data/common/search/search_source/fetch/get_search_params.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "data", - "id": "def-common.getSearchParams.$1", - "type": "Function", - "tags": [], - "label": "getConfig", - "description": [], - "signature": [ - { - "pluginId": "@kbn/data-service", - "scope": "common", - "docId": "kibKbnDataServicePluginApi", - "section": "def-common.GetConfigFn", - "text": "GetConfigFn" - } - ], - "path": "src/plugins/data/common/search/search_source/fetch/get_search_params.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [], - "initialIsOpen": false - }, { "parentPluginId": "data", "id": "def-common.getSearchParamsFromRequest", diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index 0585b60b4250d..823bb4cf01be8 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-01-06 +date: 2025-01-07 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 | |-------------------|-----------|------------------------|-----------------| -| 3208 | 31 | 2593 | 25 | +| 3207 | 31 | 2592 | 25 | ## Client diff --git a/api_docs/data_usage.mdx b/api_docs/data_usage.mdx index b016748d63e51..fc46154ffc99a 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-01-06 +date: 2025-01-07 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 39ebb150752ee..7a7008a429009 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-01-06 +date: 2025-01-07 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 3ab057af9daef..4ad7eae039a55 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-01-06 +date: 2025-01-07 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 869cf4bb784ab..c3d9877f042fc 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement'] --- import dataViewManagementObj from './data_view_management.devdocs.json'; diff --git a/api_docs/data_views.devdocs.json b/api_docs/data_views.devdocs.json index d9b296a17bcad..6b2d3b931b588 100644 --- a/api_docs/data_views.devdocs.json +++ b/api_docs/data_views.devdocs.json @@ -14012,6 +14012,10 @@ "plugin": "enterpriseSearch", "path": "x-pack/solutions/search/plugins/enterprise_search/public/applications/analytics/utils/find_or_create_data_view.test.ts" }, + { + "plugin": "@kbn/cloud-security-posture-graph", + "path": "x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/mock/data_view.mock.ts" + }, { "plugin": "exploratoryView", "path": "x-pack/solutions/observability/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/sample_attribute.ts" diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index 1a15f315da5da..ad0ed590fbae5 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-01-06 +date: 2025-01-07 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 243760ffefc28..ffed11235730a 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-01-06 +date: 2025-01-07 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 e0a103cc2ab2c..0127cb07b14b3 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-01-06 +date: 2025-01-07 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 dfc70c80730b2..7819357e9921f 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -17,7 +17,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Referencing plugin(s) | Remove By | | ---------------|-----------|-----------| | | ml, stackAlerts | - | -| | data, @kbn/search-errors, savedObjectsManagement, unifiedSearch, graph, @kbn/unified-field-list, lens, controls, @kbn/lens-embeddable-utils, triggersActionsUi, dataVisualizer, ml, canvas, fleet, transform, @kbn/ml-data-view-utils, upgradeAssistant, securitySolution, timelines, exploratoryView, stackAlerts, maps, visTypeTimeseries, uptime, ux, enterpriseSearch, eventAnnotationListing, visDefaultEditor, visTypeTimelion, visTypeVega, inputControlVis, dataViewManagement | - | +| | data, @kbn/search-errors, savedObjectsManagement, unifiedSearch, graph, @kbn/unified-field-list, lens, controls, @kbn/lens-embeddable-utils, triggersActionsUi, dataVisualizer, ml, canvas, fleet, transform, @kbn/ml-data-view-utils, upgradeAssistant, securitySolution, timelines, exploratoryView, stackAlerts, maps, visTypeTimeseries, uptime, ux, enterpriseSearch, @kbn/cloud-security-posture-graph, eventAnnotationListing, visDefaultEditor, visTypeTimelion, visTypeVega, inputControlVis, dataViewManagement | - | | | ml, securitySolution | - | | | actions, ml, savedObjectsTagging, enterpriseSearch | - | | | @kbn/core, usageCollection, taskManager, security, files, monitoringCollection, banners, telemetry, securitySolution, @kbn/test-suites-xpack, cloudFullStory, customBranding, enterpriseSearch, interactiveSetup, mockIdpPlugin, spaces, ml | - | diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 8b84633533ea8..cd4c4be8053e0 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -20,6 +20,14 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] +## @kbn/cloud-security-posture-graph + +| Deprecated API | Reference location(s) | Remove By | +| ---------------|-----------|-----------| +| | [data_view.mock.ts](https://github.com/elastic/kibana/tree/main/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/mock/data_view.mock.ts#:~:text=title) | - | + + + ## @kbn/content-management-table-list-view | Deprecated API | Reference location(s) | Remove By | @@ -36,7 +44,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [simple_saved_object.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/saved-objects/api-browser/src/simple_saved_object.ts#:~:text=migrationVersion), [simple_saved_object.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/saved-objects/browser-internal/src/simple_saved_object.ts#:~:text=migrationVersion), [simple_saved_object.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/saved-objects/browser-internal/src/simple_saved_object.ts#:~:text=migrationVersion), [internal_utils.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/saved-objects/api-server-internal/src/lib/apis/utils/internal_utils.ts#:~:text=migrationVersion), [collect_saved_objects.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/saved-objects/import-export-server-internal/src/import/lib/collect_saved_objects.ts#:~:text=migrationVersion), [import_dashboards.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/saved-objects/server-internal/src/routes/legacy_import_export/lib/import_dashboards.ts#:~:text=migrationVersion), [simple_saved_object.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/saved-objects/api-browser/src/simple_saved_object.ts#:~:text=migrationVersion), [simple_saved_object.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/saved-objects/browser-internal/src/simple_saved_object.ts#:~:text=migrationVersion), [simple_saved_object.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/saved-objects/browser-internal/src/simple_saved_object.ts#:~:text=migrationVersion), [internal_utils.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/saved-objects/api-server-internal/src/lib/apis/utils/internal_utils.ts#:~:text=migrationVersion)+ 2 more | - | | | [app_container.tsx](https://github.com/elastic/kibana/tree/main/src/core/packages/application/browser-internal/src/ui/app_container.tsx#:~:text=appBasePath), [mocks.ts](https://github.com/elastic/kibana/tree/main/src/core/public/mocks.ts#:~:text=appBasePath) | - | | | [elasticsearch_service.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/elasticsearch/server-internal/src/elasticsearch_service.ts#:~:text=legacy), [plugin_context.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/plugins/server-internal/src/plugin_context.ts#:~:text=legacy), [plugin_context.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/plugins/server-internal/src/plugin_context.ts#:~:text=legacy), [elasticsearch_service.test.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/elasticsearch/server-internal/src/elasticsearch_service.test.ts#:~:text=legacy) | - | -| | [security_route_config_validator.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/http/router-server-internal/src/security_route_config_validator.ts#:~:text=authRequired), [http_server.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/http/server-internal/src/http_server.ts#:~:text=authRequired), [http_server.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/http/server-internal/src/http_server.ts#:~:text=authRequired), [elu_history.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/metrics/server-internal/src/routes/elu_history.ts#:~:text=authRequired), [status.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/status/server-internal/src/routes/status.ts#:~:text=authRequired), [status_preboot.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/status/server-internal/src/routes/status_preboot.ts#:~:text=authRequired), [translations.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/i18n/server-internal/src/routes/translations.ts#:~:text=authRequired), [register_bootstrap_route.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/rendering/server-internal/src/bootstrap/register_bootstrap_route.ts#:~:text=authRequired), [resolve_capabilities.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/capabilities/server-internal/src/routes/resolve_capabilities.ts#:~:text=authRequired), [bundles_route.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/apps/server-internal/src/bundle_routes/bundles_route.ts#:~:text=authRequired)+ 16 more | - | +| | [security_route_config_validator.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/http/router-server-internal/src/security_route_config_validator.ts#:~:text=authRequired), [http_server.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/http/server-internal/src/http_server.ts#:~:text=authRequired), [http_server.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/http/server-internal/src/http_server.ts#:~:text=authRequired), [elu_history.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/metrics/server-internal/src/routes/elu_history.ts#:~:text=authRequired), [status.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/status/server-internal/src/routes/status.ts#:~:text=authRequired), [status_preboot.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/status/server-internal/src/routes/status_preboot.ts#:~:text=authRequired), [translations.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/i18n/server-internal/src/routes/translations.ts#:~:text=authRequired), [register_bootstrap_route.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/rendering/server-internal/src/bootstrap/register_bootstrap_route.ts#:~:text=authRequired), [resolve_capabilities.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/capabilities/server-internal/src/routes/resolve_capabilities.ts#:~:text=authRequired), [bundles_route.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/apps/server-internal/src/bundle_routes/bundles_route.ts#:~:text=authRequired)+ 14 more | - | | | [plugin_context.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/plugins/browser-internal/src/plugin_context.ts#:~:text=savedObjects), [plugin_context.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/plugins/browser-internal/src/plugin_context.ts#:~:text=savedObjects), [core_system.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/root/browser-internal/src/core_system.ts#:~:text=savedObjects), [plugins_service.test.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/plugins/browser-internal/src/plugins_service.test.ts#:~:text=savedObjects) | - | | | [index.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/logging/server-internal/src/appenders/rolling_file/strategies/index.ts#:~:text=max), [create_retention_policy.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/logging/server-internal/src/appenders/rolling_file/retention/create_retention_policy.ts#:~:text=max), [appenders.test.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/logging/server-internal/src/appenders/appenders.test.ts#:~:text=max), [rolling_file_appender.test.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/logging/server-internal/src/appenders/rolling_file/rolling_file_appender.test.ts#:~:text=max), [create_retention_policy.test.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/logging/server-internal/src/appenders/rolling_file/retention/create_retention_policy.test.ts#:~:text=max), [numeric_strategy.test.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/logging/server-internal/src/appenders/rolling_file/strategies/numeric/numeric_strategy.test.ts#:~:text=max) | - | | | [plugin_manifest_parser.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/plugins/server-internal/src/discovery/plugin_manifest_parser.ts#:~:text=extraPublicDirs), [plugin_manifest_parser.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/plugins/server-internal/src/discovery/plugin_manifest_parser.ts#:~:text=extraPublicDirs), [plugin_manifest_parser.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/plugins/server-internal/src/discovery/plugin_manifest_parser.ts#:~:text=extraPublicDirs), [plugin_manifest_parser.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/plugins/server-internal/src/discovery/plugin_manifest_parser.ts#:~:text=extraPublicDirs), [plugin_manifest_parser.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/plugins/server-internal/src/discovery/plugin_manifest_parser.ts#:~:text=extraPublicDirs), [plugin_manifest_parser.ts](https://github.com/elastic/kibana/tree/main/src/core/packages/plugins/server-internal/src/discovery/plugin_manifest_parser.ts#:~:text=extraPublicDirs) | - | @@ -1161,7 +1169,7 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | | [license_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/common/licensing/license_service.test.ts#:~:text=mode), [license_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/common/licensing/license_service.test.ts#:~:text=mode), [license_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/common/licensing/license_service.test.ts#:~:text=mode) | 8.8.0 | | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/server/plugin.ts#:~:text=license%24) | 8.8.0 | | | [logout_app.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/public/authentication/logout/logout_app.test.ts#:~:text=appBasePath) | - | -| | [common.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/server/routes/authentication/common.ts#:~:text=authRequired), [common.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/server/routes/authentication/common.ts#:~:text=authRequired), [oidc.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/server/routes/authentication/oidc.ts#:~:text=authRequired), [oidc.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/server/routes/authentication/oidc.ts#:~:text=authRequired), [oidc.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/server/routes/authentication/oidc.ts#:~:text=authRequired), [oidc.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/server/routes/authentication/oidc.ts#:~:text=authRequired), [oidc.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/server/routes/authentication/oidc.ts#:~:text=authRequired), [saml.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/server/routes/authentication/saml.ts#:~:text=authRequired), [reset_session_page.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/server/routes/authorization/reset_session_page.ts#:~:text=authRequired), [capture_url.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/server/routes/views/capture_url.ts#:~:text=authRequired)+ 12 more | - | +| | [oidc.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/server/routes/authentication/oidc.ts#:~:text=authRequired), [oidc.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/server/routes/authentication/oidc.ts#:~:text=authRequired), [oidc.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/server/routes/authentication/oidc.ts#:~:text=authRequired), [oidc.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/server/routes/authentication/oidc.ts#:~:text=authRequired), [oidc.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/server/routes/authentication/oidc.ts#:~:text=authRequired), [saml.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/server/routes/authentication/saml.ts#:~:text=authRequired), [reset_session_page.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/server/routes/authorization/reset_session_page.ts#:~:text=authRequired), [capture_url.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/server/routes/views/capture_url.ts#:~:text=authRequired), [logged_out.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/server/routes/views/logged_out.ts#:~:text=authRequired), [login.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/server/routes/views/login.ts#:~:text=authRequired)+ 10 more | - | | | [config.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/server/config.ts#:~:text=max) | - | | | [plugin.tsx](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/public/plugin.tsx#:~:text=authc) | - | | | [plugin.tsx](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/security/public/plugin.tsx#:~:text=authc) | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 3c53d6daa30e6..c685fd8042fd1 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 338d5e3261fdc..5361e8c22c420 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index 692deed0fa030..e4db34e0c2241 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-01-06 +date: 2025-01-07 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 527be5a7dcd00..e5222b84238cb 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-01-06 +date: 2025-01-07 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 c723b70b3a51d..6539e62e33835 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-01-06 +date: 2025-01-07 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 49aa8aa5b95ca..3563768195169 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/elastic_assistant.mdx b/api_docs/elastic_assistant.mdx index 909ea00803dae..8b579d115d083 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-01-06 +date: 2025-01-07 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 c0ade0231a2da..4b10e5445ade1 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-01-06 +date: 2025-01-07 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 5317759d3aa99..70bb4babe41ef 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-01-06 +date: 2025-01-07 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 d7e5742e311b2..8fcac142068fc 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-01-06 +date: 2025-01-07 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 cd95fc69480ad..cd02ce3d29f65 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-01-06 +date: 2025-01-07 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 a0e5c492477a3..bc8229d3c556a 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-01-06 +date: 2025-01-07 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 3e0c97f69422b..16899fff82efc 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-01-06 +date: 2025-01-07 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 7669c3e0c7386..b1f453d6f0466 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-01-06 +date: 2025-01-07 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 0555b8c58b55d..41568f391e720 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-01-06 +date: 2025-01-07 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 95da62a123a6f..a11d657a3d71b 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-01-06 +date: 2025-01-07 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 00f80934e3b1e..339df034f4f88 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-01-06 +date: 2025-01-07 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 af7d59209b99f..5f1bc64a35420 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-01-06 +date: 2025-01-07 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 4b189570b6190..7078958363d72 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-01-06 +date: 2025-01-07 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 71c1843bdd84c..6c7e6032cd465 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-01-06 +date: 2025-01-07 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 65fea49c5c980..bd7347e00bfc3 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-01-06 +date: 2025-01-07 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 3f5c7b40e0801..aa26f1e6382bf 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-01-06 +date: 2025-01-07 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 1d31e6c569988..eefbf474f088e 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-01-06 +date: 2025-01-07 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 3c6e7890c4ad3..6c7cf2b026ac3 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-01-06 +date: 2025-01-07 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 fb9eae6756304..6636f503a2d9c 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-01-06 +date: 2025-01-07 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 108812ce52b67..b78913d2f1240 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-01-06 +date: 2025-01-07 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 380aa54f4f438..422bccbd8303a 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-01-06 +date: 2025-01-07 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 f18307b900c88..e8df91507d1df 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-01-06 +date: 2025-01-07 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 3107c7fb4a6b9..e7417a16c24f2 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-01-06 +date: 2025-01-07 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 03bae2f184258..497157fc73085 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-01-06 +date: 2025-01-07 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 239045405dd9a..457bebe60d77f 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-01-06 +date: 2025-01-07 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 ccdd6236984d4..2529f3edf8703 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-01-06 +date: 2025-01-07 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 6b27cc9d675f3..f5d3f494b0951 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-01-06 +date: 2025-01-07 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 4f144503d3408..00bc4720c1600 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-01-06 +date: 2025-01-07 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 27058e7ccafe2..d07c221f4a515 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-01-06 +date: 2025-01-07 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 3ba3e9d76f1cb..305affd369489 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-01-06 +date: 2025-01-07 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 130cf95d670fe..52097e27e79ae 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-01-06 +date: 2025-01-07 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 851d3a576b74e..a8a46c1cd20d3 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-01-06 +date: 2025-01-07 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 e2f891b1d533b..eb54f3ddb7eab 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-01-06 +date: 2025-01-07 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 6d4cbfb49e847..ff45e984b96aa 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-01-06 +date: 2025-01-07 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 424947dfaeed5..a8380e60e63cb 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-01-06 +date: 2025-01-07 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 b2871a63f9b15..906d6a1fe0307 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-01-06 +date: 2025-01-07 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 c3ff8424b55f5..294a235e87d5f 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-01-06 +date: 2025-01-07 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 e39c3ddfe66f1..43a2362f43efe 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-01-06 +date: 2025-01-07 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 a13f4fd4f1297..1dacb5e04ffe8 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'imageEmbeddable'] --- import imageEmbeddableObj from './image_embeddable.devdocs.json'; diff --git a/api_docs/index_lifecycle_management.mdx b/api_docs/index_lifecycle_management.mdx index 78afd98b7e227..bc2c7ce66dee1 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2025-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement'] --- import indexLifecycleManagementObj from './index_lifecycle_management.devdocs.json'; diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx index a64e909bcaf14..25384a3109091 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-01-06 +date: 2025-01-07 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 494530eefd72f..a9f43e52cf5ef 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inference'] --- import inferenceObj from './inference.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index 8151432c2a6d0..951f8ea7ab31b 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-01-06 +date: 2025-01-07 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 8f3661c5c4d4b..9d818b8320082 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-01-06 +date: 2025-01-07 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 8f19c86b4abef..2f1e8b22ab08c 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/integration_assistant.mdx b/api_docs/integration_assistant.mdx index d062f92cb5884..c7d96a6a24a21 100644 --- a/api_docs/integration_assistant.mdx +++ b/api_docs/integration_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/integrationAssistant title: "integrationAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the integrationAssistant plugin -date: 2025-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'integrationAssistant'] --- import integrationAssistantObj from './integration_assistant.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index 5712951eda82d..a176ca787397b 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-01-06 +date: 2025-01-07 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 dc7572872aa5e..e071ae4afe478 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-01-06 +date: 2025-01-07 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 58ac6c4aa95e4..979d29d8ad60b 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-01-06 +date: 2025-01-07 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 ac3aa7c80654d..8e49eb46f74f9 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigateApp'] --- import investigateAppObj from './investigate_app.devdocs.json'; diff --git a/api_docs/kbn_actions_types.devdocs.json b/api_docs/kbn_actions_types.devdocs.json index 2a4485f22769b..b08d12feebde2 100644 --- a/api_docs/kbn_actions_types.devdocs.json +++ b/api_docs/kbn_actions_types.devdocs.json @@ -124,6 +124,20 @@ "path": "src/platform/packages/shared/kbn-actions-types/action_types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/actions-types", + "id": "def-common.ActionType.subFeature", + "type": "string", + "tags": [], + "label": "subFeature", + "description": [], + "signature": [ + "\"endpointSecurity\" | undefined" + ], + "path": "src/platform/packages/shared/kbn-actions-types/action_types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -249,6 +263,33 @@ } ], "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/actions-types", + "id": "def-common.SUB_FEATURE", + "type": "number", + "tags": [], + "label": "SUB_FEATURE", + "description": [], + "path": "src/platform/packages/shared/kbn-actions-types/action_types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/actions-types", + "id": "def-common.SubFeature", + "type": "Type", + "tags": [], + "label": "SubFeature", + "description": [], + "signature": [ + "\"endpointSecurity\"" + ], + "path": "src/platform/packages/shared/kbn-actions-types/action_types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false } ], "objects": [] diff --git a/api_docs/kbn_actions_types.mdx b/api_docs/kbn_actions_types.mdx index 1ac7bbd8178b8..4a057c2a8b4e0 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/actions-types'] --- import kbnActionsTypesObj from './kbn_actions_types.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 14 | 0 | 14 | 0 | +| 17 | 0 | 17 | 0 | ## Common diff --git a/api_docs/kbn_ai_assistant.mdx b/api_docs/kbn_ai_assistant.mdx index 68e12f1428a1e..c9f08e4a0f81a 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-01-06 +date: 2025-01-07 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 f5e7f8aa2de05..9754f1c849103 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-01-06 +date: 2025-01-07 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 0efe1fddf56cc..ad469b1eca4bb 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-01-06 +date: 2025-01-07 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 2c804ef95aa11..0d4046526c941 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-01-06 +date: 2025-01-07 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 7180f7a4fa970..6ecbb2f472388 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-01-06 +date: 2025-01-07 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 cbf1d284a24ee..143207280e7a2 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-01-06 +date: 2025-01-07 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 462d5b662035a..851a1560c8e06 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-01-06 +date: 2025-01-07 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 7b83c52f0395d..7f3d27037d657 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-comparators'] --- import kbnAlertingComparatorsObj from './kbn_alerting_comparators.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index 327a84be75394..bb301fd2978d9 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-01-06 +date: 2025-01-07 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 61952af4a5166..8aeeab38b5e7c 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-01-06 +date: 2025-01-07 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 11a4cd6cb2127..ba8797eb183a2 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-01-06 +date: 2025-01-07 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 3ab1f5cceca77..01e369d7e1c34 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-grouping'] --- import kbnAlertsGroupingObj from './kbn_alerts_grouping.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.devdocs.json b/api_docs/kbn_alerts_ui_shared.devdocs.json index eb47c622a05c8..e055fa677fd3d 100644 --- a/api_docs/kbn_alerts_ui_shared.devdocs.json +++ b/api_docs/kbn_alerts_ui_shared.devdocs.json @@ -2089,6 +2089,20 @@ "path": "src/platform/packages/shared/kbn-alerts-ui-shared/src/common/types/action_types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-public.ActionTypeModel.subFeature", + "type": "string", + "tags": [], + "label": "subFeature", + "description": [], + "signature": [ + "\"endpointSecurity\" | undefined" + ], + "path": "src/platform/packages/shared/kbn-alerts-ui-shared/src/common/types/action_types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 01400dac226d5..8e9bf2bf6717d 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-ui-shared'] --- import kbnAlertsUiSharedObj from './kbn_alerts_ui_shared.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 302 | 0 | 286 | 4 | +| 303 | 0 | 287 | 4 | ## Client diff --git a/api_docs/kbn_analytics.mdx b/api_docs/kbn_analytics.mdx index 6102fa427a5d2..909d3c9d3526b 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-01-06 +date: 2025-01-07 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 ec8c7a0f92856..e4cbe560ae0ad 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-01-06 +date: 2025-01-07 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 bbe1a747f88fe..549a370f78ea5 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-01-06 +date: 2025-01-07 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 43db88d017919..ceeb523043974 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-01-06 +date: 2025-01-07 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 996dc2258443b..56d7037b6a112 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-01-06 +date: 2025-01-07 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 0cbb2a4001c71..1db7b08fb5d31 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-01-06 +date: 2025-01-07 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 61c1aabd7a071..6bee988bf5b76 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-01-06 +date: 2025-01-07 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 4be2fd9659355..3b4e048390194 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-01-06 +date: 2025-01-07 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 4e943820f90ee..2254d557b4efc 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-01-06 +date: 2025-01-07 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 95e59dc3e49d9..59af81a2fb601 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-01-06 +date: 2025-01-07 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 1dfd1833099c4..51e42f3aeb173 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-01-06 +date: 2025-01-07 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 27280d860ac9a..6c5c07c0919ad 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-01-06 +date: 2025-01-07 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 a47698f99a335..e28243511b155 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-01-06 +date: 2025-01-07 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 b48408fd46e62..1b112b96debb2 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-01-06 +date: 2025-01-07 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 ed7bf8c5b44b9..4dc01b7ebc2d0 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-01-06 +date: 2025-01-07 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 9e7212352d6a0..0f113014323f5 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-01-06 +date: 2025-01-07 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 01c60db78e2da..d746bba00d8df 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-01-06 +date: 2025-01-07 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 4adabaa48585a..47ba98c19bf9d 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-01-06 +date: 2025-01-07 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 a1b8524abbc4d..e497f31d5cee2 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-01-06 +date: 2025-01-07 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 3b56958bfbf84..b7f818aea6905 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-01-06 +date: 2025-01-07 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 bafdb2e7785be..6dd2453aa2f1b 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-01-06 +date: 2025-01-07 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 3d19fc9e30ea6..3c853c803c93d 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-01-06 +date: 2025-01-07 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 00d6668ce9154..19e73b1968a73 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-01-06 +date: 2025-01-07 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 648a2b5a29b08..6a755825b9453 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-01-06 +date: 2025-01-07 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.devdocs.json b/api_docs/kbn_cloud_security_posture_graph.devdocs.json index 91ec8393ddde3..71bd875080d9e 100644 --- a/api_docs/kbn_cloud_security_posture_graph.devdocs.json +++ b/api_docs/kbn_cloud_security_posture_graph.devdocs.json @@ -61,7 +61,9 @@ "\nGraph investigation view allows the user to expand nodes and view related entities." ], "signature": [ - "React.NamedExoticComponent" + "React.NamedExoticComponent<", + "GraphInvestigationProps", + ">" ], "path": "x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_investigation.tsx", "deprecated": false, @@ -416,6 +418,22 @@ "path": "x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph/graph.tsx", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-graph", + "id": "def-public.GraphProps.children", + "type": "CompoundType", + "tags": [], + "label": "children", + "description": [ + "\nAdditional children to be rendered inside the graph component." + ], + "signature": [ + "string | number | boolean | React.ReactElement> | Iterable | React.ReactPortal | null | undefined" + ], + "path": "x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph/graph.tsx", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/kbn_cloud_security_posture_graph.mdx b/api_docs/kbn_cloud_security_posture_graph.mdx index 13e2416e89725..89d67082f201d 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture-graph'] --- import kbnCloudSecurityPostureGraphObj from './kbn_cloud_security_posture_graph.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 27 | 0 | 18 | 6 | +| 28 | 0 | 18 | 7 | ## Client diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index c059c1df35afd..f4259e1798b10 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-01-06 +date: 2025-01-07 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 b23874c1b36e1..0841011e105ba 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-01-06 +date: 2025-01-07 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 9267da60ad1b8..48cfc4e6e3948 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-01-06 +date: 2025-01-07 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 fd15ecf3a5fa2..b3ee6d6ff623b 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-01-06 +date: 2025-01-07 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 395746199f791..ff04427f8d714 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-01-06 +date: 2025-01-07 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 b628ff29e1daa..dd9acd756d7d3 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-01-06 +date: 2025-01-07 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 79b26e9c673ba..70b2df872561e 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-01-06 +date: 2025-01-07 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 018cc6384d4dd..61cf5e508249d 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-01-06 +date: 2025-01-07 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 7f53edfcae24b..f10ba6f080257 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-01-06 +date: 2025-01-07 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 1cbbc2e158a07..c4c4ac3be7fe1 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-01-06 +date: 2025-01-07 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 eb50a098febea..a60a6304bdd50 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-01-06 +date: 2025-01-07 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 d6b9aa1bea1b8..2f38def4a5084 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-01-06 +date: 2025-01-07 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 7164a02a20d27..8eeb38be2ffba 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-01-06 +date: 2025-01-07 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 e8c2ecb54bcc3..3d921cb42ab66 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-01-06 +date: 2025-01-07 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 fb05cf7829d0e..fd0bacbcd3a0d 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-01-06 +date: 2025-01-07 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 c7bb3f45fcfdd..bfec7e0cd90cf 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-01-06 +date: 2025-01-07 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 0eee12f982f7c..a438d6d608f42 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-01-06 +date: 2025-01-07 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 8548221666e06..48b9837cff60f 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-01-06 +date: 2025-01-07 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 2e0acc1d22d4a..b537b9716ab9a 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-01-06 +date: 2025-01-07 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 36950befee370..84a373390b0de 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-01-06 +date: 2025-01-07 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 01fec04953808..a269b45be9c9b 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-01-06 +date: 2025-01-07 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 0162c35040d3c..e5de515a26ebc 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-01-06 +date: 2025-01-07 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 5356ad46da63c..12e2c65799f50 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-01-06 +date: 2025-01-07 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 174dd306688c0..92a265b507a98 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-01-06 +date: 2025-01-07 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 cb35b09d46ccd..9f75bb349625d 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-01-06 +date: 2025-01-07 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 c837d8c175a01..e1167816da474 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-01-06 +date: 2025-01-07 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 a3c8812a1160b..c3b469c1493a2 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-01-06 +date: 2025-01-07 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 b5a6f91a06fb1..20515df691608 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-01-06 +date: 2025-01-07 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 c62fe170f791d..0f9a33f1102fe 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-01-06 +date: 2025-01-07 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 754bb35c69e58..7c386144b4678 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-01-06 +date: 2025-01-07 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 1347bea2b8078..eaea5df7875dc 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-01-06 +date: 2025-01-07 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 4df51c2b2cdda..2ad764ed2ee81 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-01-06 +date: 2025-01-07 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 b12a7815c22de..915ecceff9b73 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-01-06 +date: 2025-01-07 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 bf7e0f3705432..534899c85e0bf 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-01-06 +date: 2025-01-07 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 c5c1217133f94..9a186b97ffdd3 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-01-06 +date: 2025-01-07 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 0446962afce89..73b4c5e130067 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-01-06 +date: 2025-01-07 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 1aaba844d940a..30bad827e7aac 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-01-06 +date: 2025-01-07 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 8ad456779ccaa..636bcc2a0106b 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-01-06 +date: 2025-01-07 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 443619631787c..4595c26a671ce 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-01-06 +date: 2025-01-07 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 339c233d4e419..efd5901051566 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-01-06 +date: 2025-01-07 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.devdocs.json b/api_docs/kbn_core_chrome_browser.devdocs.json index 814dabc315bc6..31025cc42fc82 100644 --- a/api_docs/kbn_core_chrome_browser.devdocs.json +++ b/api_docs/kbn_core_chrome_browser.devdocs.json @@ -3735,7 +3735,7 @@ "label": "AppDeepLinkId", "description": [], "signature": [ - "\"fleet\" | \"graph\" | \"ml\" | \"monitoring\" | \"profiling\" | \"metrics\" | \"management\" | \"apm\" | \"synthetics\" | \"ux\" | \"canvas\" | \"logs\" | \"dashboards\" | \"slo\" | \"observabilityAIAssistant\" | \"home\" | \"integrations\" | \"discover\" | \"observability-overview\" | \"streams\" | \"appSearch\" | \"inventory\" | \"dev_tools\" | \"maps\" | \"visualize\" | \"dev_tools:console\" | \"dev_tools:searchprofiler\" | \"dev_tools:painless_lab\" | \"dev_tools:grokdebugger\" | \"ml:notifications\" | \"ml:nodes\" | \"ml:overview\" | \"ml:memoryUsage\" | \"ml:settings\" | \"ml:dataVisualizer\" | \"ml:logPatternAnalysis\" | \"ml:logRateAnalysis\" | \"ml:singleMetricViewer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:dataDrift\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:esqlDataVisualizer\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\" | \"ml:suppliedConfigurations\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:cross_cluster_replication\" | \"management:dataViews\" | \"management:spaces\" | \"management:settings\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:data_quality\" | \"management:filesManagement\" | \"management:pipelines\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:securityAiAssistantManagement\" | \"management:observabilityAiAssistantManagement\" | \"management:api_keys\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchInferenceEndpoints\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"appSearch:engines\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\" | \"observability-logs-explorer\" | \"last-used-logs-viewer\" | \"observabilityOnboarding\" | \"logs:settings\" | \"logs:stream\" | \"logs:log-categories\" | \"logs:anomalies\" | \"observability-overview:cases\" | \"observability-overview:alerts\" | \"observability-overview:rules\" | \"observability-overview:cases_create\" | \"observability-overview:cases_configure\" | \"metrics:settings\" | \"metrics:hosts\" | \"metrics:inventory\" | \"metrics:metrics-explorer\" | \"metrics:assetDetails\" | \"apm:services\" | \"apm:traces\" | \"apm:dependencies\" | \"apm:service-map\" | \"apm:settings\" | \"apm:service-groups-list\" | \"apm:storage-explorer\" | \"synthetics:overview\" | \"synthetics:certificates\" | \"profiling:functions\" | \"profiling:stacktraces\" | \"profiling:flamegraphs\" | \"inventory:datastreams\" | \"streams:overview\" | \"securitySolutionUI\" | \"securitySolutionUI:\" | \"securitySolutionUI:cases\" | \"securitySolutionUI:alerts\" | \"securitySolutionUI:rules\" | \"securitySolutionUI:policy\" | \"securitySolutionUI:overview\" | \"securitySolutionUI:dashboards\" | \"securitySolutionUI:kubernetes\" | \"securitySolutionUI:cases_create\" | \"securitySolutionUI:cases_configure\" | \"securitySolutionUI:hosts\" | \"securitySolutionUI:users\" | \"securitySolutionUI:cloud_defend-policies\" | \"securitySolutionUI:cloud_security_posture-dashboard\" | \"securitySolutionUI:cloud_security_posture-findings\" | \"securitySolutionUI:cloud_security_posture-benchmarks\" | \"securitySolutionUI:network\" | \"securitySolutionUI:data_quality\" | \"securitySolutionUI:explore\" | \"securitySolutionUI:assets\" | \"securitySolutionUI:cloud_defend\" | \"securitySolutionUI:notes\" | \"securitySolutionUI:administration\" | \"securitySolutionUI:asset_inventory\" | \"securitySolutionUI:attack_discovery\" | \"securitySolutionUI:blocklist\" | \"securitySolutionUI:cloud_security_posture-rules\" | \"securitySolutionUI:detections\" | \"securitySolutionUI:detection_response\" | \"securitySolutionUI:endpoints\" | \"securitySolutionUI:event_filters\" | \"securitySolutionUI:exceptions\" | \"securitySolutionUI:host_isolation_exceptions\" | \"securitySolutionUI:hosts-all\" | \"securitySolutionUI:hosts-anomalies\" | \"securitySolutionUI:hosts-risk\" | \"securitySolutionUI:hosts-events\" | \"securitySolutionUI:hosts-sessions\" | \"securitySolutionUI:hosts-uncommon_processes\" | \"securitySolutionUI:investigations\" | \"securitySolutionUI:get_started\" | \"securitySolutionUI:machine_learning-landing\" | \"securitySolutionUI:network-anomalies\" | \"securitySolutionUI:network-dns\" | \"securitySolutionUI:network-events\" | \"securitySolutionUI:network-flows\" | \"securitySolutionUI:network-http\" | \"securitySolutionUI:network-tls\" | \"securitySolutionUI:response_actions_history\" | \"securitySolutionUI:rules-add\" | \"securitySolutionUI:rules-create\" | \"securitySolutionUI:rules-landing\" | \"securitySolutionUI:siem_migrations-rules\" | \"securitySolutionUI:threat_intelligence\" | \"securitySolutionUI:timelines\" | \"securitySolutionUI:timelines-templates\" | \"securitySolutionUI:trusted_apps\" | \"securitySolutionUI:users-all\" | \"securitySolutionUI:users-anomalies\" | \"securitySolutionUI:users-authentications\" | \"securitySolutionUI:users-events\" | \"securitySolutionUI:users-risk\" | \"securitySolutionUI:entity_analytics\" | \"securitySolutionUI:entity_analytics-management\" | \"securitySolutionUI:entity_analytics-asset-classification\" | \"securitySolutionUI:entity_analytics-entity_store_management\" | \"securitySolutionUI:coverage-overview\" | \"fleet:settings\" | \"fleet:agents\" | \"fleet:policies\" | \"fleet:data_streams\" | \"fleet:enrollment_tokens\" | \"fleet:uninstall_tokens\"" + "\"fleet\" | \"graph\" | \"ml\" | \"monitoring\" | \"profiling\" | \"metrics\" | \"management\" | \"apm\" | \"synthetics\" | \"ux\" | \"canvas\" | \"logs\" | \"dashboards\" | \"slo\" | \"observabilityAIAssistant\" | \"home\" | \"integrations\" | \"discover\" | \"observability-overview\" | \"streams\" | \"appSearch\" | \"inventory\" | \"dev_tools\" | \"maps\" | \"visualize\" | \"dev_tools:console\" | \"dev_tools:searchprofiler\" | \"dev_tools:painless_lab\" | \"dev_tools:grokdebugger\" | \"ml:notifications\" | \"ml:nodes\" | \"ml:overview\" | \"ml:memoryUsage\" | \"ml:settings\" | \"ml:dataVisualizer\" | \"ml:logPatternAnalysis\" | \"ml:logRateAnalysis\" | \"ml:singleMetricViewer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:dataDrift\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:esqlDataVisualizer\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\" | \"ml:suppliedConfigurations\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:cross_cluster_replication\" | \"management:dataViews\" | \"management:spaces\" | \"management:settings\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:data_quality\" | \"management:filesManagement\" | \"management:pipelines\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:securityAiAssistantManagement\" | \"management:observabilityAiAssistantManagement\" | \"management:api_keys\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchInferenceEndpoints\" | \"searchSynonyms\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"appSearch:engines\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"searchSynonyms:synonyms\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\" | \"observability-logs-explorer\" | \"last-used-logs-viewer\" | \"observabilityOnboarding\" | \"logs:settings\" | \"logs:stream\" | \"logs:log-categories\" | \"logs:anomalies\" | \"observability-overview:cases\" | \"observability-overview:alerts\" | \"observability-overview:rules\" | \"observability-overview:cases_create\" | \"observability-overview:cases_configure\" | \"metrics:settings\" | \"metrics:hosts\" | \"metrics:inventory\" | \"metrics:metrics-explorer\" | \"metrics:assetDetails\" | \"apm:services\" | \"apm:traces\" | \"apm:dependencies\" | \"apm:service-map\" | \"apm:settings\" | \"apm:service-groups-list\" | \"apm:storage-explorer\" | \"synthetics:overview\" | \"synthetics:certificates\" | \"profiling:functions\" | \"profiling:stacktraces\" | \"profiling:flamegraphs\" | \"inventory:datastreams\" | \"streams:overview\" | \"securitySolutionUI\" | \"securitySolutionUI:\" | \"securitySolutionUI:cases\" | \"securitySolutionUI:alerts\" | \"securitySolutionUI:rules\" | \"securitySolutionUI:policy\" | \"securitySolutionUI:overview\" | \"securitySolutionUI:dashboards\" | \"securitySolutionUI:kubernetes\" | \"securitySolutionUI:cases_create\" | \"securitySolutionUI:cases_configure\" | \"securitySolutionUI:hosts\" | \"securitySolutionUI:users\" | \"securitySolutionUI:cloud_defend-policies\" | \"securitySolutionUI:cloud_security_posture-dashboard\" | \"securitySolutionUI:cloud_security_posture-findings\" | \"securitySolutionUI:cloud_security_posture-benchmarks\" | \"securitySolutionUI:network\" | \"securitySolutionUI:data_quality\" | \"securitySolutionUI:explore\" | \"securitySolutionUI:assets\" | \"securitySolutionUI:cloud_defend\" | \"securitySolutionUI:notes\" | \"securitySolutionUI:administration\" | \"securitySolutionUI:asset_inventory\" | \"securitySolutionUI:attack_discovery\" | \"securitySolutionUI:blocklist\" | \"securitySolutionUI:cloud_security_posture-rules\" | \"securitySolutionUI:detections\" | \"securitySolutionUI:detection_response\" | \"securitySolutionUI:endpoints\" | \"securitySolutionUI:event_filters\" | \"securitySolutionUI:exceptions\" | \"securitySolutionUI:host_isolation_exceptions\" | \"securitySolutionUI:hosts-all\" | \"securitySolutionUI:hosts-anomalies\" | \"securitySolutionUI:hosts-risk\" | \"securitySolutionUI:hosts-events\" | \"securitySolutionUI:hosts-sessions\" | \"securitySolutionUI:hosts-uncommon_processes\" | \"securitySolutionUI:investigations\" | \"securitySolutionUI:get_started\" | \"securitySolutionUI:machine_learning-landing\" | \"securitySolutionUI:network-anomalies\" | \"securitySolutionUI:network-dns\" | \"securitySolutionUI:network-events\" | \"securitySolutionUI:network-flows\" | \"securitySolutionUI:network-http\" | \"securitySolutionUI:network-tls\" | \"securitySolutionUI:response_actions_history\" | \"securitySolutionUI:rules-add\" | \"securitySolutionUI:rules-create\" | \"securitySolutionUI:rules-landing\" | \"securitySolutionUI:siem_migrations-rules\" | \"securitySolutionUI:threat_intelligence\" | \"securitySolutionUI:timelines\" | \"securitySolutionUI:timelines-templates\" | \"securitySolutionUI:trusted_apps\" | \"securitySolutionUI:users-all\" | \"securitySolutionUI:users-anomalies\" | \"securitySolutionUI:users-authentications\" | \"securitySolutionUI:users-events\" | \"securitySolutionUI:users-risk\" | \"securitySolutionUI:entity_analytics\" | \"securitySolutionUI:entity_analytics-management\" | \"securitySolutionUI:entity_analytics-asset-classification\" | \"securitySolutionUI:entity_analytics-entity_store_management\" | \"securitySolutionUI:coverage-overview\" | \"fleet:settings\" | \"fleet:agents\" | \"fleet:policies\" | \"fleet:data_streams\" | \"fleet:enrollment_tokens\" | \"fleet:uninstall_tokens\"" ], "path": "packages/core/chrome/core-chrome-browser/src/project_navigation.ts", "deprecated": false, diff --git a/api_docs/kbn_core_chrome_browser.mdx b/api_docs/kbn_core_chrome_browser.mdx index 11b176f4aa807..3d6bc9a5dee68 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-01-06 +date: 2025-01-07 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 fbcba13df4be6..266e26205a809 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-01-06 +date: 2025-01-07 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 262a6fb0709a9..15f7c45c4f918 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-01-06 +date: 2025-01-07 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 102b79b213b06..b87fb3ea24754 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-01-06 +date: 2025-01-07 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 788c0bfcae688..6ad98bdff3c71 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-01-06 +date: 2025-01-07 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 ed65f7c7d491f..3b23a9ba13f1f 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-01-06 +date: 2025-01-07 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 7c2bc46acc977..daf6e2393e486 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-01-06 +date: 2025-01-07 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 1e68fb9cbda51..e17c9e120669f 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-01-06 +date: 2025-01-07 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 cdc292897fc58..05315126232be 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-01-06 +date: 2025-01-07 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 4851ff1bf13ac..d3665f4073e74 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-01-06 +date: 2025-01-07 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 63d95a6ade295..e0e0a3218c390 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-01-06 +date: 2025-01-07 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 ea462d82d8d44..4c19317811a7e 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-01-06 +date: 2025-01-07 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 0245a92fb3cce..22192c69be461 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-01-06 +date: 2025-01-07 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 cbb9b924daea3..26ed80ce8e8ae 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-01-06 +date: 2025-01-07 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 bf7811189a957..e73ea91c9b7b1 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-01-06 +date: 2025-01-07 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 82ef373ebf282..bfc91229cee0e 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-01-06 +date: 2025-01-07 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 4b9d1d4e82c4a..70e4ee5838290 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-01-06 +date: 2025-01-07 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 5839dc18185ae..48401fd0f387b 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-01-06 +date: 2025-01-07 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 cc3aa299355e3..49556609b1b8f 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-01-06 +date: 2025-01-07 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 9ff115c6f7b3a..d742dbc72dec0 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-01-06 +date: 2025-01-07 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 c3d04471c3b05..06b5af257f31d 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-01-06 +date: 2025-01-07 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 0d6eb342a8467..92890122c0165 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-01-06 +date: 2025-01-07 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 a6d34732a3deb..5564cf91aa3b3 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-01-06 +date: 2025-01-07 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 06d82c85201bf..4a47110197421 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-01-06 +date: 2025-01-07 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 5cd51c3a8bb07..9ce852b7e28d9 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-01-06 +date: 2025-01-07 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 ea11aec8a9b5c..8c506083c3ec0 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-01-06 +date: 2025-01-07 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 38b9444f74d60..0ca1e18349087 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-01-06 +date: 2025-01-07 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 c66273b15356a..a6b906551eca5 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-01-06 +date: 2025-01-07 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 85947249517f9..9aed94e4410fd 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-01-06 +date: 2025-01-07 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 d85129733c349..5fa41bd684804 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-01-06 +date: 2025-01-07 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 20be2130dd497..3eb0fa29bea6b 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-01-06 +date: 2025-01-07 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 d05b831c31f93..3350692c201be 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-01-06 +date: 2025-01-07 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 5235df9d4c77c..6ee16c8df0b5f 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-01-06 +date: 2025-01-07 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 5e17e0320b76c..3d75c959cd5c2 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-01-06 +date: 2025-01-07 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 669d5f5027c63..6b92aa302a02c 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-01-06 +date: 2025-01-07 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 353adedf630a6..3a3ae192ac2c1 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-01-06 +date: 2025-01-07 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 9f29cbc994837..9c5d12f84a109 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-01-06 +date: 2025-01-07 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 ff3eb4e3a6f45..609972d8036c2 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-01-06 +date: 2025-01-07 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 870a348316755..6452e10d77975 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-01-06 +date: 2025-01-07 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 cda56d1cc9ef0..ed82b11ffbf54 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-01-06 +date: 2025-01-07 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 7f2a8cb1825b4..fa822843dc263 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-01-06 +date: 2025-01-07 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 9ed29d671df34..56bc5ccbcee94 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-01-06 +date: 2025-01-07 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 91a807c7851f2..496c39d35160f 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-01-06 +date: 2025-01-07 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 2a6e3c60718eb..c1918651b6d89 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-01-06 +date: 2025-01-07 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 e643294f865db..de414ad1192c3 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-01-06 +date: 2025-01-07 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 73a630b35a515..6cda0742459b6 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-01-06 +date: 2025-01-07 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 54c2209861557..480ec9d3ce527 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-01-06 +date: 2025-01-07 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 b8dec6a7eaf43..e36a4bcf65397 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-01-06 +date: 2025-01-07 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 c75daa31efbaf..49c4f52e1d21b 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-01-06 +date: 2025-01-07 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 8563a61c08629..b368d04a2f09a 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-01-06 +date: 2025-01-07 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 4075b01b950d6..0fd1cb3034504 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-01-06 +date: 2025-01-07 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 dbed1523ee46c..b3e2ac9decea8 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-01-06 +date: 2025-01-07 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 3cc1ed7468d89..6b96150027938 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-01-06 +date: 2025-01-07 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 206eaec5b4702..d606f34c92aa9 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks'] --- import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server.devdocs.json b/api_docs/kbn_core_http_server.devdocs.json index 5b42345610654..4e753488317b7 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -304,8 +304,9 @@ "label": "security", "description": [], "signature": [ + "Pick<", "RouteSecurity", - " | undefined" + ", \"authz\"> | undefined" ], "path": "src/core/packages/http/server/src/versioning/types.ts", "deprecated": false, @@ -3803,10 +3804,6 @@ "plugin": "stackConnectors", "path": "x-pack/platform/plugins/shared/stack_connectors/server/routes/get_well_known_email_service.ts" }, - { - "plugin": "stackConnectors", - "path": "x-pack/platform/plugins/shared/stack_connectors/server/routes/get_inference_services.ts" - }, { "plugin": "customBranding", "path": "x-pack/platform/plugins/private/custom_branding/server/routes/info.ts" @@ -4559,6 +4556,14 @@ "plugin": "@kbn/core", "path": "src/core/packages/http/server-internal/src/http_server.test.ts" }, + { + "plugin": "@kbn/core", + "path": "src/core/packages/http/server-internal/src/http_server.test.ts" + }, + { + "plugin": "@kbn/core", + "path": "src/core/packages/http/server-internal/src/http_server.test.ts" + }, { "plugin": "@kbn/core", "path": "src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_route.test.ts" @@ -4651,10 +4656,6 @@ "plugin": "ruleRegistry", "path": "x-pack/platform/plugins/shared/rule_registry/server/routes/__mocks__/server.ts" }, - { - "plugin": "stackConnectors", - "path": "x-pack/platform/plugins/shared/stack_connectors/server/routes/get_inference_services.test.ts" - }, { "plugin": "stackConnectors", "path": "x-pack/platform/plugins/shared/stack_connectors/server/routes/get_well_known_email_service.test.ts" @@ -11401,14 +11402,6 @@ "plugin": "taskManager", "path": "x-pack/platform/plugins/shared/task_manager/server/routes/background_task_utilization.ts" }, - { - "plugin": "security", - "path": "x-pack/platform/plugins/shared/security/server/routes/authentication/common.ts" - }, - { - "plugin": "security", - "path": "x-pack/platform/plugins/shared/security/server/routes/authentication/common.ts" - }, { "plugin": "security", "path": "x-pack/platform/plugins/shared/security/server/routes/authentication/oidc.ts" @@ -11813,14 +11806,6 @@ "plugin": "@kbn/core", "path": "src/core/packages/http/router-server-internal/src/request.test.ts" }, - { - "plugin": "@kbn/core", - "path": "src/core/packages/http/router-server-internal/src/request.test.ts" - }, - { - "plugin": "@kbn/core", - "path": "src/core/packages/http/router-server-internal/src/request.test.ts" - }, { "plugin": "@kbn/core", "path": "src/core/packages/http/router-server-internal/src/request.test.ts" @@ -14475,6 +14460,10 @@ "plugin": "@kbn/core", "path": "src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_route.test.ts" }, + { + "plugin": "@kbn/core", + "path": "src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_route.test.ts" + }, { "plugin": "@kbn/core", "path": "src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_router.test.ts" @@ -18216,9 +18205,9 @@ "label": "RouteSecurityGetter", "description": [], "signature": [ - "(request: { headers: ", + "(request?: { headers: ", "Headers", - "; query?: unknown; }) => ", + "; query?: unknown; } | undefined) => ", "RouteSecurity", " | undefined" ], @@ -18237,7 +18226,7 @@ "signature": [ "{ headers: ", "Headers", - "; query?: unknown; }" + "; query?: unknown; } | undefined" ], "path": "src/core/packages/http/server/src/router/request.ts", "deprecated": false, diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index ea76c8a15e242..bb31a000073a2 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-01-06 +date: 2025-01-07 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 a532be2c2bb5b..9a55d4ffc3fab 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-01-06 +date: 2025-01-07 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 d7aaa134d8b21..bef7e30949b8a 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-01-06 +date: 2025-01-07 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 b22b07520e7a3..fb59afaa313c5 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-01-06 +date: 2025-01-07 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 f065c8531f3c9..d7cb187b6554b 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-01-06 +date: 2025-01-07 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 53b3be8cd82af..fa51f53d2360a 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-01-06 +date: 2025-01-07 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 0ea955e9c2cc3..7cc4f6f8e33de 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-01-06 +date: 2025-01-07 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 cd39ce7f1420f..fa791a8f453f5 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-01-06 +date: 2025-01-07 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 f62d91a3372d6..8d57c042470a1 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-01-06 +date: 2025-01-07 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 95335192fb630..33012a1156a4b 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-01-06 +date: 2025-01-07 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 722b3eb38097f..f28daba17425e 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-01-06 +date: 2025-01-07 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 4e61167364adb..317c13b7f852f 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-01-06 +date: 2025-01-07 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 967de2fcc7a19..d8bfc3f77e50e 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-01-06 +date: 2025-01-07 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 3a062f30bc7d9..a254a25a06634 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-01-06 +date: 2025-01-07 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 47384858dc037..5ef8ab9553e57 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-01-06 +date: 2025-01-07 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 513bce6c84d6b..7b0fa1874f361 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-01-06 +date: 2025-01-07 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 acecd8aa0ee2e..49fb85070512f 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-01-06 +date: 2025-01-07 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 82bef1be9f8a0..84e6505c63cd8 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-01-06 +date: 2025-01-07 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 e3e867113ca55..7e541e374df49 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-01-06 +date: 2025-01-07 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 79b1430c7a64b..89e9cab117adf 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-01-06 +date: 2025-01-07 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 e4676e79caa4a..dd141a615af16 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-01-06 +date: 2025-01-07 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 ebd8a8ff720f4..9c7f8d6bc2f09 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-01-06 +date: 2025-01-07 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 6a870f29ea72c..75f30f53767bd 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-01-06 +date: 2025-01-07 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 596934c1281bb..3cf8ce0c0b2c7 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-01-06 +date: 2025-01-07 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 4bf49734eae9b..696af6d2c6855 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-01-06 +date: 2025-01-07 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 3cc6e30dc7b37..7c32515a8fa17 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-01-06 +date: 2025-01-07 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 bf0ea0e8c7743..d5f0668bd09de 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-01-06 +date: 2025-01-07 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 157dbcb0ca75a..d0d548a3101ad 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-01-06 +date: 2025-01-07 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 6f114bb757994..017363b864568 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-01-06 +date: 2025-01-07 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 93ab302e8d5c7..b0b6f7caaf37b 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-01-06 +date: 2025-01-07 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 cdd7050655d98..10f2bcf0d4c33 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-01-06 +date: 2025-01-07 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 4fafffa852acf..a4d889598a2d1 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-01-06 +date: 2025-01-07 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 6521d4c45b9bb..a19fcbd558d46 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-01-06 +date: 2025-01-07 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 02a9d54cce4ae..097ab94d0b1d8 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-01-06 +date: 2025-01-07 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 0c35fbf953f34..747c81df92625 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-01-06 +date: 2025-01-07 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 49cd78a201fa8..c8e20e2ae51ca 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-01-06 +date: 2025-01-07 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 0d73a30f6d9d0..138bf69e6572e 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-01-06 +date: 2025-01-07 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 515f86089ea1a..ecf25fb65663f 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-01-06 +date: 2025-01-07 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 83aa4fda3ddc2..c7fca14c7a491 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-01-06 +date: 2025-01-07 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 8d27fd2f5752b..8ba1bb7005afb 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-01-06 +date: 2025-01-07 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 d99909bec45bb..d02f65a7cf5d3 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-01-06 +date: 2025-01-07 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 4189ad6332b59..7f86b7a355dcd 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-01-06 +date: 2025-01-07 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 0a9d7e531f1ac..50f7318489f73 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-01-06 +date: 2025-01-07 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 0e68c3a3c848d..8ca70fae35601 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-01-06 +date: 2025-01-07 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 f7259cbfdc254..e5a1fc428675d 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-01-06 +date: 2025-01-07 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 d50d1e82a5256..0336a2086624c 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-01-06 +date: 2025-01-07 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 7019d95f88bee..0fc193d9a7bb4 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-01-06 +date: 2025-01-07 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 28ed257abe420..43b33cf27f511 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-01-06 +date: 2025-01-07 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 f107d5f35bdcb..0ec56ffdf07ef 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-01-06 +date: 2025-01-07 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 827ed116fc202..d35ecade07340 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-01-06 +date: 2025-01-07 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 3e338d246eb2f..da58569c4c101 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-01-06 +date: 2025-01-07 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 6afebaa631a58..c38b97cd93aa3 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-01-06 +date: 2025-01-07 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 1c0dd97ef1acf..2353fb2924e76 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-01-06 +date: 2025-01-07 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 62190e93759da..9d7d5d51c7b2e 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-01-06 +date: 2025-01-07 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 a0f63cf14676b..e90dfe7c858ca 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-01-06 +date: 2025-01-07 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 e81d587b48a0f..ae73dd01f1513 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-01-06 +date: 2025-01-07 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 005d5abfd456a..fcd291bbe77a7 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-01-06 +date: 2025-01-07 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 f1f5563828f3a..360589286bfde 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-01-06 +date: 2025-01-07 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 803a95ed908db..cfc5cd5000498 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-01-06 +date: 2025-01-07 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 2fe2af4144bd7..83560c6fecd11 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-01-06 +date: 2025-01-07 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 538f135c9aff7..46289557d6253 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-01-06 +date: 2025-01-07 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 49fd0b94b4f30..cc4daaa43cbe1 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-01-06 +date: 2025-01-07 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 f69717d09991a..50e3e42f7563b 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-01-06 +date: 2025-01-07 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 dc8549b6359eb..3781e9bc19f87 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-01-06 +date: 2025-01-07 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 b0c0a66a0e0a4..f14d63d277013 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-01-06 +date: 2025-01-07 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 a4f4b8bec5c0a..7389585cd27b7 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-01-06 +date: 2025-01-07 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 91214f8f6a13d..7c73a8669e0a5 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-01-06 +date: 2025-01-07 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 adb434db9b2bf..1fe2a86f0c367 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-01-06 +date: 2025-01-07 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 f4da003f00640..9ca3cc346d333 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-01-06 +date: 2025-01-07 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 f94243d97dd80..3ca159bec8d55 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-01-06 +date: 2025-01-07 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 d5962c44cfcda..d72898be464d1 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-01-06 +date: 2025-01-07 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 37e0630b222ce..adc8a7c310f44 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-01-06 +date: 2025-01-07 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 1b1508193867d..b4b8a5a6e44b7 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-01-06 +date: 2025-01-07 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 ba0ac9f8f0fda..a8960fd65dc1c 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-01-06 +date: 2025-01-07 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 b9a3594e44ab2..a640257794c00 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-01-06 +date: 2025-01-07 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 935a40133643f..d3676deeeaa97 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-01-06 +date: 2025-01-07 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 6eef8bd509801..838f9c873209f 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-01-06 +date: 2025-01-07 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 46c16da0456d1..b98190fa3f1b4 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-01-06 +date: 2025-01-07 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 2eabd2efd3be6..c21d2c43a947d 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-01-06 +date: 2025-01-07 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 df653e841294d..28abaaa551cec 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-01-06 +date: 2025-01-07 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 e8df8de417f9b..db23bbab7fe65 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-01-06 +date: 2025-01-07 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 e7d98d5358110..4b03d1f10cadc 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-01-06 +date: 2025-01-07 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 da1b290de12b3..8271085e9cdb1 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-01-06 +date: 2025-01-07 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 b286cc3dc8712..da2628411268d 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-01-06 +date: 2025-01-07 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 7ede2bd99842f..3075997d7b992 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-01-06 +date: 2025-01-07 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 4ba198eb8098c..b26806ff79126 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-01-06 +date: 2025-01-07 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 c0e094783d17d..1fa3e95449c37 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-01-06 +date: 2025-01-07 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 9cb88ce3ea580..717c8167d9f8a 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-01-06 +date: 2025-01-07 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 515c1087f8038..74a031dd509c9 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-01-06 +date: 2025-01-07 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 3e62df986fe0c..ae012fc145e5e 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-01-06 +date: 2025-01-07 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 f7fb16c8dba86..936b7aa79c8ec 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-01-06 +date: 2025-01-07 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 bfe615aa21c3b..2dac85955f32c 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-01-06 +date: 2025-01-07 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 633b00dc4ebc7..c2b0a642cc1fa 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-01-06 +date: 2025-01-07 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 cb969e647c0b3..368e49e501712 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-01-06 +date: 2025-01-07 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 238ec9377c17c..0a07a3000689a 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-01-06 +date: 2025-01-07 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 5f84b0fd647cd..9d079dc65532e 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-01-06 +date: 2025-01-07 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 0564b5b421e18..d1ccda022c3c9 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-01-06 +date: 2025-01-07 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 3e9afcc686662..de4bf89024b03 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-01-06 +date: 2025-01-07 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 4af671a945ab6..27a9c74ea110f 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-01-06 +date: 2025-01-07 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 d038cab743b04..84eae8683d3de 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-01-06 +date: 2025-01-07 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 a27011a8eb074..c9bf9e2afa8fd 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-01-06 +date: 2025-01-07 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 eb7336eb7a207..3d58127e2721b 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-01-06 +date: 2025-01-07 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 8cf5b01d0dff7..ec4bd0be55715 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-01-06 +date: 2025-01-07 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 c8acb22507fde..602b1d834930c 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-01-06 +date: 2025-01-07 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 215f1604bacc5..f7f5948fd4651 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-01-06 +date: 2025-01-07 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 f580cdadd4792..71d848080515a 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-01-06 +date: 2025-01-07 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 121d7f0bf7842..ce54e21775123 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-01-06 +date: 2025-01-07 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 070cec9ac8ac5..f23fbc2d6d844 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-01-06 +date: 2025-01-07 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 9d136f5ba9398..31e928ebc2144 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-01-06 +date: 2025-01-07 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 9fc51c2686917..638b2023139e8 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-01-06 +date: 2025-01-07 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 64a125cf8f8d7..7c10c31bb5a0e 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-forge'] --- import kbnDataForgeObj from './kbn_data_forge.devdocs.json'; diff --git a/api_docs/kbn_data_service.mdx b/api_docs/kbn_data_service.mdx index 0b363633bfd2e..0b29d554d5e4c 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-01-06 +date: 2025-01-07 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 1909ebba72189..f2d13bbac456d 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-01-06 +date: 2025-01-07 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 cc4a753a86195..19fdaf78e530e 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-01-06 +date: 2025-01-07 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 0fd22cbc325e9..74fe6de09204e 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-01-06 +date: 2025-01-07 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 d8152e619acba..ba78f9c09d249 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-01-06 +date: 2025-01-07 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 47827508989d8..5994e17175a69 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-01-06 +date: 2025-01-07 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 d1a6e91ee0594..abd604c32c306 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-01-06 +date: 2025-01-07 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 3153dade23920..19cb16077589d 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-01-06 +date: 2025-01-07 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 ba26be0bc4997..77f2a2b5e5441 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-01-06 +date: 2025-01-07 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 56df6b5059df3..4abac5f1ce7ba 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-observability'] --- import kbnDeeplinksObservabilityObj from './kbn_deeplinks_observability.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_search.devdocs.json b/api_docs/kbn_deeplinks_search.devdocs.json index 3e8e29958b722..cfd3ec9453b17 100644 --- a/api_docs/kbn_deeplinks_search.devdocs.json +++ b/api_docs/kbn_deeplinks_search.devdocs.json @@ -30,7 +30,7 @@ "label": "DeepLinkId", "description": [], "signature": [ - "\"appSearch\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchInferenceEndpoints\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"appSearch:engines\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\"" + "\"appSearch\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchInferenceEndpoints\" | \"searchSynonyms\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"appSearch:engines\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"searchSynonyms:synonyms\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\"" ], "path": "src/platform/packages/shared/deeplinks/search/deep_links.ts", "deprecated": false, diff --git a/api_docs/kbn_deeplinks_search.mdx b/api_docs/kbn_deeplinks_search.mdx index 991e9e2302030..3ca09292226e6 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-01-06 +date: 2025-01-07 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 7b3bf3d73f127..eabb65bc40ad2 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-01-06 +date: 2025-01-07 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 07ba855d44e1e..abf81c7ec97f5 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-01-06 +date: 2025-01-07 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 743127bf1c09e..6bfec84ccced8 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-01-06 +date: 2025-01-07 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 fbf2a64fba6c1..038a449307917 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-01-06 +date: 2025-01-07 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 e1652f27592db..fcd931ca8ada0 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-01-06 +date: 2025-01-07 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 84ce21706902f..46242c4afeb15 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-ml'] --- import kbnDefaultNavMlObj from './kbn_default_nav_ml.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_errors.mdx b/api_docs/kbn_dev_cli_errors.mdx index 591ecb757b9a1..c28404ec822bf 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-01-06 +date: 2025-01-07 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 1f61a81f15078..38cfb42c0a9eb 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-01-06 +date: 2025-01-07 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 8d8c02e392e7f..4297d5315e43b 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-01-06 +date: 2025-01-07 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 e612bcf4ff2cb..d6e58bd2faeeb 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-01-06 +date: 2025-01-07 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 b772e117335f1..5855471e79bcf 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-01-06 +date: 2025-01-07 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 fad385e82d2d9..117c07fa0cabd 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils'] --- import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index e9429fe8193c5..0f843e2c0eaf5 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-01-06 +date: 2025-01-07 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 f3b644e6a8708..8ea8529fcef81 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-01-06 +date: 2025-01-07 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 c07c43194d63d..891880744deaf 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-01-06 +date: 2025-01-07 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 0ad772d660409..d497cfa96b409 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-01-06 +date: 2025-01-07 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 d8b9b162c4f3d..46e9b2c6aa83b 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-01-06 +date: 2025-01-07 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 dd2d962eb5625..3358c0ad1a321 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-01-06 +date: 2025-01-07 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 1c0db4d216f78..b0800f9ea25bf 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant_common.mdx b/api_docs/kbn_elastic_assistant_common.mdx index 610803eb4fa03..ff4d48186579a 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_entities_schema.mdx b/api_docs/kbn_entities_schema.mdx index 55d013a9e64e2..9f6658be2fa54 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-01-06 +date: 2025-01-07 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 5ff7651b4d4e7..6a68bc79cfcd4 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-01-06 +date: 2025-01-07 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 da829df7f1319..725ebd5e5e07a 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-01-06 +date: 2025-01-07 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 d4f340c0785dd..6b0d8d20829ee 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-01-06 +date: 2025-01-07 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 7f79dca680107..3e0d631e77136 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-01-06 +date: 2025-01-07 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 1a517a17fecba..5e80ac1744a32 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-01-06 +date: 2025-01-07 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 4af4dcffc1296..6f58db652c589 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-01-06 +date: 2025-01-07 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 7a81cbe5a51bd..a9d9cae7be8b3 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-01-06 +date: 2025-01-07 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 41250747231b4..8aab2f97636cc 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-01-06 +date: 2025-01-07 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 349078b7780a7..1ffe4e13d5457 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-01-06 +date: 2025-01-07 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 7ca465b8b1881..c7e03eeec3774 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-validation-autocomplete'] --- import kbnEsqlValidationAutocompleteObj from './kbn_esql_validation_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index 731d664cf6aca..587b61bddd26a 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-01-06 +date: 2025-01-07 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 3bae78bf560b5..480b494273d01 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-components'] --- import kbnEventAnnotationComponentsObj from './kbn_event_annotation_components.devdocs.json'; diff --git a/api_docs/kbn_expandable_flyout.mdx b/api_docs/kbn_expandable_flyout.mdx index 86d4629bb253b..76d423ced4857 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-01-06 +date: 2025-01-07 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 103276831a358..466de71678213 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-01-06 +date: 2025-01-07 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 7c9194189c58e..da1c44621d24e 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-utils'] --- import kbnFieldUtilsObj from './kbn_field_utils.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index 02ec84d916da7..81288767bcc41 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-01-06 +date: 2025-01-07 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_formatters.mdx b/api_docs/kbn_formatters.mdx index 9e1cad856463b..06f634aae0a95 100644 --- a/api_docs/kbn_formatters.mdx +++ b/api_docs/kbn_formatters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-formatters title: "@kbn/formatters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/formatters plugin -date: 2025-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/formatters'] --- import kbnFormattersObj from './kbn_formatters.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index bf62dc6803f9f..0b25cfd8c412e 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-01-06 +date: 2025-01-07 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 16999ebe348bc..b0faf6d8fc3c7 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-01-06 +date: 2025-01-07 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 4301f04b80d41..8e404a478f311 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-01-06 +date: 2025-01-07 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 e9ec5f53c4213..2fc3850fd99a8 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-01-06 +date: 2025-01-07 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 5c85e790e946b..fbc5e75f1a28c 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-01-06 +date: 2025-01-07 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 c732ff51683a4..a36656003c648 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-01-06 +date: 2025-01-07 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 bf35a7378d30c..2b3eeb56e20da 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-01-06 +date: 2025-01-07 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 bfb96256b32b2..0f7e685279ca9 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-01-06 +date: 2025-01-07 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 2688b2aad2af1..0c39895d7b87e 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-01-06 +date: 2025-01-07 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 d2b13b5755ae1..b46a8cadee717 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-01-06 +date: 2025-01-07 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 b8c32632131b4..29267f3416f7a 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-01-06 +date: 2025-01-07 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 e34465a824de4..fdd164dfa2ce9 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-01-06 +date: 2025-01-07 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 e352dc06635dc..989de051ab2fe 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-01-06 +date: 2025-01-07 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 3b645051cff48..cbc4ce653d826 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-01-06 +date: 2025-01-07 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 b8fc4182a9575..4ce6ed02c447b 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-01-06 +date: 2025-01-07 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 b4250d18e8cd6..541ca3f6977e3 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-01-06 +date: 2025-01-07 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 724e90b2464c9..05b72f81919a4 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-01-06 +date: 2025-01-07 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 5d0c76a977790..198e05fcd3f9f 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-01-06 +date: 2025-01-07 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 01d36aa083e0c..f103e598839aa 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-01-06 +date: 2025-01-07 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 b6e5f386f0be9..887c85a4501f6 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-01-06 +date: 2025-01-07 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 179d3dd5043ee..21e4bd54c48db 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-01-06 +date: 2025-01-07 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.devdocs.json b/api_docs/kbn_inference_endpoint_ui_common.devdocs.json index ed8c9a0a88dce..00497a421fb01 100644 --- a/api_docs/kbn_inference_endpoint_ui_common.devdocs.json +++ b/api_docs/kbn_inference_endpoint_ui_common.devdocs.json @@ -11,7 +11,7 @@ "label": "InferenceServiceFormFields", "description": [], "signature": [ - "({ providers }: InferenceServicesProps) => React.JSX.Element" + "({ http, toasts, isEdit, }: InferenceServicesProps) => React.JSX.Element | null" ], "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/inference_service_form_fields.tsx", "deprecated": false, @@ -22,7 +22,7 @@ "id": "def-public.InferenceServiceFormFields.$1", "type": "Object", "tags": [], - "label": "{ providers }", + "label": "{\n http,\n toasts,\n isEdit,\n}", "description": [], "signature": [ "InferenceServicesProps" @@ -35,6 +35,76 @@ ], "returnComment": [], "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/inference-endpoint-ui-common", + "id": "def-public.useProviders", + "type": "Function", + "tags": [], + "label": "useProviders", + "description": [], + "signature": [ + "(http: ", + "HttpSetup", + ", toasts: ", + "IToasts", + ") => ", + "UseQueryResult", + "<", + { + "pluginId": "@kbn/inference-endpoint-ui-common", + "scope": "public", + "docId": "kibKbnInferenceEndpointUiCommonPluginApi", + "section": "def-public.InferenceProvider", + "text": "InferenceProvider" + }, + "[], { body: ", + { + "pluginId": "kibanaUtils", + "scope": "common", + "docId": "kibKibanaUtilsPluginApi", + "section": "def-common.KibanaServerError", + "text": "KibanaServerError" + }, + "; }>" + ], + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/hooks/use_providers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/inference-endpoint-ui-common", + "id": "def-public.useProviders.$1", + "type": "Object", + "tags": [], + "label": "http", + "description": [], + "signature": [ + "HttpSetup" + ], + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/hooks/use_providers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/inference-endpoint-ui-common", + "id": "def-public.useProviders.$2", + "type": "Object", + "tags": [], + "label": "toasts", + "description": [], + "signature": [ + "IToasts" + ], + "path": "x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/hooks/use_providers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false } ], "interfaces": [ diff --git a/api_docs/kbn_inference_endpoint_ui_common.mdx b/api_docs/kbn_inference_endpoint_ui_common.mdx index 0313c1c12a037..9e954d3637fc5 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference-endpoint-ui-common'] --- import kbnInferenceEndpointUiCommonObj from './kbn_inference_endpoint_ui_common.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 30 | 0 | 30 | 0 | +| 33 | 0 | 33 | 0 | ## Client diff --git a/api_docs/kbn_inference_integration_flyout.mdx b/api_docs/kbn_inference_integration_flyout.mdx index 2b528fa6fbd33..05a0d69949e2f 100644 --- a/api_docs/kbn_inference_integration_flyout.mdx +++ b/api_docs/kbn_inference_integration_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-inference_integration_flyout title: "@kbn/inference_integration_flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/inference_integration_flyout plugin -date: 2025-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference_integration_flyout'] --- import kbnInferenceIntegrationFlyoutObj from './kbn_inference_integration_flyout.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index 60882f4e4b580..1241284949d32 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-01-06 +date: 2025-01-07 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 9b0a383f7ee4c..cd53b56ab4393 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-01-06 +date: 2025-01-07 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 756cc5c20dc3c..d068413aa207e 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-01-06 +date: 2025-01-07 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 571fe5eb0b479..8ee6fe2b4bac8 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-01-06 +date: 2025-01-07 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 0ee8bd545c6e8..af6e384dd1177 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-01-06 +date: 2025-01-07 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 6dcbe5ee08609..b239e0e84bde0 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-01-06 +date: 2025-01-07 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 4a8d4dd8fe931..d3f4a5efcded8 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-01-06 +date: 2025-01-07 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 89f050575c8f7..e2d63c741dbfb 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-01-06 +date: 2025-01-07 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 b54ebd2f6e316..4b762d53b457e 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-01-06 +date: 2025-01-07 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 1b081ae2f13f6..9e7613cc8812d 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-schemas'] --- import kbnJsonSchemasObj from './kbn_json_schemas.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index cf0464e460136..b98b9d312a18e 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-01-06 +date: 2025-01-07 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 3f3845a9ddd56..031a266d0ff5a 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-01-06 +date: 2025-01-07 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 8be06200bfccc..43f0e09582501 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-01-06 +date: 2025-01-07 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 0107ae3c3b670..cc4b95ea98fa0 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-01-06 +date: 2025-01-07 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 d061937935463..915b58297359e 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-01-06 +date: 2025-01-07 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 6b5cc8083608f..e59f8d4cc98b8 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_content_badge.mdx b/api_docs/kbn_managed_content_badge.mdx index 9cdb9839a5913..47c158ff6060e 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-01-06 +date: 2025-01-07 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 e9ddd3a3ecd62..50608c27d98c3 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-01-06 +date: 2025-01-07 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 d6e7a35d47c1d..ef1abb25325c3 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-01-06 +date: 2025-01-07 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 a653ef9f246e2..6e7e23c60682c 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-01-06 +date: 2025-01-07 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 8313127fa20ea..73c24508ac801 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-01-06 +date: 2025-01-07 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 16d63b1448e8d..b1e4d0615abcd 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-01-06 +date: 2025-01-07 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 808ee62f1119a..4f862291d592c 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-01-06 +date: 2025-01-07 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 980887460b9bb..8b77475623df1 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-01-06 +date: 2025-01-07 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 f3c11b7d78550..f455353575f07 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-field-definition'] --- import kbnManagementSettingsFieldDefinitionObj from './kbn_management_settings_field_definition.devdocs.json'; diff --git a/api_docs/kbn_management_settings_ids.mdx b/api_docs/kbn_management_settings_ids.mdx index 85e561963f80d..34159e5cef5a4 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-ids'] --- import kbnManagementSettingsIdsObj from './kbn_management_settings_ids.devdocs.json'; diff --git a/api_docs/kbn_management_settings_section_registry.mdx b/api_docs/kbn_management_settings_section_registry.mdx index 20fbb9d08e225..84f686b8b6aa7 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-01-06 +date: 2025-01-07 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 520e8c6b3ae93..666cb4ad5c44a 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-01-06 +date: 2025-01-07 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 5cc47b3560e4f..eba5a864e24f5 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-01-06 +date: 2025-01-07 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 175f57f83917c..9e9ed50080a27 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-01-06 +date: 2025-01-07 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 041181e92fd80..2302e01dd4862 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-01-06 +date: 2025-01-07 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 fdaaecb1a9f59..c7690e3d8b8ca 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-01-06 +date: 2025-01-07 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 e60be84dd8ed1..e8bc405b1b7c9 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-01-06 +date: 2025-01-07 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 565180bc7b61e..0d10a4ca39d94 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-01-06 +date: 2025-01-07 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 e9f15d1a58998..ecfdac21e1107 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-01-06 +date: 2025-01-07 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 86d99002cef41..0c58f616c466a 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-01-06 +date: 2025-01-07 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 086dc0f5f3748..f93c869407d1e 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-01-06 +date: 2025-01-07 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 344674d2c4cb1..0ad6342e52a42 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-01-06 +date: 2025-01-07 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 5bff97de9bee9..3b7a8d96e616e 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-01-06 +date: 2025-01-07 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 537d39c275cf4..7cdc48b73cef6 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-data-grid'] --- import kbnMlDataGridObj from './kbn_ml_data_grid.devdocs.json'; diff --git a/api_docs/kbn_ml_date_picker.mdx b/api_docs/kbn_ml_date_picker.mdx index bfb229b1a2877..c5d5c86199a98 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-01-06 +date: 2025-01-07 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 a88917b39e228..b15fd0477f417 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-01-06 +date: 2025-01-07 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 439045e72adbe..8bd3d3aa35b63 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-01-06 +date: 2025-01-07 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 aacdf350b226c..6da10167e6c17 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-01-06 +date: 2025-01-07 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 4963ca069e494..3edcadd401d47 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-01-06 +date: 2025-01-07 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 db9f2eca989a1..1ff1cf713bf26 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-01-06 +date: 2025-01-07 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 e2a52f8539e2c..df0111f369593 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-01-06 +date: 2025-01-07 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_kibana_theme.mdx b/api_docs/kbn_ml_kibana_theme.mdx index 87af428254393..9cac1120aed48 100644 --- a/api_docs/kbn_ml_kibana_theme.mdx +++ b/api_docs/kbn_ml_kibana_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-kibana-theme title: "@kbn/ml-kibana-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-kibana-theme plugin -date: 2025-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-kibana-theme'] --- import kbnMlKibanaThemeObj from './kbn_ml_kibana_theme.devdocs.json'; diff --git a/api_docs/kbn_ml_local_storage.mdx b/api_docs/kbn_ml_local_storage.mdx index c4cc320fa533a..cd91c47a7e72e 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-01-06 +date: 2025-01-07 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 015b93d4e1808..873704a0f37ff 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-01-06 +date: 2025-01-07 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 e2a23dfa28f1d..7c8a791c8dddb 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-01-06 +date: 2025-01-07 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 4a2f96b8a65f0..acb6a61c91c45 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-01-06 +date: 2025-01-07 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 732521b3f5af5..50a7a91040119 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-01-06 +date: 2025-01-07 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 7e9bbf237d81b..583585595c2dd 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-01-06 +date: 2025-01-07 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 d40d7d6ef4495..7dc09c57c9489 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-01-06 +date: 2025-01-07 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 3abe9f97731d9..40f7927b881ee 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-01-06 +date: 2025-01-07 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 e3bc55eebcd12..ddfd18487ba2a 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-01-06 +date: 2025-01-07 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 61ff02ac7b4f0..76288ff0c1895 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-01-06 +date: 2025-01-07 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 a00d62bb15f00..1d598a9f79ab9 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-01-06 +date: 2025-01-07 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 57ec845092850..4280ea6fcf60e 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-01-06 +date: 2025-01-07 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 7e9ead2c8a56c..ceb7605d6abe0 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-01-06 +date: 2025-01-07 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 1c58e81e2b0a3..659ae5c958cd1 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-01-06 +date: 2025-01-07 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 c8ccce196bbb0..7f26717777bb6 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-01-06 +date: 2025-01-07 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 faf8995a46e6d..a0408623f39a0 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] --- import kbnMonacoObj from './kbn_monaco.devdocs.json'; diff --git a/api_docs/kbn_object_versioning.mdx b/api_docs/kbn_object_versioning.mdx index abf3611c57931..af19cae11ff1a 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-01-06 +date: 2025-01-07 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 c72b6b6be4f76..41643e02b9668 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-01-06 +date: 2025-01-07 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 3f04204ded38e..978a596f4b8a8 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-01-06 +date: 2025-01-07 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_rule_utils.mdx b/api_docs/kbn_observability_alerting_rule_utils.mdx index f121fbcc88b88..457110732d90b 100644 --- a/api_docs/kbn_observability_alerting_rule_utils.mdx +++ b/api_docs/kbn_observability_alerting_rule_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-rule-utils title: "@kbn/observability-alerting-rule-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-rule-utils plugin -date: 2025-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-rule-utils'] --- import kbnObservabilityAlertingRuleUtilsObj from './kbn_observability_alerting_rule_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index f61f678c88e1d..c8b7855f5071d 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-01-06 +date: 2025-01-07 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 11147bc4f8265..cad6fd0fd0c59 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-01-06 +date: 2025-01-07 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_logs_overview.mdx b/api_docs/kbn_observability_logs_overview.mdx index 0862dbbe9a091..0174ecf439f4e 100644 --- a/api_docs/kbn_observability_logs_overview.mdx +++ b/api_docs/kbn_observability_logs_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-logs-overview title: "@kbn/observability-logs-overview" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-logs-overview plugin -date: 2025-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-logs-overview'] --- import kbnObservabilityLogsOverviewObj from './kbn_observability_logs_overview.devdocs.json'; diff --git a/api_docs/kbn_observability_synthetics_test_data.mdx b/api_docs/kbn_observability_synthetics_test_data.mdx index 12e4fd7149828..bc9626965dce2 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-01-06 +date: 2025-01-07 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 1bf66243e8560..630c9e38a1897 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-01-06 +date: 2025-01-07 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 ad019a99695df..0293fe7c153f6 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-01-06 +date: 2025-01-07 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 78582845fcbbd..af3d4dd2d5d9d 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-01-06 +date: 2025-01-07 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 c352492a6c17c..499c2efd1adca 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-01-06 +date: 2025-01-07 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 0d5c54c8a5383..350efbfa5cab0 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-01-06 +date: 2025-01-07 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 24c20c9b4b261..759123ea8ce40 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-01-06 +date: 2025-01-07 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 1b0d2ac78e769..97d68088e05bc 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-01-06 +date: 2025-01-07 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 4150955b0c4c1..d7eaf786a6502 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-01-06 +date: 2025-01-07 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 2221ec7a894ba..29a3ab9907e25 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-01-06 +date: 2025-01-07 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 82404e87650af..b129a6b917697 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-01-06 +date: 2025-01-07 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 e19cd0d0bf8e7..d0a481b691275 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-01-06 +date: 2025-01-07 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 7f49b8ab8be7d..10a4f48ebd925 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-01-06 +date: 2025-01-07 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 4f474918d54a6..7695a94fa60c2 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-01-06 +date: 2025-01-07 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 f49d19eff68eb..38be6aeac5c49 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-01-06 +date: 2025-01-07 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 047eeafcb5aa1..8b8ff6bd26f8a 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-01-06 +date: 2025-01-07 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 a68f78f8257cd..efdafb0aaa73c 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-01-06 +date: 2025-01-07 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 94b899202e3ce..0be2ab6d1de50 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-01-06 +date: 2025-01-07 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 c1a6a59a3dbf0..b5caa88175165 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-01-06 +date: 2025-01-07 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 014f2cbf1be5e..fafe1e0bd1775 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-01-06 +date: 2025-01-07 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 e63c975dfd07f..93b0030b66492 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-01-06 +date: 2025-01-07 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 e2a165127f681..fe61e0d176a38 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-01-06 +date: 2025-01-07 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 dd6ca33f8658e..ea4486e40d935 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-01-06 +date: 2025-01-07 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 4282b37061492..581095dbb8593 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-01-06 +date: 2025-01-07 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 84ef66710184b..383537e880178 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-01-06 +date: 2025-01-07 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 6d7bd9e7bcb12..95b7757f5935f 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-01-06 +date: 2025-01-07 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 c0ca8f5463983..d237e75f5cb01 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-01-06 +date: 2025-01-07 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 ba44f2fa8f518..33899200da2c2 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-01-06 +date: 2025-01-07 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 c1dfe02eb5c24..7d58cbd928d7a 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-01-06 +date: 2025-01-07 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 5e7301e486b76..9064b4f156e21 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-01-06 +date: 2025-01-07 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 edfcb671e5798..a63955ae1c6be 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-01-06 +date: 2025-01-07 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 6f19459b49709..4cd142210453e 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-01-06 +date: 2025-01-07 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 730713a90400c..df7f658229642 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-01-06 +date: 2025-01-07 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 cc35543de0538..2b5f1d55249e1 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-01-06 +date: 2025-01-07 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 2c9f486ed2ed9..a497f3762bd11 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-01-06 +date: 2025-01-07 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 30b366e8716cb..f578b33150611 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-01-06 +date: 2025-01-07 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 bbd45808d5581..0daaeb72da750 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-01-06 +date: 2025-01-07 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 28eb2956da852..5d558d988548b 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-01-06 +date: 2025-01-07 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 3c7f8d574ccbe..d228fee70c24d 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-01-06 +date: 2025-01-07 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 d7a55084bba4a..dad370935d31b 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-01-06 +date: 2025-01-07 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 b62207996ea4d..fd95d6cdc20fb 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-01-06 +date: 2025-01-07 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 40b9179f3af00..581863bfb187b 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-01-06 +date: 2025-01-07 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 4603a0a08d84c..9f10939ee3aa2 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-01-06 +date: 2025-01-07 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 eaa57a5c940e5..a67e8db8b9d0a 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-01-06 +date: 2025-01-07 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 ce7b571e60657..bc8b948c44d5e 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_response_ops_feature_flag_service.mdx b/api_docs/kbn_response_ops_feature_flag_service.mdx index ddae5e1b60472..26c4ceff5a8a9 100644 --- a/api_docs/kbn_response_ops_feature_flag_service.mdx +++ b/api_docs/kbn_response_ops_feature_flag_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-feature-flag-service title: "@kbn/response-ops-feature-flag-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-feature-flag-service plugin -date: 2025-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-feature-flag-service'] --- import kbnResponseOpsFeatureFlagServiceObj from './kbn_response_ops_feature_flag_service.devdocs.json'; diff --git a/api_docs/kbn_response_ops_rule_form.mdx b/api_docs/kbn_response_ops_rule_form.mdx index 0660d9dfdcc8b..1a4f66c98c10b 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-01-06 +date: 2025-01-07 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 ecce6408f8308..b42b4b603de28 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-01-06 +date: 2025-01-07 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 ddc2d373c82de..ae98a7d4c7cf0 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-01-06 +date: 2025-01-07 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 ff3d4073970a3..5a12d3964308c 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-01-06 +date: 2025-01-07 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 81ad2b301c9d5..f67518503bccb 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-01-06 +date: 2025-01-07 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 29fdd46bef332..0e9a84516056c 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-01-06 +date: 2025-01-07 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 97f30a6295ee9..eb6cb327a3033 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-01-06 +date: 2025-01-07 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 7e8f19869174f..f7bb0f72fcd3f 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-01-06 +date: 2025-01-07 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 5726fe094ce1c..9643b6acb7755 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-01-06 +date: 2025-01-07 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 8dd33b57dae35..901c9793e8c8d 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-01-06 +date: 2025-01-07 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 54c94308c525b..42381cb6b1bfd 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-01-06 +date: 2025-01-07 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 9434da9f7e65e..81bfacb771406 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/scout-info'] --- import kbnScoutInfoObj from './kbn_scout_info.devdocs.json'; diff --git a/api_docs/kbn_scout_reporting.mdx b/api_docs/kbn_scout_reporting.mdx index 82a006ffbfde5..de039e9099bd2 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-01-06 +date: 2025-01-07 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 a0981dee1f32d..4cb6ae29a7d8d 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-01-06 +date: 2025-01-07 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 91df7a383fc1c..570e719f8f843 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-01-06 +date: 2025-01-07 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 6c4ad15bbd63e..0609e0733dcfa 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-01-06 +date: 2025-01-07 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 e42807445dacc..dcae1b9538604 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-01-06 +date: 2025-01-07 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 c96c6472ab9cd..55be27114a654 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-01-06 +date: 2025-01-07 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 120b65c4617b8..1557bd4242147 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-01-06 +date: 2025-01-07 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 74955f5a6c9d0..d86888dc4a109 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-01-06 +date: 2025-01-07 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 5f0ef8805f53a..4774e9baaf513 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-01-06 +date: 2025-01-07 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 09ef32c2d2876..ba500c53f0042 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-01-06 +date: 2025-01-07 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 84ae363348824..d9fa682066f9d 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-types'] --- import kbnSearchTypesObj from './kbn_search_types.devdocs.json'; diff --git a/api_docs/kbn_security_api_key_management.mdx b/api_docs/kbn_security_api_key_management.mdx index 65c1610f91f98..60b701d29b128 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-01-06 +date: 2025-01-07 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 f421684ba9632..e8f85a3d2feb3 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-01-06 +date: 2025-01-07 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 8cdc498eacbbd..f6f2132d7edac 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-01-06 +date: 2025-01-07 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 e498063db3cf9..5c080248901f7 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-01-06 +date: 2025-01-07 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 8fd839133e3d9..7558349bc8ddb 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-01-06 +date: 2025-01-07 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 fa9bedf8222af..c9ff244423b48 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-01-06 +date: 2025-01-07 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 fdc1a249124a7..e304763a51781 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-01-06 +date: 2025-01-07 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 99a504d7f6d66..3bebcbfdca4ae 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-01-06 +date: 2025-01-07 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 26f6ac5a69028..cfe31b230ec6f 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-01-06 +date: 2025-01-07 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_distribution_bar.mdx b/api_docs/kbn_security_solution_distribution_bar.mdx index b79573b6338fe..91acc95aa0b0f 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-01-06 +date: 2025-01-07 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 978cf27b3149c..615116a009043 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-01-06 +date: 2025-01-07 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 ac56ef81b3a6a..0d09e07ca3dd7 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-01-06 +date: 2025-01-07 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 7be5406ef2502..5358a81dc098d 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-01-06 +date: 2025-01-07 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 b4efa2bf443e8..79fee5b2550fd 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-01-06 +date: 2025-01-07 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 4f8687bb618c7..6d90f921efa72 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-01-06 +date: 2025-01-07 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 e80fe826064c6..6c2fee879825a 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-01-06 +date: 2025-01-07 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 1e4ddc0b4332d..123ad7e1d4bfc 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-01-06 +date: 2025-01-07 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 b25a5b50268eb..7effd93a5b353 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-01-06 +date: 2025-01-07 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 6bbd0614ab3a0..61979df520c25 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-01-06 +date: 2025-01-07 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 2d86bb3f4ff32..4cd418857509f 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-01-06 +date: 2025-01-07 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 3afe26b2c43bd..71eaa27cbc62c 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-01-06 +date: 2025-01-07 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 401dd016193f8..d71a9af986a76 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-01-06 +date: 2025-01-07 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 97b94899a31fc..38e5aedb027c6 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-01-06 +date: 2025-01-07 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 e59b510f5ef66..fe6d8a6cb0284 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-01-06 +date: 2025-01-07 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 c7c6e5bba256a..0808abe1527a1 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-01-06 +date: 2025-01-07 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 93c9829b5d90b..5d234eaa12e4b 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-01-06 +date: 2025-01-07 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 5e36f0cc9c1dd..03a2bd4ef6734 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-01-06 +date: 2025-01-07 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 bfdf566720043..b0ec31358b20b 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-01-06 +date: 2025-01-07 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 cbe2c3c7bfa64..8084d3c568e44 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-01-06 +date: 2025-01-07 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 d0db8ca99dd5d..60ece20180312 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-01-06 +date: 2025-01-07 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 d4554704658e0..927196229db68 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-01-06 +date: 2025-01-07 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 0e1942973a433..22461358e1ae6 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-01-06 +date: 2025-01-07 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 b190abab56d6f..26b0c942cb296 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-01-06 +date: 2025-01-07 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 0c0d9f309261a..078017ea81b3b 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-01-06 +date: 2025-01-07 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 289d090d06ec8..619a91acc8ffb 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-01-06 +date: 2025-01-07 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 459476e95aa4c..c4ef6718f1f9d 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-01-06 +date: 2025-01-07 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 036c17b2a16bf..0c306e42c6a37 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-01-06 +date: 2025-01-07 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 2ca01676eba64..52bbcf44de617 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-01-06 +date: 2025-01-07 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_project_switcher.mdx b/api_docs/kbn_serverless_project_switcher.mdx index 817b7a49d5f3d..9b1d683834024 100644 --- a/api_docs/kbn_serverless_project_switcher.mdx +++ b/api_docs/kbn_serverless_project_switcher.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher title: "@kbn/serverless-project-switcher" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-project-switcher plugin -date: 2025-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-project-switcher'] --- import kbnServerlessProjectSwitcherObj from './kbn_serverless_project_switcher.devdocs.json'; diff --git a/api_docs/kbn_serverless_search_settings.mdx b/api_docs/kbn_serverless_search_settings.mdx index 633147bc57340..5bad82700dfe2 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-01-06 +date: 2025-01-07 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 bb6ec0d6a95f8..e1248a8ab181c 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-01-06 +date: 2025-01-07 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 d7aa62189af07..0778c7a47a0fc 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-01-06 +date: 2025-01-07 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 a432a5fd4746f..e41b14f50e66a 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-01-06 +date: 2025-01-07 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 767fe68e26671..542a1bd5b4ee2 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-01-06 +date: 2025-01-07 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 a4d3247ee6bb1..cd26697dfb6ab 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-01-06 +date: 2025-01-07 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 231cb7c1afd5f..95fb5a565b41c 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-01-06 +date: 2025-01-07 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 da534eeb4f60f..7c71217e7b571 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-01-06 +date: 2025-01-07 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 1bc43327f1113..32188b3aa2fa0 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-01-06 +date: 2025-01-07 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 4b8a91a5f568e..24c3a42009b4c 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-01-06 +date: 2025-01-07 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 0b46b22e97cc8..ac5e796db4bba 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-01-06 +date: 2025-01-07 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 7a7a99827d7a8..76a3200a0c9f7 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-01-06 +date: 2025-01-07 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 42a0e980fde4a..b6365481db75e 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-01-06 +date: 2025-01-07 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 288b14568505a..afbc3a81361cd 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-01-06 +date: 2025-01-07 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 3ab632f34766b..706289001b209 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-01-06 +date: 2025-01-07 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 d50874793144e..37e8cbbd038fd 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-01-06 +date: 2025-01-07 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 70d5de113c05d..265b1bcf2f459 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-01-06 +date: 2025-01-07 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 fb8d17b1703ef..4e78bab294ba0 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-01-06 +date: 2025-01-07 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 222a745f45f50..27645d7b759cd 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-01-06 +date: 2025-01-07 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 1d45d70fe7054..4dc8352f8121d 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-01-06 +date: 2025-01-07 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 dd1b24b89f0a5..0b960915f5d27 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-01-06 +date: 2025-01-07 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 4d96699d4809a..01439eb7cd519 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-01-06 +date: 2025-01-07 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 382b9d8203422..1326b71307694 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-01-06 +date: 2025-01-07 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 dfc1d6ecd443b..7c21d60a8f907 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-01-06 +date: 2025-01-07 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 55801469ba05c..7770c259c20ff 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-01-06 +date: 2025-01-07 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 edc54d90f341a..ee3dbc715d17c 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-01-06 +date: 2025-01-07 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 a6410f2f523f9..23f5f50121135 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-01-06 +date: 2025-01-07 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 401cdd0612068..297f500e03c62 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-01-06 +date: 2025-01-07 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 858aa38f51e6c..849288d35d48c 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-01-06 +date: 2025-01-07 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 efcf3627c327f..8e6d18b55fd13 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-01-06 +date: 2025-01-07 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 218952c4a5531..df2335a8bcc52 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-01-06 +date: 2025-01-07 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 d1cfe9d66c3eb..9d2d989f71944 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-01-06 +date: 2025-01-07 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 08cea0e8e25bf..ef658086a1b1e 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-01-06 +date: 2025-01-07 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 f28842eea95f3..5b611f18c255b 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-01-06 +date: 2025-01-07 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 c2087587af3ea..6078a8711dd0e 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-01-06 +date: 2025-01-07 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 60487f3f4c7f4..3d70dbcbb9bb7 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-01-06 +date: 2025-01-07 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 478c29831e852..cf233a90a7ae6 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-01-06 +date: 2025-01-07 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 3b2fbd592a533..5c9c412ee83f1 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-01-06 +date: 2025-01-07 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 933cf48ab27e7..066abaee28151 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-01-06 +date: 2025-01-07 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 ed4b3d5431d6a..69292e802c58c 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-01-06 +date: 2025-01-07 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 7b7f9b85fa731..fdc5553e81a42 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-01-06 +date: 2025-01-07 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 5ff4c3675bc6c..a75e4f13fe270 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-01-06 +date: 2025-01-07 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 4b9a4c6039d7e..2963445fda157 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-01-06 +date: 2025-01-07 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 73f7ebfd7eab4..d7578ff32cde7 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-01-06 +date: 2025-01-07 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 5160bcb01bf73..afee50e721108 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-01-06 +date: 2025-01-07 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 8328d0cb8d96f..8066cd6ebf22a 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-01-06 +date: 2025-01-07 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 7c4c893bcdc19..452f1caeff9dd 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-01-06 +date: 2025-01-07 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 d9103fa6ef3e5..18bc791d5e308 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-01-06 +date: 2025-01-07 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 e0d5bd725def3..e6830a8ade6b3 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-01-06 +date: 2025-01-07 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 ce851dc5fb196..1c18fc9e4037e 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-01-06 +date: 2025-01-07 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 f2e9e7169d690..b10ac22036c0e 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-01-06 +date: 2025-01-07 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 f13a946fcecf9..7bf4df86edb6e 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/stdio-dev-helpers'] --- import kbnStdioDevHelpersObj from './kbn_stdio_dev_helpers.devdocs.json'; diff --git a/api_docs/kbn_storybook.mdx b/api_docs/kbn_storybook.mdx index 9f62c0355bb49..5908e7658de7c 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-01-06 +date: 2025-01-07 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 e14be3724ee84..2fc92e847a6a2 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-01-06 +date: 2025-01-07 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 3ab1b8eecebd3..93204235393ec 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-01-06 +date: 2025-01-07 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 f35ea1f8f42f4..9a8899ad9a629 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-01-06 +date: 2025-01-07 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 f473b4a65b4be..96bf23181429c 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-01-06 +date: 2025-01-07 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 db08a14c0ac11..1a10bc594a245 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-01-06 +date: 2025-01-07 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 3e3a06bbe44d6..c93dd01e7caae 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-01-06 +date: 2025-01-07 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 0db40447f11e9..26a84fd9afa6f 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-01-06 +date: 2025-01-07 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 a7446d710ff8e..c5169292fed8a 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-01-06 +date: 2025-01-07 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 3c16f03533b11..7978535cd258a 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-01-06 +date: 2025-01-07 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 78cbf5a537f1c..068b58bb93cd0 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_transpose_utils.mdx b/api_docs/kbn_transpose_utils.mdx index b0c6de3bab9aa..b9effb589df1d 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-01-06 +date: 2025-01-07 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 a1c92a4ae925c..a9d08b4c58ed5 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-01-06 +date: 2025-01-07 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 b761d3255fedd..6e3236d0210c4 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-01-06 +date: 2025-01-07 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 b28e0d5e29e4f..1baa740064804 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-01-06 +date: 2025-01-07 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 2642b0ac99497..bebcb191bebfa 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-01-06 +date: 2025-01-07 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 54a98c07619cf..7b61991d47a87 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-01-06 +date: 2025-01-07 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 48a72a3cda144..0490e0bfd26c4 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-01-06 +date: 2025-01-07 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 4bec5e7c42074..8702c78f970f5 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-01-06 +date: 2025-01-07 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 7e8ff7765ba29..cdf0dbf4c4863 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-01-06 +date: 2025-01-07 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 facabcf1362a5..95d189f264581 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-01-06 +date: 2025-01-07 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 186b8cd5c27d9..7a899428d6395 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-field-list'] --- import kbnUnifiedFieldListObj from './kbn_unified_field_list.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_badge.mdx b/api_docs/kbn_unsaved_changes_badge.mdx index aaf8fe011d512..b1b00a0166805 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-01-06 +date: 2025-01-07 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 76a7e75b8ba14..5c4b083640637 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-01-06 +date: 2025-01-07 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 78721d8b1b58d..21e89a46d2860 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-01-06 +date: 2025-01-07 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 4b6dd26bfab46..763ebb4a795bd 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-01-06 +date: 2025-01-07 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 36c02d3e78245..13c9e2826f0b6 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-01-06 +date: 2025-01-07 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 5ed8657e96d7b..bc431e932044e 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-01-06 +date: 2025-01-07 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 1b20bd0a86865..97b366ed08214 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-01-06 +date: 2025-01-07 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 eac90530b4b6c..38b31fdfa1749 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-01-06 +date: 2025-01-07 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 0a4f8209d2ab0..d34d276dbdc89 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-01-06 +date: 2025-01-07 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 82a07b59d0164..5abb8b82150b9 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-01-06 +date: 2025-01-07 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 a80d588359b59..7656d7393c561 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-01-06 +date: 2025-01-07 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 a8d76f0af1c5a..ba93b792dbcaa 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-01-06 +date: 2025-01-07 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 7358a28101028..6d71890f7310a 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-01-06 +date: 2025-01-07 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 711e8a6312d5c..b8717d700b6de 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-01-06 +date: 2025-01-07 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 c8b01b67b0056..91c9bc1593dc7 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-01-06 +date: 2025-01-07 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 62f5dddb70eb8..9a93745fc1a95 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaUtils'] --- import kibanaUtilsObj from './kibana_utils.devdocs.json'; diff --git a/api_docs/kubernetes_security.mdx b/api_docs/kubernetes_security.mdx index 4b19721f53b06..b8a942509c6df 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2025-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] --- import kubernetesSecurityObj from './kubernetes_security.devdocs.json'; diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index 6ffae7b739bfe..e35d7617f9431 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-01-06 +date: 2025-01-07 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 a6342186b99aa..6a07b64496d5d 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-01-06 +date: 2025-01-07 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 3e4e159009f85..f6d09efdb7825 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-01-06 +date: 2025-01-07 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 e98f980afc784..01f1ece0c1df8 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-01-06 +date: 2025-01-07 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 900432945305d..ad94a0e659b06 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-01-06 +date: 2025-01-07 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 91e3e161e3867..d58d9f3eacd23 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-01-06 +date: 2025-01-07 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 214a95044e9e3..07363b9ebbdf1 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-01-06 +date: 2025-01-07 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 efea6edb4b9a8..c3f347f9ae9c3 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsDataAccess'] --- import logsDataAccessObj from './logs_data_access.devdocs.json'; diff --git a/api_docs/logs_explorer.mdx b/api_docs/logs_explorer.mdx index 9fc70fb9665c9..adf83fe3fe848 100644 --- a/api_docs/logs_explorer.mdx +++ b/api_docs/logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsExplorer title: "logsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the logsExplorer plugin -date: 2025-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsExplorer'] --- import logsExplorerObj from './logs_explorer.devdocs.json'; diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index 855aaf0d7abd4..ff96d0695039f 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-01-06 +date: 2025-01-07 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 4e174c25b0391..49499625c5470 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-01-06 +date: 2025-01-07 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 01b18788bf71b..00cb9dbbdc06e 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-01-06 +date: 2025-01-07 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 13b82fbaf57f4..7d4585cde447d 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-01-06 +date: 2025-01-07 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 516854be97372..94d97191bb62f 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-01-06 +date: 2025-01-07 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 2a03ed224c795..5d55dedb23368 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-01-06 +date: 2025-01-07 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 1840152196e1a..219c5fb2c9bbe 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-01-06 +date: 2025-01-07 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 d2794e4f2cb3f..44cc33113ed8c 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-01-06 +date: 2025-01-07 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 9323261187c43..caca0626d1fb3 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-01-06 +date: 2025-01-07 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 ef7f3b5a5b2aa..b940fb22d298a 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-01-06 +date: 2025-01-07 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 5ce77e1421249..a783d58693eb6 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-01-06 +date: 2025-01-07 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 bed63ae2a69ab..93abd6f54923f 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-01-06 +date: 2025-01-07 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 857b7fa68245c..d1787b9a2fdd2 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-01-06 +date: 2025-01-07 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 974a773bb0a99..70f49f7d965ec 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-01-06 +date: 2025-01-07 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 96a3f01b540c4..8aae4a9c0a7d3 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-01-06 +date: 2025-01-07 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 f55060272e262..1d0f7ba3a70d2 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-01-06 +date: 2025-01-07 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 32faf646dc065..5be602694fd32 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-01-06 +date: 2025-01-07 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 1499dd4140235..a0754c8eb8993 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-01-06 +date: 2025-01-07 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 e86cceaf8db37..579266f7e2e95 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-01-06 +date: 2025-01-07 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 9ef674fe15b97..45a9dc417abef 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-01-06 +date: 2025-01-07 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 76b6cf6413e78..9985389a94efa 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-01-06 +date: 2025-01-07 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 8967a29dff395..a7d3dd8475719 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-01-06 +date: 2025-01-07 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 6b8c48b72bf30..cc4aa06040dac 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -15,19 +15,19 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Count | Plugins or Packages with a
public API | Number of teams | |--------------|----------|------------------------| -| 909 | 773 | 43 | +| 910 | 774 | 43 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 54840 | 253 | 41213 | 2631 | +| 54864 | 253 | 41236 | 2632 | ## Plugin Directory | Plugin name           | Maintaining team | Description | API Cnt | Any Cnt | Missing
comments | Missing
exports | |--------------|----------------|-----------|--------------|----------|---------------|--------| -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 321 | 0 | 315 | 37 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 331 | 0 | 325 | 37 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 | | | [@elastic/obs-ai-assistant](https://github.com/orgs/elastic/teams/obs-ai-assistant) | - | 4 | 0 | 4 | 1 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | AIOps plugin maintained by ML team. | 72 | 0 | 8 | 2 | @@ -55,7 +55,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | Add custom data integrations so they can be displayed in the Fleet integrations app | 268 | 0 | 249 | 1 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds the Dashboard app to Kibana | 113 | 0 | 109 | 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. | 3208 | 31 | 2593 | 25 | +| | [@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. | 3207 | 31 | 2592 | 25 | | | [@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 | @@ -189,6 +189,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 22 | 0 | 22 | 1 | | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | Plugin to provide access to and rendering of python notebooks for use in the persistent developer console. | 10 | 0 | 10 | 1 | | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 13 | 0 | 13 | 0 | +| | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 5 | 0 | 5 | 0 | | searchprofiler | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 0 | 0 | 0 | 0 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides authentication and authorization features, and exposes functionality to understand the capabilities of the currently authenticated user. | 461 | 0 | 238 | 0 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 191 | 0 | 123 | 34 | @@ -216,7 +217,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 236 | 1 | 192 | 18 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the transforms features provided by Elastic. Transforms enable you to convert existing Elasticsearch indices into summarized indices, which provide opportunities for new insights and analytics. | 4 | 0 | 4 | 1 | | translations | [@elastic/kibana-localization](https://github.com/orgs/elastic/teams/kibana-localization) | - | 0 | 0 | 0 | 0 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 594 | 1 | 568 | 51 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 596 | 1 | 570 | 51 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Adds UI Actions service to Kibana | 156 | 0 | 110 | 9 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Extends UI Actions plugin with more functionality | 212 | 0 | 145 | 11 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin contains services reliant on the plugin lifecycle for the unified doc viewer component (see @kbn/unified-doc-viewer). | 15 | 0 | 10 | 3 | @@ -248,7 +249,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Package name           | Maintaining team | Description | API Cnt | Any Cnt | Missing
comments | Missing
exports | |--------------|----------------|-----------|--------------|----------|---------------|--------| -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 14 | 0 | 14 | 0 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 17 | 0 | 17 | 0 | | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 66 | 0 | 66 | 1 | | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 3 | 0 | 3 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 11 | 0 | 3 | 0 | @@ -261,7 +262,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 243 | 0 | 240 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 33 | 0 | 33 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 32 | 0 | 15 | 1 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 302 | 0 | 286 | 4 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 303 | 0 | 287 | 4 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 73 | 0 | 73 | 2 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 1 | 0 | 0 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 18 | 0 | 18 | 0 | @@ -286,7 +287,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 2 | 0 | | | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 93 | 1 | 93 | 0 | | | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 122 | 0 | 120 | 1 | -| | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 27 | 0 | 18 | 6 | +| | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 28 | 0 | 18 | 7 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 40 | 0 | 17 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 | | | [@elastic/appex-qa](https://github.com/orgs/elastic/teams/appex-qa) | - | 22 | 0 | 11 | 0 | @@ -562,7 +563,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 75 | 0 | 73 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 126 | 3 | 126 | 0 | | | [@elastic/appex-ai-infra](https://github.com/orgs/elastic/teams/appex-ai-infra) | - | 150 | 0 | 46 | 4 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 30 | 0 | 30 | 0 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 33 | 0 | 33 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 7 | 1 | 7 | 1 | | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 9 | 0 | 9 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 52 | 12 | 43 | 0 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index 39e6744682010..2f657643dbfcf 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-01-06 +date: 2025-01-07 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 628dc34057e52..48084f4dd0f2c 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-01-06 +date: 2025-01-07 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 0ce54a972c472..0bffb6ab13c7d 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-01-06 +date: 2025-01-07 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 6fc75a2449e65..70b590e58d96b 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-01-06 +date: 2025-01-07 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 b259da8018a34..65c810b91524f 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-01-06 +date: 2025-01-07 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 cbd0150289874..1ef36f2cbc696 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-01-06 +date: 2025-01-07 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 6d38dfe1907f2..6299a7b1535f5 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-01-06 +date: 2025-01-07 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 f914b0f0328d4..be3a06c726099 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-01-06 +date: 2025-01-07 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 39b219fbbdca0..d3848504986c8 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-01-06 +date: 2025-01-07 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 c543cb229037a..39957ba113fa3 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-01-06 +date: 2025-01-07 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 ac1c6b528e50a..976768d78012f 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-01-06 +date: 2025-01-07 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 d17792a7e5159..774f6c281c3ae 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-01-06 +date: 2025-01-07 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 4c79e72c6c216..5f948c6746efc 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-01-06 +date: 2025-01-07 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 e868fd8e2a2ea..7ca0689bc9261 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-01-06 +date: 2025-01-07 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 9f90447ded23d..98800f81d9ad9 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-01-06 +date: 2025-01-07 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 b4ba286622e89..8bbbcc7c6e9e0 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-01-06 +date: 2025-01-07 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 4a6e24b0ed06e..beb4f77a9a466 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-01-06 +date: 2025-01-07 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 df8e430047596..c20d8f7fb520d 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-01-06 +date: 2025-01-07 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 9efc37fadf9b4..c7a9f64b78660 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-01-06 +date: 2025-01-07 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 1454245591cdb..c32ae651cdd6d 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-01-06 +date: 2025-01-07 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 dd733eb79f057..ed963f9e2c5b4 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchHomepage'] --- import searchHomepageObj from './search_homepage.devdocs.json'; diff --git a/api_docs/search_indices.devdocs.json b/api_docs/search_indices.devdocs.json index 83e5d3a6b113f..bd488d65a8f2d 100644 --- a/api_docs/search_indices.devdocs.json +++ b/api_docs/search_indices.devdocs.json @@ -85,7 +85,7 @@ "label": "startAppId", "description": [], "signature": [ - "\"fleet\" | \"graph\" | \"ml\" | \"monitoring\" | \"profiling\" | \"metrics\" | \"management\" | \"apm\" | \"synthetics\" | \"ux\" | \"canvas\" | \"logs\" | \"dashboards\" | \"slo\" | \"observabilityAIAssistant\" | \"home\" | \"integrations\" | \"discover\" | \"observability-overview\" | \"streams\" | \"appSearch\" | \"inventory\" | \"dev_tools\" | \"maps\" | \"visualize\" | \"dev_tools:console\" | \"dev_tools:searchprofiler\" | \"dev_tools:painless_lab\" | \"dev_tools:grokdebugger\" | \"ml:notifications\" | \"ml:nodes\" | \"ml:overview\" | \"ml:memoryUsage\" | \"ml:settings\" | \"ml:dataVisualizer\" | \"ml:logPatternAnalysis\" | \"ml:logRateAnalysis\" | \"ml:singleMetricViewer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:dataDrift\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:esqlDataVisualizer\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\" | \"ml:suppliedConfigurations\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:cross_cluster_replication\" | \"management:dataViews\" | \"management:spaces\" | \"management:settings\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:data_quality\" | \"management:filesManagement\" | \"management:pipelines\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:securityAiAssistantManagement\" | \"management:observabilityAiAssistantManagement\" | \"management:api_keys\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchInferenceEndpoints\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"appSearch:engines\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\" | \"observability-logs-explorer\" | \"last-used-logs-viewer\" | \"observabilityOnboarding\" | \"logs:settings\" | \"logs:stream\" | \"logs:log-categories\" | \"logs:anomalies\" | \"observability-overview:cases\" | \"observability-overview:alerts\" | \"observability-overview:rules\" | \"observability-overview:cases_create\" | \"observability-overview:cases_configure\" | \"metrics:settings\" | \"metrics:hosts\" | \"metrics:inventory\" | \"metrics:metrics-explorer\" | \"metrics:assetDetails\" | \"apm:services\" | \"apm:traces\" | \"apm:dependencies\" | \"apm:service-map\" | \"apm:settings\" | \"apm:service-groups-list\" | \"apm:storage-explorer\" | \"synthetics:overview\" | \"synthetics:certificates\" | \"profiling:functions\" | \"profiling:stacktraces\" | \"profiling:flamegraphs\" | \"inventory:datastreams\" | \"streams:overview\" | \"securitySolutionUI\" | \"securitySolutionUI:\" | \"securitySolutionUI:cases\" | \"securitySolutionUI:alerts\" | \"securitySolutionUI:rules\" | \"securitySolutionUI:policy\" | \"securitySolutionUI:overview\" | \"securitySolutionUI:dashboards\" | \"securitySolutionUI:kubernetes\" | \"securitySolutionUI:cases_create\" | \"securitySolutionUI:cases_configure\" | \"securitySolutionUI:hosts\" | \"securitySolutionUI:users\" | \"securitySolutionUI:cloud_defend-policies\" | \"securitySolutionUI:cloud_security_posture-dashboard\" | \"securitySolutionUI:cloud_security_posture-findings\" | \"securitySolutionUI:cloud_security_posture-benchmarks\" | \"securitySolutionUI:network\" | \"securitySolutionUI:data_quality\" | \"securitySolutionUI:explore\" | \"securitySolutionUI:assets\" | \"securitySolutionUI:cloud_defend\" | \"securitySolutionUI:notes\" | \"securitySolutionUI:administration\" | \"securitySolutionUI:asset_inventory\" | \"securitySolutionUI:attack_discovery\" | \"securitySolutionUI:blocklist\" | \"securitySolutionUI:cloud_security_posture-rules\" | \"securitySolutionUI:detections\" | \"securitySolutionUI:detection_response\" | \"securitySolutionUI:endpoints\" | \"securitySolutionUI:event_filters\" | \"securitySolutionUI:exceptions\" | \"securitySolutionUI:host_isolation_exceptions\" | \"securitySolutionUI:hosts-all\" | \"securitySolutionUI:hosts-anomalies\" | \"securitySolutionUI:hosts-risk\" | \"securitySolutionUI:hosts-events\" | \"securitySolutionUI:hosts-sessions\" | \"securitySolutionUI:hosts-uncommon_processes\" | \"securitySolutionUI:investigations\" | \"securitySolutionUI:get_started\" | \"securitySolutionUI:machine_learning-landing\" | \"securitySolutionUI:network-anomalies\" | \"securitySolutionUI:network-dns\" | \"securitySolutionUI:network-events\" | \"securitySolutionUI:network-flows\" | \"securitySolutionUI:network-http\" | \"securitySolutionUI:network-tls\" | \"securitySolutionUI:response_actions_history\" | \"securitySolutionUI:rules-add\" | \"securitySolutionUI:rules-create\" | \"securitySolutionUI:rules-landing\" | \"securitySolutionUI:siem_migrations-rules\" | \"securitySolutionUI:threat_intelligence\" | \"securitySolutionUI:timelines\" | \"securitySolutionUI:timelines-templates\" | \"securitySolutionUI:trusted_apps\" | \"securitySolutionUI:users-all\" | \"securitySolutionUI:users-anomalies\" | \"securitySolutionUI:users-authentications\" | \"securitySolutionUI:users-events\" | \"securitySolutionUI:users-risk\" | \"securitySolutionUI:entity_analytics\" | \"securitySolutionUI:entity_analytics-management\" | \"securitySolutionUI:entity_analytics-asset-classification\" | \"securitySolutionUI:entity_analytics-entity_store_management\" | \"securitySolutionUI:coverage-overview\" | \"fleet:settings\" | \"fleet:agents\" | \"fleet:policies\" | \"fleet:data_streams\" | \"fleet:enrollment_tokens\" | \"fleet:uninstall_tokens\"" + "\"fleet\" | \"graph\" | \"ml\" | \"monitoring\" | \"profiling\" | \"metrics\" | \"management\" | \"apm\" | \"synthetics\" | \"ux\" | \"canvas\" | \"logs\" | \"dashboards\" | \"slo\" | \"observabilityAIAssistant\" | \"home\" | \"integrations\" | \"discover\" | \"observability-overview\" | \"streams\" | \"appSearch\" | \"inventory\" | \"dev_tools\" | \"maps\" | \"visualize\" | \"dev_tools:console\" | \"dev_tools:searchprofiler\" | \"dev_tools:painless_lab\" | \"dev_tools:grokdebugger\" | \"ml:notifications\" | \"ml:nodes\" | \"ml:overview\" | \"ml:memoryUsage\" | \"ml:settings\" | \"ml:dataVisualizer\" | \"ml:logPatternAnalysis\" | \"ml:logRateAnalysis\" | \"ml:singleMetricViewer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:dataDrift\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:esqlDataVisualizer\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\" | \"ml:suppliedConfigurations\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:cross_cluster_replication\" | \"management:dataViews\" | \"management:spaces\" | \"management:settings\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:data_quality\" | \"management:filesManagement\" | \"management:pipelines\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:securityAiAssistantManagement\" | \"management:observabilityAiAssistantManagement\" | \"management:api_keys\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchInferenceEndpoints\" | \"searchSynonyms\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"appSearch:engines\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"searchSynonyms:synonyms\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\" | \"observability-logs-explorer\" | \"last-used-logs-viewer\" | \"observabilityOnboarding\" | \"logs:settings\" | \"logs:stream\" | \"logs:log-categories\" | \"logs:anomalies\" | \"observability-overview:cases\" | \"observability-overview:alerts\" | \"observability-overview:rules\" | \"observability-overview:cases_create\" | \"observability-overview:cases_configure\" | \"metrics:settings\" | \"metrics:hosts\" | \"metrics:inventory\" | \"metrics:metrics-explorer\" | \"metrics:assetDetails\" | \"apm:services\" | \"apm:traces\" | \"apm:dependencies\" | \"apm:service-map\" | \"apm:settings\" | \"apm:service-groups-list\" | \"apm:storage-explorer\" | \"synthetics:overview\" | \"synthetics:certificates\" | \"profiling:functions\" | \"profiling:stacktraces\" | \"profiling:flamegraphs\" | \"inventory:datastreams\" | \"streams:overview\" | \"securitySolutionUI\" | \"securitySolutionUI:\" | \"securitySolutionUI:cases\" | \"securitySolutionUI:alerts\" | \"securitySolutionUI:rules\" | \"securitySolutionUI:policy\" | \"securitySolutionUI:overview\" | \"securitySolutionUI:dashboards\" | \"securitySolutionUI:kubernetes\" | \"securitySolutionUI:cases_create\" | \"securitySolutionUI:cases_configure\" | \"securitySolutionUI:hosts\" | \"securitySolutionUI:users\" | \"securitySolutionUI:cloud_defend-policies\" | \"securitySolutionUI:cloud_security_posture-dashboard\" | \"securitySolutionUI:cloud_security_posture-findings\" | \"securitySolutionUI:cloud_security_posture-benchmarks\" | \"securitySolutionUI:network\" | \"securitySolutionUI:data_quality\" | \"securitySolutionUI:explore\" | \"securitySolutionUI:assets\" | \"securitySolutionUI:cloud_defend\" | \"securitySolutionUI:notes\" | \"securitySolutionUI:administration\" | \"securitySolutionUI:asset_inventory\" | \"securitySolutionUI:attack_discovery\" | \"securitySolutionUI:blocklist\" | \"securitySolutionUI:cloud_security_posture-rules\" | \"securitySolutionUI:detections\" | \"securitySolutionUI:detection_response\" | \"securitySolutionUI:endpoints\" | \"securitySolutionUI:event_filters\" | \"securitySolutionUI:exceptions\" | \"securitySolutionUI:host_isolation_exceptions\" | \"securitySolutionUI:hosts-all\" | \"securitySolutionUI:hosts-anomalies\" | \"securitySolutionUI:hosts-risk\" | \"securitySolutionUI:hosts-events\" | \"securitySolutionUI:hosts-sessions\" | \"securitySolutionUI:hosts-uncommon_processes\" | \"securitySolutionUI:investigations\" | \"securitySolutionUI:get_started\" | \"securitySolutionUI:machine_learning-landing\" | \"securitySolutionUI:network-anomalies\" | \"securitySolutionUI:network-dns\" | \"securitySolutionUI:network-events\" | \"securitySolutionUI:network-flows\" | \"securitySolutionUI:network-http\" | \"securitySolutionUI:network-tls\" | \"securitySolutionUI:response_actions_history\" | \"securitySolutionUI:rules-add\" | \"securitySolutionUI:rules-create\" | \"securitySolutionUI:rules-landing\" | \"securitySolutionUI:siem_migrations-rules\" | \"securitySolutionUI:threat_intelligence\" | \"securitySolutionUI:timelines\" | \"securitySolutionUI:timelines-templates\" | \"securitySolutionUI:trusted_apps\" | \"securitySolutionUI:users-all\" | \"securitySolutionUI:users-anomalies\" | \"securitySolutionUI:users-authentications\" | \"securitySolutionUI:users-events\" | \"securitySolutionUI:users-risk\" | \"securitySolutionUI:entity_analytics\" | \"securitySolutionUI:entity_analytics-management\" | \"securitySolutionUI:entity_analytics-asset-classification\" | \"securitySolutionUI:entity_analytics-entity_store_management\" | \"securitySolutionUI:coverage-overview\" | \"fleet:settings\" | \"fleet:agents\" | \"fleet:policies\" | \"fleet:data_streams\" | \"fleet:enrollment_tokens\" | \"fleet:uninstall_tokens\"" ], "path": "x-pack/solutions/search/plugins/search_indices/public/types.ts", "deprecated": false, diff --git a/api_docs/search_indices.mdx b/api_docs/search_indices.mdx index e749f86211a81..04892cb51272a 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-01-06 +date: 2025-01-07 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 fa24142edd840..92451d1b578ce 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchInferenceEndpoints'] --- import searchInferenceEndpointsObj from './search_inference_endpoints.devdocs.json'; diff --git a/api_docs/search_navigation.devdocs.json b/api_docs/search_navigation.devdocs.json index 8a22d863b1a1f..54d0e178e5080 100644 --- a/api_docs/search_navigation.devdocs.json +++ b/api_docs/search_navigation.devdocs.json @@ -132,7 +132,7 @@ "label": "link", "description": [], "signature": [ - "\"fleet\" | \"graph\" | \"ml\" | \"monitoring\" | \"profiling\" | \"metrics\" | \"management\" | \"apm\" | \"synthetics\" | \"ux\" | \"canvas\" | \"logs\" | \"dashboards\" | \"slo\" | \"observabilityAIAssistant\" | \"home\" | \"integrations\" | \"discover\" | \"observability-overview\" | \"streams\" | \"appSearch\" | \"inventory\" | \"dev_tools\" | \"maps\" | \"visualize\" | \"dev_tools:console\" | \"dev_tools:searchprofiler\" | \"dev_tools:painless_lab\" | \"dev_tools:grokdebugger\" | \"ml:notifications\" | \"ml:nodes\" | \"ml:overview\" | \"ml:memoryUsage\" | \"ml:settings\" | \"ml:dataVisualizer\" | \"ml:logPatternAnalysis\" | \"ml:logRateAnalysis\" | \"ml:singleMetricViewer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:dataDrift\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:esqlDataVisualizer\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\" | \"ml:suppliedConfigurations\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:cross_cluster_replication\" | \"management:dataViews\" | \"management:spaces\" | \"management:settings\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:data_quality\" | \"management:filesManagement\" | \"management:pipelines\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:securityAiAssistantManagement\" | \"management:observabilityAiAssistantManagement\" | \"management:api_keys\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchInferenceEndpoints\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"appSearch:engines\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\" | \"observability-logs-explorer\" | \"last-used-logs-viewer\" | \"observabilityOnboarding\" | \"logs:settings\" | \"logs:stream\" | \"logs:log-categories\" | \"logs:anomalies\" | \"observability-overview:cases\" | \"observability-overview:alerts\" | \"observability-overview:rules\" | \"observability-overview:cases_create\" | \"observability-overview:cases_configure\" | \"metrics:settings\" | \"metrics:hosts\" | \"metrics:inventory\" | \"metrics:metrics-explorer\" | \"metrics:assetDetails\" | \"apm:services\" | \"apm:traces\" | \"apm:dependencies\" | \"apm:service-map\" | \"apm:settings\" | \"apm:service-groups-list\" | \"apm:storage-explorer\" | \"synthetics:overview\" | \"synthetics:certificates\" | \"profiling:functions\" | \"profiling:stacktraces\" | \"profiling:flamegraphs\" | \"inventory:datastreams\" | \"streams:overview\" | \"securitySolutionUI\" | \"securitySolutionUI:\" | \"securitySolutionUI:cases\" | \"securitySolutionUI:alerts\" | \"securitySolutionUI:rules\" | \"securitySolutionUI:policy\" | \"securitySolutionUI:overview\" | \"securitySolutionUI:dashboards\" | \"securitySolutionUI:kubernetes\" | \"securitySolutionUI:cases_create\" | \"securitySolutionUI:cases_configure\" | \"securitySolutionUI:hosts\" | \"securitySolutionUI:users\" | \"securitySolutionUI:cloud_defend-policies\" | \"securitySolutionUI:cloud_security_posture-dashboard\" | \"securitySolutionUI:cloud_security_posture-findings\" | \"securitySolutionUI:cloud_security_posture-benchmarks\" | \"securitySolutionUI:network\" | \"securitySolutionUI:data_quality\" | \"securitySolutionUI:explore\" | \"securitySolutionUI:assets\" | \"securitySolutionUI:cloud_defend\" | \"securitySolutionUI:notes\" | \"securitySolutionUI:administration\" | \"securitySolutionUI:asset_inventory\" | \"securitySolutionUI:attack_discovery\" | \"securitySolutionUI:blocklist\" | \"securitySolutionUI:cloud_security_posture-rules\" | \"securitySolutionUI:detections\" | \"securitySolutionUI:detection_response\" | \"securitySolutionUI:endpoints\" | \"securitySolutionUI:event_filters\" | \"securitySolutionUI:exceptions\" | \"securitySolutionUI:host_isolation_exceptions\" | \"securitySolutionUI:hosts-all\" | \"securitySolutionUI:hosts-anomalies\" | \"securitySolutionUI:hosts-risk\" | \"securitySolutionUI:hosts-events\" | \"securitySolutionUI:hosts-sessions\" | \"securitySolutionUI:hosts-uncommon_processes\" | \"securitySolutionUI:investigations\" | \"securitySolutionUI:get_started\" | \"securitySolutionUI:machine_learning-landing\" | \"securitySolutionUI:network-anomalies\" | \"securitySolutionUI:network-dns\" | \"securitySolutionUI:network-events\" | \"securitySolutionUI:network-flows\" | \"securitySolutionUI:network-http\" | \"securitySolutionUI:network-tls\" | \"securitySolutionUI:response_actions_history\" | \"securitySolutionUI:rules-add\" | \"securitySolutionUI:rules-create\" | \"securitySolutionUI:rules-landing\" | \"securitySolutionUI:siem_migrations-rules\" | \"securitySolutionUI:threat_intelligence\" | \"securitySolutionUI:timelines\" | \"securitySolutionUI:timelines-templates\" | \"securitySolutionUI:trusted_apps\" | \"securitySolutionUI:users-all\" | \"securitySolutionUI:users-anomalies\" | \"securitySolutionUI:users-authentications\" | \"securitySolutionUI:users-events\" | \"securitySolutionUI:users-risk\" | \"securitySolutionUI:entity_analytics\" | \"securitySolutionUI:entity_analytics-management\" | \"securitySolutionUI:entity_analytics-asset-classification\" | \"securitySolutionUI:entity_analytics-entity_store_management\" | \"securitySolutionUI:coverage-overview\" | \"fleet:settings\" | \"fleet:agents\" | \"fleet:policies\" | \"fleet:data_streams\" | \"fleet:enrollment_tokens\" | \"fleet:uninstall_tokens\"" + "\"fleet\" | \"graph\" | \"ml\" | \"monitoring\" | \"profiling\" | \"metrics\" | \"management\" | \"apm\" | \"synthetics\" | \"ux\" | \"canvas\" | \"logs\" | \"dashboards\" | \"slo\" | \"observabilityAIAssistant\" | \"home\" | \"integrations\" | \"discover\" | \"observability-overview\" | \"streams\" | \"appSearch\" | \"inventory\" | \"dev_tools\" | \"maps\" | \"visualize\" | \"dev_tools:console\" | \"dev_tools:searchprofiler\" | \"dev_tools:painless_lab\" | \"dev_tools:grokdebugger\" | \"ml:notifications\" | \"ml:nodes\" | \"ml:overview\" | \"ml:memoryUsage\" | \"ml:settings\" | \"ml:dataVisualizer\" | \"ml:logPatternAnalysis\" | \"ml:logRateAnalysis\" | \"ml:singleMetricViewer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:dataDrift\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:esqlDataVisualizer\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\" | \"ml:suppliedConfigurations\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:cross_cluster_replication\" | \"management:dataViews\" | \"management:spaces\" | \"management:settings\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:data_quality\" | \"management:filesManagement\" | \"management:pipelines\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:securityAiAssistantManagement\" | \"management:observabilityAiAssistantManagement\" | \"management:api_keys\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchInferenceEndpoints\" | \"searchSynonyms\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"appSearch:engines\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"searchSynonyms:synonyms\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\" | \"observability-logs-explorer\" | \"last-used-logs-viewer\" | \"observabilityOnboarding\" | \"logs:settings\" | \"logs:stream\" | \"logs:log-categories\" | \"logs:anomalies\" | \"observability-overview:cases\" | \"observability-overview:alerts\" | \"observability-overview:rules\" | \"observability-overview:cases_create\" | \"observability-overview:cases_configure\" | \"metrics:settings\" | \"metrics:hosts\" | \"metrics:inventory\" | \"metrics:metrics-explorer\" | \"metrics:assetDetails\" | \"apm:services\" | \"apm:traces\" | \"apm:dependencies\" | \"apm:service-map\" | \"apm:settings\" | \"apm:service-groups-list\" | \"apm:storage-explorer\" | \"synthetics:overview\" | \"synthetics:certificates\" | \"profiling:functions\" | \"profiling:stacktraces\" | \"profiling:flamegraphs\" | \"inventory:datastreams\" | \"streams:overview\" | \"securitySolutionUI\" | \"securitySolutionUI:\" | \"securitySolutionUI:cases\" | \"securitySolutionUI:alerts\" | \"securitySolutionUI:rules\" | \"securitySolutionUI:policy\" | \"securitySolutionUI:overview\" | \"securitySolutionUI:dashboards\" | \"securitySolutionUI:kubernetes\" | \"securitySolutionUI:cases_create\" | \"securitySolutionUI:cases_configure\" | \"securitySolutionUI:hosts\" | \"securitySolutionUI:users\" | \"securitySolutionUI:cloud_defend-policies\" | \"securitySolutionUI:cloud_security_posture-dashboard\" | \"securitySolutionUI:cloud_security_posture-findings\" | \"securitySolutionUI:cloud_security_posture-benchmarks\" | \"securitySolutionUI:network\" | \"securitySolutionUI:data_quality\" | \"securitySolutionUI:explore\" | \"securitySolutionUI:assets\" | \"securitySolutionUI:cloud_defend\" | \"securitySolutionUI:notes\" | \"securitySolutionUI:administration\" | \"securitySolutionUI:asset_inventory\" | \"securitySolutionUI:attack_discovery\" | \"securitySolutionUI:blocklist\" | \"securitySolutionUI:cloud_security_posture-rules\" | \"securitySolutionUI:detections\" | \"securitySolutionUI:detection_response\" | \"securitySolutionUI:endpoints\" | \"securitySolutionUI:event_filters\" | \"securitySolutionUI:exceptions\" | \"securitySolutionUI:host_isolation_exceptions\" | \"securitySolutionUI:hosts-all\" | \"securitySolutionUI:hosts-anomalies\" | \"securitySolutionUI:hosts-risk\" | \"securitySolutionUI:hosts-events\" | \"securitySolutionUI:hosts-sessions\" | \"securitySolutionUI:hosts-uncommon_processes\" | \"securitySolutionUI:investigations\" | \"securitySolutionUI:get_started\" | \"securitySolutionUI:machine_learning-landing\" | \"securitySolutionUI:network-anomalies\" | \"securitySolutionUI:network-dns\" | \"securitySolutionUI:network-events\" | \"securitySolutionUI:network-flows\" | \"securitySolutionUI:network-http\" | \"securitySolutionUI:network-tls\" | \"securitySolutionUI:response_actions_history\" | \"securitySolutionUI:rules-add\" | \"securitySolutionUI:rules-create\" | \"securitySolutionUI:rules-landing\" | \"securitySolutionUI:siem_migrations-rules\" | \"securitySolutionUI:threat_intelligence\" | \"securitySolutionUI:timelines\" | \"securitySolutionUI:timelines-templates\" | \"securitySolutionUI:trusted_apps\" | \"securitySolutionUI:users-all\" | \"securitySolutionUI:users-anomalies\" | \"securitySolutionUI:users-authentications\" | \"securitySolutionUI:users-events\" | \"securitySolutionUI:users-risk\" | \"securitySolutionUI:entity_analytics\" | \"securitySolutionUI:entity_analytics-management\" | \"securitySolutionUI:entity_analytics-asset-classification\" | \"securitySolutionUI:entity_analytics-entity_store_management\" | \"securitySolutionUI:coverage-overview\" | \"fleet:settings\" | \"fleet:agents\" | \"fleet:policies\" | \"fleet:data_streams\" | \"fleet:enrollment_tokens\" | \"fleet:uninstall_tokens\"" ], "path": "x-pack/solutions/search/plugins/search_solution/search_navigation/public/types.ts", "deprecated": false, diff --git a/api_docs/search_navigation.mdx b/api_docs/search_navigation.mdx index 4052c9c6cbd20..07818d272280d 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-01-06 +date: 2025-01-07 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 3ae093c232372..63696023cec89 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-01-06 +date: 2025-01-07 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 c8073f2bf6ac7..f4c296a56e942 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchPlayground'] --- import searchPlaygroundObj from './search_playground.devdocs.json'; diff --git a/api_docs/search_synonyms.devdocs.json b/api_docs/search_synonyms.devdocs.json new file mode 100644 index 0000000000000..ed54b2cd5a60a --- /dev/null +++ b/api_docs/search_synonyms.devdocs.json @@ -0,0 +1,98 @@ +{ + "id": "searchSynonyms", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [], + "setup": { + "parentPluginId": "searchSynonyms", + "id": "def-server.SearchSynonymsPluginSetup", + "type": "Interface", + "tags": [], + "label": "SearchSynonymsPluginSetup", + "description": [], + "path": "x-pack/solutions/search/plugins/search_synonyms/common/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "lifecycle": "setup", + "initialIsOpen": true + }, + "start": { + "parentPluginId": "searchSynonyms", + "id": "def-server.SearchSynonymsPluginStart", + "type": "Interface", + "tags": [], + "label": "SearchSynonymsPluginStart", + "description": [], + "path": "x-pack/solutions/search/plugins/search_synonyms/common/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "lifecycle": "start", + "initialIsOpen": true + } + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [ + { + "parentPluginId": "searchSynonyms", + "id": "def-common.PLUGIN_ID", + "type": "string", + "tags": [], + "label": "PLUGIN_ID", + "description": [], + "signature": [ + "\"searchSynonyms\"" + ], + "path": "x-pack/solutions/search/plugins/search_synonyms/common/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "searchSynonyms", + "id": "def-common.PLUGIN_NAME", + "type": "string", + "tags": [], + "label": "PLUGIN_NAME", + "description": [], + "signature": [ + "\"Synonyms\"" + ], + "path": "x-pack/solutions/search/plugins/search_synonyms/common/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "searchSynonyms", + "id": "def-common.PLUGIN_TITLE", + "type": "string", + "tags": [], + "label": "PLUGIN_TITLE", + "description": [], + "path": "x-pack/solutions/search/plugins/search_synonyms/common/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/search_synonyms.mdx b/api_docs/search_synonyms.mdx new file mode 100644 index 0000000000000..957f8489ec88d --- /dev/null +++ b/api_docs/search_synonyms.mdx @@ -0,0 +1,38 @@ +--- +#### +#### This document is auto-generated and is meant to be viewed inside our experimental, new docs system. +#### Reach out in #docs-engineering for more info. +#### +id: kibSearchSynonymsPluginApi +slug: /kibana-dev-docs/api/searchSynonyms +title: "searchSynonyms" +image: https://source.unsplash.com/400x175/?github +description: API docs for the searchSynonyms plugin +date: 2025-01-07 +tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchSynonyms'] +--- +import searchSynonymsObj from './search_synonyms.devdocs.json'; + + + +Contact [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 5 | 0 | 5 | 0 | + +## Server + +### Setup + + +### Start + + +## Common + +### Consts, variables and types + + diff --git a/api_docs/security.mdx b/api_docs/security.mdx index 9506b5920dd0b..562a132a309af 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index 157d53957e0ae..997fc8af90d4b 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-01-06 +date: 2025-01-07 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 ba886692b1ec2..426e12ca2d632 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-01-06 +date: 2025-01-07 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 44b166d6a82ce..8a415ed008c9a 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-01-06 +date: 2025-01-07 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 6b68406dc9354..31faf536bae88 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-01-06 +date: 2025-01-07 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 412af499d095a..b0b61a3bb51d6 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-01-06 +date: 2025-01-07 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 6e6b3b96c2300..d282635810f07 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-01-06 +date: 2025-01-07 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 03627705d5fa0..84ea144ddbda5 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-01-06 +date: 2025-01-07 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 37f5e7d6ee561..96f5e242c792a 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-01-06 +date: 2025-01-07 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 413468f5b0e10..4337e76179a76 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-01-06 +date: 2025-01-07 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 25189af93c837..ac7d52a2dbd91 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-01-06 +date: 2025-01-07 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 d7b580d91e732..e98eb6f95fd26 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-01-06 +date: 2025-01-07 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 77f71dd37fe82..e341350f812a6 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-01-06 +date: 2025-01-07 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 3bfd4bb5ca3f6..5dbe56859e041 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-01-06 +date: 2025-01-07 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 a937936d3ac13..c59e57329ac30 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-01-06 +date: 2025-01-07 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 f2704a8979333..c7401bf1f9fcb 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'streamsApp'] --- import streamsAppObj from './streams_app.devdocs.json'; diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index 5a15bbc830f4d..7585226764495 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-01-06 +date: 2025-01-07 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 7a0e4178ffbd3..62e15ac4e36e5 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-01-06 +date: 2025-01-07 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 6fce2b0decb40..fede394607060 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-01-06 +date: 2025-01-07 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 6c681e6006aa7..4e7cdc8ce8f92 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-01-06 +date: 2025-01-07 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 be950888f324d..be332642e8820 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-01-06 +date: 2025-01-07 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 dd0a34fa44921..ac7f6f0fe4a8c 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-01-06 +date: 2025-01-07 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 6958374123254..95c5be62cc6f6 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.devdocs.json b/api_docs/triggers_actions_ui.devdocs.json index be8f37831d040..1d5ecf4621c4e 100644 --- a/api_docs/triggers_actions_ui.devdocs.json +++ b/api_docs/triggers_actions_ui.devdocs.json @@ -2573,6 +2573,20 @@ "path": "x-pack/platform/plugins/shared/actions/common/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "triggersActionsUi", + "id": "def-public.ActionType.subFeature", + "type": "string", + "tags": [], + "label": "subFeature", + "description": [], + "signature": [ + "\"endpointSecurity\" | undefined" + ], + "path": "x-pack/platform/plugins/shared/actions/common/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -2923,6 +2937,20 @@ "path": "src/platform/packages/shared/kbn-alerts-ui-shared/src/common/types/action_types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "triggersActionsUi", + "id": "def-public.ActionTypeModel.subFeature", + "type": "string", + "tags": [], + "label": "subFeature", + "description": [], + "signature": [ + "\"endpointSecurity\" | undefined" + ], + "path": "src/platform/packages/shared/kbn-alerts-ui-shared/src/common/types/action_types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index 20fc5d790b137..6eee03ba9f2e3 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] --- import triggersActionsUiObj from './triggers_actions_ui.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 594 | 1 | 568 | 51 | +| 596 | 1 | 570 | 51 | ## Client diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index 4dd60aa988b78..bdaf56c4c87d2 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-01-06 +date: 2025-01-07 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 8f7f24ddc3767..1eaa3c7f2ac0e 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-01-06 +date: 2025-01-07 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 99091aa3be915..d4c86bf3436da 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-01-06 +date: 2025-01-07 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 559c1f6f61d5d..0ce4b6930c22d 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-01-06 +date: 2025-01-07 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 7521d398381d7..0bbb4d58df4a8 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-01-06 +date: 2025-01-07 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 beb4c66ffb893..88ff0acd3c9b7 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-01-06 +date: 2025-01-07 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 7ac48402362b9..9e2ef87d1eede 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-01-06 +date: 2025-01-07 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 d3f64c1bafd04..39f57a6dffd6a 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-01-06 +date: 2025-01-07 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 1886358a7485b..bb64afa28bcf7 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-01-06 +date: 2025-01-07 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 49b464e669514..1f2059605aeaf 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-01-06 +date: 2025-01-07 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 aac54df36c19d..441e8bdac1bb4 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-01-06 +date: 2025-01-07 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 7d6e1e75bb589..f5d55f8ea942f 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-01-06 +date: 2025-01-07 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 b85a32a73e1b4..b65ab105fbb49 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-01-06 +date: 2025-01-07 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 35dad0c3ef372..479b1c2880eca 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-01-06 +date: 2025-01-07 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 479e35620f4bc..29ff3087734a1 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-01-06 +date: 2025-01-07 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 9d2430565cc20..356a6ef822b4c 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-01-06 +date: 2025-01-07 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 783e37a1d0ebd..42047f0be01a8 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-01-06 +date: 2025-01-07 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 3baf59e2c35e0..781da67cb54b5 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-01-06 +date: 2025-01-07 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 4acce944948c7..dae613d30ff6d 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-01-06 +date: 2025-01-07 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 a26ee2126cec7..53603c2ea29f7 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index e6615166099eb..f5527cd7e6906 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-01-06 +date: 2025-01-07 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; diff --git a/config/serverless.yml b/config/serverless.yml index 6c7125d0e47f0..e7629c5053fa4 100644 --- a/config/serverless.yml +++ b/config/serverless.yml @@ -8,6 +8,7 @@ xpack.fleet.internal.activeAgentsSoftLimit: 25000 xpack.fleet.internal.onlyAllowAgentUpgradeToKnownVersions: true xpack.fleet.internal.retrySetupOnBoot: true xpack.fleet.internal.useMeteringApi: true +xpack.searchSynonyms.enabled: false ## Fine-tune the feature privileges. xpack.features.overrides: diff --git a/dev_docs/key_concepts/navigation.mdx b/dev_docs/key_concepts/navigation.mdx index def5e224d05cc..9232a8aa193b4 100644 --- a/dev_docs/key_concepts/navigation.mdx +++ b/dev_docs/key_concepts/navigation.mdx @@ -116,7 +116,7 @@ const MySPALink = () => ``` As it would be too much boilerplate to do this for each link in your app, there is a handy wrapper that helps with it: -[RedirectAppLinks](https://github.com/elastic/kibana/blob/main/packages/shared-ux/link/redirect_app/impl/src/redirect_app_links.tsx). +[RedirectAppLinks](https://github.com/elastic/kibana/blob/main/src/platform/packages/shared/shared-ux/link/redirect_app/impl/src/redirect_app_links.tsx). ```jsx const MyApp = () => diff --git a/dev_docs/key_concepts/performance/case_studies/case_study_top_level_imports.mdx b/dev_docs/key_concepts/performance/case_studies/case_study_top_level_imports.mdx index 3799f9085f595..9a84fb3bfea70 100644 --- a/dev_docs/key_concepts/performance/case_studies/case_study_top_level_imports.mdx +++ b/dev_docs/key_concepts/performance/case_studies/case_study_top_level_imports.mdx @@ -99,7 +99,7 @@ By converting each page to an async import, we were able to load each page async ### Other optimizations - Registration of some `start` services were conditional, and contain their own async calls. I removed those from the register helper, (which itself was a brute-force offload of code from the plugin, but still loaded every time), and loaded them async if the conditions apply. -- I moved flyouts, modals, expanding rows, and other conditionally-rendered components to `React.lazy` async modules, (using [`dynamic`](https://github.com/elastic/kibana/tree/main/packages/kbn-shared-ux-utility/src/dynamic) from [@kbn/shared-ux-utility](https://github.com/elastic/kibana/tree/main/packages/kbn-shared-ux-utility)). +- I moved flyouts, modals, expanding rows, and other conditionally-rendered components to `React.lazy` async modules, (using `dynamic` from `@kbn/shared-ux-utility`). - A lot of `export * from ...` exports were obscuring what code was actually being consumed. For example, [`public/shared.ts`](https://github.com/elastic/kibana/blob/bfc91b0cb035b39916a5efc64ace31e88a230ec5/x-pack/plugins/ml/public/shared.ts) was exporting everything from a lot of `common` files. - By [refactoring these exports](https://github.com/clintandrewhall/kibana/blob/c4790b6315662b940d0794faca0ddafd8b6faedc/x-pack/plugins/ml/public/shared.ts) to accurately reflect what is being consumed outside the `ml` plugin, we are able to track their consumption, (and also reduce the size of _that_ bundle). diff --git a/docs/developer/best-practices/navigation.asciidoc b/docs/developer/best-practices/navigation.asciidoc index d3584437bd759..0715dd7341fcf 100644 --- a/docs/developer/best-practices/navigation.asciidoc +++ b/docs/developer/best-practices/navigation.asciidoc @@ -120,7 +120,7 @@ const MySPALink = () => ---- As it would be too much boilerplate to do this for each {kib} link in your app, there is a handy wrapper that helps with it: -{kib-repo}tree/{branch}/packages/shared-ux/link/redirect_app/impl/src/redirect_app_links.tsx[RedirectAppLinks]. +{kib-repo}tree/{branch}/src/platform/packages/shared/shared-ux/link/redirect_app/impl/src/redirect_app_links.tsx[RedirectAppLinks]. [source,typescript jsx] ---- diff --git a/docs/developer/plugin-list.asciidoc b/docs/developer/plugin-list.asciidoc index c3c8483e90667..af970f58432b3 100644 --- a/docs/developer/plugin-list.asciidoc +++ b/docs/developer/plugin-list.asciidoc @@ -856,6 +856,10 @@ detailed information on how Elasticsearch executed the search request. People us to understand why a search request might be slow. +|{kib-repo}blob/{branch}/x-pack/solutions/search/plugins/search_synonyms/README.md[searchSynonyms] +|A plugin to manage synonyms in Elasticsearch through Synonyms APIs through Kibana. + + |{kib-repo}blob/{branch}/x-pack/platform/plugins/shared/security/README.md[security] |See Configuring security in Kibana. diff --git a/oas_docs/bundle.json b/oas_docs/bundle.json index 84ce538ee1311..067c970ba3da0 100644 --- a/oas_docs/bundle.json +++ b/oas_docs/bundle.json @@ -8595,6 +8595,7 @@ }, "/api/fleet/agent_download_sources": { "get": { + "description": "[Required authorization] Route required privileges: ANY of [fleet-agent-policies-read OR fleet-settings-read].", "operationId": "get-fleet-agent-download-sources", "parameters": [], "responses": { @@ -8690,6 +8691,7 @@ ] }, "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-settings-all].", "operationId": "post-fleet-agent-download-sources", "parameters": [ { @@ -8818,7 +8820,7 @@ }, "/api/fleet/agent_download_sources/{sourceId}": { "delete": { - "description": "Delete an agent binary download source by ID.", + "description": "Delete an agent binary download source by ID.

[Required authorization] Route required privileges: ALL of [fleet-settings-all].", "operationId": "delete-fleet-agent-download-sources-sourceid", "parameters": [ { @@ -8891,7 +8893,7 @@ ] }, "get": { - "description": "Get an agent binary download source by ID.", + "description": "Get an agent binary download source by ID.

[Required authorization] Route required privileges: ANY of [fleet-agent-policies-read OR fleet-settings-read].", "operationId": "get-fleet-agent-download-sources-sourceid", "parameters": [ { @@ -8981,7 +8983,7 @@ ] }, "put": { - "description": "Update an agent binary download source by ID.", + "description": "Update an agent binary download source by ID.

[Required authorization] Route required privileges: ALL of [fleet-settings-all].", "operationId": "put-fleet-agent-download-sources-sourceid", "parameters": [ { @@ -9118,6 +9120,7 @@ }, "/api/fleet/agent_policies": { "get": { + "description": "[Required authorization] Route required privileges: ANY of [fleet-agent-policies-read OR fleet-agents-read OR fleet-setup].", "operationId": "get-fleet-agent-policies", "parameters": [ { @@ -9955,6 +9958,7 @@ ] }, "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agent-policies-all].", "operationId": "post-fleet-agent-policies", "parameters": [ { @@ -10955,6 +10959,7 @@ }, "/api/fleet/agent_policies/_bulk_get": { "post": { + "description": "[Required authorization] Route required privileges: ANY of [fleet-agent-policies-read OR fleet-agents-read OR fleet-setup].", "operationId": "post-fleet-agent-policies-bulk-get", "parameters": [ { @@ -11741,7 +11746,7 @@ }, "/api/fleet/agent_policies/delete": { "post": { - "description": "Delete an agent policy by ID.", + "description": "Delete an agent policy by ID.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-all].", "operationId": "post-fleet-agent-policies-delete", "parameters": [ { @@ -11834,7 +11839,7 @@ }, "/api/fleet/agent_policies/outputs": { "post": { - "description": "Get a list of outputs associated with agent policies.", + "description": "Get a list of outputs associated with agent policies.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-read, fleet-settings-read].", "operationId": "post-fleet-agent-policies-outputs", "parameters": [ { @@ -12007,7 +12012,7 @@ }, "/api/fleet/agent_policies/{agentPolicyId}": { "get": { - "description": "Get an agent policy by ID.", + "description": "Get an agent policy by ID.

[Required authorization] Route required privileges: ANY of [fleet-agent-policies-read OR fleet-agents-read OR fleet-setup].", "operationId": "get-fleet-agent-policies-agentpolicyid", "parameters": [ { @@ -12758,7 +12763,7 @@ ] }, "put": { - "description": "Update an agent policy by ID.", + "description": "Update an agent policy by ID.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-all].", "operationId": "put-fleet-agent-policies-agentpolicyid", "parameters": [ { @@ -13771,7 +13776,7 @@ }, "/api/fleet/agent_policies/{agentPolicyId}/copy": { "post": { - "description": "Copy an agent policy by ID.", + "description": "Copy an agent policy by ID.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-all].", "operationId": "post-fleet-agent-policies-agentpolicyid-copy", "parameters": [ { @@ -14556,7 +14561,7 @@ }, "/api/fleet/agent_policies/{agentPolicyId}/download": { "get": { - "description": "Download an agent policy by ID.", + "description": "Download an agent policy by ID.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-read, fleet-setup].", "operationId": "get-fleet-agent-policies-agentpolicyid-download", "parameters": [ { @@ -14661,7 +14666,7 @@ }, "/api/fleet/agent_policies/{agentPolicyId}/full": { "get": { - "description": "Get a full agent policy by ID.", + "description": "Get a full agent policy by ID.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-read].", "operationId": "get-fleet-agent-policies-agentpolicyid-full", "parameters": [ { @@ -15187,7 +15192,7 @@ }, "/api/fleet/agent_policies/{agentPolicyId}/outputs": { "get": { - "description": "Get a list of outputs associated with agent policy by policy id.", + "description": "Get a list of outputs associated with agent policy by policy id.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-read, fleet-settings-read].", "operationId": "get-fleet-agent-policies-agentpolicyid-outputs", "parameters": [ { @@ -15468,6 +15473,7 @@ }, "/api/fleet/agent_status/data": { "get": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-read].", "operationId": "get-fleet-agent-status-data", "parameters": [ { @@ -15587,6 +15593,7 @@ }, "/api/fleet/agents": { "get": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-read].", "operationId": "get-fleet-agents", "parameters": [ { @@ -16126,6 +16133,7 @@ ] }, "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-read].", "operationId": "post-fleet-agents", "parameters": [ { @@ -16216,6 +16224,7 @@ }, "/api/fleet/agents/action_status": { "get": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-read].", "operationId": "get-fleet-agents-action-status", "parameters": [ { @@ -16439,6 +16448,7 @@ }, "/api/fleet/agents/actions/{actionId}/cancel": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "post-fleet-agents-actions-actionid-cancel", "parameters": [ { @@ -16567,6 +16577,7 @@ }, "/api/fleet/agents/available_versions": { "get": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-read].", "operationId": "get-fleet-agents-available-versions", "parameters": [], "responses": { @@ -16625,6 +16636,7 @@ }, "/api/fleet/agents/bulk_reassign": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "post-fleet-agents-bulk-reassign", "parameters": [ { @@ -16730,6 +16742,7 @@ }, "/api/fleet/agents/bulk_request_diagnostics": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-read].", "operationId": "post-fleet-agents-bulk-request-diagnostics", "parameters": [ { @@ -16836,6 +16849,7 @@ }, "/api/fleet/agents/bulk_unenroll": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "post-fleet-agents-bulk-unenroll", "parameters": [ { @@ -16947,6 +16961,7 @@ }, "/api/fleet/agents/bulk_update_agent_tags": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "post-fleet-agents-bulk-update-agent-tags", "parameters": [ { @@ -17060,6 +17075,7 @@ }, "/api/fleet/agents/bulk_upgrade": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "post-fleet-agents-bulk-upgrade", "parameters": [ { @@ -17181,7 +17197,7 @@ }, "/api/fleet/agents/files/{fileId}": { "delete": { - "description": "Delete a file uploaded by an agent.", + "description": "Delete a file uploaded by an agent.

[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "delete-fleet-agents-files-fileid", "parameters": [ { @@ -17260,7 +17276,7 @@ }, "/api/fleet/agents/files/{fileId}/{fileName}": { "get": { - "description": "Get a file uploaded by an agent.", + "description": "Get a file uploaded by an agent.

[Required authorization] Route required privileges: ALL of [fleet-agents-read].", "operationId": "get-fleet-agents-files-fileid-filename", "parameters": [ { @@ -17324,6 +17340,7 @@ }, "/api/fleet/agents/setup": { "get": { + "description": "[Required authorization] Route required privileges: ANY of [fleet-agents-read OR fleet-agent-policies-read OR fleet-settings-read OR fleet-setup].", "operationId": "get-fleet-agents-setup", "parameters": [], "responses": { @@ -17411,6 +17428,7 @@ ] }, "post": { + "description": "[Required authorization] Route required privileges: ANY of [fleet-agents-read OR fleet-agent-policies-read OR fleet-settings-read OR fleet-setup].", "operationId": "post-fleet-agents-setup", "parameters": [ { @@ -17498,6 +17516,7 @@ }, "/api/fleet/agents/tags": { "get": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-read].", "operationId": "get-fleet-agents-tags", "parameters": [ { @@ -17574,7 +17593,7 @@ }, "/api/fleet/agents/{agentId}": { "delete": { - "description": "Delete an agent by ID.", + "description": "Delete an agent by ID.

[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "delete-fleet-agents-agentid", "parameters": [ { @@ -17650,7 +17669,7 @@ ] }, "get": { - "description": "Get an agent by ID.", + "description": "Get an agent by ID.

[Required authorization] Route required privileges: ALL of [fleet-agents-read].", "operationId": "get-fleet-agents-agentid", "parameters": [ { @@ -18104,7 +18123,7 @@ ] }, "put": { - "description": "Update an agent by ID.", + "description": "Update an agent by ID.

[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "put-fleet-agents-agentid", "parameters": [ { @@ -18583,6 +18602,7 @@ }, "/api/fleet/agents/{agentId}/actions": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "post-fleet-agents-agentid-actions", "parameters": [ { @@ -18786,6 +18806,7 @@ }, "/api/fleet/agents/{agentId}/reassign": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "post-fleet-agents-agentid-reassign", "parameters": [ { @@ -18871,6 +18892,7 @@ }, "/api/fleet/agents/{agentId}/request_diagnostics": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-read].", "operationId": "post-fleet-agents-agentid-request-diagnostics", "parameters": [ { @@ -18967,6 +18989,7 @@ }, "/api/fleet/agents/{agentId}/unenroll": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "post-fleet-agents-agentid-unenroll", "parameters": [ { @@ -19016,6 +19039,7 @@ }, "/api/fleet/agents/{agentId}/upgrade": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "post-fleet-agents-agentid-upgrade", "parameters": [ { @@ -19110,6 +19134,7 @@ }, "/api/fleet/agents/{agentId}/uploads": { "get": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-read].", "operationId": "get-fleet-agents-agentid-uploads", "parameters": [ { @@ -19289,6 +19314,7 @@ }, "/api/fleet/data_streams": { "get": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-all, fleet-agent-policies-all, fleet-settings-all].", "operationId": "get-fleet-data-streams", "parameters": [], "responses": { @@ -19433,6 +19459,7 @@ }, "/api/fleet/enrollment_api_keys": { "get": { + "description": "[Required authorization] Route required privileges: ANY of [fleet-agents-all OR fleet-setup].", "operationId": "get-fleet-enrollment-api-keys", "parameters": [ { @@ -19608,6 +19635,7 @@ ] }, "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "post-fleet-enrollment-api-keys", "parameters": [ { @@ -19741,7 +19769,7 @@ }, "/api/fleet/enrollment_api_keys/{keyId}": { "delete": { - "description": "Revoke an enrollment API key by ID by marking it as inactive.", + "description": "Revoke an enrollment API key by ID by marking it as inactive.

[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "delete-fleet-enrollment-api-keys-keyid", "parameters": [ { @@ -19817,7 +19845,7 @@ ] }, "get": { - "description": "Get an enrollment API key by ID.", + "description": "Get an enrollment API key by ID.

[Required authorization] Route required privileges: ANY of [fleet-agents-all OR fleet-setup].", "operationId": "get-fleet-enrollment-api-keys-keyid", "parameters": [ { @@ -19918,6 +19946,7 @@ }, "/api/fleet/epm/bulk_assets": { "post": { + "description": "[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].", "operationId": "post-fleet-epm-bulk-assets", "parameters": [ { @@ -20056,6 +20085,7 @@ }, "/api/fleet/epm/categories": { "get": { + "description": "[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].", "operationId": "get-fleet-epm-categories", "parameters": [ { @@ -20154,6 +20184,7 @@ }, "/api/fleet/epm/custom_integrations": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [integrations-all, fleet-agent-policies-all].", "operationId": "post-fleet-epm-custom-integrations", "parameters": [ { @@ -20350,6 +20381,7 @@ }, "/api/fleet/epm/data_streams": { "get": { + "description": "[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].", "operationId": "get-fleet-epm-data-streams", "parameters": [ { @@ -20463,6 +20495,7 @@ }, "/api/fleet/epm/packages": { "get": { + "description": "[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].", "operationId": "get-fleet-epm-packages", "parameters": [ { @@ -21022,6 +21055,7 @@ ] }, "post": { + "description": "[Required authorization] Route required privileges: ALL of [integrations-all, fleet-agent-policies-all].", "operationId": "post-fleet-epm-packages", "parameters": [ { @@ -21198,6 +21232,7 @@ }, "/api/fleet/epm/packages/_bulk": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [integrations-all, fleet-agent-policies-all].", "operationId": "post-fleet-epm-packages-bulk", "parameters": [ { @@ -21463,6 +21498,7 @@ }, "/api/fleet/epm/packages/installed": { "get": { + "description": "[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].", "operationId": "get-fleet-epm-packages-installed", "parameters": [ { @@ -21691,6 +21727,7 @@ }, "/api/fleet/epm/packages/limited": { "get": { + "description": "[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].", "operationId": "get-fleet-epm-packages-limited", "parameters": [], "responses": { @@ -21749,6 +21786,7 @@ }, "/api/fleet/epm/packages/{pkgName}/stats": { "get": { + "description": "[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].", "operationId": "get-fleet-epm-packages-pkgname-stats", "parameters": [ { @@ -21822,6 +21860,7 @@ }, "/api/fleet/epm/packages/{pkgName}/{pkgVersion}": { "delete": { + "description": "[Required authorization] Route required privileges: ALL of [integrations-all, fleet-agent-policies-all].", "operationId": "delete-fleet-epm-packages-pkgname-pkgversion", "parameters": [ { @@ -22658,6 +22697,7 @@ ] }, "post": { + "description": "[Required authorization] Route required privileges: ALL of [integrations-all, fleet-agent-policies-all].", "operationId": "post-fleet-epm-packages-pkgname-pkgversion", "parameters": [ { @@ -22867,6 +22907,7 @@ ] }, "put": { + "description": "[Required authorization] Route required privileges: ALL of [integrations-all, fleet-agent-policies-all].", "operationId": "put-fleet-epm-packages-pkgname-pkgversion", "parameters": [ { @@ -23662,6 +23703,7 @@ }, "/api/fleet/epm/packages/{pkgName}/{pkgVersion}/{filePath}": { "get": { + "description": "[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].", "operationId": "get-fleet-epm-packages-pkgname-pkgversion-filepath", "parameters": [ { @@ -23731,6 +23773,7 @@ }, "/api/fleet/epm/templates/{pkgName}/{pkgVersion}/inputs": { "get": { + "description": "[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].", "operationId": "get-fleet-epm-templates-pkgname-pkgversion-inputs", "parameters": [ { @@ -23887,6 +23930,7 @@ }, "/api/fleet/epm/verification_key_id": { "get": { + "description": "[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].", "operationId": "get-fleet-epm-verification-key-id", "parameters": [], "responses": { @@ -23943,6 +23987,7 @@ }, "/api/fleet/fleet_server_hosts": { "get": { + "description": "[Required authorization] Route required privileges: ANY of [fleet-agents-all OR fleet-settings-read].", "operationId": "get-fleet-fleet-server-hosts", "parameters": [], "responses": { @@ -24047,6 +24092,7 @@ ] }, "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-settings-all].", "operationId": "post-fleet-fleet-server-hosts", "parameters": [ { @@ -24193,7 +24239,7 @@ }, "/api/fleet/fleet_server_hosts/{itemId}": { "delete": { - "description": "Delete a Fleet Server host by ID.", + "description": "Delete a Fleet Server host by ID.

[Required authorization] Route required privileges: ALL of [fleet-settings-all].", "operationId": "delete-fleet-fleet-server-hosts-itemid", "parameters": [ { @@ -24266,7 +24312,7 @@ ] }, "get": { - "description": "Get a Fleet Server host by ID.", + "description": "Get a Fleet Server host by ID.

[Required authorization] Route required privileges: ALL of [fleet-settings-read].", "operationId": "get-fleet-fleet-server-hosts-itemid", "parameters": [ { @@ -24365,7 +24411,7 @@ ] }, "put": { - "description": "Update a Fleet Server host by ID.", + "description": "Update a Fleet Server host by ID.

[Required authorization] Route required privileges: ALL of [fleet-settings-all].", "operationId": "put-fleet-fleet-server-hosts-itemid", "parameters": [ { @@ -24511,6 +24557,7 @@ }, "/api/fleet/health_check": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-settings-all].", "operationId": "post-fleet-health-check", "parameters": [ { @@ -24626,6 +24673,7 @@ }, "/api/fleet/kubernetes": { "get": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agent-policies-read, fleet-setup].", "operationId": "get-fleet-kubernetes", "parameters": [ { @@ -24706,6 +24754,7 @@ }, "/api/fleet/kubernetes/download": { "get": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agent-policies-read, fleet-setup].", "operationId": "get-fleet-kubernetes-download", "parameters": [ { @@ -24802,6 +24851,7 @@ }, "/api/fleet/logstash_api_keys": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-settings-all].", "operationId": "post-fleet-logstash-api-keys", "parameters": [ { @@ -24868,6 +24918,7 @@ }, "/api/fleet/message_signing_service/rotate_key_pair": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-all, fleet-agent-policies-all, fleet-settings-all].", "operationId": "post-fleet-message-signing-service-rotate-key-pair", "parameters": [ { @@ -24968,6 +25019,7 @@ }, "/api/fleet/outputs": { "get": { + "description": "[Required authorization] Route required privileges: ANY of [fleet-settings-read OR fleet-agent-policies-read].", "operationId": "get-fleet-outputs", "parameters": [], "responses": { @@ -26051,6 +26103,7 @@ ] }, "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-settings-all].", "operationId": "post-fleet-outputs", "parameters": [ { @@ -28156,7 +28209,7 @@ }, "/api/fleet/outputs/{outputId}": { "delete": { - "description": "Delete output by ID.", + "description": "Delete output by ID.

[Required authorization] Route required privileges: ALL of [fleet-settings-all].", "operationId": "delete-fleet-outputs-outputid", "parameters": [ { @@ -28254,7 +28307,7 @@ ] }, "get": { - "description": "Get output by ID.", + "description": "Get output by ID.

[Required authorization] Route required privileges: ANY of [fleet-settings-read OR fleet-agent-policies-read].", "operationId": "get-fleet-outputs-outputid", "parameters": [ { @@ -29332,7 +29385,7 @@ ] }, "put": { - "description": "Update output by ID.", + "description": "Update output by ID.

[Required authorization] Route required privileges: ANY of [fleet-settings-all OR fleet-agent-policies-all].", "operationId": "put-fleet-outputs-outputid", "parameters": [ { @@ -31422,6 +31475,7 @@ }, "/api/fleet/outputs/{outputId}/health": { "get": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-settings-read].", "operationId": "get-fleet-outputs-outputid-health", "parameters": [ { @@ -34175,6 +34229,7 @@ }, "/api/fleet/package_policies/delete": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agent-policies-all, integrations-all].", "operationId": "post-fleet-package-policies-delete", "parameters": [ { @@ -34366,7 +34421,7 @@ }, "/api/fleet/package_policies/upgrade": { "post": { - "description": "Upgrade a package policy to a newer package version.", + "description": "Upgrade a package policy to a newer package version.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-all, integrations-all].", "operationId": "post-fleet-package-policies-upgrade", "parameters": [ { @@ -34479,6 +34534,7 @@ }, "/api/fleet/package_policies/upgrade/dryrun": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agent-policies-read, integrations-read].", "operationId": "post-fleet-package-policies-upgrade-dryrun", "parameters": [ { @@ -35664,7 +35720,7 @@ }, "/api/fleet/package_policies/{packagePolicyId}": { "delete": { - "description": "Delete a package policy by ID.", + "description": "Delete a package policy by ID.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-all, integrations-all].", "operationId": "delete-fleet-package-policies-packagepolicyid", "parameters": [ { @@ -37685,6 +37741,7 @@ }, "/api/fleet/proxies": { "get": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-settings-read].", "operationId": "get-fleet-proxies", "parameters": [], "responses": { @@ -37803,6 +37860,7 @@ ] }, "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-settings-all].", "operationId": "post-fleet-proxies", "parameters": [ { @@ -37977,7 +38035,7 @@ }, "/api/fleet/proxies/{itemId}": { "delete": { - "description": "Delete a proxy by ID", + "description": "Delete a proxy by ID

[Required authorization] Route required privileges: ALL of [fleet-settings-all].", "operationId": "delete-fleet-proxies-itemid", "parameters": [ { @@ -38050,7 +38108,7 @@ ] }, "get": { - "description": "Get a proxy by ID.", + "description": "Get a proxy by ID.

[Required authorization] Route required privileges: ALL of [fleet-settings-read].", "operationId": "get-fleet-proxies-itemid", "parameters": [ { @@ -38163,7 +38221,7 @@ ] }, "put": { - "description": "Update a proxy by ID.", + "description": "Update a proxy by ID.

[Required authorization] Route required privileges: ALL of [fleet-settings-all].", "operationId": "put-fleet-proxies-itemid", "parameters": [ { @@ -38341,6 +38399,7 @@ }, "/api/fleet/service_tokens": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "post-fleet-service-tokens", "parameters": [ { @@ -38428,6 +38487,7 @@ }, "/api/fleet/settings": { "get": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-settings-read].", "operationId": "get-fleet-settings", "parameters": [], "responses": { @@ -38560,6 +38620,7 @@ ] }, "put": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-settings-all].", "operationId": "put-fleet-settings", "parameters": [ { @@ -38752,6 +38813,7 @@ }, "/api/fleet/setup": { "post": { + "description": "[Required authorization] Route required privileges: ANY of [fleet-agents-read OR fleet-agent-policies-read OR fleet-settings-read OR fleet-setup].", "operationId": "post-fleet-setup", "parameters": [ { @@ -38858,7 +38920,7 @@ }, "/api/fleet/uninstall_tokens": { "get": { - "description": "List the metadata for the latest uninstall tokens per agent policy.", + "description": "List the metadata for the latest uninstall tokens per agent policy.

[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "get-fleet-uninstall-tokens", "parameters": [ { @@ -38995,7 +39057,7 @@ }, "/api/fleet/uninstall_tokens/{uninstallTokenId}": { "get": { - "description": "Get one decrypted uninstall token by its ID.", + "description": "Get one decrypted uninstall token by its ID.

[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "get-fleet-uninstall-tokens-uninstalltokenid", "parameters": [ { diff --git a/oas_docs/bundle.serverless.json b/oas_docs/bundle.serverless.json index 68f4c181fc541..4a0e3f14391b9 100644 --- a/oas_docs/bundle.serverless.json +++ b/oas_docs/bundle.serverless.json @@ -8595,6 +8595,7 @@ }, "/api/fleet/agent_download_sources": { "get": { + "description": "[Required authorization] Route required privileges: ANY of [fleet-agent-policies-read OR fleet-settings-read].", "operationId": "get-fleet-agent-download-sources", "parameters": [], "responses": { @@ -8690,6 +8691,7 @@ ] }, "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-settings-all].", "operationId": "post-fleet-agent-download-sources", "parameters": [ { @@ -8818,7 +8820,7 @@ }, "/api/fleet/agent_download_sources/{sourceId}": { "delete": { - "description": "Delete an agent binary download source by ID.", + "description": "Delete an agent binary download source by ID.

[Required authorization] Route required privileges: ALL of [fleet-settings-all].", "operationId": "delete-fleet-agent-download-sources-sourceid", "parameters": [ { @@ -8891,7 +8893,7 @@ ] }, "get": { - "description": "Get an agent binary download source by ID.", + "description": "Get an agent binary download source by ID.

[Required authorization] Route required privileges: ANY of [fleet-agent-policies-read OR fleet-settings-read].", "operationId": "get-fleet-agent-download-sources-sourceid", "parameters": [ { @@ -8981,7 +8983,7 @@ ] }, "put": { - "description": "Update an agent binary download source by ID.", + "description": "Update an agent binary download source by ID.

[Required authorization] Route required privileges: ALL of [fleet-settings-all].", "operationId": "put-fleet-agent-download-sources-sourceid", "parameters": [ { @@ -9118,6 +9120,7 @@ }, "/api/fleet/agent_policies": { "get": { + "description": "[Required authorization] Route required privileges: ANY of [fleet-agent-policies-read OR fleet-agents-read OR fleet-setup].", "operationId": "get-fleet-agent-policies", "parameters": [ { @@ -9955,6 +9958,7 @@ ] }, "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agent-policies-all].", "operationId": "post-fleet-agent-policies", "parameters": [ { @@ -10955,6 +10959,7 @@ }, "/api/fleet/agent_policies/_bulk_get": { "post": { + "description": "[Required authorization] Route required privileges: ANY of [fleet-agent-policies-read OR fleet-agents-read OR fleet-setup].", "operationId": "post-fleet-agent-policies-bulk-get", "parameters": [ { @@ -11741,7 +11746,7 @@ }, "/api/fleet/agent_policies/delete": { "post": { - "description": "Delete an agent policy by ID.", + "description": "Delete an agent policy by ID.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-all].", "operationId": "post-fleet-agent-policies-delete", "parameters": [ { @@ -11834,7 +11839,7 @@ }, "/api/fleet/agent_policies/outputs": { "post": { - "description": "Get a list of outputs associated with agent policies.", + "description": "Get a list of outputs associated with agent policies.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-read, fleet-settings-read].", "operationId": "post-fleet-agent-policies-outputs", "parameters": [ { @@ -12007,7 +12012,7 @@ }, "/api/fleet/agent_policies/{agentPolicyId}": { "get": { - "description": "Get an agent policy by ID.", + "description": "Get an agent policy by ID.

[Required authorization] Route required privileges: ANY of [fleet-agent-policies-read OR fleet-agents-read OR fleet-setup].", "operationId": "get-fleet-agent-policies-agentpolicyid", "parameters": [ { @@ -12758,7 +12763,7 @@ ] }, "put": { - "description": "Update an agent policy by ID.", + "description": "Update an agent policy by ID.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-all].", "operationId": "put-fleet-agent-policies-agentpolicyid", "parameters": [ { @@ -13771,7 +13776,7 @@ }, "/api/fleet/agent_policies/{agentPolicyId}/copy": { "post": { - "description": "Copy an agent policy by ID.", + "description": "Copy an agent policy by ID.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-all].", "operationId": "post-fleet-agent-policies-agentpolicyid-copy", "parameters": [ { @@ -14556,7 +14561,7 @@ }, "/api/fleet/agent_policies/{agentPolicyId}/download": { "get": { - "description": "Download an agent policy by ID.", + "description": "Download an agent policy by ID.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-read, fleet-setup].", "operationId": "get-fleet-agent-policies-agentpolicyid-download", "parameters": [ { @@ -14661,7 +14666,7 @@ }, "/api/fleet/agent_policies/{agentPolicyId}/full": { "get": { - "description": "Get a full agent policy by ID.", + "description": "Get a full agent policy by ID.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-read].", "operationId": "get-fleet-agent-policies-agentpolicyid-full", "parameters": [ { @@ -15187,7 +15192,7 @@ }, "/api/fleet/agent_policies/{agentPolicyId}/outputs": { "get": { - "description": "Get a list of outputs associated with agent policy by policy id.", + "description": "Get a list of outputs associated with agent policy by policy id.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-read, fleet-settings-read].", "operationId": "get-fleet-agent-policies-agentpolicyid-outputs", "parameters": [ { @@ -15468,6 +15473,7 @@ }, "/api/fleet/agent_status/data": { "get": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-read].", "operationId": "get-fleet-agent-status-data", "parameters": [ { @@ -15587,6 +15593,7 @@ }, "/api/fleet/agents": { "get": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-read].", "operationId": "get-fleet-agents", "parameters": [ { @@ -16126,6 +16133,7 @@ ] }, "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-read].", "operationId": "post-fleet-agents", "parameters": [ { @@ -16216,6 +16224,7 @@ }, "/api/fleet/agents/action_status": { "get": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-read].", "operationId": "get-fleet-agents-action-status", "parameters": [ { @@ -16439,6 +16448,7 @@ }, "/api/fleet/agents/actions/{actionId}/cancel": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "post-fleet-agents-actions-actionid-cancel", "parameters": [ { @@ -16567,6 +16577,7 @@ }, "/api/fleet/agents/available_versions": { "get": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-read].", "operationId": "get-fleet-agents-available-versions", "parameters": [], "responses": { @@ -16625,6 +16636,7 @@ }, "/api/fleet/agents/bulk_reassign": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "post-fleet-agents-bulk-reassign", "parameters": [ { @@ -16730,6 +16742,7 @@ }, "/api/fleet/agents/bulk_request_diagnostics": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-read].", "operationId": "post-fleet-agents-bulk-request-diagnostics", "parameters": [ { @@ -16836,6 +16849,7 @@ }, "/api/fleet/agents/bulk_unenroll": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "post-fleet-agents-bulk-unenroll", "parameters": [ { @@ -16947,6 +16961,7 @@ }, "/api/fleet/agents/bulk_update_agent_tags": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "post-fleet-agents-bulk-update-agent-tags", "parameters": [ { @@ -17060,6 +17075,7 @@ }, "/api/fleet/agents/bulk_upgrade": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "post-fleet-agents-bulk-upgrade", "parameters": [ { @@ -17181,7 +17197,7 @@ }, "/api/fleet/agents/files/{fileId}": { "delete": { - "description": "Delete a file uploaded by an agent.", + "description": "Delete a file uploaded by an agent.

[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "delete-fleet-agents-files-fileid", "parameters": [ { @@ -17260,7 +17276,7 @@ }, "/api/fleet/agents/files/{fileId}/{fileName}": { "get": { - "description": "Get a file uploaded by an agent.", + "description": "Get a file uploaded by an agent.

[Required authorization] Route required privileges: ALL of [fleet-agents-read].", "operationId": "get-fleet-agents-files-fileid-filename", "parameters": [ { @@ -17324,6 +17340,7 @@ }, "/api/fleet/agents/setup": { "get": { + "description": "[Required authorization] Route required privileges: ANY of [fleet-agents-read OR fleet-agent-policies-read OR fleet-settings-read OR fleet-setup].", "operationId": "get-fleet-agents-setup", "parameters": [], "responses": { @@ -17411,6 +17428,7 @@ ] }, "post": { + "description": "[Required authorization] Route required privileges: ANY of [fleet-agents-read OR fleet-agent-policies-read OR fleet-settings-read OR fleet-setup].", "operationId": "post-fleet-agents-setup", "parameters": [ { @@ -17498,6 +17516,7 @@ }, "/api/fleet/agents/tags": { "get": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-read].", "operationId": "get-fleet-agents-tags", "parameters": [ { @@ -17574,7 +17593,7 @@ }, "/api/fleet/agents/{agentId}": { "delete": { - "description": "Delete an agent by ID.", + "description": "Delete an agent by ID.

[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "delete-fleet-agents-agentid", "parameters": [ { @@ -17650,7 +17669,7 @@ ] }, "get": { - "description": "Get an agent by ID.", + "description": "Get an agent by ID.

[Required authorization] Route required privileges: ALL of [fleet-agents-read].", "operationId": "get-fleet-agents-agentid", "parameters": [ { @@ -18104,7 +18123,7 @@ ] }, "put": { - "description": "Update an agent by ID.", + "description": "Update an agent by ID.

[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "put-fleet-agents-agentid", "parameters": [ { @@ -18583,6 +18602,7 @@ }, "/api/fleet/agents/{agentId}/actions": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "post-fleet-agents-agentid-actions", "parameters": [ { @@ -18786,6 +18806,7 @@ }, "/api/fleet/agents/{agentId}/reassign": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "post-fleet-agents-agentid-reassign", "parameters": [ { @@ -18871,6 +18892,7 @@ }, "/api/fleet/agents/{agentId}/request_diagnostics": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-read].", "operationId": "post-fleet-agents-agentid-request-diagnostics", "parameters": [ { @@ -18967,6 +18989,7 @@ }, "/api/fleet/agents/{agentId}/unenroll": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "post-fleet-agents-agentid-unenroll", "parameters": [ { @@ -19016,6 +19039,7 @@ }, "/api/fleet/agents/{agentId}/upgrade": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "post-fleet-agents-agentid-upgrade", "parameters": [ { @@ -19110,6 +19134,7 @@ }, "/api/fleet/agents/{agentId}/uploads": { "get": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-read].", "operationId": "get-fleet-agents-agentid-uploads", "parameters": [ { @@ -19289,6 +19314,7 @@ }, "/api/fleet/data_streams": { "get": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-all, fleet-agent-policies-all, fleet-settings-all].", "operationId": "get-fleet-data-streams", "parameters": [], "responses": { @@ -19433,6 +19459,7 @@ }, "/api/fleet/enrollment_api_keys": { "get": { + "description": "[Required authorization] Route required privileges: ANY of [fleet-agents-all OR fleet-setup].", "operationId": "get-fleet-enrollment-api-keys", "parameters": [ { @@ -19608,6 +19635,7 @@ ] }, "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "post-fleet-enrollment-api-keys", "parameters": [ { @@ -19741,7 +19769,7 @@ }, "/api/fleet/enrollment_api_keys/{keyId}": { "delete": { - "description": "Revoke an enrollment API key by ID by marking it as inactive.", + "description": "Revoke an enrollment API key by ID by marking it as inactive.

[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "delete-fleet-enrollment-api-keys-keyid", "parameters": [ { @@ -19817,7 +19845,7 @@ ] }, "get": { - "description": "Get an enrollment API key by ID.", + "description": "Get an enrollment API key by ID.

[Required authorization] Route required privileges: ANY of [fleet-agents-all OR fleet-setup].", "operationId": "get-fleet-enrollment-api-keys-keyid", "parameters": [ { @@ -19918,6 +19946,7 @@ }, "/api/fleet/epm/bulk_assets": { "post": { + "description": "[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].", "operationId": "post-fleet-epm-bulk-assets", "parameters": [ { @@ -20056,6 +20085,7 @@ }, "/api/fleet/epm/categories": { "get": { + "description": "[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].", "operationId": "get-fleet-epm-categories", "parameters": [ { @@ -20154,6 +20184,7 @@ }, "/api/fleet/epm/custom_integrations": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [integrations-all, fleet-agent-policies-all].", "operationId": "post-fleet-epm-custom-integrations", "parameters": [ { @@ -20350,6 +20381,7 @@ }, "/api/fleet/epm/data_streams": { "get": { + "description": "[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].", "operationId": "get-fleet-epm-data-streams", "parameters": [ { @@ -20463,6 +20495,7 @@ }, "/api/fleet/epm/packages": { "get": { + "description": "[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].", "operationId": "get-fleet-epm-packages", "parameters": [ { @@ -21022,6 +21055,7 @@ ] }, "post": { + "description": "[Required authorization] Route required privileges: ALL of [integrations-all, fleet-agent-policies-all].", "operationId": "post-fleet-epm-packages", "parameters": [ { @@ -21198,6 +21232,7 @@ }, "/api/fleet/epm/packages/_bulk": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [integrations-all, fleet-agent-policies-all].", "operationId": "post-fleet-epm-packages-bulk", "parameters": [ { @@ -21463,6 +21498,7 @@ }, "/api/fleet/epm/packages/installed": { "get": { + "description": "[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].", "operationId": "get-fleet-epm-packages-installed", "parameters": [ { @@ -21691,6 +21727,7 @@ }, "/api/fleet/epm/packages/limited": { "get": { + "description": "[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].", "operationId": "get-fleet-epm-packages-limited", "parameters": [], "responses": { @@ -21749,6 +21786,7 @@ }, "/api/fleet/epm/packages/{pkgName}/stats": { "get": { + "description": "[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].", "operationId": "get-fleet-epm-packages-pkgname-stats", "parameters": [ { @@ -21822,6 +21860,7 @@ }, "/api/fleet/epm/packages/{pkgName}/{pkgVersion}": { "delete": { + "description": "[Required authorization] Route required privileges: ALL of [integrations-all, fleet-agent-policies-all].", "operationId": "delete-fleet-epm-packages-pkgname-pkgversion", "parameters": [ { @@ -22658,6 +22697,7 @@ ] }, "post": { + "description": "[Required authorization] Route required privileges: ALL of [integrations-all, fleet-agent-policies-all].", "operationId": "post-fleet-epm-packages-pkgname-pkgversion", "parameters": [ { @@ -22867,6 +22907,7 @@ ] }, "put": { + "description": "[Required authorization] Route required privileges: ALL of [integrations-all, fleet-agent-policies-all].", "operationId": "put-fleet-epm-packages-pkgname-pkgversion", "parameters": [ { @@ -23662,6 +23703,7 @@ }, "/api/fleet/epm/packages/{pkgName}/{pkgVersion}/{filePath}": { "get": { + "description": "[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].", "operationId": "get-fleet-epm-packages-pkgname-pkgversion-filepath", "parameters": [ { @@ -23731,6 +23773,7 @@ }, "/api/fleet/epm/templates/{pkgName}/{pkgVersion}/inputs": { "get": { + "description": "[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].", "operationId": "get-fleet-epm-templates-pkgname-pkgversion-inputs", "parameters": [ { @@ -23887,6 +23930,7 @@ }, "/api/fleet/epm/verification_key_id": { "get": { + "description": "[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].", "operationId": "get-fleet-epm-verification-key-id", "parameters": [], "responses": { @@ -23943,6 +23987,7 @@ }, "/api/fleet/fleet_server_hosts": { "get": { + "description": "[Required authorization] Route required privileges: ANY of [fleet-agents-all OR fleet-settings-read].", "operationId": "get-fleet-fleet-server-hosts", "parameters": [], "responses": { @@ -24047,6 +24092,7 @@ ] }, "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-settings-all].", "operationId": "post-fleet-fleet-server-hosts", "parameters": [ { @@ -24193,7 +24239,7 @@ }, "/api/fleet/fleet_server_hosts/{itemId}": { "delete": { - "description": "Delete a Fleet Server host by ID.", + "description": "Delete a Fleet Server host by ID.

[Required authorization] Route required privileges: ALL of [fleet-settings-all].", "operationId": "delete-fleet-fleet-server-hosts-itemid", "parameters": [ { @@ -24266,7 +24312,7 @@ ] }, "get": { - "description": "Get a Fleet Server host by ID.", + "description": "Get a Fleet Server host by ID.

[Required authorization] Route required privileges: ALL of [fleet-settings-read].", "operationId": "get-fleet-fleet-server-hosts-itemid", "parameters": [ { @@ -24365,7 +24411,7 @@ ] }, "put": { - "description": "Update a Fleet Server host by ID.", + "description": "Update a Fleet Server host by ID.

[Required authorization] Route required privileges: ALL of [fleet-settings-all].", "operationId": "put-fleet-fleet-server-hosts-itemid", "parameters": [ { @@ -24511,6 +24557,7 @@ }, "/api/fleet/health_check": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-settings-all].", "operationId": "post-fleet-health-check", "parameters": [ { @@ -24626,6 +24673,7 @@ }, "/api/fleet/kubernetes": { "get": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agent-policies-read, fleet-setup].", "operationId": "get-fleet-kubernetes", "parameters": [ { @@ -24706,6 +24754,7 @@ }, "/api/fleet/kubernetes/download": { "get": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agent-policies-read, fleet-setup].", "operationId": "get-fleet-kubernetes-download", "parameters": [ { @@ -24802,6 +24851,7 @@ }, "/api/fleet/logstash_api_keys": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-settings-all].", "operationId": "post-fleet-logstash-api-keys", "parameters": [ { @@ -24868,6 +24918,7 @@ }, "/api/fleet/message_signing_service/rotate_key_pair": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-all, fleet-agent-policies-all, fleet-settings-all].", "operationId": "post-fleet-message-signing-service-rotate-key-pair", "parameters": [ { @@ -24968,6 +25019,7 @@ }, "/api/fleet/outputs": { "get": { + "description": "[Required authorization] Route required privileges: ANY of [fleet-settings-read OR fleet-agent-policies-read].", "operationId": "get-fleet-outputs", "parameters": [], "responses": { @@ -26051,6 +26103,7 @@ ] }, "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-settings-all].", "operationId": "post-fleet-outputs", "parameters": [ { @@ -28156,7 +28209,7 @@ }, "/api/fleet/outputs/{outputId}": { "delete": { - "description": "Delete output by ID.", + "description": "Delete output by ID.

[Required authorization] Route required privileges: ALL of [fleet-settings-all].", "operationId": "delete-fleet-outputs-outputid", "parameters": [ { @@ -28254,7 +28307,7 @@ ] }, "get": { - "description": "Get output by ID.", + "description": "Get output by ID.

[Required authorization] Route required privileges: ANY of [fleet-settings-read OR fleet-agent-policies-read].", "operationId": "get-fleet-outputs-outputid", "parameters": [ { @@ -29332,7 +29385,7 @@ ] }, "put": { - "description": "Update output by ID.", + "description": "Update output by ID.

[Required authorization] Route required privileges: ANY of [fleet-settings-all OR fleet-agent-policies-all].", "operationId": "put-fleet-outputs-outputid", "parameters": [ { @@ -31422,6 +31475,7 @@ }, "/api/fleet/outputs/{outputId}/health": { "get": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-settings-read].", "operationId": "get-fleet-outputs-outputid-health", "parameters": [ { @@ -34175,6 +34229,7 @@ }, "/api/fleet/package_policies/delete": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agent-policies-all, integrations-all].", "operationId": "post-fleet-package-policies-delete", "parameters": [ { @@ -34366,7 +34421,7 @@ }, "/api/fleet/package_policies/upgrade": { "post": { - "description": "Upgrade a package policy to a newer package version.", + "description": "Upgrade a package policy to a newer package version.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-all, integrations-all].", "operationId": "post-fleet-package-policies-upgrade", "parameters": [ { @@ -34479,6 +34534,7 @@ }, "/api/fleet/package_policies/upgrade/dryrun": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agent-policies-read, integrations-read].", "operationId": "post-fleet-package-policies-upgrade-dryrun", "parameters": [ { @@ -35664,7 +35720,7 @@ }, "/api/fleet/package_policies/{packagePolicyId}": { "delete": { - "description": "Delete a package policy by ID.", + "description": "Delete a package policy by ID.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-all, integrations-all].", "operationId": "delete-fleet-package-policies-packagepolicyid", "parameters": [ { @@ -37685,6 +37741,7 @@ }, "/api/fleet/proxies": { "get": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-settings-read].", "operationId": "get-fleet-proxies", "parameters": [], "responses": { @@ -37803,6 +37860,7 @@ ] }, "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-settings-all].", "operationId": "post-fleet-proxies", "parameters": [ { @@ -37977,7 +38035,7 @@ }, "/api/fleet/proxies/{itemId}": { "delete": { - "description": "Delete a proxy by ID", + "description": "Delete a proxy by ID

[Required authorization] Route required privileges: ALL of [fleet-settings-all].", "operationId": "delete-fleet-proxies-itemid", "parameters": [ { @@ -38050,7 +38108,7 @@ ] }, "get": { - "description": "Get a proxy by ID.", + "description": "Get a proxy by ID.

[Required authorization] Route required privileges: ALL of [fleet-settings-read].", "operationId": "get-fleet-proxies-itemid", "parameters": [ { @@ -38163,7 +38221,7 @@ ] }, "put": { - "description": "Update a proxy by ID.", + "description": "Update a proxy by ID.

[Required authorization] Route required privileges: ALL of [fleet-settings-all].", "operationId": "put-fleet-proxies-itemid", "parameters": [ { @@ -38341,6 +38399,7 @@ }, "/api/fleet/service_tokens": { "post": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "post-fleet-service-tokens", "parameters": [ { @@ -38428,6 +38487,7 @@ }, "/api/fleet/settings": { "get": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-settings-read].", "operationId": "get-fleet-settings", "parameters": [], "responses": { @@ -38560,6 +38620,7 @@ ] }, "put": { + "description": "[Required authorization] Route required privileges: ALL of [fleet-settings-all].", "operationId": "put-fleet-settings", "parameters": [ { @@ -38752,6 +38813,7 @@ }, "/api/fleet/setup": { "post": { + "description": "[Required authorization] Route required privileges: ANY of [fleet-agents-read OR fleet-agent-policies-read OR fleet-settings-read OR fleet-setup].", "operationId": "post-fleet-setup", "parameters": [ { @@ -38858,7 +38920,7 @@ }, "/api/fleet/uninstall_tokens": { "get": { - "description": "List the metadata for the latest uninstall tokens per agent policy.", + "description": "List the metadata for the latest uninstall tokens per agent policy.

[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "get-fleet-uninstall-tokens", "parameters": [ { @@ -38995,7 +39057,7 @@ }, "/api/fleet/uninstall_tokens/{uninstallTokenId}": { "get": { - "description": "Get one decrypted uninstall token by its ID.", + "description": "Get one decrypted uninstall token by its ID.

[Required authorization] Route required privileges: ALL of [fleet-agents-all].", "operationId": "get-fleet-uninstall-tokens-uninstalltokenid", "parameters": [ { diff --git a/oas_docs/output/kibana.serverless.yaml b/oas_docs/output/kibana.serverless.yaml index b9c0acda9e793..8af2c5522a740 100644 --- a/oas_docs/output/kibana.serverless.yaml +++ b/oas_docs/output/kibana.serverless.yaml @@ -11199,6 +11199,7 @@ paths: x-beta: true /api/fleet/agent_download_sources: get: + description: '[Required authorization] Route required privileges: ANY of [fleet-agent-policies-read OR fleet-settings-read].' operationId: get-fleet-agent-download-sources parameters: [] responses: @@ -11265,6 +11266,7 @@ paths: - Elastic Agent binary download sources x-beta: true post: + description: '[Required authorization] Route required privileges: ALL of [fleet-settings-all].' operationId: post-fleet-agent-download-sources parameters: - description: A required header to protect against CSRF attacks @@ -11352,7 +11354,7 @@ paths: x-beta: true /api/fleet/agent_download_sources/{sourceId}: delete: - description: Delete an agent binary download source by ID. + description: 'Delete an agent binary download source by ID.

[Required authorization] Route required privileges: ALL of [fleet-settings-all].' operationId: delete-fleet-agent-download-sources-sourceid parameters: - description: A required header to protect against CSRF attacks @@ -11400,7 +11402,7 @@ paths: - Elastic Agent binary download sources x-beta: true get: - description: Get an agent binary download source by ID. + description: 'Get an agent binary download source by ID.

[Required authorization] Route required privileges: ANY of [fleet-agent-policies-read OR fleet-settings-read].' operationId: get-fleet-agent-download-sources-sourceid parameters: - in: path @@ -11461,7 +11463,7 @@ paths: - Elastic Agent binary download sources x-beta: true put: - description: Update an agent binary download source by ID. + description: 'Update an agent binary download source by ID.

[Required authorization] Route required privileges: ALL of [fleet-settings-all].' operationId: put-fleet-agent-download-sources-sourceid parameters: - description: A required header to protect against CSRF attacks @@ -11554,6 +11556,7 @@ paths: x-beta: true /api/fleet/agent_policies: get: + description: '[Required authorization] Route required privileges: ANY of [fleet-agent-policies-read OR fleet-agents-read OR fleet-setup].' operationId: get-fleet-agent-policies parameters: - in: query @@ -12133,6 +12136,7 @@ paths: - Elastic Agent policies x-beta: true post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agent-policies-all].' operationId: post-fleet-agent-policies parameters: - description: A required header to protect against CSRF attacks @@ -12826,6 +12830,7 @@ paths: x-beta: true /api/fleet/agent_policies/_bulk_get: post: + description: '[Required authorization] Route required privileges: ANY of [fleet-agent-policies-read OR fleet-agents-read OR fleet-setup].' operationId: post-fleet-agent-policies-bulk-get parameters: - description: A required header to protect against CSRF attacks @@ -13371,7 +13376,7 @@ paths: x-beta: true /api/fleet/agent_policies/{agentPolicyId}: get: - description: Get an agent policy by ID. + description: 'Get an agent policy by ID.

[Required authorization] Route required privileges: ANY of [fleet-agent-policies-read OR fleet-agents-read OR fleet-setup].' operationId: get-fleet-agent-policies-agentpolicyid parameters: - in: path @@ -13893,7 +13898,7 @@ paths: - Elastic Agent policies x-beta: true put: - description: Update an agent policy by ID. + description: 'Update an agent policy by ID.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-all].' operationId: put-fleet-agent-policies-agentpolicyid parameters: - description: A required header to protect against CSRF attacks @@ -14595,7 +14600,7 @@ paths: x-beta: true /api/fleet/agent_policies/{agentPolicyId}/copy: post: - description: Copy an agent policy by ID. + description: 'Copy an agent policy by ID.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-all].' operationId: post-fleet-agent-policies-agentpolicyid-copy parameters: - description: A required header to protect against CSRF attacks @@ -15139,7 +15144,7 @@ paths: x-beta: true /api/fleet/agent_policies/{agentPolicyId}/download: get: - description: Download an agent policy by ID. + description: 'Download an agent policy by ID.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-read, fleet-setup].' operationId: get-fleet-agent-policies-agentpolicyid-download parameters: - in: path @@ -15206,7 +15211,7 @@ paths: x-beta: true /api/fleet/agent_policies/{agentPolicyId}/full: get: - description: Get a full agent policy by ID. + description: 'Get a full agent policy by ID.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-read].' operationId: get-fleet-agent-policies-agentpolicyid-full parameters: - in: path @@ -15555,7 +15560,7 @@ paths: x-beta: true /api/fleet/agent_policies/{agentPolicyId}/outputs: get: - description: Get a list of outputs associated with agent policy by policy id. + description: 'Get a list of outputs associated with agent policy by policy id.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-read, fleet-settings-read].' operationId: get-fleet-agent-policies-agentpolicyid-outputs parameters: - in: path @@ -15652,7 +15657,7 @@ paths: x-beta: true /api/fleet/agent_policies/delete: post: - description: Delete an agent policy by ID. + description: 'Delete an agent policy by ID.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-all].' operationId: post-fleet-agent-policies-delete parameters: - description: A required header to protect against CSRF attacks @@ -15713,7 +15718,7 @@ paths: x-beta: true /api/fleet/agent_policies/outputs: post: - description: Get a list of outputs associated with agent policies. + description: 'Get a list of outputs associated with agent policies.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-read, fleet-settings-read].' operationId: post-fleet-agent-policies-outputs parameters: - description: A required header to protect against CSRF attacks @@ -15916,6 +15921,7 @@ paths: x-beta: true /api/fleet/agent_status/data: get: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-read].' operationId: get-fleet-agent-status-data parameters: - in: query @@ -15991,6 +15997,7 @@ paths: x-beta: true /api/fleet/agents: get: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-read].' operationId: get-fleet-agents parameters: - in: query @@ -16370,6 +16377,7 @@ paths: - Elastic Agents x-beta: true post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-read].' operationId: post-fleet-agents parameters: - description: A required header to protect against CSRF attacks @@ -16428,7 +16436,7 @@ paths: x-beta: true /api/fleet/agents/{agentId}: delete: - description: Delete an agent by ID. + description: 'Delete an agent by ID.

[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: delete-fleet-agents-agentid parameters: - description: A required header to protect against CSRF attacks @@ -16478,7 +16486,7 @@ paths: - Elastic Agents x-beta: true get: - description: Get an agent by ID. + description: 'Get an agent by ID.

[Required authorization] Route required privileges: ALL of [fleet-agents-read].' operationId: get-fleet-agents-agentid parameters: - in: path @@ -16800,7 +16808,7 @@ paths: - Elastic Agents x-beta: true put: - description: Update an agent by ID. + description: 'Update an agent by ID.

[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: put-fleet-agents-agentid parameters: - description: A required header to protect against CSRF attacks @@ -17138,6 +17146,7 @@ paths: x-beta: true /api/fleet/agents/{agentId}/actions: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: post-fleet-agents-agentid-actions parameters: - description: A required header to protect against CSRF attacks @@ -17274,6 +17283,7 @@ paths: x-beta: true /api/fleet/agents/{agentId}/reassign: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: post-fleet-agents-agentid-reassign parameters: - description: A required header to protect against CSRF attacks @@ -17329,6 +17339,7 @@ paths: x-beta: true /api/fleet/agents/{agentId}/request_diagnostics: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-read].' operationId: post-fleet-agents-agentid-request-diagnostics parameters: - description: A required header to protect against CSRF attacks @@ -17391,6 +17402,7 @@ paths: x-beta: true /api/fleet/agents/{agentId}/unenroll: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: post-fleet-agents-agentid-unenroll parameters: - description: A required header to protect against CSRF attacks @@ -17424,6 +17436,7 @@ paths: x-beta: true /api/fleet/agents/{agentId}/upgrade: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: post-fleet-agents-agentid-upgrade parameters: - description: A required header to protect against CSRF attacks @@ -17485,6 +17498,7 @@ paths: x-beta: true /api/fleet/agents/{agentId}/uploads: get: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-read].' operationId: get-fleet-agents-agentid-uploads parameters: - in: path @@ -17558,6 +17572,7 @@ paths: x-beta: true /api/fleet/agents/action_status: get: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-read].' operationId: get-fleet-agents-action-status parameters: - in: query @@ -17716,6 +17731,7 @@ paths: x-beta: true /api/fleet/agents/actions/{actionId}/cancel: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: post-fleet-agents-actions-actionid-cancel parameters: - description: A required header to protect against CSRF attacks @@ -17802,6 +17818,7 @@ paths: x-beta: true /api/fleet/agents/available_versions: get: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-read].' operationId: get-fleet-agents-available-versions parameters: [] responses: @@ -17840,6 +17857,7 @@ paths: x-beta: true /api/fleet/agents/bulk_reassign: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: post-fleet-agents-bulk-reassign parameters: - description: A required header to protect against CSRF attacks @@ -17906,6 +17924,7 @@ paths: x-beta: true /api/fleet/agents/bulk_request_diagnostics: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-read].' operationId: post-fleet-agents-bulk-request-diagnostics parameters: - description: A required header to protect against CSRF attacks @@ -17972,6 +17991,7 @@ paths: x-beta: true /api/fleet/agents/bulk_unenroll: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: post-fleet-agents-bulk-unenroll parameters: - description: A required header to protect against CSRF attacks @@ -18043,6 +18063,7 @@ paths: x-beta: true /api/fleet/agents/bulk_update_agent_tags: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: post-fleet-agents-bulk-update-agent-tags parameters: - description: A required header to protect against CSRF attacks @@ -18114,6 +18135,7 @@ paths: x-beta: true /api/fleet/agents/bulk_upgrade: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: post-fleet-agents-bulk-upgrade parameters: - description: A required header to protect against CSRF attacks @@ -18191,7 +18213,7 @@ paths: x-beta: true /api/fleet/agents/files/{fileId}: delete: - description: Delete a file uploaded by an agent. + description: 'Delete a file uploaded by an agent.

[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: delete-fleet-agents-files-fileid parameters: - description: A required header to protect against CSRF attacks @@ -18243,7 +18265,7 @@ paths: x-beta: true /api/fleet/agents/files/{fileId}/{fileName}: get: - description: Get a file uploaded by an agent. + description: 'Get a file uploaded by an agent.

[Required authorization] Route required privileges: ALL of [fleet-agents-read].' operationId: get-fleet-agents-files-fileid-filename parameters: - in: path @@ -18284,6 +18306,7 @@ paths: x-beta: true /api/fleet/agents/setup: get: + description: '[Required authorization] Route required privileges: ANY of [fleet-agents-read OR fleet-agent-policies-read OR fleet-settings-read OR fleet-setup].' operationId: get-fleet-agents-setup parameters: [] responses: @@ -18344,6 +18367,7 @@ paths: - Elastic Agents x-beta: true post: + description: '[Required authorization] Route required privileges: ANY of [fleet-agents-read OR fleet-agent-policies-read OR fleet-settings-read OR fleet-setup].' operationId: post-fleet-agents-setup parameters: - description: A required header to protect against CSRF attacks @@ -18402,6 +18426,7 @@ paths: x-beta: true /api/fleet/agents/tags: get: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-read].' operationId: get-fleet-agents-tags parameters: - in: query @@ -18498,6 +18523,7 @@ paths: x-beta: true /api/fleet/data_streams: get: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-all, fleet-agent-policies-all, fleet-settings-all].' operationId: get-fleet-data-streams parameters: [] responses: @@ -18595,6 +18621,7 @@ paths: x-beta: true /api/fleet/enrollment_api_keys: get: + description: '[Required authorization] Route required privileges: ANY of [fleet-agents-all OR fleet-setup].' operationId: get-fleet-enrollment-api-keys parameters: - in: query @@ -18718,6 +18745,7 @@ paths: - Fleet enrollment API keys x-beta: true post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: post-fleet-enrollment-api-keys parameters: - description: A required header to protect against CSRF attacks @@ -18808,7 +18836,7 @@ paths: x-beta: true /api/fleet/enrollment_api_keys/{keyId}: delete: - description: Revoke an enrollment API key by ID by marking it as inactive. + description: 'Revoke an enrollment API key by ID by marking it as inactive.

[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: delete-fleet-enrollment-api-keys-keyid parameters: - description: A required header to protect against CSRF attacks @@ -18858,7 +18886,7 @@ paths: - Fleet enrollment API keys x-beta: true get: - description: Get an enrollment API key by ID. + description: 'Get an enrollment API key by ID.

[Required authorization] Route required privileges: ANY of [fleet-agents-all OR fleet-setup].' operationId: get-fleet-enrollment-api-keys-keyid parameters: - in: path @@ -18927,6 +18955,7 @@ paths: x-beta: true /api/fleet/epm/bulk_assets: post: + description: '[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].' operationId: post-fleet-epm-bulk-assets parameters: - description: A required header to protect against CSRF attacks @@ -19018,6 +19047,7 @@ paths: x-beta: true /api/fleet/epm/categories: get: + description: '[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].' operationId: get-fleet-epm-categories parameters: - in: query @@ -19082,6 +19112,7 @@ paths: x-beta: true /api/fleet/epm/custom_integrations: post: + description: '[Required authorization] Route required privileges: ALL of [integrations-all, fleet-agent-policies-all].' operationId: post-fleet-epm-custom-integrations parameters: - description: A required header to protect against CSRF attacks @@ -19217,6 +19248,7 @@ paths: x-beta: true /api/fleet/epm/data_streams: get: + description: '[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].' operationId: get-fleet-epm-data-streams parameters: - in: query @@ -19292,6 +19324,7 @@ paths: x-beta: true /api/fleet/epm/packages: get: + description: '[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].' operationId: get-fleet-epm-packages parameters: - in: query @@ -19684,6 +19717,7 @@ paths: - Elastic Package Manager (EPM) x-beta: true post: + description: '[Required authorization] Route required privileges: ALL of [integrations-all, fleet-agent-policies-all].' operationId: post-fleet-epm-packages parameters: - description: A required header to protect against CSRF attacks @@ -19804,6 +19838,7 @@ paths: x-beta: true /api/fleet/epm/packages/_bulk: post: + description: '[Required authorization] Route required privileges: ALL of [integrations-all, fleet-agent-policies-all].' operationId: post-fleet-epm-packages-bulk parameters: - description: A required header to protect against CSRF attacks @@ -19979,6 +20014,7 @@ paths: x-beta: true /api/fleet/epm/packages/{pkgName}/{pkgVersion}: delete: + description: '[Required authorization] Route required privileges: ALL of [integrations-all, fleet-agent-policies-all].' operationId: delete-fleet-epm-packages-pkgname-pkgversion parameters: - description: A required header to protect against CSRF attacks @@ -20558,6 +20594,7 @@ paths: - Elastic Package Manager (EPM) x-beta: true post: + description: '[Required authorization] Route required privileges: ALL of [integrations-all, fleet-agent-policies-all].' operationId: post-fleet-epm-packages-pkgname-pkgversion parameters: - description: A required header to protect against CSRF attacks @@ -20700,6 +20737,7 @@ paths: - Elastic Package Manager (EPM) x-beta: true put: + description: '[Required authorization] Route required privileges: ALL of [integrations-all, fleet-agent-policies-all].' operationId: put-fleet-epm-packages-pkgname-pkgversion parameters: - description: A required header to protect against CSRF attacks @@ -21162,6 +21200,7 @@ paths: x-beta: true /api/fleet/epm/packages/{pkgName}/{pkgVersion}/{filePath}: get: + description: '[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].' operationId: get-fleet-epm-packages-pkgname-pkgversion-filepath parameters: - in: path @@ -21291,6 +21330,7 @@ paths: x-beta: true /api/fleet/epm/packages/{pkgName}/stats: get: + description: '[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].' operationId: get-fleet-epm-packages-pkgname-stats parameters: - in: path @@ -21338,6 +21378,7 @@ paths: x-beta: true /api/fleet/epm/packages/installed: get: + description: '[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].' operationId: get-fleet-epm-packages-installed parameters: - in: query @@ -21484,6 +21525,7 @@ paths: x-beta: true /api/fleet/epm/packages/limited: get: + description: '[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].' operationId: get-fleet-epm-packages-limited parameters: [] responses: @@ -21522,6 +21564,7 @@ paths: x-beta: true /api/fleet/epm/templates/{pkgName}/{pkgVersion}/inputs: get: + description: '[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].' operationId: get-fleet-epm-templates-pkgname-pkgversion-inputs parameters: - in: path @@ -21622,6 +21665,7 @@ paths: x-beta: true /api/fleet/epm/verification_key_id: get: + description: '[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].' operationId: get-fleet-epm-verification-key-id parameters: [] responses: @@ -21659,6 +21703,7 @@ paths: x-beta: true /api/fleet/fleet_server_hosts: get: + description: '[Required authorization] Route required privileges: ANY of [fleet-agents-all OR fleet-settings-read].' operationId: get-fleet-fleet-server-hosts parameters: [] responses: @@ -21731,6 +21776,7 @@ paths: - Fleet Server hosts x-beta: true post: + description: '[Required authorization] Route required privileges: ALL of [fleet-settings-all].' operationId: post-fleet-fleet-server-hosts parameters: - description: A required header to protect against CSRF attacks @@ -21830,7 +21876,7 @@ paths: x-beta: true /api/fleet/fleet_server_hosts/{itemId}: delete: - description: Delete a Fleet Server host by ID. + description: 'Delete a Fleet Server host by ID.

[Required authorization] Route required privileges: ALL of [fleet-settings-all].' operationId: delete-fleet-fleet-server-hosts-itemid parameters: - description: A required header to protect against CSRF attacks @@ -21878,7 +21924,7 @@ paths: - Fleet Server hosts x-beta: true get: - description: Get a Fleet Server host by ID. + description: 'Get a Fleet Server host by ID.

[Required authorization] Route required privileges: ALL of [fleet-settings-read].' operationId: get-fleet-fleet-server-hosts-itemid parameters: - in: path @@ -21945,7 +21991,7 @@ paths: - Fleet Server hosts x-beta: true put: - description: Update a Fleet Server host by ID. + description: 'Update a Fleet Server host by ID.

[Required authorization] Route required privileges: ALL of [fleet-settings-all].' operationId: put-fleet-fleet-server-hosts-itemid parameters: - description: A required header to protect against CSRF attacks @@ -22043,6 +22089,7 @@ paths: x-beta: true /api/fleet/health_check: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-settings-all].' operationId: post-fleet-health-check parameters: - description: A required header to protect against CSRF attacks @@ -22117,6 +22164,7 @@ paths: x-beta: true /api/fleet/kubernetes: get: + description: '[Required authorization] Route required privileges: ALL of [fleet-agent-policies-read, fleet-setup].' operationId: get-fleet-kubernetes parameters: - in: query @@ -22168,6 +22216,7 @@ paths: x-beta: true /api/fleet/kubernetes/download: get: + description: '[Required authorization] Route required privileges: ALL of [fleet-agent-policies-read, fleet-setup].' operationId: get-fleet-kubernetes-download parameters: - in: query @@ -22229,6 +22278,7 @@ paths: x-beta: true /api/fleet/logstash_api_keys: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-settings-all].' operationId: post-fleet-logstash-api-keys parameters: - description: A required header to protect against CSRF attacks @@ -22272,6 +22322,7 @@ paths: x-beta: true /api/fleet/message_signing_service/rotate_key_pair: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-all, fleet-agent-policies-all, fleet-settings-all].' operationId: post-fleet-message-signing-service-rotate-key-pair parameters: - description: A required header to protect against CSRF attacks @@ -22337,6 +22388,7 @@ paths: x-beta: true /api/fleet/outputs: get: + description: '[Required authorization] Route required privileges: ANY of [fleet-settings-read OR fleet-agent-policies-read].' operationId: get-fleet-outputs parameters: [] responses: @@ -23062,6 +23114,7 @@ paths: - Fleet outputs x-beta: true post: + description: '[Required authorization] Route required privileges: ALL of [fleet-settings-all].' operationId: post-fleet-outputs parameters: - description: A required header to protect against CSRF attacks @@ -24468,7 +24521,7 @@ paths: x-beta: true /api/fleet/outputs/{outputId}: delete: - description: Delete output by ID. + description: 'Delete output by ID.

[Required authorization] Route required privileges: ALL of [fleet-settings-all].' operationId: delete-fleet-outputs-outputid parameters: - description: A required header to protect against CSRF attacks @@ -24532,7 +24585,7 @@ paths: - Fleet outputs x-beta: true get: - description: Get output by ID. + description: 'Get output by ID.

[Required authorization] Route required privileges: ANY of [fleet-settings-read OR fleet-agent-policies-read].' operationId: get-fleet-outputs-outputid parameters: - in: path @@ -25252,7 +25305,7 @@ paths: - Fleet outputs x-beta: true put: - description: Update output by ID. + description: 'Update output by ID.

[Required authorization] Route required privileges: ANY of [fleet-settings-all OR fleet-agent-policies-all].' operationId: put-fleet-outputs-outputid parameters: - description: A required header to protect against CSRF attacks @@ -26643,6 +26696,7 @@ paths: x-beta: true /api/fleet/outputs/{outputId}/health: get: + description: '[Required authorization] Route required privileges: ALL of [fleet-settings-read].' operationId: get-fleet-outputs-outputid-health parameters: - in: path @@ -28454,7 +28508,7 @@ paths: x-beta: true /api/fleet/package_policies/{packagePolicyId}: delete: - description: Delete a package policy by ID. + description: 'Delete a package policy by ID.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-all, integrations-all].' operationId: delete-fleet-package-policies-packagepolicyid parameters: - description: A required header to protect against CSRF attacks @@ -29782,6 +29836,7 @@ paths: x-beta: true /api/fleet/package_policies/delete: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agent-policies-all, integrations-all].' operationId: post-fleet-package-policies-delete parameters: - description: A required header to protect against CSRF attacks @@ -29911,7 +29966,7 @@ paths: x-beta: true /api/fleet/package_policies/upgrade: post: - description: Upgrade a package policy to a newer package version. + description: 'Upgrade a package policy to a newer package version.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-all, integrations-all].' operationId: post-fleet-package-policies-upgrade parameters: - description: A required header to protect against CSRF attacks @@ -29985,6 +30040,7 @@ paths: x-beta: true /api/fleet/package_policies/upgrade/dryrun: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agent-policies-read, integrations-read].' operationId: post-fleet-package-policies-upgrade-dryrun parameters: - description: A required header to protect against CSRF attacks @@ -30778,6 +30834,7 @@ paths: x-beta: true /api/fleet/proxies: get: + description: '[Required authorization] Route required privileges: ALL of [fleet-settings-read].' operationId: get-fleet-proxies parameters: [] responses: @@ -30856,6 +30913,7 @@ paths: - Fleet proxies x-beta: true post: + description: '[Required authorization] Route required privileges: ALL of [fleet-settings-all].' operationId: post-fleet-proxies parameters: - description: A required header to protect against CSRF attacks @@ -30967,7 +31025,7 @@ paths: x-beta: true /api/fleet/proxies/{itemId}: delete: - description: Delete a proxy by ID + description: 'Delete a proxy by ID

[Required authorization] Route required privileges: ALL of [fleet-settings-all].' operationId: delete-fleet-proxies-itemid parameters: - description: A required header to protect against CSRF attacks @@ -31015,7 +31073,7 @@ paths: - Fleet proxies x-beta: true get: - description: Get a proxy by ID. + description: 'Get a proxy by ID.

[Required authorization] Route required privileges: ALL of [fleet-settings-read].' operationId: get-fleet-proxies-itemid parameters: - in: path @@ -31088,7 +31146,7 @@ paths: - Fleet proxies x-beta: true put: - description: Update a proxy by ID. + description: 'Update a proxy by ID.

[Required authorization] Route required privileges: ALL of [fleet-settings-all].' operationId: put-fleet-proxies-itemid parameters: - description: A required header to protect against CSRF attacks @@ -31202,6 +31260,7 @@ paths: x-beta: true /api/fleet/service_tokens: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: post-fleet-service-tokens parameters: - description: A required header to protect against CSRF attacks @@ -31259,6 +31318,7 @@ paths: x-beta: true /api/fleet/settings: get: + description: '[Required authorization] Route required privileges: ALL of [fleet-settings-read].' operationId: get-fleet-settings parameters: [] responses: @@ -31347,6 +31407,7 @@ paths: - Fleet internals x-beta: true put: + description: '[Required authorization] Route required privileges: ALL of [fleet-settings-all].' operationId: put-fleet-settings parameters: - description: A required header to protect against CSRF attacks @@ -31474,6 +31535,7 @@ paths: x-beta: true /api/fleet/setup: post: + description: '[Required authorization] Route required privileges: ANY of [fleet-agents-read OR fleet-agent-policies-read OR fleet-settings-read OR fleet-setup].' operationId: post-fleet-setup parameters: - description: A required header to protect against CSRF attacks @@ -31544,7 +31606,7 @@ paths: x-beta: true /api/fleet/uninstall_tokens: get: - description: List the metadata for the latest uninstall tokens per agent policy. + description: 'List the metadata for the latest uninstall tokens per agent policy.

[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: get-fleet-uninstall-tokens parameters: - description: Partial match filtering for policy IDs @@ -31637,7 +31699,7 @@ paths: x-beta: true /api/fleet/uninstall_tokens/{uninstallTokenId}: get: - description: Get one decrypted uninstall token by its ID. + description: 'Get one decrypted uninstall token by its ID.

[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: get-fleet-uninstall-tokens-uninstalltokenid parameters: - in: path diff --git a/oas_docs/output/kibana.yaml b/oas_docs/output/kibana.yaml index 38cc5ab0e932f..692e97f6f7e63 100644 --- a/oas_docs/output/kibana.yaml +++ b/oas_docs/output/kibana.yaml @@ -13346,6 +13346,7 @@ paths: - Security Exceptions API /api/fleet/agent_download_sources: get: + description: '[Required authorization] Route required privileges: ANY of [fleet-agent-policies-read OR fleet-settings-read].' operationId: get-fleet-agent-download-sources parameters: [] responses: @@ -13411,6 +13412,7 @@ paths: tags: - Elastic Agent binary download sources post: + description: '[Required authorization] Route required privileges: ALL of [fleet-settings-all].' operationId: post-fleet-agent-download-sources parameters: - description: A required header to protect against CSRF attacks @@ -13497,7 +13499,7 @@ paths: - Elastic Agent binary download sources /api/fleet/agent_download_sources/{sourceId}: delete: - description: Delete an agent binary download source by ID. + description: 'Delete an agent binary download source by ID.

[Required authorization] Route required privileges: ALL of [fleet-settings-all].' operationId: delete-fleet-agent-download-sources-sourceid parameters: - description: A required header to protect against CSRF attacks @@ -13544,7 +13546,7 @@ paths: tags: - Elastic Agent binary download sources get: - description: Get an agent binary download source by ID. + description: 'Get an agent binary download source by ID.

[Required authorization] Route required privileges: ANY of [fleet-agent-policies-read OR fleet-settings-read].' operationId: get-fleet-agent-download-sources-sourceid parameters: - in: path @@ -13604,7 +13606,7 @@ paths: tags: - Elastic Agent binary download sources put: - description: Update an agent binary download source by ID. + description: 'Update an agent binary download source by ID.

[Required authorization] Route required privileges: ALL of [fleet-settings-all].' operationId: put-fleet-agent-download-sources-sourceid parameters: - description: A required header to protect against CSRF attacks @@ -13696,6 +13698,7 @@ paths: - Elastic Agent binary download sources /api/fleet/agent_policies: get: + description: '[Required authorization] Route required privileges: ANY of [fleet-agent-policies-read OR fleet-agents-read OR fleet-setup].' operationId: get-fleet-agent-policies parameters: - in: query @@ -14274,6 +14277,7 @@ paths: tags: - Elastic Agent policies post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agent-policies-all].' operationId: post-fleet-agent-policies parameters: - description: A required header to protect against CSRF attacks @@ -14966,6 +14970,7 @@ paths: - Elastic Agent policies /api/fleet/agent_policies/_bulk_get: post: + description: '[Required authorization] Route required privileges: ANY of [fleet-agent-policies-read OR fleet-agents-read OR fleet-setup].' operationId: post-fleet-agent-policies-bulk-get parameters: - description: A required header to protect against CSRF attacks @@ -15510,7 +15515,7 @@ paths: - Elastic Agent policies /api/fleet/agent_policies/{agentPolicyId}: get: - description: Get an agent policy by ID. + description: 'Get an agent policy by ID.

[Required authorization] Route required privileges: ANY of [fleet-agent-policies-read OR fleet-agents-read OR fleet-setup].' operationId: get-fleet-agent-policies-agentpolicyid parameters: - in: path @@ -16031,7 +16036,7 @@ paths: tags: - Elastic Agent policies put: - description: Update an agent policy by ID. + description: 'Update an agent policy by ID.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-all].' operationId: put-fleet-agent-policies-agentpolicyid parameters: - description: A required header to protect against CSRF attacks @@ -16732,7 +16737,7 @@ paths: - Elastic Agent policies /api/fleet/agent_policies/{agentPolicyId}/copy: post: - description: Copy an agent policy by ID. + description: 'Copy an agent policy by ID.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-all].' operationId: post-fleet-agent-policies-agentpolicyid-copy parameters: - description: A required header to protect against CSRF attacks @@ -17275,7 +17280,7 @@ paths: - Elastic Agent policies /api/fleet/agent_policies/{agentPolicyId}/download: get: - description: Download an agent policy by ID. + description: 'Download an agent policy by ID.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-read, fleet-setup].' operationId: get-fleet-agent-policies-agentpolicyid-download parameters: - in: path @@ -17341,7 +17346,7 @@ paths: - Elastic Agent policies /api/fleet/agent_policies/{agentPolicyId}/full: get: - description: Get a full agent policy by ID. + description: 'Get a full agent policy by ID.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-read].' operationId: get-fleet-agent-policies-agentpolicyid-full parameters: - in: path @@ -17689,7 +17694,7 @@ paths: - Elastic Agent policies /api/fleet/agent_policies/{agentPolicyId}/outputs: get: - description: Get a list of outputs associated with agent policy by policy id. + description: 'Get a list of outputs associated with agent policy by policy id.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-read, fleet-settings-read].' operationId: get-fleet-agent-policies-agentpolicyid-outputs parameters: - in: path @@ -17785,7 +17790,7 @@ paths: - Elastic Agent policies /api/fleet/agent_policies/delete: post: - description: Delete an agent policy by ID. + description: 'Delete an agent policy by ID.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-all].' operationId: post-fleet-agent-policies-delete parameters: - description: A required header to protect against CSRF attacks @@ -17845,7 +17850,7 @@ paths: - Elastic Agent policies /api/fleet/agent_policies/outputs: post: - description: Get a list of outputs associated with agent policies. + description: 'Get a list of outputs associated with agent policies.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-read, fleet-settings-read].' operationId: post-fleet-agent-policies-outputs parameters: - description: A required header to protect against CSRF attacks @@ -18046,6 +18051,7 @@ paths: - Elastic Agent status /api/fleet/agent_status/data: get: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-read].' operationId: get-fleet-agent-status-data parameters: - in: query @@ -18120,6 +18126,7 @@ paths: - Elastic Agents /api/fleet/agents: get: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-read].' operationId: get-fleet-agents parameters: - in: query @@ -18498,6 +18505,7 @@ paths: tags: - Elastic Agents post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-read].' operationId: post-fleet-agents parameters: - description: A required header to protect against CSRF attacks @@ -18555,7 +18563,7 @@ paths: - Elastic Agents /api/fleet/agents/{agentId}: delete: - description: Delete an agent by ID. + description: 'Delete an agent by ID.

[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: delete-fleet-agents-agentid parameters: - description: A required header to protect against CSRF attacks @@ -18604,7 +18612,7 @@ paths: tags: - Elastic Agents get: - description: Get an agent by ID. + description: 'Get an agent by ID.

[Required authorization] Route required privileges: ALL of [fleet-agents-read].' operationId: get-fleet-agents-agentid parameters: - in: path @@ -18925,7 +18933,7 @@ paths: tags: - Elastic Agents put: - description: Update an agent by ID. + description: 'Update an agent by ID.

[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: put-fleet-agents-agentid parameters: - description: A required header to protect against CSRF attacks @@ -19262,6 +19270,7 @@ paths: - Elastic Agents /api/fleet/agents/{agentId}/actions: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: post-fleet-agents-agentid-actions parameters: - description: A required header to protect against CSRF attacks @@ -19397,6 +19406,7 @@ paths: - Elastic Agent actions /api/fleet/agents/{agentId}/reassign: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: post-fleet-agents-agentid-reassign parameters: - description: A required header to protect against CSRF attacks @@ -19451,6 +19461,7 @@ paths: - Elastic Agent actions /api/fleet/agents/{agentId}/request_diagnostics: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-read].' operationId: post-fleet-agents-agentid-request-diagnostics parameters: - description: A required header to protect against CSRF attacks @@ -19512,6 +19523,7 @@ paths: - Elastic Agent actions /api/fleet/agents/{agentId}/unenroll: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: post-fleet-agents-agentid-unenroll parameters: - description: A required header to protect against CSRF attacks @@ -19544,6 +19556,7 @@ paths: - Elastic Agent actions /api/fleet/agents/{agentId}/upgrade: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: post-fleet-agents-agentid-upgrade parameters: - description: A required header to protect against CSRF attacks @@ -19604,6 +19617,7 @@ paths: - Elastic Agent actions /api/fleet/agents/{agentId}/uploads: get: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-read].' operationId: get-fleet-agents-agentid-uploads parameters: - in: path @@ -19676,6 +19690,7 @@ paths: - Elastic Agents /api/fleet/agents/action_status: get: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-read].' operationId: get-fleet-agents-action-status parameters: - in: query @@ -19833,6 +19848,7 @@ paths: - Elastic Agent actions /api/fleet/agents/actions/{actionId}/cancel: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: post-fleet-agents-actions-actionid-cancel parameters: - description: A required header to protect against CSRF attacks @@ -19918,6 +19934,7 @@ paths: - Elastic Agent actions /api/fleet/agents/available_versions: get: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-read].' operationId: get-fleet-agents-available-versions parameters: [] responses: @@ -19955,6 +19972,7 @@ paths: - Elastic Agents /api/fleet/agents/bulk_reassign: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: post-fleet-agents-bulk-reassign parameters: - description: A required header to protect against CSRF attacks @@ -20020,6 +20038,7 @@ paths: - Elastic Agent actions /api/fleet/agents/bulk_request_diagnostics: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-read].' operationId: post-fleet-agents-bulk-request-diagnostics parameters: - description: A required header to protect against CSRF attacks @@ -20085,6 +20104,7 @@ paths: - Elastic Agent actions /api/fleet/agents/bulk_unenroll: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: post-fleet-agents-bulk-unenroll parameters: - description: A required header to protect against CSRF attacks @@ -20155,6 +20175,7 @@ paths: - Elastic Agent actions /api/fleet/agents/bulk_update_agent_tags: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: post-fleet-agents-bulk-update-agent-tags parameters: - description: A required header to protect against CSRF attacks @@ -20225,6 +20246,7 @@ paths: - Elastic Agent actions /api/fleet/agents/bulk_upgrade: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: post-fleet-agents-bulk-upgrade parameters: - description: A required header to protect against CSRF attacks @@ -20301,7 +20323,7 @@ paths: - Elastic Agent actions /api/fleet/agents/files/{fileId}: delete: - description: Delete a file uploaded by an agent. + description: 'Delete a file uploaded by an agent.

[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: delete-fleet-agents-files-fileid parameters: - description: A required header to protect against CSRF attacks @@ -20352,7 +20374,7 @@ paths: - Elastic Agents /api/fleet/agents/files/{fileId}/{fileName}: get: - description: Get a file uploaded by an agent. + description: 'Get a file uploaded by an agent.

[Required authorization] Route required privileges: ALL of [fleet-agents-read].' operationId: get-fleet-agents-files-fileid-filename parameters: - in: path @@ -20392,6 +20414,7 @@ paths: - Elastic Agents /api/fleet/agents/setup: get: + description: '[Required authorization] Route required privileges: ANY of [fleet-agents-read OR fleet-agent-policies-read OR fleet-settings-read OR fleet-setup].' operationId: get-fleet-agents-setup parameters: [] responses: @@ -20451,6 +20474,7 @@ paths: tags: - Elastic Agents post: + description: '[Required authorization] Route required privileges: ANY of [fleet-agents-read OR fleet-agent-policies-read OR fleet-settings-read OR fleet-setup].' operationId: post-fleet-agents-setup parameters: - description: A required header to protect against CSRF attacks @@ -20508,6 +20532,7 @@ paths: - Elastic Agents /api/fleet/agents/tags: get: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-read].' operationId: get-fleet-agents-tags parameters: - in: query @@ -20602,6 +20627,7 @@ paths: - Fleet internals /api/fleet/data_streams: get: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-all, fleet-agent-policies-all, fleet-settings-all].' operationId: get-fleet-data-streams parameters: [] responses: @@ -20698,6 +20724,7 @@ paths: - Data streams /api/fleet/enrollment_api_keys: get: + description: '[Required authorization] Route required privileges: ANY of [fleet-agents-all OR fleet-setup].' operationId: get-fleet-enrollment-api-keys parameters: - in: query @@ -20820,6 +20847,7 @@ paths: tags: - Fleet enrollment API keys post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: post-fleet-enrollment-api-keys parameters: - description: A required header to protect against CSRF attacks @@ -20909,7 +20937,7 @@ paths: - Fleet enrollment API keys /api/fleet/enrollment_api_keys/{keyId}: delete: - description: Revoke an enrollment API key by ID by marking it as inactive. + description: 'Revoke an enrollment API key by ID by marking it as inactive.

[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: delete-fleet-enrollment-api-keys-keyid parameters: - description: A required header to protect against CSRF attacks @@ -20958,7 +20986,7 @@ paths: tags: - Fleet enrollment API keys get: - description: Get an enrollment API key by ID. + description: 'Get an enrollment API key by ID.

[Required authorization] Route required privileges: ANY of [fleet-agents-all OR fleet-setup].' operationId: get-fleet-enrollment-api-keys-keyid parameters: - in: path @@ -21026,6 +21054,7 @@ paths: - Fleet enrollment API keys /api/fleet/epm/bulk_assets: post: + description: '[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].' operationId: post-fleet-epm-bulk-assets parameters: - description: A required header to protect against CSRF attacks @@ -21116,6 +21145,7 @@ paths: - Elastic Package Manager (EPM) /api/fleet/epm/categories: get: + description: '[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].' operationId: get-fleet-epm-categories parameters: - in: query @@ -21179,6 +21209,7 @@ paths: - Elastic Package Manager (EPM) /api/fleet/epm/custom_integrations: post: + description: '[Required authorization] Route required privileges: ALL of [integrations-all, fleet-agent-policies-all].' operationId: post-fleet-epm-custom-integrations parameters: - description: A required header to protect against CSRF attacks @@ -21313,6 +21344,7 @@ paths: - Elastic Package Manager (EPM) /api/fleet/epm/data_streams: get: + description: '[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].' operationId: get-fleet-epm-data-streams parameters: - in: query @@ -21387,6 +21419,7 @@ paths: - Data streams /api/fleet/epm/packages: get: + description: '[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].' operationId: get-fleet-epm-packages parameters: - in: query @@ -21778,6 +21811,7 @@ paths: tags: - Elastic Package Manager (EPM) post: + description: '[Required authorization] Route required privileges: ALL of [integrations-all, fleet-agent-policies-all].' operationId: post-fleet-epm-packages parameters: - description: A required header to protect against CSRF attacks @@ -21897,6 +21931,7 @@ paths: - Elastic Package Manager (EPM) /api/fleet/epm/packages/_bulk: post: + description: '[Required authorization] Route required privileges: ALL of [integrations-all, fleet-agent-policies-all].' operationId: post-fleet-epm-packages-bulk parameters: - description: A required header to protect against CSRF attacks @@ -22071,6 +22106,7 @@ paths: - Elastic Package Manager (EPM) /api/fleet/epm/packages/{pkgName}/{pkgVersion}: delete: + description: '[Required authorization] Route required privileges: ALL of [integrations-all, fleet-agent-policies-all].' operationId: delete-fleet-epm-packages-pkgname-pkgversion parameters: - description: A required header to protect against CSRF attacks @@ -22648,6 +22684,7 @@ paths: tags: - Elastic Package Manager (EPM) post: + description: '[Required authorization] Route required privileges: ALL of [integrations-all, fleet-agent-policies-all].' operationId: post-fleet-epm-packages-pkgname-pkgversion parameters: - description: A required header to protect against CSRF attacks @@ -22789,6 +22826,7 @@ paths: tags: - Elastic Package Manager (EPM) put: + description: '[Required authorization] Route required privileges: ALL of [integrations-all, fleet-agent-policies-all].' operationId: put-fleet-epm-packages-pkgname-pkgversion parameters: - description: A required header to protect against CSRF attacks @@ -23250,6 +23288,7 @@ paths: - Elastic Package Manager (EPM) /api/fleet/epm/packages/{pkgName}/{pkgVersion}/{filePath}: get: + description: '[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].' operationId: get-fleet-epm-packages-pkgname-pkgversion-filepath parameters: - in: path @@ -23377,6 +23416,7 @@ paths: - Elastic Package Manager (EPM) /api/fleet/epm/packages/{pkgName}/stats: get: + description: '[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].' operationId: get-fleet-epm-packages-pkgname-stats parameters: - in: path @@ -23423,6 +23463,7 @@ paths: - Elastic Package Manager (EPM) /api/fleet/epm/packages/installed: get: + description: '[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].' operationId: get-fleet-epm-packages-installed parameters: - in: query @@ -23568,6 +23609,7 @@ paths: - Elastic Package Manager (EPM) /api/fleet/epm/packages/limited: get: + description: '[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].' operationId: get-fleet-epm-packages-limited parameters: [] responses: @@ -23605,6 +23647,7 @@ paths: - Elastic Package Manager (EPM) /api/fleet/epm/templates/{pkgName}/{pkgVersion}/inputs: get: + description: '[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].' operationId: get-fleet-epm-templates-pkgname-pkgversion-inputs parameters: - in: path @@ -23704,6 +23747,7 @@ paths: - Elastic Package Manager (EPM) /api/fleet/epm/verification_key_id: get: + description: '[Required authorization] Route required privileges: ANY of [integrations-read OR fleet-setup OR fleet-all].' operationId: get-fleet-epm-verification-key-id parameters: [] responses: @@ -23740,6 +23784,7 @@ paths: - Elastic Package Manager (EPM) /api/fleet/fleet_server_hosts: get: + description: '[Required authorization] Route required privileges: ANY of [fleet-agents-all OR fleet-settings-read].' operationId: get-fleet-fleet-server-hosts parameters: [] responses: @@ -23811,6 +23856,7 @@ paths: tags: - Fleet Server hosts post: + description: '[Required authorization] Route required privileges: ALL of [fleet-settings-all].' operationId: post-fleet-fleet-server-hosts parameters: - description: A required header to protect against CSRF attacks @@ -23909,7 +23955,7 @@ paths: - Fleet Server hosts /api/fleet/fleet_server_hosts/{itemId}: delete: - description: Delete a Fleet Server host by ID. + description: 'Delete a Fleet Server host by ID.

[Required authorization] Route required privileges: ALL of [fleet-settings-all].' operationId: delete-fleet-fleet-server-hosts-itemid parameters: - description: A required header to protect against CSRF attacks @@ -23956,7 +24002,7 @@ paths: tags: - Fleet Server hosts get: - description: Get a Fleet Server host by ID. + description: 'Get a Fleet Server host by ID.

[Required authorization] Route required privileges: ALL of [fleet-settings-read].' operationId: get-fleet-fleet-server-hosts-itemid parameters: - in: path @@ -24022,7 +24068,7 @@ paths: tags: - Fleet Server hosts put: - description: Update a Fleet Server host by ID. + description: 'Update a Fleet Server host by ID.

[Required authorization] Route required privileges: ALL of [fleet-settings-all].' operationId: put-fleet-fleet-server-hosts-itemid parameters: - description: A required header to protect against CSRF attacks @@ -24119,6 +24165,7 @@ paths: - Fleet Server hosts /api/fleet/health_check: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-settings-all].' operationId: post-fleet-health-check parameters: - description: A required header to protect against CSRF attacks @@ -24192,6 +24239,7 @@ paths: - Fleet internals /api/fleet/kubernetes: get: + description: '[Required authorization] Route required privileges: ALL of [fleet-agent-policies-read, fleet-setup].' operationId: get-fleet-kubernetes parameters: - in: query @@ -24242,6 +24290,7 @@ paths: - Elastic Agent policies /api/fleet/kubernetes/download: get: + description: '[Required authorization] Route required privileges: ALL of [fleet-agent-policies-read, fleet-setup].' operationId: get-fleet-kubernetes-download parameters: - in: query @@ -24302,6 +24351,7 @@ paths: - Elastic Agent policies /api/fleet/logstash_api_keys: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-settings-all].' operationId: post-fleet-logstash-api-keys parameters: - description: A required header to protect against CSRF attacks @@ -24344,6 +24394,7 @@ paths: - Fleet outputs /api/fleet/message_signing_service/rotate_key_pair: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-all, fleet-agent-policies-all, fleet-settings-all].' operationId: post-fleet-message-signing-service-rotate-key-pair parameters: - description: A required header to protect against CSRF attacks @@ -24408,6 +24459,7 @@ paths: - Message Signing Service /api/fleet/outputs: get: + description: '[Required authorization] Route required privileges: ANY of [fleet-settings-read OR fleet-agent-policies-read].' operationId: get-fleet-outputs parameters: [] responses: @@ -25132,6 +25184,7 @@ paths: tags: - Fleet outputs post: + description: '[Required authorization] Route required privileges: ALL of [fleet-settings-all].' operationId: post-fleet-outputs parameters: - description: A required header to protect against CSRF attacks @@ -26537,7 +26590,7 @@ paths: - Fleet outputs /api/fleet/outputs/{outputId}: delete: - description: Delete output by ID. + description: 'Delete output by ID.

[Required authorization] Route required privileges: ALL of [fleet-settings-all].' operationId: delete-fleet-outputs-outputid parameters: - description: A required header to protect against CSRF attacks @@ -26600,7 +26653,7 @@ paths: tags: - Fleet outputs get: - description: Get output by ID. + description: 'Get output by ID.

[Required authorization] Route required privileges: ANY of [fleet-settings-read OR fleet-agent-policies-read].' operationId: get-fleet-outputs-outputid parameters: - in: path @@ -27319,7 +27372,7 @@ paths: tags: - Fleet outputs put: - description: Update output by ID. + description: 'Update output by ID.

[Required authorization] Route required privileges: ANY of [fleet-settings-all OR fleet-agent-policies-all].' operationId: put-fleet-outputs-outputid parameters: - description: A required header to protect against CSRF attacks @@ -28709,6 +28762,7 @@ paths: - Fleet outputs /api/fleet/outputs/{outputId}/health: get: + description: '[Required authorization] Route required privileges: ALL of [fleet-settings-read].' operationId: get-fleet-outputs-outputid-health parameters: - in: path @@ -30516,7 +30570,7 @@ paths: - Fleet package policies /api/fleet/package_policies/{packagePolicyId}: delete: - description: Delete a package policy by ID. + description: 'Delete a package policy by ID.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-all, integrations-all].' operationId: delete-fleet-package-policies-packagepolicyid parameters: - description: A required header to protect against CSRF attacks @@ -31841,6 +31895,7 @@ paths: - Fleet package policies /api/fleet/package_policies/delete: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agent-policies-all, integrations-all].' operationId: post-fleet-package-policies-delete parameters: - description: A required header to protect against CSRF attacks @@ -31969,7 +32024,7 @@ paths: - Fleet package policies /api/fleet/package_policies/upgrade: post: - description: Upgrade a package policy to a newer package version. + description: 'Upgrade a package policy to a newer package version.

[Required authorization] Route required privileges: ALL of [fleet-agent-policies-all, integrations-all].' operationId: post-fleet-package-policies-upgrade parameters: - description: A required header to protect against CSRF attacks @@ -32042,6 +32097,7 @@ paths: - Fleet package policies /api/fleet/package_policies/upgrade/dryrun: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agent-policies-read, integrations-read].' operationId: post-fleet-package-policies-upgrade-dryrun parameters: - description: A required header to protect against CSRF attacks @@ -32834,6 +32890,7 @@ paths: - Fleet package policies /api/fleet/proxies: get: + description: '[Required authorization] Route required privileges: ALL of [fleet-settings-read].' operationId: get-fleet-proxies parameters: [] responses: @@ -32911,6 +32968,7 @@ paths: tags: - Fleet proxies post: + description: '[Required authorization] Route required privileges: ALL of [fleet-settings-all].' operationId: post-fleet-proxies parameters: - description: A required header to protect against CSRF attacks @@ -33021,7 +33079,7 @@ paths: - Fleet proxies /api/fleet/proxies/{itemId}: delete: - description: Delete a proxy by ID + description: 'Delete a proxy by ID

[Required authorization] Route required privileges: ALL of [fleet-settings-all].' operationId: delete-fleet-proxies-itemid parameters: - description: A required header to protect against CSRF attacks @@ -33068,7 +33126,7 @@ paths: tags: - Fleet proxies get: - description: Get a proxy by ID. + description: 'Get a proxy by ID.

[Required authorization] Route required privileges: ALL of [fleet-settings-read].' operationId: get-fleet-proxies-itemid parameters: - in: path @@ -33140,7 +33198,7 @@ paths: tags: - Fleet proxies put: - description: Update a proxy by ID. + description: 'Update a proxy by ID.

[Required authorization] Route required privileges: ALL of [fleet-settings-all].' operationId: put-fleet-proxies-itemid parameters: - description: A required header to protect against CSRF attacks @@ -33253,6 +33311,7 @@ paths: - Fleet proxies /api/fleet/service_tokens: post: + description: '[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: post-fleet-service-tokens parameters: - description: A required header to protect against CSRF attacks @@ -33309,6 +33368,7 @@ paths: - Fleet service tokens /api/fleet/settings: get: + description: '[Required authorization] Route required privileges: ALL of [fleet-settings-read].' operationId: get-fleet-settings parameters: [] responses: @@ -33396,6 +33456,7 @@ paths: tags: - Fleet internals put: + description: '[Required authorization] Route required privileges: ALL of [fleet-settings-all].' operationId: put-fleet-settings parameters: - description: A required header to protect against CSRF attacks @@ -33522,6 +33583,7 @@ paths: - Fleet internals /api/fleet/setup: post: + description: '[Required authorization] Route required privileges: ANY of [fleet-agents-read OR fleet-agent-policies-read OR fleet-settings-read OR fleet-setup].' operationId: post-fleet-setup parameters: - description: A required header to protect against CSRF attacks @@ -33591,7 +33653,7 @@ paths: - Fleet internals /api/fleet/uninstall_tokens: get: - description: List the metadata for the latest uninstall tokens per agent policy. + description: 'List the metadata for the latest uninstall tokens per agent policy.

[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: get-fleet-uninstall-tokens parameters: - description: Partial match filtering for policy IDs @@ -33683,7 +33745,7 @@ paths: - Fleet uninstall tokens /api/fleet/uninstall_tokens/{uninstallTokenId}: get: - description: Get one decrypted uninstall token by its ID. + description: 'Get one decrypted uninstall token by its ID.

[Required authorization] Route required privileges: ALL of [fleet-agents-all].' operationId: get-fleet-uninstall-tokens-uninstalltokenid parameters: - in: path diff --git a/package.json b/package.json index b42f080ba4a85..ac133a6136d77 100644 --- a/package.json +++ b/package.json @@ -116,7 +116,7 @@ "@elastic/ebt": "^1.1.1", "@elastic/ecs": "^8.11.1", "@elastic/elasticsearch": "^8.16.0", - "@elastic/ems-client": "8.5.3", + "@elastic/ems-client": "8.6.2", "@elastic/eui": "98.2.1-borealis.2", "@elastic/eui-theme-borealis": "0.0.7", "@elastic/filesaver": "1.1.2", @@ -815,6 +815,7 @@ "@kbn/search-playground": "link:x-pack/solutions/search/plugins/search_playground", "@kbn/search-response-warnings": "link:src/platform/packages/shared/kbn-search-response-warnings", "@kbn/search-shared-ui": "link:x-pack/solutions/search/packages/search/shared_ui", + "@kbn/search-synonyms": "link:x-pack/solutions/search/plugins/search_synonyms", "@kbn/search-types": "link:src/platform/packages/shared/kbn-search-types", "@kbn/searchprofiler-plugin": "link:x-pack/platform/plugins/shared/searchprofiler", "@kbn/security-api-key-management": "link:x-pack/platform/packages/shared/security/api_key_management", @@ -878,56 +879,56 @@ "@kbn/share-examples-plugin": "link:examples/share_examples", "@kbn/share-plugin": "link:src/platform/plugins/shared/share", "@kbn/shared-svg": "link:src/platform/packages/shared/kbn-shared-svg", - "@kbn/shared-ux-avatar-solution": "link:packages/shared-ux/avatar/solution", - "@kbn/shared-ux-button-exit-full-screen": "link:packages/shared-ux/button/exit_full_screen", - "@kbn/shared-ux-button-toolbar": "link:packages/shared-ux/button_toolbar", - "@kbn/shared-ux-card-no-data": "link:packages/shared-ux/card/no_data/impl", - "@kbn/shared-ux-card-no-data-mocks": "link:packages/shared-ux/card/no_data/mocks", - "@kbn/shared-ux-card-no-data-types": "link:packages/shared-ux/card/no_data/types", - "@kbn/shared-ux-chrome-navigation": "link:packages/shared-ux/chrome/navigation", - "@kbn/shared-ux-error-boundary": "link:packages/shared-ux/error_boundary", - "@kbn/shared-ux-file-context": "link:packages/shared-ux/file/context", - "@kbn/shared-ux-file-image": "link:packages/shared-ux/file/image/impl", - "@kbn/shared-ux-file-image-mocks": "link:packages/shared-ux/file/image/mocks", - "@kbn/shared-ux-file-mocks": "link:packages/shared-ux/file/mocks", - "@kbn/shared-ux-file-picker": "link:packages/shared-ux/file/file_picker/impl", - "@kbn/shared-ux-file-types": "link:packages/shared-ux/file/types", - "@kbn/shared-ux-file-upload": "link:packages/shared-ux/file/file_upload/impl", - "@kbn/shared-ux-file-util": "link:packages/shared-ux/file/util", - "@kbn/shared-ux-link-redirect-app": "link:packages/shared-ux/link/redirect_app/impl", - "@kbn/shared-ux-link-redirect-app-mocks": "link:packages/shared-ux/link/redirect_app/mocks", - "@kbn/shared-ux-link-redirect-app-types": "link:packages/shared-ux/link/redirect_app/types", - "@kbn/shared-ux-markdown": "link:packages/shared-ux/markdown/impl", - "@kbn/shared-ux-markdown-mocks": "link:packages/shared-ux/markdown/mocks", - "@kbn/shared-ux-markdown-types": "link:packages/shared-ux/markdown/types", - "@kbn/shared-ux-page-analytics-no-data": "link:packages/shared-ux/page/analytics_no_data/impl", - "@kbn/shared-ux-page-analytics-no-data-mocks": "link:packages/shared-ux/page/analytics_no_data/mocks", - "@kbn/shared-ux-page-analytics-no-data-types": "link:packages/shared-ux/page/analytics_no_data/types", - "@kbn/shared-ux-page-kibana-no-data": "link:packages/shared-ux/page/kibana_no_data/impl", - "@kbn/shared-ux-page-kibana-no-data-mocks": "link:packages/shared-ux/page/kibana_no_data/mocks", - "@kbn/shared-ux-page-kibana-no-data-types": "link:packages/shared-ux/page/kibana_no_data/types", - "@kbn/shared-ux-page-kibana-template": "link:packages/shared-ux/page/kibana_template/impl", - "@kbn/shared-ux-page-kibana-template-mocks": "link:packages/shared-ux/page/kibana_template/mocks", - "@kbn/shared-ux-page-kibana-template-types": "link:packages/shared-ux/page/kibana_template/types", - "@kbn/shared-ux-page-no-data": "link:packages/shared-ux/page/no_data/impl", - "@kbn/shared-ux-page-no-data-config": "link:packages/shared-ux/page/no_data_config/impl", - "@kbn/shared-ux-page-no-data-config-mocks": "link:packages/shared-ux/page/no_data_config/mocks", - "@kbn/shared-ux-page-no-data-config-types": "link:packages/shared-ux/page/no_data_config/types", - "@kbn/shared-ux-page-no-data-mocks": "link:packages/shared-ux/page/no_data/mocks", - "@kbn/shared-ux-page-no-data-types": "link:packages/shared-ux/page/no_data/types", - "@kbn/shared-ux-page-solution-nav": "link:packages/shared-ux/page/solution_nav", - "@kbn/shared-ux-prompt-no-data-views": "link:packages/shared-ux/prompt/no_data_views/impl", - "@kbn/shared-ux-prompt-no-data-views-mocks": "link:packages/shared-ux/prompt/no_data_views/mocks", - "@kbn/shared-ux-prompt-no-data-views-types": "link:packages/shared-ux/prompt/no_data_views/types", - "@kbn/shared-ux-prompt-not-found": "link:packages/shared-ux/prompt/not_found", - "@kbn/shared-ux-router": "link:packages/shared-ux/router/impl", - "@kbn/shared-ux-router-mocks": "link:packages/shared-ux/router/mocks", - "@kbn/shared-ux-router-types": "link:packages/shared-ux/router/types", - "@kbn/shared-ux-storybook-config": "link:packages/shared-ux/storybook/config", - "@kbn/shared-ux-storybook-mock": "link:packages/shared-ux/storybook/mock", - "@kbn/shared-ux-tabbed-modal": "link:packages/shared-ux/modal/tabbed", - "@kbn/shared-ux-table-persist": "link:packages/shared-ux/table_persist", - "@kbn/shared-ux-utility": "link:packages/kbn-shared-ux-utility", + "@kbn/shared-ux-avatar-solution": "link:src/platform/packages/shared/shared-ux/avatar/solution", + "@kbn/shared-ux-button-exit-full-screen": "link:src/platform/packages/shared/shared-ux/button/exit_full_screen", + "@kbn/shared-ux-button-toolbar": "link:src/platform/packages/shared/shared-ux/button_toolbar", + "@kbn/shared-ux-card-no-data": "link:src/platform/packages/shared/shared-ux/card/no_data/impl", + "@kbn/shared-ux-card-no-data-mocks": "link:src/platform/packages/shared/shared-ux/card/no_data/mocks", + "@kbn/shared-ux-card-no-data-types": "link:src/platform/packages/shared/shared-ux/card/no_data/types", + "@kbn/shared-ux-chrome-navigation": "link:src/platform/packages/shared/shared-ux/chrome/navigation", + "@kbn/shared-ux-error-boundary": "link:src/platform/packages/shared/shared-ux/error_boundary", + "@kbn/shared-ux-file-context": "link:src/platform/packages/shared/shared-ux/file/context", + "@kbn/shared-ux-file-image": "link:src/platform/packages/shared/shared-ux/file/image/impl", + "@kbn/shared-ux-file-image-mocks": "link:src/platform/packages/shared/shared-ux/file/image/mocks", + "@kbn/shared-ux-file-mocks": "link:src/platform/packages/shared/shared-ux/file/mocks", + "@kbn/shared-ux-file-picker": "link:src/platform/packages/shared/shared-ux/file/file_picker/impl", + "@kbn/shared-ux-file-types": "link:src/platform/packages/shared/shared-ux/file/types", + "@kbn/shared-ux-file-upload": "link:src/platform/packages/shared/shared-ux/file/file_upload/impl", + "@kbn/shared-ux-file-util": "link:src/platform/packages/shared/shared-ux/file/util", + "@kbn/shared-ux-link-redirect-app": "link:src/platform/packages/shared/shared-ux/link/redirect_app/impl", + "@kbn/shared-ux-link-redirect-app-mocks": "link:src/platform/packages/shared/shared-ux/link/redirect_app/mocks", + "@kbn/shared-ux-link-redirect-app-types": "link:src/platform/packages/shared/shared-ux/link/redirect_app/types", + "@kbn/shared-ux-markdown": "link:src/platform/packages/shared/shared-ux/markdown/impl", + "@kbn/shared-ux-markdown-mocks": "link:src/platform/packages/shared/shared-ux/markdown/mocks", + "@kbn/shared-ux-markdown-types": "link:src/platform/packages/shared/shared-ux/markdown/types", + "@kbn/shared-ux-page-analytics-no-data": "link:src/platform/packages/private/shared-ux/page/analytics_no_data/impl", + "@kbn/shared-ux-page-analytics-no-data-mocks": "link:src/platform/packages/private/shared-ux/page/analytics_no_data/mocks", + "@kbn/shared-ux-page-analytics-no-data-types": "link:src/platform/packages/private/shared-ux/page/analytics_no_data/types", + "@kbn/shared-ux-page-kibana-no-data": "link:src/platform/packages/private/shared-ux/page/kibana_no_data/impl", + "@kbn/shared-ux-page-kibana-no-data-mocks": "link:src/platform/packages/private/shared-ux/page/kibana_no_data/mocks", + "@kbn/shared-ux-page-kibana-no-data-types": "link:src/platform/packages/private/shared-ux/page/kibana_no_data/types", + "@kbn/shared-ux-page-kibana-template": "link:src/platform/packages/shared/shared-ux/page/kibana_template/impl", + "@kbn/shared-ux-page-kibana-template-mocks": "link:src/platform/packages/shared/shared-ux/page/kibana_template/mocks", + "@kbn/shared-ux-page-kibana-template-types": "link:src/platform/packages/shared/shared-ux/page/kibana_template/types", + "@kbn/shared-ux-page-no-data": "link:src/platform/packages/shared/shared-ux/page/no_data/impl", + "@kbn/shared-ux-page-no-data-config": "link:src/platform/packages/shared/shared-ux/page/no_data_config/impl", + "@kbn/shared-ux-page-no-data-config-mocks": "link:src/platform/packages/shared/shared-ux/page/no_data_config/mocks", + "@kbn/shared-ux-page-no-data-config-types": "link:src/platform/packages/shared/shared-ux/page/no_data_config/types", + "@kbn/shared-ux-page-no-data-mocks": "link:src/platform/packages/shared/shared-ux/page/no_data/mocks", + "@kbn/shared-ux-page-no-data-types": "link:src/platform/packages/shared/shared-ux/page/no_data/types", + "@kbn/shared-ux-page-solution-nav": "link:src/platform/packages/shared/shared-ux/page/solution_nav", + "@kbn/shared-ux-prompt-no-data-views": "link:src/platform/packages/shared/shared-ux/prompt/no_data_views/impl", + "@kbn/shared-ux-prompt-no-data-views-mocks": "link:src/platform/packages/shared/shared-ux/prompt/no_data_views/mocks", + "@kbn/shared-ux-prompt-no-data-views-types": "link:src/platform/packages/shared/shared-ux/prompt/no_data_views/types", + "@kbn/shared-ux-prompt-not-found": "link:src/platform/packages/shared/shared-ux/prompt/not_found", + "@kbn/shared-ux-router": "link:src/platform/packages/shared/shared-ux/router/impl", + "@kbn/shared-ux-router-mocks": "link:src/platform/packages/shared/shared-ux/router/mocks", + "@kbn/shared-ux-router-types": "link:src/platform/packages/shared/shared-ux/router/types", + "@kbn/shared-ux-storybook-config": "link:src/platform/packages/private/shared-ux/storybook/config", + "@kbn/shared-ux-storybook-mock": "link:src/platform/packages/shared/shared-ux/storybook/mock", + "@kbn/shared-ux-tabbed-modal": "link:src/platform/packages/shared/shared-ux/modal/tabbed", + "@kbn/shared-ux-table-persist": "link:src/platform/packages/shared/shared-ux/table_persist", + "@kbn/shared-ux-utility": "link:src/platform/packages/shared/kbn-shared-ux-utility", "@kbn/slo-plugin": "link:x-pack/solutions/observability/plugins/slo", "@kbn/slo-schema": "link:x-pack/platform/packages/shared/kbn-slo-schema", "@kbn/snapshot-restore-plugin": "link:x-pack/platform/plugins/private/snapshot_restore", @@ -1087,7 +1088,7 @@ "@xstate5/react": "npm:@xstate/react@^4.1.2", "@xyflow/react": "^12.3.5", "adm-zip": "^0.5.9", - "ai": "^2.2.33", + "ai": "^4.0.18", "ajv": "^8.17.1", "ansi-regex": "^6.1.0", "antlr4": "^4.13.1-patch-1", @@ -1132,7 +1133,7 @@ "deep-freeze-strict": "^1.1.1", "deepmerge": "^4.2.2", "del": "^6.1.0", - "diff": "^5.1.0", + "diff": "^7.0.0", "dotenv": "^16.4.5", "elastic-apm-node": "^4.10.0", "email-addresses": "^5.0.0", @@ -1143,7 +1144,7 @@ "extract-zip": "^2.0.1", "fast-deep-equal": "^3.1.1", "fast-glob": "^3.3.2", - "fastest-levenshtein": "^1.0.12", + "fastest-levenshtein": "^1.0.16", "fflate": "^0.6.9", "file-saver": "^1.3.8", "fnv-plus": "^1.3.1", @@ -1582,7 +1583,7 @@ "@types/dagre": "^0.7.47", "@types/dedent": "^0.7.0", "@types/deep-freeze-strict": "^1.1.0", - "@types/diff": "^5.0.8", + "@types/diff": "^6.0.0", "@types/ejs": "^3.0.6", "@types/enzyme": "^3.10.12", "@types/eslint": "^8.44.2", diff --git a/packages/kbn-babel-preset/styled_components_files.js b/packages/kbn-babel-preset/styled_components_files.js index 930a868f89ab5..dc6bd756b401a 100644 --- a/packages/kbn-babel-preset/styled_components_files.js +++ b/packages/kbn-babel-preset/styled_components_files.js @@ -179,39 +179,6 @@ module.exports = { /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]data_table[\/\\]components[\/\\]data_table[\/\\]index.tsx/, /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]data_table[\/\\]components[\/\\]toolbar[\/\\]unit[\/\\]styles.tsx/, /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]data_table[\/\\]mock[\/\\]test_providers.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]actions[\/\\]chat[\/\\]index.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]actions[\/\\]styles.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]data_quality_details[\/\\]ilm_phases_empty_prompt[\/\\]index.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]data_quality_details[\/\\]indices_details[\/\\]index.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]data_quality_details[\/\\]indices_details[\/\\]pattern[\/\\]historical_results_tour[\/\\]index.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]data_quality_details[\/\\]indices_details[\/\\]pattern[\/\\]index_check_flyout[\/\\]check_fields_tabs[\/\\]index.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]data_quality_details[\/\\]indices_details[\/\\]pattern[\/\\]index_check_flyout[\/\\]historical_results[\/\\]historical_results_list[\/\\]historical_result[\/\\]styles.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]data_quality_details[\/\\]indices_details[\/\\]pattern[\/\\]index_check_flyout[\/\\]historical_results[\/\\]historical_results_list[\/\\]styles.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]data_quality_details[\/\\]indices_details[\/\\]pattern[\/\\]index_check_flyout[\/\\]historical_results[\/\\]styles.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]data_quality_details[\/\\]indices_details[\/\\]pattern[\/\\]index_check_flyout[\/\\]index_invalid_values[\/\\]index.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]data_quality_details[\/\\]indices_details[\/\\]pattern[\/\\]index_check_flyout[\/\\]index_stats_panel[\/\\]index.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]data_quality_details[\/\\]indices_details[\/\\]pattern[\/\\]index_check_flyout[\/\\]latest_results[\/\\]latest_check_fields[\/\\]ecs_compliant_tab[\/\\]index.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]data_quality_details[\/\\]indices_details[\/\\]pattern[\/\\]index_check_flyout[\/\\]latest_results[\/\\]latest_check_fields[\/\\]index.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]data_quality_details[\/\\]indices_details[\/\\]pattern[\/\\]index_check_flyout[\/\\]latest_results[\/\\]latest_check_fields[\/\\]sticky_actions[\/\\]index.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]data_quality_details[\/\\]indices_details[\/\\]pattern[\/\\]index_check_flyout[\/\\]same_family[\/\\]index.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]data_quality_details[\/\\]indices_details[\/\\]pattern[\/\\]index_check_flyout[\/\\]styles.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]data_quality_details[\/\\]indices_details[\/\\]pattern[\/\\]index_result_badge[\/\\]index.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]data_quality_details[\/\\]indices_details[\/\\]pattern[\/\\]pattern_summary[\/\\]pattern_label[\/\\]ilm_phase_counts[\/\\]index.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]data_quality_details[\/\\]indices_details[\/\\]pattern[\/\\]styles.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]data_quality_details[\/\\]indices_details[\/\\]pattern[\/\\]summary_table[\/\\]utils[\/\\]columns.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]data_quality_details[\/\\]storage_details[\/\\]storage_treemap[\/\\]chart_legend_item[\/\\]index.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]data_quality_details[\/\\]storage_details[\/\\]storage_treemap[\/\\]index.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]data_quality_details[\/\\]storage_details[\/\\]storage_treemap[\/\\]no_data[\/\\]index.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]data_quality_summary[\/\\]ilm_phase_filter[\/\\]styles.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]data_quality_summary[\/\\]index.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]data_quality_summary[\/\\]summary_actions[\/\\]check_all[\/\\]index.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]data_quality_summary[\/\\]summary_actions[\/\\]check_status[\/\\]errors_popover[\/\\]errors_viewer[\/\\]index.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]data_quality_summary[\/\\]summary_actions[\/\\]check_status[\/\\]errors_popover[\/\\]index.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]data_quality_summary[\/\\]summary_actions[\/\\]index.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]mock[\/\\]test_providers[\/\\]test_providers.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]stat[\/\\]index.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]stats_rollup[\/\\]index.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]packages[\/\\]ecs_data_quality_dashboard[\/\\]impl[\/\\]data_quality_panel[\/\\]styles.tsx/, /x-pack[\/\\]solutions[\/\\]security[\/\\]plugins[\/\\]lists[\/\\]public[\/\\]exceptions[\/\\]components[\/\\]and_or_badge[\/\\]rounded_badge.tsx/, /x-pack[\/\\]solutions[\/\\]security[\/\\]plugins[\/\\]lists[\/\\]public[\/\\]exceptions[\/\\]components[\/\\]and_or_badge[\/\\]rounded_badge_antenna.tsx/, /x-pack[\/\\]solutions[\/\\]security[\/\\]plugins[\/\\]lists[\/\\]public[\/\\]exceptions[\/\\]components[\/\\]builder[\/\\]and_badge.tsx/, @@ -588,7 +555,6 @@ module.exports = { /x-pack[\/\\]solutions[\/\\]security[\/\\]plugins[\/\\]security_solution[\/\\]public[\/\\]timelines[\/\\]components[\/\\]timeline[\/\\]data_providers[\/\\]provider_badge.tsx/, /x-pack[\/\\]solutions[\/\\]security[\/\\]plugins[\/\\]security_solution[\/\\]public[\/\\]timelines[\/\\]components[\/\\]timeline[\/\\]data_providers[\/\\]provider_item_actions.tsx/, /x-pack[\/\\]solutions[\/\\]security[\/\\]plugins[\/\\]security_solution[\/\\]public[\/\\]timelines[\/\\]components[\/\\]timeline[\/\\]data_providers[\/\\]providers.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]plugins[\/\\]security_solution[\/\\]public[\/\\]timelines[\/\\]components[\/\\]timeline[\/\\]footer[\/\\]index.tsx/, /x-pack[\/\\]solutions[\/\\]security[\/\\]plugins[\/\\]security_solution[\/\\]public[\/\\]timelines[\/\\]components[\/\\]timeline[\/\\]index.tsx/, /x-pack[\/\\]solutions[\/\\]security[\/\\]plugins[\/\\]security_solution[\/\\]public[\/\\]timelines[\/\\]components[\/\\]timeline[\/\\]kpi[\/\\]kpis.tsx/, /x-pack[\/\\]solutions[\/\\]security[\/\\]plugins[\/\\]security_solution[\/\\]public[\/\\]timelines[\/\\]components[\/\\]timeline[\/\\]properties[\/\\]helpers.test.tsx/, diff --git a/packages/kbn-es/src/serverless_resources/project_roles/security/roles.yml b/packages/kbn-es/src/serverless_resources/project_roles/security/roles.yml index b7be820f35e4b..4993c4552eb88 100644 --- a/packages/kbn-es/src/serverless_resources/project_roles/security/roles.yml +++ b/packages/kbn-es/src/serverless_resources/project_roles/security/roles.yml @@ -303,6 +303,7 @@ t3_analyst: - feature_siem.actions_log_management_all # Response actions history - feature_siem.file_operations_all - feature_siem.scan_operations_all + - feature_siem.workflow_insights_all - feature_securitySolutionCasesV2.all - feature_securitySolutionAssistant.all - feature_securitySolutionAttackDiscovery.all @@ -433,6 +434,7 @@ rule_author: - feature_siem.host_isolation_exceptions_read - feature_siem.blocklist_all # Elastic Defend Policy Management - feature_siem.actions_log_management_read + - feature_siem.workflow_insights_all - feature_securitySolutionCasesV2.all - feature_securitySolutionAssistant.all - feature_securitySolutionAttackDiscovery.all @@ -506,6 +508,7 @@ soc_manager: - feature_siem.file_operations_all - feature_siem.execute_operations_all - feature_siem.scan_operations_all + - feature_siem.workflow_insights_all - feature_securitySolutionCasesV2.all - feature_securitySolutionAssistant.all - feature_securitySolutionAttackDiscovery.all @@ -625,6 +628,7 @@ platform_engineer: - feature_siem.host_isolation_exceptions_all - feature_siem.blocklist_all # Elastic Defend Policy Management - feature_siem.actions_log_management_read + - feature_siem.workflow_insights_all - feature_securitySolutionCasesV2.all - feature_securitySolutionAssistant.all - feature_securitySolutionAttackDiscovery.all @@ -698,6 +702,7 @@ endpoint_operations_analyst: - feature_siem.file_operations_all - feature_siem.execute_operations_all - feature_siem.scan_operations_all + - feature_siem.workflow_insights_all - feature_securitySolutionCasesV2.all - feature_securitySolutionAssistant.all - feature_securitySolutionAttackDiscovery.all @@ -773,6 +778,7 @@ endpoint_policy_manager: - feature_siem.event_filters_all - feature_siem.host_isolation_exceptions_all - feature_siem.blocklist_all # Elastic Defend Policy Management + - feature_siem.workflow_insights_all - feature_securitySolutionCasesV2.all - feature_securitySolutionAssistant.all - feature_securitySolutionAttackDiscovery.all diff --git a/packages/kbn-optimizer/limits.yml b/packages/kbn-optimizer/limits.yml index 85434fe0f2b21..0a57a76a9725a 100644 --- a/packages/kbn-optimizer/limits.yml +++ b/packages/kbn-optimizer/limits.yml @@ -148,6 +148,7 @@ pageLoadAssetSize: searchNotebooks: 18942 searchPlayground: 19325 searchprofiler: 67080 + searchSynonyms: 20262 security: 81771 securitySolution: 98429 securitySolutionEss: 31781 diff --git a/packages/kbn-telemetry-tools/src/tools/tasks/generate_schemas_task.ts b/packages/kbn-telemetry-tools/src/tools/tasks/generate_schemas_task.ts index 48fbd516a3ca5..45350b8d55c14 100644 --- a/packages/kbn-telemetry-tools/src/tools/tasks/generate_schemas_task.ts +++ b/packages/kbn-telemetry-tools/src/tools/tasks/generate_schemas_task.ts @@ -13,7 +13,7 @@ import { generateMapping } from '../manage_schema'; export function generateSchemasTask({ roots }: TaskContext) { return roots.map((root) => ({ task: () => { - if (!root.parsedCollections || !root.parsedCollections.length) { + if (!root.parsedCollections) { return; } const mapping = generateMapping(root.parsedCollections); diff --git a/packages/kbn-test/jest-preset.js b/packages/kbn-test/jest-preset.js index 791ee4a974823..5f60f52d04181 100644 --- a/packages/kbn-test/jest-preset.js +++ b/packages/kbn-test/jest-preset.js @@ -98,7 +98,7 @@ module.exports = { // A map from regular expressions to paths to transformers transform: { - '^.+\\.(js|tsx?)$': '/packages/kbn-test/src/jest/transforms/babel.js', + '^.+\\.(js|tsx?)$': '/packages/kbn-test/src/jest/transforms/babel/index.js', '^.+\\.(txt|html)?$': '/packages/kbn-test/src/jest/transforms/raw.js', '^.+\\.peggy?$': '/packages/kbn-test/src/jest/transforms/peggy.js', }, @@ -107,7 +107,7 @@ module.exports = { transformIgnorePatterns: [ // ignore all node_modules except monaco-editor, monaco-yaml which requires babel transforms to handle dynamic import() // since ESM modules are not natively supported in Jest yet (https://github.com/facebook/jest/issues/4842) - '[/\\\\]node_modules(?![\\/\\\\](byte-size|monaco-editor|monaco-yaml|monaco-languageserver-types|monaco-marker-data-provider|monaco-worker-manager|vscode-languageserver-types|d3-interpolate|d3-color|langchain|langsmith|@cfworker|gpt-tokenizer|flat|@langchain))[/\\\\].+\\.js$', + '[/\\\\]node_modules(?![\\/\\\\](byte-size|monaco-editor|monaco-yaml|monaco-languageserver-types|monaco-marker-data-provider|monaco-worker-manager|vscode-languageserver-types|d3-interpolate|d3-color|langchain|langsmith|@cfworker|gpt-tokenizer|flat|@langchain|eventsource-parser))[/\\\\].+\\.js$', 'packages/kbn-pm/dist/index.js', '[/\\\\]node_modules(?![\\/\\\\](langchain|langsmith|@langchain))/dist/[/\\\\].+\\.js$', '[/\\\\]node_modules(?![\\/\\\\](langchain|langsmith|@langchain))/dist/util/[/\\\\].+\\.js$', diff --git a/packages/shared-ux/file/file_upload/impl/jest.config.js b/packages/kbn-test/src/jest/transforms/babel/index.js similarity index 73% rename from packages/shared-ux/file/file_upload/impl/jest.config.js rename to packages/kbn-test/src/jest/transforms/babel/index.js index 1a5db6bfdd472..4a65028e7931f 100644 --- a/packages/shared-ux/file/file_upload/impl/jest.config.js +++ b/packages/kbn-test/src/jest/transforms/babel/index.js @@ -7,8 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -module.exports = { - preset: '@kbn/test', - rootDir: '../../../../..', - roots: ['/packages/shared-ux/file/file_upload/impl'], -}; +const babelJest = require('babel-jest'); +const transformerConfig = require('./transformer_config'); + +module.exports = babelJest.default.createTransformer(transformerConfig); diff --git a/packages/kbn-test/src/jest/transforms/babel.js b/packages/kbn-test/src/jest/transforms/babel/transformer_config.js similarity index 88% rename from packages/kbn-test/src/jest/transforms/babel.js rename to packages/kbn-test/src/jest/transforms/babel/transformer_config.js index 9e9a064ce6ca9..4a4b6260035eb 100644 --- a/packages/kbn-test/src/jest/transforms/babel.js +++ b/packages/kbn-test/src/jest/transforms/babel/transformer_config.js @@ -7,9 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -const babelJest = require('babel-jest'); - -module.exports = babelJest.default.createTransformer({ +module.exports = { presets: [ [ require.resolve('@kbn/babel-preset/node_preset'), @@ -22,4 +20,4 @@ module.exports = babelJest.default.createTransformer({ }, ], ], -}); +}; diff --git a/packages/react/kibana_context/root/BUILD.bazel b/packages/react/kibana_context/root/BUILD.bazel index e78f513deeac6..3402818fef685 100644 --- a/packages/react/kibana_context/root/BUILD.bazel +++ b/packages/react/kibana_context/root/BUILD.bazel @@ -26,7 +26,7 @@ DEPS = [ "@npm//tslib", "@npm//@elastic/eui", "//src/core/packages/base/common:core-base-common", - "//packages/shared-ux/router/impl:shared-ux-router", + "//src/platform/packages/shared/shared-ux/router/impl:shared-ux-router", ] js_library( diff --git a/packages/shared-ux/chrome/navigation/jest.config.js b/packages/shared-ux/chrome/navigation/jest.config.js deleted file mode 100644 index d119e24827eff..0000000000000 --- a/packages/shared-ux/chrome/navigation/jest.config.js +++ /dev/null @@ -1,14 +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", 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: ['/packages/shared-ux/chrome/navigation'], -}; diff --git a/packages/shared-ux/error_boundary/jest.config.js b/packages/shared-ux/error_boundary/jest.config.js deleted file mode 100644 index f016ddddbe096..0000000000000 --- a/packages/shared-ux/error_boundary/jest.config.js +++ /dev/null @@ -1,14 +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", 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: ['/packages/shared-ux/error_boundary'], -}; diff --git a/packages/shared-ux/markdown/impl/jest.config.js b/packages/shared-ux/markdown/impl/jest.config.js deleted file mode 100644 index cb422578fef01..0000000000000 --- a/packages/shared-ux/markdown/impl/jest.config.js +++ /dev/null @@ -1,15 +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", 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: ['/packages/shared-ux/markdown/impl'], - setupFilesAfterEnv: ['/packages/shared-ux/markdown/impl/setup_tests.ts'], -}; diff --git a/packages/shared-ux/modal/tabbed/jest.config.js b/packages/shared-ux/modal/tabbed/jest.config.js deleted file mode 100644 index 5ed8a8311d328..0000000000000 --- a/packages/shared-ux/modal/tabbed/jest.config.js +++ /dev/null @@ -1,14 +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", 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: ['/packages/shared-ux/modal/tabbed'], -}; diff --git a/packages/shared-ux/page/analytics_no_data/impl/jest.config.js b/packages/shared-ux/page/analytics_no_data/impl/jest.config.js deleted file mode 100644 index 9b3052f23672a..0000000000000 --- a/packages/shared-ux/page/analytics_no_data/impl/jest.config.js +++ /dev/null @@ -1,14 +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", 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: ['/packages/shared-ux/page/analytics_no_data'], -}; diff --git a/packages/shared-ux/page/kibana_no_data/impl/jest.config.js b/packages/shared-ux/page/kibana_no_data/impl/jest.config.js deleted file mode 100644 index 696f32a28a4e9..0000000000000 --- a/packages/shared-ux/page/kibana_no_data/impl/jest.config.js +++ /dev/null @@ -1,14 +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", 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: ['/packages/shared-ux/page/kibana_no_data'], -}; diff --git a/packages/shared-ux/page/kibana_template/impl/jest.config.js b/packages/shared-ux/page/kibana_template/impl/jest.config.js deleted file mode 100644 index 486b3f38a39fa..0000000000000 --- a/packages/shared-ux/page/kibana_template/impl/jest.config.js +++ /dev/null @@ -1,14 +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", 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: ['/packages/shared-ux/page/kibana_template/impl'], -}; diff --git a/packages/shared-ux/page/no_data/impl/jest.config.js b/packages/shared-ux/page/no_data/impl/jest.config.js deleted file mode 100644 index b395326a60e66..0000000000000 --- a/packages/shared-ux/page/no_data/impl/jest.config.js +++ /dev/null @@ -1,14 +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", 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: ['/packages/shared-ux/page/no_data/impl'], -}; diff --git a/packages/shared-ux/page/no_data_config/impl/jest.config.js b/packages/shared-ux/page/no_data_config/impl/jest.config.js deleted file mode 100644 index f207186b17d4f..0000000000000 --- a/packages/shared-ux/page/no_data_config/impl/jest.config.js +++ /dev/null @@ -1,14 +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", 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: ['/packages/shared-ux/page/no_data_config/impl'], -}; diff --git a/packages/shared-ux/page/solution_nav/jest.config.js b/packages/shared-ux/page/solution_nav/jest.config.js deleted file mode 100644 index 3344c7b72f667..0000000000000 --- a/packages/shared-ux/page/solution_nav/jest.config.js +++ /dev/null @@ -1,14 +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", 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: ['/packages/shared-ux/page/solution_nav'], -}; diff --git a/packages/shared-ux/prompt/no_data_views/impl/jest.config.js b/packages/shared-ux/prompt/no_data_views/impl/jest.config.js deleted file mode 100644 index 4734ad0798904..0000000000000 --- a/packages/shared-ux/prompt/no_data_views/impl/jest.config.js +++ /dev/null @@ -1,14 +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", 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: ['/packages/shared-ux/prompt/no_data_views'], -}; diff --git a/packages/shared-ux/prompt/not_found/jest.config.js b/packages/shared-ux/prompt/not_found/jest.config.js deleted file mode 100644 index 74a19c2b8c223..0000000000000 --- a/packages/shared-ux/prompt/not_found/jest.config.js +++ /dev/null @@ -1,14 +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", 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: ['/packages/shared-ux/prompt/not_found'], -}; diff --git a/packages/shared-ux/router/impl/jest.config.js b/packages/shared-ux/router/impl/jest.config.js deleted file mode 100644 index 31007b3305152..0000000000000 --- a/packages/shared-ux/router/impl/jest.config.js +++ /dev/null @@ -1,14 +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", 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: ['/packages/shared-ux/router/impl'], -}; diff --git a/packages/shared-ux/router/mocks/jest.config.js b/packages/shared-ux/router/mocks/jest.config.js deleted file mode 100644 index 137f15a0bfdbf..0000000000000 --- a/packages/shared-ux/router/mocks/jest.config.js +++ /dev/null @@ -1,14 +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", 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: ['/packages/shared-ux/router/mocks'], -}; diff --git a/packages/shared-ux/table_persist/jest.config.js b/packages/shared-ux/table_persist/jest.config.js deleted file mode 100644 index 0c5cf60724bac..0000000000000 --- a/packages/shared-ux/table_persist/jest.config.js +++ /dev/null @@ -1,14 +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", 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: ['/packages/shared-ux/table_persist'], -}; diff --git a/renovate.json b/renovate.json index 13adda6e9da31..ac238c2ef9584 100644 --- a/renovate.json +++ b/renovate.json @@ -2854,13 +2854,13 @@ "@langchain/openai" ], "reviewers": [ - "team:security-defend-workflows" + "team:security-generative-ai" ], "matchBaseBranches": [ "main" ], "labels": [ - "Team:Defend Workflows", + "Team:Security Generative AI", "release_note:skip", "backport:all-open" ], @@ -2873,13 +2873,13 @@ "@google/generative-ai" ], "reviewers": [ - "team:security-defend-workflows" + "team:security-generative-ai" ], "matchBaseBranches": [ "main" ], "labels": [ - "Team:Defend Workflows", + "Team:Security Generative AI", "release_note:skip", "backport:all-open" ], @@ -2893,13 +2893,13 @@ "@smithy/util-utf8" ], "reviewers": [ - "team:security-defend-workflows" + "team:security-generative-ai" ], "matchBaseBranches": [ "main" ], "labels": [ - "Team:Defend Workflows", + "Team:Security Generative AI", "release_note:skip", "backport:all-open" ], diff --git a/src/core/packages/http/router-server-internal/src/request.test.ts b/src/core/packages/http/router-server-internal/src/request.test.ts index 1f607a58961ab..10ab084e53535 100644 --- a/src/core/packages/http/router-server-internal/src/request.test.ts +++ b/src/core/packages/http/router-server-internal/src/request.test.ts @@ -397,35 +397,6 @@ describe('CoreKibanaRequest', () => { expect(kibanaRequest.route.options.authRequired).toBe(true); }); - it('handles required authc: { enabled: false }', () => { - const request = hapiMocks.createRequest({ - route: { - settings: { - app: { - security: { authc: { enabled: false } }, - }, - }, - }, - }); - const kibanaRequest = CoreKibanaRequest.from(request); - - expect(kibanaRequest.route.options.authRequired).toBe(false); - }); - - it(`handles required authc: { enabled: 'optional' }`, () => { - const request = hapiMocks.createRequest({ - route: { - settings: { - app: { - security: { authc: { enabled: 'optional' } }, - }, - }, - }, - }); - const kibanaRequest = CoreKibanaRequest.from(request); - - expect(kibanaRequest.route.options.authRequired).toBe('optional'); - }); it('handles required authz simple config', () => { const security: RouteSecurity = { diff --git a/src/core/packages/http/router-server-internal/src/request.ts b/src/core/packages/http/router-server-internal/src/request.ts index cbccf31fc0946..24c3aa7c61d3f 100644 --- a/src/core/packages/http/router-server-internal/src/request.ts +++ b/src/core/packages/http/router-server-internal/src/request.ts @@ -328,12 +328,6 @@ export class CoreKibanaRequest< return true; } - const security = this.getSecurity(request); - - if (security?.authc !== undefined) { - return security.authc?.enabled ?? true; - } - const authOptions = request.route.settings.auth; if (typeof authOptions === 'object') { // 'try' is used in the legacy platform diff --git a/src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_route.test.ts b/src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_route.test.ts index 0ecb65ee76804..9c09de9e45895 100644 --- a/src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_route.test.ts +++ b/src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_route.test.ts @@ -542,22 +542,19 @@ describe('Versioned route', () => { authz: { requiredPrivileges: ['foo', 'bar', 'baz'], }, + authc: undefined, }; const securityConfig1: RouteSecurity = { authz: { requiredPrivileges: ['foo'], }, - authc: { - enabled: 'optional', - }, + authc: undefined, }; const securityConfig2: RouteSecurity = { authz: { requiredPrivileges: ['foo', 'bar'], }, - authc: { - enabled: true, - }, + authc: undefined, }; const versionedRoute = versionedRouter .get({ path: '/test/{id}', access: 'internal', security: securityConfigDefault }) @@ -669,4 +666,42 @@ describe('Versioned route', () => { - [authz.requiredPrivileges.0.1]: expected value of type [string] but got [Object]" `); }); + + it('should correctly merge security configuration for versions', () => { + const versionedRouter = CoreVersionedRouter.from({ router }); + const validSecurityConfig: RouteSecurity = { + authz: { + requiredPrivileges: ['foo'], + }, + authc: { + enabled: 'optional', + }, + }; + + const route = versionedRouter.get({ + path: '/test/{id}', + access: 'internal', + security: validSecurityConfig, + }); + + route.addVersion( + { + version: '1', + validate: false, + security: { + authz: { + requiredPrivileges: ['foo', 'bar'], + }, + }, + }, + handlerFn + ); + + // @ts-expect-error for test purpose + const security = route.getSecurity({ headers: { [ELASTIC_HTTP_VERSION_HEADER]: '1' } }); + + expect(security.authc).toEqual({ enabled: 'optional' }); + + expect(security.authz).toEqual({ requiredPrivileges: ['foo', 'bar'] }); + }); }); diff --git a/src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_route.ts b/src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_route.ts index fa6a31011b0cd..49e386f73e675 100644 --- a/src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_route.ts +++ b/src/core/packages/http/router-server-internal/src/versioned_router/core_versioned_route.ts @@ -302,9 +302,18 @@ export class CoreVersionedRoute implements VersionedRoute { return [...this.handlers.values()]; } - public getSecurity: RouteSecurityGetter = (req: RequestLike) => { + public getSecurity: RouteSecurityGetter = (req?: RequestLike) => { + if (!req) { + return this.defaultSecurityConfig; + } + const version = this.getVersion(req)!; + const security = this.handlers.get(version)?.options.security ?? this.defaultSecurityConfig; - return this.handlers.get(version)?.options.security ?? this.defaultSecurityConfig; + // authc can be defined only on the top route level, + // so we need to merge it with the versioned one which can have different authz per version + return security + ? { authz: security.authz, authc: this.defaultSecurityConfig?.authc } + : undefined; }; } diff --git a/src/core/packages/http/server-internal/src/http_server.test.ts b/src/core/packages/http/server-internal/src/http_server.test.ts index 69e69f784e65e..72a94177233be 100644 --- a/src/core/packages/http/server-internal/src/http_server.test.ts +++ b/src/core/packages/http/server-internal/src/http_server.test.ts @@ -1777,3 +1777,72 @@ describe('configuration change', () => { ); }); }); + +test('exposes authentication details of incoming request to a route handler', async () => { + const { registerRouter, registerAuth, server: innerServer } = await server.setup({ config$ }); + + const router = new Router('', logger, enhanceWithContext, routerOptions); + router.get( + { + path: '/', + validate: false, + security: { + authc: { enabled: false, reason: 'test' }, + authz: { enabled: false, reason: 'test' }, + }, + }, + (context, req, res) => res.ok({ body: req.route }) + ); + router.get( + { + path: '/foo', + validate: false, + security: { + authc: { enabled: 'optional' }, + authz: { enabled: false, reason: 'test' }, + }, + }, + (context, req, res) => res.ok({ body: req.route }) + ); + // mocking to have `authRegistered` filed set to true + registerAuth((req, res) => res.unauthorized()); + registerRouter(router); + + await server.start(); + await supertest(innerServer.listener) + .get('/') + .expect(200, { + method: 'get', + path: '/', + routePath: '/', + options: { + authRequired: false, + xsrfRequired: false, + access: 'internal', + tags: [], + timeout: {}, + security: { + authc: { enabled: false, reason: 'test' }, + authz: { enabled: false, reason: 'test' }, + }, + }, + }); + await supertest(innerServer.listener) + .get('/foo') + .expect(200, { + method: 'get', + path: '/foo', + routePath: '/foo', + options: { + authRequired: 'optional', + xsrfRequired: false, + access: 'internal', + tags: [], + timeout: {}, + security: { + authc: { enabled: 'optional' }, + authz: { enabled: false, reason: 'test' }, + }, + }, + }); +}); diff --git a/src/core/packages/http/server-internal/src/http_server.ts b/src/core/packages/http/server-internal/src/http_server.ts index 1d80c9c4ab0dc..21ab73a532b81 100644 --- a/src/core/packages/http/server-internal/src/http_server.ts +++ b/src/core/packages/http/server-internal/src/http_server.ts @@ -742,14 +742,23 @@ export class HttpServer { }); } + private getSecurity(route: RouterRoute) { + const securityConfig = route?.security; + + // for versioned routes, we need to check if the security config is a function + return typeof securityConfig === 'function' ? securityConfig() : securityConfig; + } + private configureRoute(route: RouterRoute) { const optionsLogger = this.log.get('options'); this.log.debug(`registering route handler for [${route.path}]`); // Hapi does not allow payload validation to be specified for 'head' or 'get' requests const validate = isSafeMethod(route.method) ? undefined : { payload: true }; - const { authRequired, tags, body = {}, timeout, deprecated } = route.options; + const { tags, body = {}, timeout, deprecated } = route.options; const { accepts: allow, override, maxBytes, output, parse } = body; + const authRequired = this.getSecurity(route)?.authc?.enabled ?? route.options.authRequired; + const kibanaRouteOptions: KibanaRouteOptions = { xsrfRequired: route.options.xsrfRequired ?? !isSafeMethod(route.method), access: route.options.access ?? 'internal', diff --git a/src/core/packages/http/server/src/router/request.ts b/src/core/packages/http/server/src/router/request.ts index 6fff29eb42b54..0a55cf022ab15 100644 --- a/src/core/packages/http/server/src/router/request.ts +++ b/src/core/packages/http/server/src/router/request.ts @@ -16,7 +16,7 @@ import type { IKibanaSocket } from './socket'; import type { RouteMethod, RouteConfigOptions, RouteSecurity, RouteDeprecationInfo } from './route'; import type { Headers } from './headers'; -export type RouteSecurityGetter = (request: { +export type RouteSecurityGetter = (request?: { headers: KibanaRequest['headers']; query?: KibanaRequest['query']; }) => RouteSecurity | undefined; diff --git a/src/core/packages/http/server/src/versioning/types.ts b/src/core/packages/http/server/src/versioning/types.ts index fa08810ce1fb7..9b3480c554733 100644 --- a/src/core/packages/http/server/src/versioning/types.ts +++ b/src/core/packages/http/server/src/versioning/types.ts @@ -338,7 +338,7 @@ export interface AddVersionOpts { */ validate: false | VersionedRouteValidation | (() => VersionedRouteValidation); // Provide a way to lazily load validation schemas - security?: RouteSecurity; + security?: Pick; options?: { deprecated?: RouteDeprecationInfo; diff --git a/src/dev/license_checker/config.ts b/src/dev/license_checker/config.ts index 44c441f9bbe63..5bbb252cfa1d9 100644 --- a/src/dev/license_checker/config.ts +++ b/src/dev/license_checker/config.ts @@ -86,7 +86,7 @@ export const PER_PACKAGE_ALLOWED_LICENSES = { export const LICENSE_OVERRIDES = { 'jsts@1.6.2': ['Eclipse Distribution License - v 1.0'], // cf. https://github.com/bjornharrtell/jsts '@mapbox/jsonlint-lines-primitives@2.0.2': ['MIT'], // license in readme https://github.com/tmcw/jsonlint - '@elastic/ems-client@8.5.3': ['Elastic License 2.0'], + '@elastic/ems-client@8.6.2': ['Elastic License 2.0'], '@elastic/eui@98.2.1-borealis.2': ['Elastic License 2.0 OR AGPL-3.0-only OR SSPL-1.0'], '@elastic/eui-theme-borealis@0.0.7': ['Elastic License 2.0 OR AGPL-3.0-only OR SSPL-1.0'], 'language-subtag-registry@0.3.21': ['CC-BY-4.0'], // retired ODC‑By license https://github.com/mattcg/language-subtag-registry diff --git a/src/dev/storybook/aliases.ts b/src/dev/storybook/aliases.ts index ab5664257c606..dc307935437f6 100644 --- a/src/dev/storybook/aliases.ts +++ b/src/dev/storybook/aliases.ts @@ -17,8 +17,8 @@ export const storybookAliases = { canvas: 'x-pack/platform/plugins/private/canvas/storybook', cases: 'src/platform/packages/shared/kbn-cases-components/.storybook', cell_actions: 'src/platform/packages/shared/kbn-cell-actions/.storybook', - cloud_security_posture_packages: - 'x-pack/solutions/security/packages/kbn-cloud-security-posture/.storybook', + cloud_security_posture_graph: + 'x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/.storybook', cloud: 'src/platform/packages/shared/cloud/.storybook', coloring: 'packages/kbn-coloring/.storybook', language_documentation_popover: @@ -67,7 +67,7 @@ export const storybookAliases = { security_solution: 'x-pack/solutions/security/plugins/security_solution/.storybook', security_solution_packages: 'x-pack/solutions/security/packages/storybook/config', serverless: 'packages/serverless/storybook/config', - shared_ux: 'packages/shared-ux/storybook/config', + shared_ux: 'src/platform/packages/private/shared-ux/storybook/config', threat_intelligence: 'x-pack/solutions/security/plugins/threat_intelligence/.storybook', triggers_actions_ui: 'x-pack/platform/plugins/shared/triggers_actions_ui/.storybook', ui_actions_enhanced: 'src/platform/plugins/shared/ui_actions_enhanced/.storybook', diff --git a/src/platform/packages/private/kbn-ui-shared-deps-src/BUILD.bazel b/src/platform/packages/private/kbn-ui-shared-deps-src/BUILD.bazel index 612f7974f89f1..9224edbaba984 100644 --- a/src/platform/packages/private/kbn-ui-shared-deps-src/BUILD.bazel +++ b/src/platform/packages/private/kbn-ui-shared-deps-src/BUILD.bazel @@ -36,14 +36,14 @@ webpack_cli( "//src/platform/packages/shared/kbn-safer-lodash-set", "//packages/kbn-peggy", "//packages/kbn-peggy-loader", - "//packages/shared-ux/error_boundary", + "//src/platform/packages/shared/shared-ux/error_boundary", "//src/platform/packages/shared/kbn-rison", "//packages/shared-ux/code_editor/impl:code_editor", "//packages/react/kibana_context/common", "//packages/react/kibana_context/root", "//packages/react/kibana_context/render", "//packages/react/kibana_context/theme", - "//packages/shared-ux/router/impl:shared-ux-router", + "//src/platform/packages/shared/shared-ux/router/impl:shared-ux-router", ], output_dir = True, args = [ diff --git a/packages/shared-ux/page/analytics_no_data/impl/README.mdx b/src/platform/packages/private/shared-ux/page/analytics_no_data/impl/README.mdx similarity index 100% rename from packages/shared-ux/page/analytics_no_data/impl/README.mdx rename to src/platform/packages/private/shared-ux/page/analytics_no_data/impl/README.mdx diff --git a/packages/shared-ux/page/analytics_no_data/impl/index.ts b/src/platform/packages/private/shared-ux/page/analytics_no_data/impl/index.ts similarity index 100% rename from packages/shared-ux/page/analytics_no_data/impl/index.ts rename to src/platform/packages/private/shared-ux/page/analytics_no_data/impl/index.ts diff --git a/src/platform/packages/private/shared-ux/page/analytics_no_data/impl/jest.config.js b/src/platform/packages/private/shared-ux/page/analytics_no_data/impl/jest.config.js new file mode 100644 index 0000000000000..8da1258aa1a57 --- /dev/null +++ b/src/platform/packages/private/shared-ux/page/analytics_no_data/impl/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/private/shared-ux/page/analytics_no_data'], +}; diff --git a/packages/shared-ux/page/analytics_no_data/impl/kibana.jsonc b/src/platform/packages/private/shared-ux/page/analytics_no_data/impl/kibana.jsonc similarity index 100% rename from packages/shared-ux/page/analytics_no_data/impl/kibana.jsonc rename to src/platform/packages/private/shared-ux/page/analytics_no_data/impl/kibana.jsonc diff --git a/packages/shared-ux/page/analytics_no_data/impl/lib/get_has_api_keys.test.ts b/src/platform/packages/private/shared-ux/page/analytics_no_data/impl/lib/get_has_api_keys.test.ts similarity index 100% rename from packages/shared-ux/page/analytics_no_data/impl/lib/get_has_api_keys.test.ts rename to src/platform/packages/private/shared-ux/page/analytics_no_data/impl/lib/get_has_api_keys.test.ts diff --git a/packages/shared-ux/page/analytics_no_data/impl/lib/get_has_api_keys.ts b/src/platform/packages/private/shared-ux/page/analytics_no_data/impl/lib/get_has_api_keys.ts similarity index 100% rename from packages/shared-ux/page/analytics_no_data/impl/lib/get_has_api_keys.ts rename to src/platform/packages/private/shared-ux/page/analytics_no_data/impl/lib/get_has_api_keys.ts diff --git a/packages/shared-ux/page/analytics_no_data/impl/package.json b/src/platform/packages/private/shared-ux/page/analytics_no_data/impl/package.json similarity index 100% rename from packages/shared-ux/page/analytics_no_data/impl/package.json rename to src/platform/packages/private/shared-ux/page/analytics_no_data/impl/package.json diff --git a/packages/shared-ux/page/analytics_no_data/impl/src/analytics_no_data_page.component.test.tsx b/src/platform/packages/private/shared-ux/page/analytics_no_data/impl/src/analytics_no_data_page.component.test.tsx similarity index 100% rename from packages/shared-ux/page/analytics_no_data/impl/src/analytics_no_data_page.component.test.tsx rename to src/platform/packages/private/shared-ux/page/analytics_no_data/impl/src/analytics_no_data_page.component.test.tsx diff --git a/packages/shared-ux/page/analytics_no_data/impl/src/analytics_no_data_page.component.tsx b/src/platform/packages/private/shared-ux/page/analytics_no_data/impl/src/analytics_no_data_page.component.tsx similarity index 100% rename from packages/shared-ux/page/analytics_no_data/impl/src/analytics_no_data_page.component.tsx rename to src/platform/packages/private/shared-ux/page/analytics_no_data/impl/src/analytics_no_data_page.component.tsx diff --git a/packages/shared-ux/page/analytics_no_data/impl/src/analytics_no_data_page.stories.tsx b/src/platform/packages/private/shared-ux/page/analytics_no_data/impl/src/analytics_no_data_page.stories.tsx similarity index 100% rename from packages/shared-ux/page/analytics_no_data/impl/src/analytics_no_data_page.stories.tsx rename to src/platform/packages/private/shared-ux/page/analytics_no_data/impl/src/analytics_no_data_page.stories.tsx diff --git a/packages/shared-ux/page/analytics_no_data/impl/src/analytics_no_data_page.test.tsx b/src/platform/packages/private/shared-ux/page/analytics_no_data/impl/src/analytics_no_data_page.test.tsx similarity index 100% rename from packages/shared-ux/page/analytics_no_data/impl/src/analytics_no_data_page.test.tsx rename to src/platform/packages/private/shared-ux/page/analytics_no_data/impl/src/analytics_no_data_page.test.tsx diff --git a/packages/shared-ux/page/analytics_no_data/impl/src/analytics_no_data_page.tsx b/src/platform/packages/private/shared-ux/page/analytics_no_data/impl/src/analytics_no_data_page.tsx similarity index 100% rename from packages/shared-ux/page/analytics_no_data/impl/src/analytics_no_data_page.tsx rename to src/platform/packages/private/shared-ux/page/analytics_no_data/impl/src/analytics_no_data_page.tsx diff --git a/packages/shared-ux/page/analytics_no_data/impl/src/services.tsx b/src/platform/packages/private/shared-ux/page/analytics_no_data/impl/src/services.tsx similarity index 100% rename from packages/shared-ux/page/analytics_no_data/impl/src/services.tsx rename to src/platform/packages/private/shared-ux/page/analytics_no_data/impl/src/services.tsx diff --git a/packages/shared-ux/page/analytics_no_data/impl/tsconfig.json b/src/platform/packages/private/shared-ux/page/analytics_no_data/impl/tsconfig.json similarity index 91% rename from packages/shared-ux/page/analytics_no_data/impl/tsconfig.json rename to src/platform/packages/private/shared-ux/page/analytics_no_data/impl/tsconfig.json index ba872e1ecd761..f2a33656d737e 100644 --- a/packages/shared-ux/page/analytics_no_data/impl/tsconfig.json +++ b/src/platform/packages/private/shared-ux/page/analytics_no_data/impl/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../../tsconfig.base.json", + "extends": "../../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/page/analytics_no_data/mocks/README.md b/src/platform/packages/private/shared-ux/page/analytics_no_data/mocks/README.md similarity index 100% rename from packages/shared-ux/page/analytics_no_data/mocks/README.md rename to src/platform/packages/private/shared-ux/page/analytics_no_data/mocks/README.md diff --git a/packages/shared-ux/page/analytics_no_data/mocks/index.ts b/src/platform/packages/private/shared-ux/page/analytics_no_data/mocks/index.ts similarity index 100% rename from packages/shared-ux/page/analytics_no_data/mocks/index.ts rename to src/platform/packages/private/shared-ux/page/analytics_no_data/mocks/index.ts diff --git a/packages/shared-ux/page/analytics_no_data/mocks/kibana.jsonc b/src/platform/packages/private/shared-ux/page/analytics_no_data/mocks/kibana.jsonc similarity index 100% rename from packages/shared-ux/page/analytics_no_data/mocks/kibana.jsonc rename to src/platform/packages/private/shared-ux/page/analytics_no_data/mocks/kibana.jsonc diff --git a/packages/shared-ux/page/analytics_no_data/mocks/package.json b/src/platform/packages/private/shared-ux/page/analytics_no_data/mocks/package.json similarity index 100% rename from packages/shared-ux/page/analytics_no_data/mocks/package.json rename to src/platform/packages/private/shared-ux/page/analytics_no_data/mocks/package.json diff --git a/packages/shared-ux/page/analytics_no_data/mocks/src/jest.ts b/src/platform/packages/private/shared-ux/page/analytics_no_data/mocks/src/jest.ts similarity index 100% rename from packages/shared-ux/page/analytics_no_data/mocks/src/jest.ts rename to src/platform/packages/private/shared-ux/page/analytics_no_data/mocks/src/jest.ts diff --git a/packages/shared-ux/page/analytics_no_data/mocks/src/storybook.ts b/src/platform/packages/private/shared-ux/page/analytics_no_data/mocks/src/storybook.ts similarity index 100% rename from packages/shared-ux/page/analytics_no_data/mocks/src/storybook.ts rename to src/platform/packages/private/shared-ux/page/analytics_no_data/mocks/src/storybook.ts diff --git a/packages/shared-ux/page/analytics_no_data/mocks/tsconfig.json b/src/platform/packages/private/shared-ux/page/analytics_no_data/mocks/tsconfig.json similarity index 85% rename from packages/shared-ux/page/analytics_no_data/mocks/tsconfig.json rename to src/platform/packages/private/shared-ux/page/analytics_no_data/mocks/tsconfig.json index 7b0f91bbb706c..87eab59ad2004 100644 --- a/packages/shared-ux/page/analytics_no_data/mocks/tsconfig.json +++ b/src/platform/packages/private/shared-ux/page/analytics_no_data/mocks/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../../tsconfig.base.json", + "extends": "../../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/page/analytics_no_data/types/README.md b/src/platform/packages/private/shared-ux/page/analytics_no_data/types/README.md similarity index 100% rename from packages/shared-ux/page/analytics_no_data/types/README.md rename to src/platform/packages/private/shared-ux/page/analytics_no_data/types/README.md diff --git a/packages/shared-ux/page/analytics_no_data/types/index.d.ts b/src/platform/packages/private/shared-ux/page/analytics_no_data/types/index.d.ts similarity index 100% rename from packages/shared-ux/page/analytics_no_data/types/index.d.ts rename to src/platform/packages/private/shared-ux/page/analytics_no_data/types/index.d.ts diff --git a/packages/shared-ux/page/analytics_no_data/types/kibana.jsonc b/src/platform/packages/private/shared-ux/page/analytics_no_data/types/kibana.jsonc similarity index 100% rename from packages/shared-ux/page/analytics_no_data/types/kibana.jsonc rename to src/platform/packages/private/shared-ux/page/analytics_no_data/types/kibana.jsonc diff --git a/packages/shared-ux/page/analytics_no_data/types/package.json b/src/platform/packages/private/shared-ux/page/analytics_no_data/types/package.json similarity index 100% rename from packages/shared-ux/page/analytics_no_data/types/package.json rename to src/platform/packages/private/shared-ux/page/analytics_no_data/types/package.json diff --git a/packages/shared-ux/page/analytics_no_data/types/tsconfig.json b/src/platform/packages/private/shared-ux/page/analytics_no_data/types/tsconfig.json similarity index 81% rename from packages/shared-ux/page/analytics_no_data/types/tsconfig.json rename to src/platform/packages/private/shared-ux/page/analytics_no_data/types/tsconfig.json index e46f95f52599b..3d44092ac061f 100644 --- a/packages/shared-ux/page/analytics_no_data/types/tsconfig.json +++ b/src/platform/packages/private/shared-ux/page/analytics_no_data/types/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../../tsconfig.base.json", + "extends": "../../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [] diff --git a/packages/shared-ux/page/kibana_no_data/impl/README.mdx b/src/platform/packages/private/shared-ux/page/kibana_no_data/impl/README.mdx similarity index 100% rename from packages/shared-ux/page/kibana_no_data/impl/README.mdx rename to src/platform/packages/private/shared-ux/page/kibana_no_data/impl/README.mdx diff --git a/packages/shared-ux/page/kibana_no_data/impl/index.ts b/src/platform/packages/private/shared-ux/page/kibana_no_data/impl/index.ts similarity index 100% rename from packages/shared-ux/page/kibana_no_data/impl/index.ts rename to src/platform/packages/private/shared-ux/page/kibana_no_data/impl/index.ts diff --git a/src/platform/packages/private/shared-ux/page/kibana_no_data/impl/jest.config.js b/src/platform/packages/private/shared-ux/page/kibana_no_data/impl/jest.config.js new file mode 100644 index 0000000000000..7acce78f3264c --- /dev/null +++ b/src/platform/packages/private/shared-ux/page/kibana_no_data/impl/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/private/shared-ux/page/kibana_no_data'], +}; diff --git a/packages/shared-ux/page/kibana_no_data/impl/kibana.jsonc b/src/platform/packages/private/shared-ux/page/kibana_no_data/impl/kibana.jsonc similarity index 100% rename from packages/shared-ux/page/kibana_no_data/impl/kibana.jsonc rename to src/platform/packages/private/shared-ux/page/kibana_no_data/impl/kibana.jsonc diff --git a/packages/shared-ux/page/kibana_no_data/impl/package.json b/src/platform/packages/private/shared-ux/page/kibana_no_data/impl/package.json similarity index 100% rename from packages/shared-ux/page/kibana_no_data/impl/package.json rename to src/platform/packages/private/shared-ux/page/kibana_no_data/impl/package.json diff --git a/packages/shared-ux/page/kibana_no_data/impl/src/assets/data_view_illustration.tsx b/src/platform/packages/private/shared-ux/page/kibana_no_data/impl/src/assets/data_view_illustration.tsx similarity index 100% rename from packages/shared-ux/page/kibana_no_data/impl/src/assets/data_view_illustration.tsx rename to src/platform/packages/private/shared-ux/page/kibana_no_data/impl/src/assets/data_view_illustration.tsx diff --git a/packages/shared-ux/page/kibana_no_data/impl/src/assets/index.ts b/src/platform/packages/private/shared-ux/page/kibana_no_data/impl/src/assets/index.ts similarity index 100% rename from packages/shared-ux/page/kibana_no_data/impl/src/assets/index.ts rename to src/platform/packages/private/shared-ux/page/kibana_no_data/impl/src/assets/index.ts diff --git a/packages/shared-ux/page/kibana_no_data/impl/src/kibana_no_data_page.stories.tsx b/src/platform/packages/private/shared-ux/page/kibana_no_data/impl/src/kibana_no_data_page.stories.tsx similarity index 100% rename from packages/shared-ux/page/kibana_no_data/impl/src/kibana_no_data_page.stories.tsx rename to src/platform/packages/private/shared-ux/page/kibana_no_data/impl/src/kibana_no_data_page.stories.tsx diff --git a/packages/shared-ux/page/kibana_no_data/impl/src/kibana_no_data_page.test.tsx b/src/platform/packages/private/shared-ux/page/kibana_no_data/impl/src/kibana_no_data_page.test.tsx similarity index 100% rename from packages/shared-ux/page/kibana_no_data/impl/src/kibana_no_data_page.test.tsx rename to src/platform/packages/private/shared-ux/page/kibana_no_data/impl/src/kibana_no_data_page.test.tsx diff --git a/packages/shared-ux/page/kibana_no_data/impl/src/kibana_no_data_page.tsx b/src/platform/packages/private/shared-ux/page/kibana_no_data/impl/src/kibana_no_data_page.tsx similarity index 100% rename from packages/shared-ux/page/kibana_no_data/impl/src/kibana_no_data_page.tsx rename to src/platform/packages/private/shared-ux/page/kibana_no_data/impl/src/kibana_no_data_page.tsx diff --git a/packages/shared-ux/page/kibana_no_data/impl/src/services.tsx b/src/platform/packages/private/shared-ux/page/kibana_no_data/impl/src/services.tsx similarity index 100% rename from packages/shared-ux/page/kibana_no_data/impl/src/services.tsx rename to src/platform/packages/private/shared-ux/page/kibana_no_data/impl/src/services.tsx diff --git a/packages/shared-ux/page/kibana_no_data/impl/tsconfig.json b/src/platform/packages/private/shared-ux/page/kibana_no_data/impl/tsconfig.json similarity index 90% rename from packages/shared-ux/page/kibana_no_data/impl/tsconfig.json rename to src/platform/packages/private/shared-ux/page/kibana_no_data/impl/tsconfig.json index 8de16912b9e35..7559d42c20432 100644 --- a/packages/shared-ux/page/kibana_no_data/impl/tsconfig.json +++ b/src/platform/packages/private/shared-ux/page/kibana_no_data/impl/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../../tsconfig.base.json", + "extends": "../../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/page/kibana_no_data/mocks/README.md b/src/platform/packages/private/shared-ux/page/kibana_no_data/mocks/README.md similarity index 100% rename from packages/shared-ux/page/kibana_no_data/mocks/README.md rename to src/platform/packages/private/shared-ux/page/kibana_no_data/mocks/README.md diff --git a/packages/shared-ux/page/kibana_no_data/mocks/index.ts b/src/platform/packages/private/shared-ux/page/kibana_no_data/mocks/index.ts similarity index 100% rename from packages/shared-ux/page/kibana_no_data/mocks/index.ts rename to src/platform/packages/private/shared-ux/page/kibana_no_data/mocks/index.ts diff --git a/packages/shared-ux/page/kibana_no_data/mocks/kibana.jsonc b/src/platform/packages/private/shared-ux/page/kibana_no_data/mocks/kibana.jsonc similarity index 100% rename from packages/shared-ux/page/kibana_no_data/mocks/kibana.jsonc rename to src/platform/packages/private/shared-ux/page/kibana_no_data/mocks/kibana.jsonc diff --git a/packages/shared-ux/page/kibana_no_data/mocks/package.json b/src/platform/packages/private/shared-ux/page/kibana_no_data/mocks/package.json similarity index 100% rename from packages/shared-ux/page/kibana_no_data/mocks/package.json rename to src/platform/packages/private/shared-ux/page/kibana_no_data/mocks/package.json diff --git a/packages/shared-ux/page/kibana_no_data/mocks/src/jest.ts b/src/platform/packages/private/shared-ux/page/kibana_no_data/mocks/src/jest.ts similarity index 100% rename from packages/shared-ux/page/kibana_no_data/mocks/src/jest.ts rename to src/platform/packages/private/shared-ux/page/kibana_no_data/mocks/src/jest.ts diff --git a/packages/shared-ux/page/kibana_no_data/mocks/src/storybook.ts b/src/platform/packages/private/shared-ux/page/kibana_no_data/mocks/src/storybook.ts similarity index 100% rename from packages/shared-ux/page/kibana_no_data/mocks/src/storybook.ts rename to src/platform/packages/private/shared-ux/page/kibana_no_data/mocks/src/storybook.ts diff --git a/packages/shared-ux/page/kibana_no_data/mocks/tsconfig.json b/src/platform/packages/private/shared-ux/page/kibana_no_data/mocks/tsconfig.json similarity index 88% rename from packages/shared-ux/page/kibana_no_data/mocks/tsconfig.json rename to src/platform/packages/private/shared-ux/page/kibana_no_data/mocks/tsconfig.json index 012849eca8ae5..867c824f86488 100644 --- a/packages/shared-ux/page/kibana_no_data/mocks/tsconfig.json +++ b/src/platform/packages/private/shared-ux/page/kibana_no_data/mocks/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../../tsconfig.base.json", + "extends": "../../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/page/kibana_no_data/types/README.md b/src/platform/packages/private/shared-ux/page/kibana_no_data/types/README.md similarity index 100% rename from packages/shared-ux/page/kibana_no_data/types/README.md rename to src/platform/packages/private/shared-ux/page/kibana_no_data/types/README.md diff --git a/packages/shared-ux/page/kibana_no_data/types/index.d.ts b/src/platform/packages/private/shared-ux/page/kibana_no_data/types/index.d.ts similarity index 100% rename from packages/shared-ux/page/kibana_no_data/types/index.d.ts rename to src/platform/packages/private/shared-ux/page/kibana_no_data/types/index.d.ts diff --git a/packages/shared-ux/page/kibana_no_data/types/kibana.jsonc b/src/platform/packages/private/shared-ux/page/kibana_no_data/types/kibana.jsonc similarity index 100% rename from packages/shared-ux/page/kibana_no_data/types/kibana.jsonc rename to src/platform/packages/private/shared-ux/page/kibana_no_data/types/kibana.jsonc diff --git a/packages/shared-ux/page/kibana_no_data/types/package.json b/src/platform/packages/private/shared-ux/page/kibana_no_data/types/package.json similarity index 100% rename from packages/shared-ux/page/kibana_no_data/types/package.json rename to src/platform/packages/private/shared-ux/page/kibana_no_data/types/package.json diff --git a/packages/shared-ux/page/kibana_no_data/types/tsconfig.json b/src/platform/packages/private/shared-ux/page/kibana_no_data/types/tsconfig.json similarity index 83% rename from packages/shared-ux/page/kibana_no_data/types/tsconfig.json rename to src/platform/packages/private/shared-ux/page/kibana_no_data/types/tsconfig.json index f51e9bf3496fd..260d9bf5d2143 100644 --- a/packages/shared-ux/page/kibana_no_data/types/tsconfig.json +++ b/src/platform/packages/private/shared-ux/page/kibana_no_data/types/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../../tsconfig.base.json", + "extends": "../../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [] diff --git a/packages/shared-ux/storybook/config/README.mdx b/src/platform/packages/private/shared-ux/storybook/config/README.mdx similarity index 100% rename from packages/shared-ux/storybook/config/README.mdx rename to src/platform/packages/private/shared-ux/storybook/config/README.mdx diff --git a/packages/shared-ux/storybook/config/constants.ts b/src/platform/packages/private/shared-ux/storybook/config/constants.ts similarity index 100% rename from packages/shared-ux/storybook/config/constants.ts rename to src/platform/packages/private/shared-ux/storybook/config/constants.ts diff --git a/packages/shared-ux/storybook/config/index.ts b/src/platform/packages/private/shared-ux/storybook/config/index.ts similarity index 100% rename from packages/shared-ux/storybook/config/index.ts rename to src/platform/packages/private/shared-ux/storybook/config/index.ts diff --git a/packages/shared-ux/storybook/config/kibana.jsonc b/src/platform/packages/private/shared-ux/storybook/config/kibana.jsonc similarity index 100% rename from packages/shared-ux/storybook/config/kibana.jsonc rename to src/platform/packages/private/shared-ux/storybook/config/kibana.jsonc diff --git a/packages/shared-ux/storybook/config/main.ts b/src/platform/packages/private/shared-ux/storybook/config/main.ts similarity index 91% rename from packages/shared-ux/storybook/config/main.ts rename to src/platform/packages/private/shared-ux/storybook/config/main.ts index 5f521974bb959..7d145943c881d 100644 --- a/packages/shared-ux/storybook/config/main.ts +++ b/src/platform/packages/private/shared-ux/storybook/config/main.ts @@ -11,7 +11,7 @@ import { defaultConfig } from '@kbn/storybook'; module.exports = { ...defaultConfig, - stories: ['../../**/*.stories.+(tsx|mdx)'], + stories: ['../../../../../**/*.stories.+(tsx|mdx)'], reactOptions: { strictMode: true, }, diff --git a/packages/shared-ux/storybook/config/manager.ts b/src/platform/packages/private/shared-ux/storybook/config/manager.ts similarity index 100% rename from packages/shared-ux/storybook/config/manager.ts rename to src/platform/packages/private/shared-ux/storybook/config/manager.ts diff --git a/packages/shared-ux/storybook/config/package.json b/src/platform/packages/private/shared-ux/storybook/config/package.json similarity index 100% rename from packages/shared-ux/storybook/config/package.json rename to src/platform/packages/private/shared-ux/storybook/config/package.json diff --git a/packages/shared-ux/storybook/config/preview.ts b/src/platform/packages/private/shared-ux/storybook/config/preview.ts similarity index 100% rename from packages/shared-ux/storybook/config/preview.ts rename to src/platform/packages/private/shared-ux/storybook/config/preview.ts diff --git a/packages/shared-ux/storybook/config/tsconfig.json b/src/platform/packages/private/shared-ux/storybook/config/tsconfig.json similarity index 82% rename from packages/shared-ux/storybook/config/tsconfig.json rename to src/platform/packages/private/shared-ux/storybook/config/tsconfig.json index 7b41c512d4ef0..000520f05b0f0 100644 --- a/packages/shared-ux/storybook/config/tsconfig.json +++ b/src/platform/packages/private/shared-ux/storybook/config/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/src/platform/packages/shared/deeplinks/search/constants.ts b/src/platform/packages/shared/deeplinks/search/constants.ts index cd632c5b24a03..d1992d22da120 100644 --- a/src/platform/packages/shared/deeplinks/search/constants.ts +++ b/src/platform/packages/shared/deeplinks/search/constants.ts @@ -18,6 +18,7 @@ export const SERVERLESS_ES_CONNECTORS_ID = 'serverlessConnectors'; export const SERVERLESS_ES_WEB_CRAWLERS_ID = 'serverlessWebCrawlers'; export const ES_SEARCH_PLAYGROUND_ID = 'searchPlayground'; export const SERVERLESS_ES_SEARCH_INFERENCE_ENDPOINTS_ID = 'searchInferenceEndpoints'; +export const ES_SEARCH_SYNONYMS_ID = 'searchSynonyms'; export const SEARCH_HOMEPAGE = 'searchHomepage'; export const SEARCH_INDICES_START = 'elasticsearchStart'; export const SEARCH_INDICES = 'elasticsearchIndices'; diff --git a/src/platform/packages/shared/deeplinks/search/deep_links.ts b/src/platform/packages/shared/deeplinks/search/deep_links.ts index dcba1f7888597..662481cd038d5 100644 --- a/src/platform/packages/shared/deeplinks/search/deep_links.ts +++ b/src/platform/packages/shared/deeplinks/search/deep_links.ts @@ -27,6 +27,7 @@ import { SEARCH_VECTOR_SEARCH, SEARCH_SEMANTIC_SEARCH, SEARCH_AI_SEARCH, + ES_SEARCH_SYNONYMS_ID, } from './constants'; export type EnterpriseSearchApp = typeof ENTERPRISE_SEARCH_APP_ID; @@ -40,6 +41,7 @@ export type ConnectorsId = typeof SERVERLESS_ES_CONNECTORS_ID; export type ServerlessWebCrawlers = typeof SERVERLESS_ES_WEB_CRAWLERS_ID; export type SearchPlaygroundId = typeof ES_SEARCH_PLAYGROUND_ID; export type SearchInferenceEndpointsId = typeof SERVERLESS_ES_SEARCH_INFERENCE_ENDPOINTS_ID; +export type SearchSynonymsId = typeof ES_SEARCH_SYNONYMS_ID; export type SearchHomepage = typeof SEARCH_HOMEPAGE; export type SearchStart = typeof SEARCH_INDICES_START; export type SearchIndices = typeof SEARCH_INDICES; @@ -56,6 +58,8 @@ export type AppsearchLinkId = 'engines'; export type SearchInferenceEndpointsLinkId = 'inferenceEndpoints'; +export type SynonymsLinkId = 'synonyms'; + export type SearchIndicesLinkId = typeof SEARCH_INDICES_CREATE_INDEX; export type DeepLinkId = @@ -70,11 +74,13 @@ export type DeepLinkId = | ServerlessWebCrawlers | SearchPlaygroundId | SearchInferenceEndpointsId + | SearchSynonymsId | SearchHomepage | `${EnterpriseSearchContentApp}:${ContentLinkId}` | `${EnterpriseSearchApplicationsApp}:${ApplicationsLinkId}` | `${EnterpriseSearchAppsearchApp}:${AppsearchLinkId}` | `${SearchInferenceEndpointsId}:${SearchInferenceEndpointsLinkId}` + | `${SearchSynonymsId}:${SynonymsLinkId}` | SearchStart | SearchIndices | SearchElasticsearch diff --git a/src/platform/packages/shared/kbn-actions-types/action_types.ts b/src/platform/packages/shared/kbn-actions-types/action_types.ts index 4f04c02a5fa34..f1f42c3348cb1 100644 --- a/src/platform/packages/shared/kbn-actions-types/action_types.ts +++ b/src/platform/packages/shared/kbn-actions-types/action_types.ts @@ -9,6 +9,11 @@ import type { LicenseType } from '@kbn/licensing-plugin/common/types'; +export enum SUB_FEATURE { + endpointSecurity, +} +export type SubFeature = keyof typeof SUB_FEATURE; + export interface ActionType { id: string; name: string; @@ -18,4 +23,5 @@ export interface ActionType { minimumLicenseRequired: LicenseType; supportedFeatureIds: string[]; isSystemActionType: boolean; + subFeature?: SubFeature; } diff --git a/src/platform/packages/shared/kbn-alerts-ui-shared/src/common/apis/fetch_connector_types/transform_connector_types_response.test.ts b/src/platform/packages/shared/kbn-alerts-ui-shared/src/common/apis/fetch_connector_types/transform_connector_types_response.test.ts index 2f0e70cdd8d50..26d5dd34baf6e 100644 --- a/src/platform/packages/shared/kbn-alerts-ui-shared/src/common/apis/fetch_connector_types/transform_connector_types_response.test.ts +++ b/src/platform/packages/shared/kbn-alerts-ui-shared/src/common/apis/fetch_connector_types/transform_connector_types_response.test.ts @@ -21,6 +21,7 @@ describe('transformConnectorTypesResponse', () => { minimum_license_required: 'basic', supported_feature_ids: ['stackAlerts'], is_system_action_type: true, + sub_feature: 'endpointSecurity', }, { id: 'actionType2Id', @@ -44,6 +45,7 @@ describe('transformConnectorTypesResponse', () => { minimumLicenseRequired: 'basic', supportedFeatureIds: ['stackAlerts'], isSystemActionType: true, + subFeature: 'endpointSecurity', }, { id: 'actionType2Id', diff --git a/src/platform/packages/shared/kbn-alerts-ui-shared/src/common/apis/fetch_connector_types/transform_connector_types_response.ts b/src/platform/packages/shared/kbn-alerts-ui-shared/src/common/apis/fetch_connector_types/transform_connector_types_response.ts index 576df0c171964..5f8041c480e36 100644 --- a/src/platform/packages/shared/kbn-alerts-ui-shared/src/common/apis/fetch_connector_types/transform_connector_types_response.ts +++ b/src/platform/packages/shared/kbn-alerts-ui-shared/src/common/apis/fetch_connector_types/transform_connector_types_response.ts @@ -15,6 +15,7 @@ const transformConnectorType: RewriteRequestCase = ({ minimum_license_required: minimumLicenseRequired, supported_feature_ids: supportedFeatureIds, is_system_action_type: isSystemActionType, + sub_feature: subFeature, ...res }: AsApiContract) => ({ enabledInConfig, @@ -22,6 +23,7 @@ const transformConnectorType: RewriteRequestCase = ({ minimumLicenseRequired, supportedFeatureIds, isSystemActionType, + subFeature, ...res, }); diff --git a/src/platform/packages/shared/kbn-alerts-ui-shared/src/common/types/action_types.ts b/src/platform/packages/shared/kbn-alerts-ui-shared/src/common/types/action_types.ts index 753db07057e55..6c125a795d874 100644 --- a/src/platform/packages/shared/kbn-alerts-ui-shared/src/common/types/action_types.ts +++ b/src/platform/packages/shared/kbn-alerts-ui-shared/src/common/types/action_types.ts @@ -11,6 +11,7 @@ import type { ComponentType, ReactNode } from 'react'; import type { RuleActionParam, ActionVariable } from '@kbn/alerting-types'; import { IconType, RecursivePartial } from '@elastic/eui'; import { PublicMethodsOf } from '@kbn/utility-types'; +import { SubFeature } from '@kbn/actions-types'; import { TypeRegistry } from '../type_registry'; import { RuleFormParamsErrors } from './rule_types'; @@ -130,6 +131,7 @@ export interface ActionTypeModel = PublicMethodsOf< diff --git a/packages/kbn-shared-ux-utility/README.mdx b/src/platform/packages/shared/kbn-shared-ux-utility/README.mdx similarity index 100% rename from packages/kbn-shared-ux-utility/README.mdx rename to src/platform/packages/shared/kbn-shared-ux-utility/README.mdx diff --git a/packages/kbn-shared-ux-utility/index.ts b/src/platform/packages/shared/kbn-shared-ux-utility/index.ts similarity index 100% rename from packages/kbn-shared-ux-utility/index.ts rename to src/platform/packages/shared/kbn-shared-ux-utility/index.ts diff --git a/packages/shared-ux/file/file_picker/impl/jest.config.js b/src/platform/packages/shared/kbn-shared-ux-utility/jest.config.js similarity index 74% rename from packages/shared-ux/file/file_picker/impl/jest.config.js rename to src/platform/packages/shared/kbn-shared-ux-utility/jest.config.js index 84320266ff749..080b3b63cc859 100644 --- a/packages/shared-ux/file/file_picker/impl/jest.config.js +++ b/src/platform/packages/shared/kbn-shared-ux-utility/jest.config.js @@ -10,5 +10,8 @@ module.exports = { preset: '@kbn/test', rootDir: '../../../../..', - roots: ['/packages/shared-ux/file/file_picker/impl'], + roots: ['/src/platform/packages/shared/kbn-shared-ux-utility'], + setupFilesAfterEnv: [ + '/src/platform/packages/shared/kbn-shared-ux-utility/setup_tests.ts', + ], }; diff --git a/packages/kbn-shared-ux-utility/kibana.jsonc b/src/platform/packages/shared/kbn-shared-ux-utility/kibana.jsonc similarity index 100% rename from packages/kbn-shared-ux-utility/kibana.jsonc rename to src/platform/packages/shared/kbn-shared-ux-utility/kibana.jsonc diff --git a/packages/kbn-shared-ux-utility/package.json b/src/platform/packages/shared/kbn-shared-ux-utility/package.json similarity index 100% rename from packages/kbn-shared-ux-utility/package.json rename to src/platform/packages/shared/kbn-shared-ux-utility/package.json diff --git a/packages/kbn-shared-ux-utility/setup_tests.ts b/src/platform/packages/shared/kbn-shared-ux-utility/setup_tests.ts similarity index 100% rename from packages/kbn-shared-ux-utility/setup_tests.ts rename to src/platform/packages/shared/kbn-shared-ux-utility/setup_tests.ts diff --git a/packages/kbn-shared-ux-utility/src/dynamic/README.md b/src/platform/packages/shared/kbn-shared-ux-utility/src/dynamic/README.md similarity index 100% rename from packages/kbn-shared-ux-utility/src/dynamic/README.md rename to src/platform/packages/shared/kbn-shared-ux-utility/src/dynamic/README.md diff --git a/packages/kbn-shared-ux-utility/src/dynamic/dynamic.test.tsx b/src/platform/packages/shared/kbn-shared-ux-utility/src/dynamic/dynamic.test.tsx similarity index 100% rename from packages/kbn-shared-ux-utility/src/dynamic/dynamic.test.tsx rename to src/platform/packages/shared/kbn-shared-ux-utility/src/dynamic/dynamic.test.tsx diff --git a/packages/kbn-shared-ux-utility/src/dynamic/dynamic.tsx b/src/platform/packages/shared/kbn-shared-ux-utility/src/dynamic/dynamic.tsx similarity index 100% rename from packages/kbn-shared-ux-utility/src/dynamic/dynamic.tsx rename to src/platform/packages/shared/kbn-shared-ux-utility/src/dynamic/dynamic.tsx diff --git a/packages/kbn-shared-ux-utility/src/dynamic/index.ts b/src/platform/packages/shared/kbn-shared-ux-utility/src/dynamic/index.ts similarity index 100% rename from packages/kbn-shared-ux-utility/src/dynamic/index.ts rename to src/platform/packages/shared/kbn-shared-ux-utility/src/dynamic/index.ts diff --git a/packages/kbn-shared-ux-utility/src/dynamic/test_component.tsx b/src/platform/packages/shared/kbn-shared-ux-utility/src/dynamic/test_component.tsx similarity index 100% rename from packages/kbn-shared-ux-utility/src/dynamic/test_component.tsx rename to src/platform/packages/shared/kbn-shared-ux-utility/src/dynamic/test_component.tsx diff --git a/packages/kbn-shared-ux-utility/src/fallback.tsx b/src/platform/packages/shared/kbn-shared-ux-utility/src/fallback.tsx similarity index 100% rename from packages/kbn-shared-ux-utility/src/fallback.tsx rename to src/platform/packages/shared/kbn-shared-ux-utility/src/fallback.tsx diff --git a/packages/kbn-shared-ux-utility/src/utils.test.ts b/src/platform/packages/shared/kbn-shared-ux-utility/src/utils.test.ts similarity index 100% rename from packages/kbn-shared-ux-utility/src/utils.test.ts rename to src/platform/packages/shared/kbn-shared-ux-utility/src/utils.test.ts diff --git a/packages/kbn-shared-ux-utility/src/utils.ts b/src/platform/packages/shared/kbn-shared-ux-utility/src/utils.ts similarity index 100% rename from packages/kbn-shared-ux-utility/src/utils.ts rename to src/platform/packages/shared/kbn-shared-ux-utility/src/utils.ts diff --git a/packages/kbn-shared-ux-utility/src/with_suspense.tsx b/src/platform/packages/shared/kbn-shared-ux-utility/src/with_suspense.tsx similarity index 100% rename from packages/kbn-shared-ux-utility/src/with_suspense.tsx rename to src/platform/packages/shared/kbn-shared-ux-utility/src/with_suspense.tsx diff --git a/packages/kbn-shared-ux-utility/tsconfig.json b/src/platform/packages/shared/kbn-shared-ux-utility/tsconfig.json similarity index 87% rename from packages/kbn-shared-ux-utility/tsconfig.json rename to src/platform/packages/shared/kbn-shared-ux-utility/tsconfig.json index cd8716bf04d9b..deeb6e2973dc7 100644 --- a/packages/kbn-shared-ux-utility/tsconfig.json +++ b/src/platform/packages/shared/kbn-shared-ux-utility/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/src/platform/packages/shared/kbn-unified-data-table/src/components/compare_documents/hooks/__snapshots__/use_comparison_cell_value.test.tsx.snap b/src/platform/packages/shared/kbn-unified-data-table/src/components/compare_documents/hooks/__snapshots__/use_comparison_cell_value.test.tsx.snap index d4ab55d98fd68..bb53364085039 100644 --- a/src/platform/packages/shared/kbn-unified-data-table/src/components/compare_documents/hooks/__snapshots__/use_comparison_cell_value.test.tsx.snap +++ b/src/platform/packages/shared/kbn-unified-data-table/src/components/compare_documents/hooks/__snapshots__/use_comparison_cell_value.test.tsx.snap @@ -82,20 +82,25 @@ exports[`useComparisonCellValue should render cells with diff mode "Chars" 2`] = > is a + + m + - different + diff - m + e - e + rent m { expect(result).toMatchInlineSnapshot(` Array [ Object { + "added": false, "count": 5, + "removed": false, "value": "This ", }, Object { "added": true, "count": 4, - "removed": undefined, + "removed": false, "value": "one ", }, Object { + "added": false, "count": 5, + "removed": false, "value": "is a ", }, Object { - "added": true, - "count": 10, - "removed": undefined, - "value": "different ", - }, - Object { + "added": false, "count": 1, + "removed": true, "value": "m", }, Object { - "added": undefined, + "added": true, + "count": 4, + "removed": false, + "value": "diff", + }, + Object { + "added": false, "count": 1, - "removed": true, + "removed": false, "value": "e", }, Object { + "added": true, + "count": 6, + "removed": false, + "value": "rent m", + }, + Object { + "added": false, "count": 1, + "removed": false, "value": "s", }, Object { - "added": undefined, + "added": false, "count": 2, "removed": true, "value": "sa", }, Object { + "added": false, "count": 1, + "removed": false, "value": "g", }, Object { - "added": undefined, + "added": false, "count": 1, "removed": true, "value": "e", }, Object { + "added": false, "count": 4, + "removed": false, "value": " val", }, Object { "added": true, "count": 2, - "removed": undefined, + "removed": false, "value": "ue", }, ] @@ -88,21 +106,25 @@ describe('calculateDiff', () => { expect(result).toMatchInlineSnapshot(` Array [ Object { + "added": false, "count": 2, + "removed": false, "value": "This ", }, Object { "added": true, "count": 2, - "removed": undefined, + "removed": false, "value": "one ", }, Object { + "added": false, "count": 4, + "removed": false, "value": "is a ", }, Object { - "added": undefined, + "added": false, "count": 1, "removed": true, "value": "message", @@ -110,15 +132,17 @@ describe('calculateDiff', () => { Object { "added": true, "count": 1, - "removed": undefined, + "removed": false, "value": "different", }, Object { + "added": false, "count": 1, + "removed": false, "value": " ", }, Object { - "added": undefined, + "added": false, "count": 1, "removed": true, "value": "val", @@ -126,7 +150,7 @@ describe('calculateDiff', () => { Object { "added": true, "count": 3, - "removed": undefined, + "removed": false, "value": "msg value", }, ] @@ -138,7 +162,7 @@ describe('calculateDiff', () => { expect(result).toMatchInlineSnapshot(` Array [ Object { - "added": undefined, + "added": false, "count": 1, "removed": true, "value": "This is a message val", @@ -146,7 +170,7 @@ describe('calculateDiff', () => { Object { "added": true, "count": 1, - "removed": undefined, + "removed": false, "value": "This one is a different msg value", }, ] @@ -162,31 +186,37 @@ describe('calculateDiff', () => { expect(result).toMatchInlineSnapshot(` Array [ Object { + "added": false, "count": 1, + "removed": false, "value": "[ ", }, Object { - "added": undefined, + "added": false, "count": 1, "removed": true, "value": " \\"gif\\", ", }, Object { + "added": false, "count": 1, + "removed": false, "value": " \\"png\\", ", }, Object { "added": true, "count": 1, - "removed": undefined, + "removed": false, "value": " \\"jpg\\" ", }, Object { + "added": false, "count": 1, + "removed": false, "value": "]", }, ] @@ -203,12 +233,14 @@ describe('calculateDiff', () => { expect(result).toMatchInlineSnapshot(` Array [ Object { + "added": false, "count": 1, + "removed": false, "value": "[ ", }, Object { - "added": undefined, + "added": false, "count": 1, "removed": true, "value": " \\"single value\\" @@ -217,13 +249,15 @@ describe('calculateDiff', () => { Object { "added": true, "count": 2, - "removed": undefined, + "removed": false, "value": " \\"multiple\\", \\"values\\" ", }, Object { + "added": false, "count": 1, + "removed": false, "value": "]", }, ] @@ -236,12 +270,14 @@ describe('calculateDiff', () => { expect(result2).toMatchInlineSnapshot(` Array [ Object { + "added": false, "count": 1, + "removed": false, "value": "[ ", }, Object { - "added": undefined, + "added": false, "count": 2, "removed": true, "value": " \\"multiple\\", @@ -251,12 +287,14 @@ describe('calculateDiff', () => { Object { "added": true, "count": 1, - "removed": undefined, + "removed": false, "value": " \\"single value\\" ", }, Object { + "added": false, "count": 1, + "removed": false, "value": "]", }, ] diff --git a/src/platform/packages/shared/kbn-unified-data-table/src/components/compare_documents/hooks/use_comparison_cell_value.test.tsx b/src/platform/packages/shared/kbn-unified-data-table/src/components/compare_documents/hooks/use_comparison_cell_value.test.tsx index bbbf1ddcbb309..35d9044ecb78a 100644 --- a/src/platform/packages/shared/kbn-unified-data-table/src/components/compare_documents/hooks/use_comparison_cell_value.test.tsx +++ b/src/platform/packages/shared/kbn-unified-data-table/src/components/compare_documents/hooks/use_comparison_cell_value.test.tsx @@ -276,8 +276,8 @@ describe('useComparisonCellValue', () => { expect(comparisonCell1.getCell()).not.toHaveClass(BASE_CELL_CLASS); expect(comparisonCell1.getCell()).not.toHaveClass(MATCH_CELL_CLASS); expect(comparisonCell1.getCell()).not.toHaveClass(DIFF_CELL_CLASS); - expect(comparisonCell1.getAllSegments()).toHaveLength(12); - expect(comparisonCell1.getAddedSegments()).toHaveLength(3); + expect(comparisonCell1.getAllSegments()).toHaveLength(13); + expect(comparisonCell1.getAddedSegments()).toHaveLength(4); expect(comparisonCell1.getRemovedSegments()).toHaveLength(3); expect(comparisonCell1.getCell()).toMatchSnapshot(); const comparisonCell2 = renderComparisonCell({ diff --git a/packages/shared-ux/avatar/solution/README.mdx b/src/platform/packages/shared/shared-ux/avatar/solution/README.mdx similarity index 100% rename from packages/shared-ux/avatar/solution/README.mdx rename to src/platform/packages/shared/shared-ux/avatar/solution/README.mdx diff --git a/packages/shared-ux/avatar/solution/index.tsx b/src/platform/packages/shared/shared-ux/avatar/solution/index.tsx similarity index 100% rename from packages/shared-ux/avatar/solution/index.tsx rename to src/platform/packages/shared/shared-ux/avatar/solution/index.tsx diff --git a/src/platform/packages/shared/shared-ux/avatar/solution/jest.config.js b/src/platform/packages/shared/shared-ux/avatar/solution/jest.config.js new file mode 100644 index 0000000000000..8bea7f4e1d4fb --- /dev/null +++ b/src/platform/packages/shared/shared-ux/avatar/solution/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/shared-ux/avatar/solution'], +}; diff --git a/packages/shared-ux/avatar/solution/kibana.jsonc b/src/platform/packages/shared/shared-ux/avatar/solution/kibana.jsonc similarity index 100% rename from packages/shared-ux/avatar/solution/kibana.jsonc rename to src/platform/packages/shared/shared-ux/avatar/solution/kibana.jsonc diff --git a/packages/shared-ux/avatar/solution/package.json b/src/platform/packages/shared/shared-ux/avatar/solution/package.json similarity index 100% rename from packages/shared-ux/avatar/solution/package.json rename to src/platform/packages/shared/shared-ux/avatar/solution/package.json diff --git a/packages/shared-ux/avatar/solution/src/__snapshots__/solution_avatar.test.tsx.snap b/src/platform/packages/shared/shared-ux/avatar/solution/src/__snapshots__/solution_avatar.test.tsx.snap similarity index 100% rename from packages/shared-ux/avatar/solution/src/__snapshots__/solution_avatar.test.tsx.snap rename to src/platform/packages/shared/shared-ux/avatar/solution/src/__snapshots__/solution_avatar.test.tsx.snap diff --git a/packages/shared-ux/avatar/solution/src/assets/texture.svg b/src/platform/packages/shared/shared-ux/avatar/solution/src/assets/texture.svg similarity index 100% rename from packages/shared-ux/avatar/solution/src/assets/texture.svg rename to src/platform/packages/shared/shared-ux/avatar/solution/src/assets/texture.svg diff --git a/packages/shared-ux/avatar/solution/src/solution_avatar.scss b/src/platform/packages/shared/shared-ux/avatar/solution/src/solution_avatar.scss similarity index 100% rename from packages/shared-ux/avatar/solution/src/solution_avatar.scss rename to src/platform/packages/shared/shared-ux/avatar/solution/src/solution_avatar.scss diff --git a/packages/shared-ux/avatar/solution/src/solution_avatar.stories.tsx b/src/platform/packages/shared/shared-ux/avatar/solution/src/solution_avatar.stories.tsx similarity index 100% rename from packages/shared-ux/avatar/solution/src/solution_avatar.stories.tsx rename to src/platform/packages/shared/shared-ux/avatar/solution/src/solution_avatar.stories.tsx diff --git a/packages/shared-ux/avatar/solution/src/solution_avatar.test.tsx b/src/platform/packages/shared/shared-ux/avatar/solution/src/solution_avatar.test.tsx similarity index 100% rename from packages/shared-ux/avatar/solution/src/solution_avatar.test.tsx rename to src/platform/packages/shared/shared-ux/avatar/solution/src/solution_avatar.test.tsx diff --git a/packages/shared-ux/avatar/solution/src/solution_avatar.tsx b/src/platform/packages/shared/shared-ux/avatar/solution/src/solution_avatar.tsx similarity index 100% rename from packages/shared-ux/avatar/solution/src/solution_avatar.tsx rename to src/platform/packages/shared/shared-ux/avatar/solution/src/solution_avatar.tsx diff --git a/packages/shared-ux/avatar/solution/src/types.ts b/src/platform/packages/shared/shared-ux/avatar/solution/src/types.ts similarity index 100% rename from packages/shared-ux/avatar/solution/src/types.ts rename to src/platform/packages/shared/shared-ux/avatar/solution/src/types.ts diff --git a/packages/shared-ux/avatar/solution/tsconfig.json b/src/platform/packages/shared/shared-ux/avatar/solution/tsconfig.json similarity index 82% rename from packages/shared-ux/avatar/solution/tsconfig.json rename to src/platform/packages/shared/shared-ux/avatar/solution/tsconfig.json index eecf3ed8f5afc..6a84ce65c2567 100644 --- a/packages/shared-ux/avatar/solution/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/avatar/solution/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/button/exit_full_screen/README.mdx b/src/platform/packages/shared/shared-ux/button/exit_full_screen/README.mdx similarity index 100% rename from packages/shared-ux/button/exit_full_screen/README.mdx rename to src/platform/packages/shared/shared-ux/button/exit_full_screen/README.mdx diff --git a/packages/shared-ux/button/exit_full_screen/index.tsx b/src/platform/packages/shared/shared-ux/button/exit_full_screen/index.tsx similarity index 100% rename from packages/shared-ux/button/exit_full_screen/index.tsx rename to src/platform/packages/shared/shared-ux/button/exit_full_screen/index.tsx diff --git a/src/platform/packages/shared/shared-ux/button/exit_full_screen/jest.config.js b/src/platform/packages/shared/shared-ux/button/exit_full_screen/jest.config.js new file mode 100644 index 0000000000000..3a1f3dbfb7029 --- /dev/null +++ b/src/platform/packages/shared/shared-ux/button/exit_full_screen/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/shared-ux/button/exit_full_screen'], +}; diff --git a/packages/shared-ux/button/exit_full_screen/kibana.jsonc b/src/platform/packages/shared/shared-ux/button/exit_full_screen/kibana.jsonc similarity index 84% rename from packages/shared-ux/button/exit_full_screen/kibana.jsonc rename to src/platform/packages/shared/shared-ux/button/exit_full_screen/kibana.jsonc index c1878fd3ddc0a..f6a07dbcc7b0b 100644 --- a/packages/shared-ux/button/exit_full_screen/kibana.jsonc +++ b/src/platform/packages/shared/shared-ux/button/exit_full_screen/kibana.jsonc @@ -5,5 +5,5 @@ "@elastic/appex-sharedux" ], "group": "platform", - "visibility": "private" -} \ No newline at end of file + "visibility": "shared" +} diff --git a/packages/shared-ux/button/exit_full_screen/mocks/index.ts b/src/platform/packages/shared/shared-ux/button/exit_full_screen/mocks/index.ts similarity index 100% rename from packages/shared-ux/button/exit_full_screen/mocks/index.ts rename to src/platform/packages/shared/shared-ux/button/exit_full_screen/mocks/index.ts diff --git a/packages/shared-ux/button/exit_full_screen/mocks/jest.ts b/src/platform/packages/shared/shared-ux/button/exit_full_screen/mocks/jest.ts similarity index 100% rename from packages/shared-ux/button/exit_full_screen/mocks/jest.ts rename to src/platform/packages/shared/shared-ux/button/exit_full_screen/mocks/jest.ts diff --git a/packages/shared-ux/button/exit_full_screen/mocks/storybook.ts b/src/platform/packages/shared/shared-ux/button/exit_full_screen/mocks/storybook.ts similarity index 100% rename from packages/shared-ux/button/exit_full_screen/mocks/storybook.ts rename to src/platform/packages/shared/shared-ux/button/exit_full_screen/mocks/storybook.ts diff --git a/packages/shared-ux/button/exit_full_screen/package.json b/src/platform/packages/shared/shared-ux/button/exit_full_screen/package.json similarity index 100% rename from packages/shared-ux/button/exit_full_screen/package.json rename to src/platform/packages/shared/shared-ux/button/exit_full_screen/package.json diff --git a/packages/shared-ux/button/exit_full_screen/src/__snapshots__/exit_full_screen_button.test.tsx.snap b/src/platform/packages/shared/shared-ux/button/exit_full_screen/src/__snapshots__/exit_full_screen_button.test.tsx.snap similarity index 100% rename from packages/shared-ux/button/exit_full_screen/src/__snapshots__/exit_full_screen_button.test.tsx.snap rename to src/platform/packages/shared/shared-ux/button/exit_full_screen/src/__snapshots__/exit_full_screen_button.test.tsx.snap diff --git a/packages/shared-ux/button/exit_full_screen/src/exit_full_screen_button.component.tsx b/src/platform/packages/shared/shared-ux/button/exit_full_screen/src/exit_full_screen_button.component.tsx similarity index 100% rename from packages/shared-ux/button/exit_full_screen/src/exit_full_screen_button.component.tsx rename to src/platform/packages/shared/shared-ux/button/exit_full_screen/src/exit_full_screen_button.component.tsx diff --git a/packages/shared-ux/button/exit_full_screen/src/exit_full_screen_button.stories.tsx b/src/platform/packages/shared/shared-ux/button/exit_full_screen/src/exit_full_screen_button.stories.tsx similarity index 100% rename from packages/shared-ux/button/exit_full_screen/src/exit_full_screen_button.stories.tsx rename to src/platform/packages/shared/shared-ux/button/exit_full_screen/src/exit_full_screen_button.stories.tsx diff --git a/packages/shared-ux/button/exit_full_screen/src/exit_full_screen_button.test.tsx b/src/platform/packages/shared/shared-ux/button/exit_full_screen/src/exit_full_screen_button.test.tsx similarity index 100% rename from packages/shared-ux/button/exit_full_screen/src/exit_full_screen_button.test.tsx rename to src/platform/packages/shared/shared-ux/button/exit_full_screen/src/exit_full_screen_button.test.tsx diff --git a/packages/shared-ux/button/exit_full_screen/src/exit_full_screen_button.tsx b/src/platform/packages/shared/shared-ux/button/exit_full_screen/src/exit_full_screen_button.tsx similarity index 100% rename from packages/shared-ux/button/exit_full_screen/src/exit_full_screen_button.tsx rename to src/platform/packages/shared/shared-ux/button/exit_full_screen/src/exit_full_screen_button.tsx diff --git a/packages/shared-ux/button/exit_full_screen/src/services.tsx b/src/platform/packages/shared/shared-ux/button/exit_full_screen/src/services.tsx similarity index 100% rename from packages/shared-ux/button/exit_full_screen/src/services.tsx rename to src/platform/packages/shared/shared-ux/button/exit_full_screen/src/services.tsx diff --git a/packages/shared-ux/button/exit_full_screen/tsconfig.json b/src/platform/packages/shared/shared-ux/button/exit_full_screen/tsconfig.json similarity index 87% rename from packages/shared-ux/button/exit_full_screen/tsconfig.json rename to src/platform/packages/shared/shared-ux/button/exit_full_screen/tsconfig.json index 0590172c5b3f1..ac3a271fc0e51 100644 --- a/packages/shared-ux/button/exit_full_screen/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/button/exit_full_screen/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/button/exit_full_screen/types.ts b/src/platform/packages/shared/shared-ux/button/exit_full_screen/types.ts similarity index 100% rename from packages/shared-ux/button/exit_full_screen/types.ts rename to src/platform/packages/shared/shared-ux/button/exit_full_screen/types.ts diff --git a/packages/shared-ux/button_toolbar/README.mdx b/src/platform/packages/shared/shared-ux/button_toolbar/README.mdx similarity index 100% rename from packages/shared-ux/button_toolbar/README.mdx rename to src/platform/packages/shared/shared-ux/button_toolbar/README.mdx diff --git a/packages/shared-ux/button_toolbar/index.ts b/src/platform/packages/shared/shared-ux/button_toolbar/index.ts similarity index 100% rename from packages/shared-ux/button_toolbar/index.ts rename to src/platform/packages/shared/shared-ux/button_toolbar/index.ts diff --git a/packages/shared-ux/button/exit_full_screen/jest.config.js b/src/platform/packages/shared/shared-ux/button_toolbar/jest.config.js similarity index 82% rename from packages/shared-ux/button/exit_full_screen/jest.config.js rename to src/platform/packages/shared/shared-ux/button_toolbar/jest.config.js index 6614b642a2d11..d0f0f82fab86e 100644 --- a/packages/shared-ux/button/exit_full_screen/jest.config.js +++ b/src/platform/packages/shared/shared-ux/button_toolbar/jest.config.js @@ -9,6 +9,6 @@ module.exports = { preset: '@kbn/test', - rootDir: '../../../..', - roots: ['/packages/shared-ux/button/exit_full_screen'], + rootDir: '../../../../../..', + roots: ['/src/platform/packages/shared/shared-ux/button_toolbar'], }; diff --git a/packages/shared-ux/button_toolbar/kibana.jsonc b/src/platform/packages/shared/shared-ux/button_toolbar/kibana.jsonc similarity index 100% rename from packages/shared-ux/button_toolbar/kibana.jsonc rename to src/platform/packages/shared/shared-ux/button_toolbar/kibana.jsonc diff --git a/packages/shared-ux/button_toolbar/package.json b/src/platform/packages/shared/shared-ux/button_toolbar/package.json similarity index 100% rename from packages/shared-ux/button_toolbar/package.json rename to src/platform/packages/shared/shared-ux/button_toolbar/package.json diff --git a/packages/shared-ux/button_toolbar/src/buttons/add_from_library/__snapshots__/add_from_library.test.tsx.snap b/src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/add_from_library/__snapshots__/add_from_library.test.tsx.snap similarity index 100% rename from packages/shared-ux/button_toolbar/src/buttons/add_from_library/__snapshots__/add_from_library.test.tsx.snap rename to src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/add_from_library/__snapshots__/add_from_library.test.tsx.snap diff --git a/packages/shared-ux/button_toolbar/src/buttons/add_from_library/add_from_library.stories.tsx b/src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/add_from_library/add_from_library.stories.tsx similarity index 100% rename from packages/shared-ux/button_toolbar/src/buttons/add_from_library/add_from_library.stories.tsx rename to src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/add_from_library/add_from_library.stories.tsx diff --git a/packages/shared-ux/button_toolbar/src/buttons/add_from_library/add_from_library.test.tsx b/src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/add_from_library/add_from_library.test.tsx similarity index 100% rename from packages/shared-ux/button_toolbar/src/buttons/add_from_library/add_from_library.test.tsx rename to src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/add_from_library/add_from_library.test.tsx diff --git a/packages/shared-ux/button_toolbar/src/buttons/add_from_library/add_from_library.tsx b/src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/add_from_library/add_from_library.tsx similarity index 100% rename from packages/shared-ux/button_toolbar/src/buttons/add_from_library/add_from_library.tsx rename to src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/add_from_library/add_from_library.tsx diff --git a/packages/shared-ux/button_toolbar/src/buttons/add_from_library/index.ts b/src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/add_from_library/index.ts similarity index 100% rename from packages/shared-ux/button_toolbar/src/buttons/add_from_library/index.ts rename to src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/add_from_library/index.ts diff --git a/packages/shared-ux/button_toolbar/src/buttons/icon_button_group/__snapshots__/icon_button_group.test.tsx.snap b/src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/icon_button_group/__snapshots__/icon_button_group.test.tsx.snap similarity index 100% rename from packages/shared-ux/button_toolbar/src/buttons/icon_button_group/__snapshots__/icon_button_group.test.tsx.snap rename to src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/icon_button_group/__snapshots__/icon_button_group.test.tsx.snap diff --git a/packages/shared-ux/button_toolbar/src/buttons/icon_button_group/icon_button_group.stories.tsx b/src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/icon_button_group/icon_button_group.stories.tsx similarity index 100% rename from packages/shared-ux/button_toolbar/src/buttons/icon_button_group/icon_button_group.stories.tsx rename to src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/icon_button_group/icon_button_group.stories.tsx diff --git a/packages/shared-ux/button_toolbar/src/buttons/icon_button_group/icon_button_group.styles.ts b/src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/icon_button_group/icon_button_group.styles.ts similarity index 100% rename from packages/shared-ux/button_toolbar/src/buttons/icon_button_group/icon_button_group.styles.ts rename to src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/icon_button_group/icon_button_group.styles.ts diff --git a/packages/shared-ux/button_toolbar/src/buttons/icon_button_group/icon_button_group.test.tsx b/src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/icon_button_group/icon_button_group.test.tsx similarity index 100% rename from packages/shared-ux/button_toolbar/src/buttons/icon_button_group/icon_button_group.test.tsx rename to src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/icon_button_group/icon_button_group.test.tsx diff --git a/packages/shared-ux/button_toolbar/src/buttons/icon_button_group/icon_button_group.tsx b/src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/icon_button_group/icon_button_group.tsx similarity index 100% rename from packages/shared-ux/button_toolbar/src/buttons/icon_button_group/icon_button_group.tsx rename to src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/icon_button_group/icon_button_group.tsx diff --git a/packages/shared-ux/button_toolbar/src/buttons/icon_button_group/index.ts b/src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/icon_button_group/index.ts similarity index 100% rename from packages/shared-ux/button_toolbar/src/buttons/icon_button_group/index.ts rename to src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/icon_button_group/index.ts diff --git a/packages/shared-ux/button_toolbar/src/buttons/index.ts b/src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/index.ts similarity index 100% rename from packages/shared-ux/button_toolbar/src/buttons/index.ts rename to src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/index.ts diff --git a/packages/shared-ux/button_toolbar/src/buttons/toolbar_button/__snapshots__/toolbar_button.test.tsx.snap b/src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/toolbar_button/__snapshots__/toolbar_button.test.tsx.snap similarity index 100% rename from packages/shared-ux/button_toolbar/src/buttons/toolbar_button/__snapshots__/toolbar_button.test.tsx.snap rename to src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/toolbar_button/__snapshots__/toolbar_button.test.tsx.snap diff --git a/packages/shared-ux/button_toolbar/src/buttons/toolbar_button/index.ts b/src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/toolbar_button/index.ts similarity index 100% rename from packages/shared-ux/button_toolbar/src/buttons/toolbar_button/index.ts rename to src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/toolbar_button/index.ts diff --git a/packages/shared-ux/button_toolbar/src/buttons/toolbar_button/toolbar_button.stories.tsx b/src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/toolbar_button/toolbar_button.stories.tsx similarity index 100% rename from packages/shared-ux/button_toolbar/src/buttons/toolbar_button/toolbar_button.stories.tsx rename to src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/toolbar_button/toolbar_button.stories.tsx diff --git a/packages/shared-ux/button_toolbar/src/buttons/toolbar_button/toolbar_button.styles.ts b/src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/toolbar_button/toolbar_button.styles.ts similarity index 100% rename from packages/shared-ux/button_toolbar/src/buttons/toolbar_button/toolbar_button.styles.ts rename to src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/toolbar_button/toolbar_button.styles.ts diff --git a/packages/shared-ux/button_toolbar/src/buttons/toolbar_button/toolbar_button.test.tsx b/src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/toolbar_button/toolbar_button.test.tsx similarity index 100% rename from packages/shared-ux/button_toolbar/src/buttons/toolbar_button/toolbar_button.test.tsx rename to src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/toolbar_button/toolbar_button.test.tsx diff --git a/packages/shared-ux/button_toolbar/src/buttons/toolbar_button/toolbar_button.tsx b/src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/toolbar_button/toolbar_button.tsx similarity index 100% rename from packages/shared-ux/button_toolbar/src/buttons/toolbar_button/toolbar_button.tsx rename to src/platform/packages/shared/shared-ux/button_toolbar/src/buttons/toolbar_button/toolbar_button.tsx diff --git a/packages/shared-ux/button_toolbar/src/popover/__snapshots__/popover.test.tsx.snap b/src/platform/packages/shared/shared-ux/button_toolbar/src/popover/__snapshots__/popover.test.tsx.snap similarity index 100% rename from packages/shared-ux/button_toolbar/src/popover/__snapshots__/popover.test.tsx.snap rename to src/platform/packages/shared/shared-ux/button_toolbar/src/popover/__snapshots__/popover.test.tsx.snap diff --git a/packages/shared-ux/button_toolbar/src/popover/index.ts b/src/platform/packages/shared/shared-ux/button_toolbar/src/popover/index.ts similarity index 100% rename from packages/shared-ux/button_toolbar/src/popover/index.ts rename to src/platform/packages/shared/shared-ux/button_toolbar/src/popover/index.ts diff --git a/packages/shared-ux/button_toolbar/src/popover/popover.mdx b/src/platform/packages/shared/shared-ux/button_toolbar/src/popover/popover.mdx similarity index 100% rename from packages/shared-ux/button_toolbar/src/popover/popover.mdx rename to src/platform/packages/shared/shared-ux/button_toolbar/src/popover/popover.mdx diff --git a/packages/shared-ux/button_toolbar/src/popover/popover.stories.tsx b/src/platform/packages/shared/shared-ux/button_toolbar/src/popover/popover.stories.tsx similarity index 100% rename from packages/shared-ux/button_toolbar/src/popover/popover.stories.tsx rename to src/platform/packages/shared/shared-ux/button_toolbar/src/popover/popover.stories.tsx diff --git a/packages/shared-ux/button_toolbar/src/popover/popover.test.tsx b/src/platform/packages/shared/shared-ux/button_toolbar/src/popover/popover.test.tsx similarity index 100% rename from packages/shared-ux/button_toolbar/src/popover/popover.test.tsx rename to src/platform/packages/shared/shared-ux/button_toolbar/src/popover/popover.test.tsx diff --git a/packages/shared-ux/button_toolbar/src/popover/popover.tsx b/src/platform/packages/shared/shared-ux/button_toolbar/src/popover/popover.tsx similarity index 100% rename from packages/shared-ux/button_toolbar/src/popover/popover.tsx rename to src/platform/packages/shared/shared-ux/button_toolbar/src/popover/popover.tsx diff --git a/packages/shared-ux/button_toolbar/src/toolbar/__snapshots__/toolbar.test.tsx.snap b/src/platform/packages/shared/shared-ux/button_toolbar/src/toolbar/__snapshots__/toolbar.test.tsx.snap similarity index 100% rename from packages/shared-ux/button_toolbar/src/toolbar/__snapshots__/toolbar.test.tsx.snap rename to src/platform/packages/shared/shared-ux/button_toolbar/src/toolbar/__snapshots__/toolbar.test.tsx.snap diff --git a/packages/shared-ux/button_toolbar/src/toolbar/index.ts b/src/platform/packages/shared/shared-ux/button_toolbar/src/toolbar/index.ts similarity index 100% rename from packages/shared-ux/button_toolbar/src/toolbar/index.ts rename to src/platform/packages/shared/shared-ux/button_toolbar/src/toolbar/index.ts diff --git a/packages/shared-ux/button_toolbar/src/toolbar/toolbar.stories.tsx b/src/platform/packages/shared/shared-ux/button_toolbar/src/toolbar/toolbar.stories.tsx similarity index 100% rename from packages/shared-ux/button_toolbar/src/toolbar/toolbar.stories.tsx rename to src/platform/packages/shared/shared-ux/button_toolbar/src/toolbar/toolbar.stories.tsx diff --git a/packages/shared-ux/button_toolbar/src/toolbar/toolbar.test.tsx b/src/platform/packages/shared/shared-ux/button_toolbar/src/toolbar/toolbar.test.tsx similarity index 100% rename from packages/shared-ux/button_toolbar/src/toolbar/toolbar.test.tsx rename to src/platform/packages/shared/shared-ux/button_toolbar/src/toolbar/toolbar.test.tsx diff --git a/packages/shared-ux/button_toolbar/src/toolbar/toolbar.tsx b/src/platform/packages/shared/shared-ux/button_toolbar/src/toolbar/toolbar.tsx similarity index 100% rename from packages/shared-ux/button_toolbar/src/toolbar/toolbar.tsx rename to src/platform/packages/shared/shared-ux/button_toolbar/src/toolbar/toolbar.tsx diff --git a/packages/shared-ux/button_toolbar/tsconfig.json b/src/platform/packages/shared/shared-ux/button_toolbar/tsconfig.json similarity index 85% rename from packages/shared-ux/button_toolbar/tsconfig.json rename to src/platform/packages/shared/shared-ux/button_toolbar/tsconfig.json index 49ed962217ce3..2e25cbc2b680e 100644 --- a/packages/shared-ux/button_toolbar/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/button_toolbar/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../tsconfig.base.json", + "extends": "../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/card/no_data/impl/README.mdx b/src/platform/packages/shared/shared-ux/card/no_data/impl/README.mdx similarity index 100% rename from packages/shared-ux/card/no_data/impl/README.mdx rename to src/platform/packages/shared/shared-ux/card/no_data/impl/README.mdx diff --git a/packages/shared-ux/card/no_data/impl/index.ts b/src/platform/packages/shared/shared-ux/card/no_data/impl/index.ts similarity index 100% rename from packages/shared-ux/card/no_data/impl/index.ts rename to src/platform/packages/shared/shared-ux/card/no_data/impl/index.ts diff --git a/src/platform/packages/shared/shared-ux/card/no_data/impl/jest.config.js b/src/platform/packages/shared/shared-ux/card/no_data/impl/jest.config.js new file mode 100644 index 0000000000000..7d0248fdd4a4d --- /dev/null +++ b/src/platform/packages/shared/shared-ux/card/no_data/impl/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/shared-ux/card/no_data'], +}; diff --git a/packages/shared-ux/card/no_data/impl/kibana.jsonc b/src/platform/packages/shared/shared-ux/card/no_data/impl/kibana.jsonc similarity index 100% rename from packages/shared-ux/card/no_data/impl/kibana.jsonc rename to src/platform/packages/shared/shared-ux/card/no_data/impl/kibana.jsonc diff --git a/packages/shared-ux/card/no_data/impl/package.json b/src/platform/packages/shared/shared-ux/card/no_data/impl/package.json similarity index 100% rename from packages/shared-ux/card/no_data/impl/package.json rename to src/platform/packages/shared/shared-ux/card/no_data/impl/package.json diff --git a/packages/shared-ux/card/no_data/impl/src/__snapshots__/no_data_card.component.test.tsx.snap b/src/platform/packages/shared/shared-ux/card/no_data/impl/src/__snapshots__/no_data_card.component.test.tsx.snap similarity index 100% rename from packages/shared-ux/card/no_data/impl/src/__snapshots__/no_data_card.component.test.tsx.snap rename to src/platform/packages/shared/shared-ux/card/no_data/impl/src/__snapshots__/no_data_card.component.test.tsx.snap diff --git a/packages/shared-ux/card/no_data/impl/src/__snapshots__/no_data_card.test.tsx.snap b/src/platform/packages/shared/shared-ux/card/no_data/impl/src/__snapshots__/no_data_card.test.tsx.snap similarity index 100% rename from packages/shared-ux/card/no_data/impl/src/__snapshots__/no_data_card.test.tsx.snap rename to src/platform/packages/shared/shared-ux/card/no_data/impl/src/__snapshots__/no_data_card.test.tsx.snap diff --git a/packages/shared-ux/card/no_data/impl/src/assets/elastic_agent_card.svg b/src/platform/packages/shared/shared-ux/card/no_data/impl/src/assets/elastic_agent_card.svg similarity index 100% rename from packages/shared-ux/card/no_data/impl/src/assets/elastic_agent_card.svg rename to src/platform/packages/shared/shared-ux/card/no_data/impl/src/assets/elastic_agent_card.svg diff --git a/packages/shared-ux/card/no_data/impl/src/no_data_card.component.test.tsx b/src/platform/packages/shared/shared-ux/card/no_data/impl/src/no_data_card.component.test.tsx similarity index 100% rename from packages/shared-ux/card/no_data/impl/src/no_data_card.component.test.tsx rename to src/platform/packages/shared/shared-ux/card/no_data/impl/src/no_data_card.component.test.tsx diff --git a/packages/shared-ux/card/no_data/impl/src/no_data_card.component.tsx b/src/platform/packages/shared/shared-ux/card/no_data/impl/src/no_data_card.component.tsx similarity index 100% rename from packages/shared-ux/card/no_data/impl/src/no_data_card.component.tsx rename to src/platform/packages/shared/shared-ux/card/no_data/impl/src/no_data_card.component.tsx diff --git a/packages/shared-ux/card/no_data/impl/src/no_data_card.stories.tsx b/src/platform/packages/shared/shared-ux/card/no_data/impl/src/no_data_card.stories.tsx similarity index 100% rename from packages/shared-ux/card/no_data/impl/src/no_data_card.stories.tsx rename to src/platform/packages/shared/shared-ux/card/no_data/impl/src/no_data_card.stories.tsx diff --git a/packages/shared-ux/card/no_data/impl/src/no_data_card.styles.ts b/src/platform/packages/shared/shared-ux/card/no_data/impl/src/no_data_card.styles.ts similarity index 100% rename from packages/shared-ux/card/no_data/impl/src/no_data_card.styles.ts rename to src/platform/packages/shared/shared-ux/card/no_data/impl/src/no_data_card.styles.ts diff --git a/packages/shared-ux/card/no_data/impl/src/no_data_card.test.tsx b/src/platform/packages/shared/shared-ux/card/no_data/impl/src/no_data_card.test.tsx similarity index 100% rename from packages/shared-ux/card/no_data/impl/src/no_data_card.test.tsx rename to src/platform/packages/shared/shared-ux/card/no_data/impl/src/no_data_card.test.tsx diff --git a/packages/shared-ux/card/no_data/impl/src/no_data_card.tsx b/src/platform/packages/shared/shared-ux/card/no_data/impl/src/no_data_card.tsx similarity index 100% rename from packages/shared-ux/card/no_data/impl/src/no_data_card.tsx rename to src/platform/packages/shared/shared-ux/card/no_data/impl/src/no_data_card.tsx diff --git a/packages/shared-ux/card/no_data/impl/src/services.tsx b/src/platform/packages/shared/shared-ux/card/no_data/impl/src/services.tsx similarity index 100% rename from packages/shared-ux/card/no_data/impl/src/services.tsx rename to src/platform/packages/shared/shared-ux/card/no_data/impl/src/services.tsx diff --git a/packages/shared-ux/card/no_data/impl/tsconfig.json b/src/platform/packages/shared/shared-ux/card/no_data/impl/tsconfig.json similarity index 88% rename from packages/shared-ux/card/no_data/impl/tsconfig.json rename to src/platform/packages/shared/shared-ux/card/no_data/impl/tsconfig.json index cd9e401f45b02..13e89d6938d5d 100644 --- a/packages/shared-ux/card/no_data/impl/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/card/no_data/impl/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../../tsconfig.base.json", + "extends": "../../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/card/no_data/mocks/README.md b/src/platform/packages/shared/shared-ux/card/no_data/mocks/README.md similarity index 100% rename from packages/shared-ux/card/no_data/mocks/README.md rename to src/platform/packages/shared/shared-ux/card/no_data/mocks/README.md diff --git a/packages/shared-ux/card/no_data/mocks/index.ts b/src/platform/packages/shared/shared-ux/card/no_data/mocks/index.ts similarity index 100% rename from packages/shared-ux/card/no_data/mocks/index.ts rename to src/platform/packages/shared/shared-ux/card/no_data/mocks/index.ts diff --git a/packages/shared-ux/card/no_data/mocks/kibana.jsonc b/src/platform/packages/shared/shared-ux/card/no_data/mocks/kibana.jsonc similarity index 100% rename from packages/shared-ux/card/no_data/mocks/kibana.jsonc rename to src/platform/packages/shared/shared-ux/card/no_data/mocks/kibana.jsonc diff --git a/packages/shared-ux/card/no_data/mocks/package.json b/src/platform/packages/shared/shared-ux/card/no_data/mocks/package.json similarity index 100% rename from packages/shared-ux/card/no_data/mocks/package.json rename to src/platform/packages/shared/shared-ux/card/no_data/mocks/package.json diff --git a/packages/shared-ux/card/no_data/mocks/src/jest.ts b/src/platform/packages/shared/shared-ux/card/no_data/mocks/src/jest.ts similarity index 100% rename from packages/shared-ux/card/no_data/mocks/src/jest.ts rename to src/platform/packages/shared/shared-ux/card/no_data/mocks/src/jest.ts diff --git a/packages/shared-ux/card/no_data/mocks/src/storybook.ts b/src/platform/packages/shared/shared-ux/card/no_data/mocks/src/storybook.ts similarity index 100% rename from packages/shared-ux/card/no_data/mocks/src/storybook.ts rename to src/platform/packages/shared/shared-ux/card/no_data/mocks/src/storybook.ts diff --git a/packages/shared-ux/card/no_data/mocks/tsconfig.json b/src/platform/packages/shared/shared-ux/card/no_data/mocks/tsconfig.json similarity index 85% rename from packages/shared-ux/card/no_data/mocks/tsconfig.json rename to src/platform/packages/shared/shared-ux/card/no_data/mocks/tsconfig.json index 605636c685b22..c77f0782e6e10 100644 --- a/packages/shared-ux/card/no_data/mocks/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/card/no_data/mocks/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../../tsconfig.base.json", + "extends": "../../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/card/no_data/types/README.md b/src/platform/packages/shared/shared-ux/card/no_data/types/README.md similarity index 100% rename from packages/shared-ux/card/no_data/types/README.md rename to src/platform/packages/shared/shared-ux/card/no_data/types/README.md diff --git a/packages/shared-ux/card/no_data/types/index.d.ts b/src/platform/packages/shared/shared-ux/card/no_data/types/index.d.ts similarity index 100% rename from packages/shared-ux/card/no_data/types/index.d.ts rename to src/platform/packages/shared/shared-ux/card/no_data/types/index.d.ts diff --git a/packages/shared-ux/card/no_data/types/kibana.jsonc b/src/platform/packages/shared/shared-ux/card/no_data/types/kibana.jsonc similarity index 100% rename from packages/shared-ux/card/no_data/types/kibana.jsonc rename to src/platform/packages/shared/shared-ux/card/no_data/types/kibana.jsonc diff --git a/packages/shared-ux/card/no_data/types/package.json b/src/platform/packages/shared/shared-ux/card/no_data/types/package.json similarity index 100% rename from packages/shared-ux/card/no_data/types/package.json rename to src/platform/packages/shared/shared-ux/card/no_data/types/package.json diff --git a/packages/shared-ux/card/no_data/types/tsconfig.json b/src/platform/packages/shared/shared-ux/card/no_data/types/tsconfig.json similarity index 79% rename from packages/shared-ux/card/no_data/types/tsconfig.json rename to src/platform/packages/shared/shared-ux/card/no_data/types/tsconfig.json index 73edcc63080a5..fea147629e8db 100644 --- a/packages/shared-ux/card/no_data/types/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/card/no_data/types/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../../tsconfig.base.json", + "extends": "../../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [] diff --git a/packages/shared-ux/chrome/navigation/README.mdx b/src/platform/packages/shared/shared-ux/chrome/navigation/README.mdx similarity index 100% rename from packages/shared-ux/chrome/navigation/README.mdx rename to src/platform/packages/shared/shared-ux/chrome/navigation/README.mdx diff --git a/packages/shared-ux/chrome/navigation/__jest__/active_node.test.tsx b/src/platform/packages/shared/shared-ux/chrome/navigation/__jest__/active_node.test.tsx similarity index 100% rename from packages/shared-ux/chrome/navigation/__jest__/active_node.test.tsx rename to src/platform/packages/shared/shared-ux/chrome/navigation/__jest__/active_node.test.tsx diff --git a/packages/shared-ux/chrome/navigation/__jest__/build_nav_tree.test.tsx b/src/platform/packages/shared/shared-ux/chrome/navigation/__jest__/build_nav_tree.test.tsx similarity index 100% rename from packages/shared-ux/chrome/navigation/__jest__/build_nav_tree.test.tsx rename to src/platform/packages/shared/shared-ux/chrome/navigation/__jest__/build_nav_tree.test.tsx diff --git a/packages/shared-ux/chrome/navigation/__jest__/panel.test.tsx b/src/platform/packages/shared/shared-ux/chrome/navigation/__jest__/panel.test.tsx similarity index 100% rename from packages/shared-ux/chrome/navigation/__jest__/panel.test.tsx rename to src/platform/packages/shared/shared-ux/chrome/navigation/__jest__/panel.test.tsx diff --git a/packages/shared-ux/chrome/navigation/__jest__/setup_jest_mocks.ts b/src/platform/packages/shared/shared-ux/chrome/navigation/__jest__/setup_jest_mocks.ts similarity index 100% rename from packages/shared-ux/chrome/navigation/__jest__/setup_jest_mocks.ts rename to src/platform/packages/shared/shared-ux/chrome/navigation/__jest__/setup_jest_mocks.ts diff --git a/packages/shared-ux/chrome/navigation/__jest__/utils.tsx b/src/platform/packages/shared/shared-ux/chrome/navigation/__jest__/utils.tsx similarity index 100% rename from packages/shared-ux/chrome/navigation/__jest__/utils.tsx rename to src/platform/packages/shared/shared-ux/chrome/navigation/__jest__/utils.tsx diff --git a/packages/shared-ux/chrome/navigation/index.ts b/src/platform/packages/shared/shared-ux/chrome/navigation/index.ts similarity index 100% rename from packages/shared-ux/chrome/navigation/index.ts rename to src/platform/packages/shared/shared-ux/chrome/navigation/index.ts diff --git a/src/platform/packages/shared/shared-ux/chrome/navigation/jest.config.js b/src/platform/packages/shared/shared-ux/chrome/navigation/jest.config.js new file mode 100644 index 0000000000000..c8ca993f9377f --- /dev/null +++ b/src/platform/packages/shared/shared-ux/chrome/navigation/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/shared-ux/chrome/navigation'], +}; diff --git a/packages/shared-ux/chrome/navigation/kibana.jsonc b/src/platform/packages/shared/shared-ux/chrome/navigation/kibana.jsonc similarity index 100% rename from packages/shared-ux/chrome/navigation/kibana.jsonc rename to src/platform/packages/shared/shared-ux/chrome/navigation/kibana.jsonc diff --git a/packages/shared-ux/chrome/navigation/mocks/index.ts b/src/platform/packages/shared/shared-ux/chrome/navigation/mocks/index.ts similarity index 100% rename from packages/shared-ux/chrome/navigation/mocks/index.ts rename to src/platform/packages/shared/shared-ux/chrome/navigation/mocks/index.ts diff --git a/packages/shared-ux/chrome/navigation/mocks/storybook.ts b/src/platform/packages/shared/shared-ux/chrome/navigation/mocks/storybook.ts similarity index 100% rename from packages/shared-ux/chrome/navigation/mocks/storybook.ts rename to src/platform/packages/shared/shared-ux/chrome/navigation/mocks/storybook.ts diff --git a/packages/shared-ux/chrome/navigation/package.json b/src/platform/packages/shared/shared-ux/chrome/navigation/package.json similarity index 100% rename from packages/shared-ux/chrome/navigation/package.json rename to src/platform/packages/shared/shared-ux/chrome/navigation/package.json diff --git a/packages/shared-ux/chrome/navigation/src/analytics/event_tracker.ts b/src/platform/packages/shared/shared-ux/chrome/navigation/src/analytics/event_tracker.ts similarity index 100% rename from packages/shared-ux/chrome/navigation/src/analytics/event_tracker.ts rename to src/platform/packages/shared/shared-ux/chrome/navigation/src/analytics/event_tracker.ts diff --git a/packages/shared-ux/chrome/navigation/src/analytics/index.ts b/src/platform/packages/shared/shared-ux/chrome/navigation/src/analytics/index.ts similarity index 100% rename from packages/shared-ux/chrome/navigation/src/analytics/index.ts rename to src/platform/packages/shared/shared-ux/chrome/navigation/src/analytics/index.ts diff --git a/packages/shared-ux/chrome/navigation/src/services.tsx b/src/platform/packages/shared/shared-ux/chrome/navigation/src/services.tsx similarity index 100% rename from packages/shared-ux/chrome/navigation/src/services.tsx rename to src/platform/packages/shared/shared-ux/chrome/navigation/src/services.tsx diff --git a/packages/shared-ux/chrome/navigation/src/types.ts b/src/platform/packages/shared/shared-ux/chrome/navigation/src/types.ts similarity index 100% rename from packages/shared-ux/chrome/navigation/src/types.ts rename to src/platform/packages/shared/shared-ux/chrome/navigation/src/types.ts diff --git a/packages/shared-ux/chrome/navigation/src/ui/components/feedback_btn.tsx b/src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/components/feedback_btn.tsx similarity index 100% rename from packages/shared-ux/chrome/navigation/src/ui/components/feedback_btn.tsx rename to src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/components/feedback_btn.tsx diff --git a/packages/shared-ux/chrome/navigation/src/ui/components/index.ts b/src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/components/index.ts similarity index 100% rename from packages/shared-ux/chrome/navigation/src/ui/components/index.ts rename to src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/components/index.ts diff --git a/packages/shared-ux/chrome/navigation/src/ui/components/navigation_item_open_panel.tsx b/src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/components/navigation_item_open_panel.tsx similarity index 100% rename from packages/shared-ux/chrome/navigation/src/ui/components/navigation_item_open_panel.tsx rename to src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/components/navigation_item_open_panel.tsx diff --git a/packages/shared-ux/chrome/navigation/src/ui/components/navigation_section_ui.tsx b/src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/components/navigation_section_ui.tsx similarity index 100% rename from packages/shared-ux/chrome/navigation/src/ui/components/navigation_section_ui.tsx rename to src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/components/navigation_section_ui.tsx diff --git a/packages/shared-ux/chrome/navigation/src/ui/components/panel/context.tsx b/src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/components/panel/context.tsx similarity index 100% rename from packages/shared-ux/chrome/navigation/src/ui/components/panel/context.tsx rename to src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/components/panel/context.tsx diff --git a/packages/shared-ux/chrome/navigation/src/ui/components/panel/default_content.tsx b/src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/components/panel/default_content.tsx similarity index 100% rename from packages/shared-ux/chrome/navigation/src/ui/components/panel/default_content.tsx rename to src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/components/panel/default_content.tsx diff --git a/packages/shared-ux/chrome/navigation/src/ui/components/panel/index.ts b/src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/components/panel/index.ts similarity index 100% rename from packages/shared-ux/chrome/navigation/src/ui/components/panel/index.ts rename to src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/components/panel/index.ts diff --git a/packages/shared-ux/chrome/navigation/src/ui/components/panel/label_badge.tsx b/src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/components/panel/label_badge.tsx similarity index 100% rename from packages/shared-ux/chrome/navigation/src/ui/components/panel/label_badge.tsx rename to src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/components/panel/label_badge.tsx diff --git a/packages/shared-ux/chrome/navigation/src/ui/components/panel/navigation_panel.tsx b/src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/components/panel/navigation_panel.tsx similarity index 100% rename from packages/shared-ux/chrome/navigation/src/ui/components/panel/navigation_panel.tsx rename to src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/components/panel/navigation_panel.tsx diff --git a/packages/shared-ux/chrome/navigation/src/ui/components/panel/panel_group.tsx b/src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/components/panel/panel_group.tsx similarity index 100% rename from packages/shared-ux/chrome/navigation/src/ui/components/panel/panel_group.tsx rename to src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/components/panel/panel_group.tsx diff --git a/packages/shared-ux/chrome/navigation/src/ui/components/panel/panel_nav_item.tsx b/src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/components/panel/panel_nav_item.tsx similarity index 100% rename from packages/shared-ux/chrome/navigation/src/ui/components/panel/panel_nav_item.tsx rename to src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/components/panel/panel_nav_item.tsx diff --git a/packages/shared-ux/chrome/navigation/src/ui/components/panel/panel_nav_item_label.tsx b/src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/components/panel/panel_nav_item_label.tsx similarity index 100% rename from packages/shared-ux/chrome/navigation/src/ui/components/panel/panel_nav_item_label.tsx rename to src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/components/panel/panel_nav_item_label.tsx diff --git a/packages/shared-ux/chrome/navigation/src/ui/components/panel/styles.ts b/src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/components/panel/styles.ts similarity index 100% rename from packages/shared-ux/chrome/navigation/src/ui/components/panel/styles.ts rename to src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/components/panel/styles.ts diff --git a/packages/shared-ux/chrome/navigation/src/ui/components/panel/types.ts b/src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/components/panel/types.ts similarity index 100% rename from packages/shared-ux/chrome/navigation/src/ui/components/panel/types.ts rename to src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/components/panel/types.ts diff --git a/packages/shared-ux/chrome/navigation/src/ui/components/recently_accessed.tsx b/src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/components/recently_accessed.tsx similarity index 100% rename from packages/shared-ux/chrome/navigation/src/ui/components/recently_accessed.tsx rename to src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/components/recently_accessed.tsx diff --git a/packages/shared-ux/chrome/navigation/src/ui/constants.ts b/src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/constants.ts similarity index 100% rename from packages/shared-ux/chrome/navigation/src/ui/constants.ts rename to src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/constants.ts diff --git a/packages/shared-ux/chrome/navigation/src/ui/elastic_mark.tsx b/src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/elastic_mark.tsx similarity index 100% rename from packages/shared-ux/chrome/navigation/src/ui/elastic_mark.tsx rename to src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/elastic_mark.tsx diff --git a/packages/shared-ux/chrome/navigation/src/ui/hooks/index.ts b/src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/hooks/index.ts similarity index 100% rename from packages/shared-ux/chrome/navigation/src/ui/hooks/index.ts rename to src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/hooks/index.ts diff --git a/packages/shared-ux/chrome/navigation/src/ui/hooks/use_accordion_state.ts b/src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/hooks/use_accordion_state.ts similarity index 100% rename from packages/shared-ux/chrome/navigation/src/ui/hooks/use_accordion_state.ts rename to src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/hooks/use_accordion_state.ts diff --git a/packages/shared-ux/chrome/navigation/src/ui/i18n_strings.ts b/src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/i18n_strings.ts similarity index 100% rename from packages/shared-ux/chrome/navigation/src/ui/i18n_strings.ts rename to src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/i18n_strings.ts diff --git a/packages/shared-ux/chrome/navigation/src/ui/index.ts b/src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/index.ts similarity index 100% rename from packages/shared-ux/chrome/navigation/src/ui/index.ts rename to src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/index.ts diff --git a/packages/shared-ux/chrome/navigation/src/ui/navigation.stories.tsx b/src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/navigation.stories.tsx similarity index 100% rename from packages/shared-ux/chrome/navigation/src/ui/navigation.stories.tsx rename to src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/navigation.stories.tsx diff --git a/packages/shared-ux/chrome/navigation/src/ui/navigation.tsx b/src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/navigation.tsx similarity index 100% rename from packages/shared-ux/chrome/navigation/src/ui/navigation.tsx rename to src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/navigation.tsx diff --git a/packages/shared-ux/chrome/navigation/src/ui/types.ts b/src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/types.ts similarity index 100% rename from packages/shared-ux/chrome/navigation/src/ui/types.ts rename to src/platform/packages/shared/shared-ux/chrome/navigation/src/ui/types.ts diff --git a/packages/shared-ux/chrome/navigation/src/utils.test.ts b/src/platform/packages/shared/shared-ux/chrome/navigation/src/utils.test.ts similarity index 100% rename from packages/shared-ux/chrome/navigation/src/utils.test.ts rename to src/platform/packages/shared/shared-ux/chrome/navigation/src/utils.test.ts diff --git a/packages/shared-ux/chrome/navigation/src/utils.ts b/src/platform/packages/shared/shared-ux/chrome/navigation/src/utils.ts similarity index 100% rename from packages/shared-ux/chrome/navigation/src/utils.ts rename to src/platform/packages/shared/shared-ux/chrome/navigation/src/utils.ts diff --git a/packages/shared-ux/chrome/navigation/tsconfig.json b/src/platform/packages/shared/shared-ux/chrome/navigation/tsconfig.json similarity index 90% rename from packages/shared-ux/chrome/navigation/tsconfig.json rename to src/platform/packages/shared/shared-ux/chrome/navigation/tsconfig.json index 9936cc9f1b892..4fb4d92829f87 100644 --- a/packages/shared-ux/chrome/navigation/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/chrome/navigation/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/error_boundary/BUILD.bazel b/src/platform/packages/shared/shared-ux/error_boundary/BUILD.bazel similarity index 100% rename from packages/shared-ux/error_boundary/BUILD.bazel rename to src/platform/packages/shared/shared-ux/error_boundary/BUILD.bazel diff --git a/packages/shared-ux/error_boundary/README.mdx b/src/platform/packages/shared/shared-ux/error_boundary/README.mdx similarity index 100% rename from packages/shared-ux/error_boundary/README.mdx rename to src/platform/packages/shared/shared-ux/error_boundary/README.mdx diff --git a/packages/shared-ux/error_boundary/index.ts b/src/platform/packages/shared/shared-ux/error_boundary/index.ts similarity index 100% rename from packages/shared-ux/error_boundary/index.ts rename to src/platform/packages/shared/shared-ux/error_boundary/index.ts diff --git a/packages/shared-ux/button_toolbar/jest.config.js b/src/platform/packages/shared/shared-ux/error_boundary/jest.config.js similarity index 82% rename from packages/shared-ux/button_toolbar/jest.config.js rename to src/platform/packages/shared/shared-ux/error_boundary/jest.config.js index 3a3c40d16294a..fe492bcc6cad7 100644 --- a/packages/shared-ux/button_toolbar/jest.config.js +++ b/src/platform/packages/shared/shared-ux/error_boundary/jest.config.js @@ -9,6 +9,6 @@ module.exports = { preset: '@kbn/test', - rootDir: '../../..', - roots: ['/packages/shared-ux/button_toolbar'], + rootDir: '../../../../../..', + roots: ['/src/platform/packages/shared/shared-ux/error_boundary'], }; diff --git a/packages/shared-ux/error_boundary/kibana.jsonc b/src/platform/packages/shared/shared-ux/error_boundary/kibana.jsonc similarity index 100% rename from packages/shared-ux/error_boundary/kibana.jsonc rename to src/platform/packages/shared/shared-ux/error_boundary/kibana.jsonc diff --git a/packages/shared-ux/error_boundary/lib/telemetry_events.ts b/src/platform/packages/shared/shared-ux/error_boundary/lib/telemetry_events.ts similarity index 100% rename from packages/shared-ux/error_boundary/lib/telemetry_events.ts rename to src/platform/packages/shared/shared-ux/error_boundary/lib/telemetry_events.ts diff --git a/packages/shared-ux/error_boundary/mocks/index.ts b/src/platform/packages/shared/shared-ux/error_boundary/mocks/index.ts similarity index 100% rename from packages/shared-ux/error_boundary/mocks/index.ts rename to src/platform/packages/shared/shared-ux/error_boundary/mocks/index.ts diff --git a/packages/shared-ux/error_boundary/mocks/src/bad_component.tsx b/src/platform/packages/shared/shared-ux/error_boundary/mocks/src/bad_component.tsx similarity index 100% rename from packages/shared-ux/error_boundary/mocks/src/bad_component.tsx rename to src/platform/packages/shared/shared-ux/error_boundary/mocks/src/bad_component.tsx diff --git a/packages/shared-ux/error_boundary/mocks/src/chunk_load_error_component.tsx b/src/platform/packages/shared/shared-ux/error_boundary/mocks/src/chunk_load_error_component.tsx similarity index 100% rename from packages/shared-ux/error_boundary/mocks/src/chunk_load_error_component.tsx rename to src/platform/packages/shared/shared-ux/error_boundary/mocks/src/chunk_load_error_component.tsx diff --git a/packages/shared-ux/error_boundary/mocks/src/jest.ts b/src/platform/packages/shared/shared-ux/error_boundary/mocks/src/jest.ts similarity index 100% rename from packages/shared-ux/error_boundary/mocks/src/jest.ts rename to src/platform/packages/shared/shared-ux/error_boundary/mocks/src/jest.ts diff --git a/packages/shared-ux/error_boundary/mocks/src/storybook.ts b/src/platform/packages/shared/shared-ux/error_boundary/mocks/src/storybook.ts similarity index 100% rename from packages/shared-ux/error_boundary/mocks/src/storybook.ts rename to src/platform/packages/shared/shared-ux/error_boundary/mocks/src/storybook.ts diff --git a/packages/shared-ux/error_boundary/mocks/src/storybook_template.tsx b/src/platform/packages/shared/shared-ux/error_boundary/mocks/src/storybook_template.tsx similarity index 100% rename from packages/shared-ux/error_boundary/mocks/src/storybook_template.tsx rename to src/platform/packages/shared/shared-ux/error_boundary/mocks/src/storybook_template.tsx diff --git a/packages/shared-ux/error_boundary/package.json b/src/platform/packages/shared/shared-ux/error_boundary/package.json similarity index 100% rename from packages/shared-ux/error_boundary/package.json rename to src/platform/packages/shared/shared-ux/error_boundary/package.json diff --git a/packages/shared-ux/error_boundary/src/services/error_boundary_services.test.tsx b/src/platform/packages/shared/shared-ux/error_boundary/src/services/error_boundary_services.test.tsx similarity index 100% rename from packages/shared-ux/error_boundary/src/services/error_boundary_services.test.tsx rename to src/platform/packages/shared/shared-ux/error_boundary/src/services/error_boundary_services.test.tsx diff --git a/packages/shared-ux/error_boundary/src/services/error_boundary_services.tsx b/src/platform/packages/shared/shared-ux/error_boundary/src/services/error_boundary_services.tsx similarity index 100% rename from packages/shared-ux/error_boundary/src/services/error_boundary_services.tsx rename to src/platform/packages/shared/shared-ux/error_boundary/src/services/error_boundary_services.tsx diff --git a/packages/shared-ux/error_boundary/src/services/error_service.test.ts b/src/platform/packages/shared/shared-ux/error_boundary/src/services/error_service.test.ts similarity index 100% rename from packages/shared-ux/error_boundary/src/services/error_service.test.ts rename to src/platform/packages/shared/shared-ux/error_boundary/src/services/error_service.test.ts diff --git a/packages/shared-ux/error_boundary/src/services/error_service.ts b/src/platform/packages/shared/shared-ux/error_boundary/src/services/error_service.ts similarity index 100% rename from packages/shared-ux/error_boundary/src/services/error_service.ts rename to src/platform/packages/shared/shared-ux/error_boundary/src/services/error_service.ts diff --git a/packages/shared-ux/error_boundary/src/ui/error_boundary.fatal.stories.tsx b/src/platform/packages/shared/shared-ux/error_boundary/src/ui/error_boundary.fatal.stories.tsx similarity index 100% rename from packages/shared-ux/error_boundary/src/ui/error_boundary.fatal.stories.tsx rename to src/platform/packages/shared/shared-ux/error_boundary/src/ui/error_boundary.fatal.stories.tsx diff --git a/packages/shared-ux/error_boundary/src/ui/error_boundary.recoverable.stories.tsx b/src/platform/packages/shared/shared-ux/error_boundary/src/ui/error_boundary.recoverable.stories.tsx similarity index 100% rename from packages/shared-ux/error_boundary/src/ui/error_boundary.recoverable.stories.tsx rename to src/platform/packages/shared/shared-ux/error_boundary/src/ui/error_boundary.recoverable.stories.tsx diff --git a/packages/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 similarity index 100% rename from packages/shared-ux/error_boundary/src/ui/error_boundary.test.tsx rename to src/platform/packages/shared/shared-ux/error_boundary/src/ui/error_boundary.test.tsx diff --git a/packages/shared-ux/error_boundary/src/ui/error_boundary.tsx b/src/platform/packages/shared/shared-ux/error_boundary/src/ui/error_boundary.tsx similarity index 100% rename from packages/shared-ux/error_boundary/src/ui/error_boundary.tsx rename to src/platform/packages/shared/shared-ux/error_boundary/src/ui/error_boundary.tsx diff --git a/packages/shared-ux/error_boundary/src/ui/message_components.tsx b/src/platform/packages/shared/shared-ux/error_boundary/src/ui/message_components.tsx similarity index 100% rename from packages/shared-ux/error_boundary/src/ui/message_components.tsx rename to src/platform/packages/shared/shared-ux/error_boundary/src/ui/message_components.tsx diff --git a/packages/shared-ux/error_boundary/src/ui/message_strings.ts b/src/platform/packages/shared/shared-ux/error_boundary/src/ui/message_strings.ts similarity index 100% rename from packages/shared-ux/error_boundary/src/ui/message_strings.ts rename to src/platform/packages/shared/shared-ux/error_boundary/src/ui/message_strings.ts diff --git a/packages/shared-ux/error_boundary/src/ui/throw_if_error.ts b/src/platform/packages/shared/shared-ux/error_boundary/src/ui/throw_if_error.ts similarity index 100% rename from packages/shared-ux/error_boundary/src/ui/throw_if_error.ts rename to src/platform/packages/shared/shared-ux/error_boundary/src/ui/throw_if_error.ts diff --git a/packages/shared-ux/error_boundary/tsconfig.json b/src/platform/packages/shared/shared-ux/error_boundary/tsconfig.json similarity index 89% rename from packages/shared-ux/error_boundary/tsconfig.json rename to src/platform/packages/shared/shared-ux/error_boundary/tsconfig.json index 74d3241c147fa..dcd42c82d16c7 100644 --- a/packages/shared-ux/error_boundary/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/error_boundary/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../tsconfig.base.json", + "extends": "../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/error_boundary/types.ts b/src/platform/packages/shared/shared-ux/error_boundary/types.ts similarity index 100% rename from packages/shared-ux/error_boundary/types.ts rename to src/platform/packages/shared/shared-ux/error_boundary/types.ts diff --git a/packages/shared-ux/file/context/README.mdx b/src/platform/packages/shared/shared-ux/file/context/README.mdx similarity index 100% rename from packages/shared-ux/file/context/README.mdx rename to src/platform/packages/shared/shared-ux/file/context/README.mdx diff --git a/packages/shared-ux/file/context/index.ts b/src/platform/packages/shared/shared-ux/file/context/index.ts similarity index 100% rename from packages/shared-ux/file/context/index.ts rename to src/platform/packages/shared/shared-ux/file/context/index.ts diff --git a/packages/shared-ux/file/context/kibana.jsonc b/src/platform/packages/shared/shared-ux/file/context/kibana.jsonc similarity index 100% rename from packages/shared-ux/file/context/kibana.jsonc rename to src/platform/packages/shared/shared-ux/file/context/kibana.jsonc diff --git a/packages/shared-ux/file/context/package.json b/src/platform/packages/shared/shared-ux/file/context/package.json similarity index 100% rename from packages/shared-ux/file/context/package.json rename to src/platform/packages/shared/shared-ux/file/context/package.json diff --git a/packages/shared-ux/file/context/src/index.tsx b/src/platform/packages/shared/shared-ux/file/context/src/index.tsx similarity index 100% rename from packages/shared-ux/file/context/src/index.tsx rename to src/platform/packages/shared/shared-ux/file/context/src/index.tsx diff --git a/packages/shared-ux/file/context/tsconfig.json b/src/platform/packages/shared/shared-ux/file/context/tsconfig.json similarity index 80% rename from packages/shared-ux/file/context/tsconfig.json rename to src/platform/packages/shared/shared-ux/file/context/tsconfig.json index 3f5374f1300ff..521dfa3cc7d37 100644 --- a/packages/shared-ux/file/context/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/file/context/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ ] diff --git a/packages/shared-ux/file/file_picker/impl/README.mdx b/src/platform/packages/shared/shared-ux/file/file_picker/impl/README.mdx similarity index 100% rename from packages/shared-ux/file/file_picker/impl/README.mdx rename to src/platform/packages/shared/shared-ux/file/file_picker/impl/README.mdx diff --git a/packages/shared-ux/file/file_picker/impl/index.tsx b/src/platform/packages/shared/shared-ux/file/file_picker/impl/index.tsx similarity index 100% rename from packages/shared-ux/file/file_picker/impl/index.tsx rename to src/platform/packages/shared/shared-ux/file/file_picker/impl/index.tsx diff --git a/src/platform/packages/shared/shared-ux/file/file_picker/impl/jest.config.js b/src/platform/packages/shared/shared-ux/file/file_picker/impl/jest.config.js new file mode 100644 index 0000000000000..9ede9fa3cd9e6 --- /dev/null +++ b/src/platform/packages/shared/shared-ux/file/file_picker/impl/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/shared-ux/file/file_picker/impl'], +}; diff --git a/packages/shared-ux/file/file_picker/impl/kibana.jsonc b/src/platform/packages/shared/shared-ux/file/file_picker/impl/kibana.jsonc similarity index 100% rename from packages/shared-ux/file/file_picker/impl/kibana.jsonc rename to src/platform/packages/shared/shared-ux/file/file_picker/impl/kibana.jsonc diff --git a/packages/shared-ux/file/file_picker/impl/package.json b/src/platform/packages/shared/shared-ux/file/file_picker/impl/package.json similarity index 100% rename from packages/shared-ux/file/file_picker/impl/package.json rename to src/platform/packages/shared/shared-ux/file/file_picker/impl/package.json diff --git a/packages/shared-ux/file/file_picker/impl/src/components/clear_filter_button.tsx b/src/platform/packages/shared/shared-ux/file/file_picker/impl/src/components/clear_filter_button.tsx similarity index 100% rename from packages/shared-ux/file/file_picker/impl/src/components/clear_filter_button.tsx rename to src/platform/packages/shared/shared-ux/file/file_picker/impl/src/components/clear_filter_button.tsx diff --git a/packages/shared-ux/file/file_picker/impl/src/components/delete_prompt/delete_prompt.tsx b/src/platform/packages/shared/shared-ux/file/file_picker/impl/src/components/delete_prompt/delete_prompt.tsx similarity index 100% rename from packages/shared-ux/file/file_picker/impl/src/components/delete_prompt/delete_prompt.tsx rename to src/platform/packages/shared/shared-ux/file/file_picker/impl/src/components/delete_prompt/delete_prompt.tsx diff --git a/packages/shared-ux/file/file_picker/impl/src/components/empty_prompt.tsx b/src/platform/packages/shared/shared-ux/file/file_picker/impl/src/components/empty_prompt.tsx similarity index 100% rename from packages/shared-ux/file/file_picker/impl/src/components/empty_prompt.tsx rename to src/platform/packages/shared/shared-ux/file/file_picker/impl/src/components/empty_prompt.tsx diff --git a/packages/shared-ux/file/file_picker/impl/src/components/error_content.tsx b/src/platform/packages/shared/shared-ux/file/file_picker/impl/src/components/error_content.tsx similarity index 100% rename from packages/shared-ux/file/file_picker/impl/src/components/error_content.tsx rename to src/platform/packages/shared/shared-ux/file/file_picker/impl/src/components/error_content.tsx diff --git a/packages/shared-ux/file/file_picker/impl/src/components/file_card.scss b/src/platform/packages/shared/shared-ux/file/file_picker/impl/src/components/file_card.scss similarity index 100% rename from packages/shared-ux/file/file_picker/impl/src/components/file_card.scss rename to src/platform/packages/shared/shared-ux/file/file_picker/impl/src/components/file_card.scss diff --git a/packages/shared-ux/file/file_picker/impl/src/components/file_card.tsx b/src/platform/packages/shared/shared-ux/file/file_picker/impl/src/components/file_card.tsx similarity index 100% rename from packages/shared-ux/file/file_picker/impl/src/components/file_card.tsx rename to src/platform/packages/shared/shared-ux/file/file_picker/impl/src/components/file_card.tsx diff --git a/packages/shared-ux/file/file_picker/impl/src/components/file_grid.tsx b/src/platform/packages/shared/shared-ux/file/file_picker/impl/src/components/file_grid.tsx similarity index 100% rename from packages/shared-ux/file/file_picker/impl/src/components/file_grid.tsx rename to src/platform/packages/shared/shared-ux/file/file_picker/impl/src/components/file_grid.tsx diff --git a/packages/shared-ux/file/file_picker/impl/src/components/modal_footer.tsx b/src/platform/packages/shared/shared-ux/file/file_picker/impl/src/components/modal_footer.tsx similarity index 100% rename from packages/shared-ux/file/file_picker/impl/src/components/modal_footer.tsx rename to src/platform/packages/shared/shared-ux/file/file_picker/impl/src/components/modal_footer.tsx diff --git a/packages/shared-ux/file/file_picker/impl/src/components/pagination.tsx b/src/platform/packages/shared/shared-ux/file/file_picker/impl/src/components/pagination.tsx similarity index 100% rename from packages/shared-ux/file/file_picker/impl/src/components/pagination.tsx rename to src/platform/packages/shared/shared-ux/file/file_picker/impl/src/components/pagination.tsx diff --git a/packages/shared-ux/file/file_picker/impl/src/components/search_field.tsx b/src/platform/packages/shared/shared-ux/file/file_picker/impl/src/components/search_field.tsx similarity index 100% rename from packages/shared-ux/file/file_picker/impl/src/components/search_field.tsx rename to src/platform/packages/shared/shared-ux/file/file_picker/impl/src/components/search_field.tsx diff --git a/packages/shared-ux/file/file_picker/impl/src/components/select_button.tsx b/src/platform/packages/shared/shared-ux/file/file_picker/impl/src/components/select_button.tsx similarity index 100% rename from packages/shared-ux/file/file_picker/impl/src/components/select_button.tsx rename to src/platform/packages/shared/shared-ux/file/file_picker/impl/src/components/select_button.tsx diff --git a/packages/shared-ux/file/file_picker/impl/src/components/title.tsx b/src/platform/packages/shared/shared-ux/file/file_picker/impl/src/components/title.tsx similarity index 100% rename from packages/shared-ux/file/file_picker/impl/src/components/title.tsx rename to src/platform/packages/shared/shared-ux/file/file_picker/impl/src/components/title.tsx diff --git a/packages/shared-ux/file/file_picker/impl/src/context.tsx b/src/platform/packages/shared/shared-ux/file/file_picker/impl/src/context.tsx similarity index 100% rename from packages/shared-ux/file/file_picker/impl/src/context.tsx rename to src/platform/packages/shared/shared-ux/file/file_picker/impl/src/context.tsx diff --git a/packages/shared-ux/file/file_picker/impl/src/file_picker.stories.tsx b/src/platform/packages/shared/shared-ux/file/file_picker/impl/src/file_picker.stories.tsx similarity index 100% rename from packages/shared-ux/file/file_picker/impl/src/file_picker.stories.tsx rename to src/platform/packages/shared/shared-ux/file/file_picker/impl/src/file_picker.stories.tsx diff --git a/packages/shared-ux/file/file_picker/impl/src/file_picker.test.tsx b/src/platform/packages/shared/shared-ux/file/file_picker/impl/src/file_picker.test.tsx similarity index 100% rename from packages/shared-ux/file/file_picker/impl/src/file_picker.test.tsx rename to src/platform/packages/shared/shared-ux/file/file_picker/impl/src/file_picker.test.tsx diff --git a/packages/shared-ux/file/file_picker/impl/src/file_picker.tsx b/src/platform/packages/shared/shared-ux/file/file_picker/impl/src/file_picker.tsx similarity index 100% rename from packages/shared-ux/file/file_picker/impl/src/file_picker.tsx rename to src/platform/packages/shared/shared-ux/file/file_picker/impl/src/file_picker.tsx diff --git a/packages/shared-ux/file/file_picker/impl/src/file_picker_state.test.ts b/src/platform/packages/shared/shared-ux/file/file_picker/impl/src/file_picker_state.test.ts similarity index 100% rename from packages/shared-ux/file/file_picker/impl/src/file_picker_state.test.ts rename to src/platform/packages/shared/shared-ux/file/file_picker/impl/src/file_picker_state.test.ts diff --git a/packages/shared-ux/file/file_picker/impl/src/file_picker_state.ts b/src/platform/packages/shared/shared-ux/file/file_picker/impl/src/file_picker_state.ts similarity index 100% rename from packages/shared-ux/file/file_picker/impl/src/file_picker_state.ts rename to src/platform/packages/shared/shared-ux/file/file_picker/impl/src/file_picker_state.ts diff --git a/packages/shared-ux/file/file_picker/impl/src/i18n_texts.ts b/src/platform/packages/shared/shared-ux/file/file_picker/impl/src/i18n_texts.ts similarity index 100% rename from packages/shared-ux/file/file_picker/impl/src/i18n_texts.ts rename to src/platform/packages/shared/shared-ux/file/file_picker/impl/src/i18n_texts.ts diff --git a/packages/shared-ux/file/file_picker/impl/src/index.tsx b/src/platform/packages/shared/shared-ux/file/file_picker/impl/src/index.tsx similarity index 100% rename from packages/shared-ux/file/file_picker/impl/src/index.tsx rename to src/platform/packages/shared/shared-ux/file/file_picker/impl/src/index.tsx diff --git a/packages/shared-ux/file/file_picker/impl/tsconfig.json b/src/platform/packages/shared/shared-ux/file/file_picker/impl/tsconfig.json similarity index 90% rename from packages/shared-ux/file/file_picker/impl/tsconfig.json rename to src/platform/packages/shared/shared-ux/file/file_picker/impl/tsconfig.json index f9e92a6065f39..48f500ac09a6b 100644 --- a/packages/shared-ux/file/file_picker/impl/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/file/file_picker/impl/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../../tsconfig.base.json", + "extends": "../../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/file/file_upload/impl/README.mdx b/src/platform/packages/shared/shared-ux/file/file_upload/impl/README.mdx similarity index 100% rename from packages/shared-ux/file/file_upload/impl/README.mdx rename to src/platform/packages/shared/shared-ux/file/file_upload/impl/README.mdx diff --git a/packages/shared-ux/file/file_upload/impl/index.tsx b/src/platform/packages/shared/shared-ux/file/file_upload/impl/index.tsx similarity index 100% rename from packages/shared-ux/file/file_upload/impl/index.tsx rename to src/platform/packages/shared/shared-ux/file/file_upload/impl/index.tsx diff --git a/src/platform/packages/shared/shared-ux/file/file_upload/impl/jest.config.js b/src/platform/packages/shared/shared-ux/file/file_upload/impl/jest.config.js new file mode 100644 index 0000000000000..05ba3837f6e41 --- /dev/null +++ b/src/platform/packages/shared/shared-ux/file/file_upload/impl/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/shared-ux/file/file_upload/impl'], +}; diff --git a/packages/shared-ux/file/file_upload/impl/kibana.jsonc b/src/platform/packages/shared/shared-ux/file/file_upload/impl/kibana.jsonc similarity index 100% rename from packages/shared-ux/file/file_upload/impl/kibana.jsonc rename to src/platform/packages/shared/shared-ux/file/file_upload/impl/kibana.jsonc diff --git a/packages/shared-ux/file/file_upload/impl/package.json b/src/platform/packages/shared/shared-ux/file/file_upload/impl/package.json similarity index 100% rename from packages/shared-ux/file/file_upload/impl/package.json rename to src/platform/packages/shared/shared-ux/file/file_upload/impl/package.json diff --git a/packages/shared-ux/file/file_upload/impl/src/components/cancel_button.tsx b/src/platform/packages/shared/shared-ux/file/file_upload/impl/src/components/cancel_button.tsx similarity index 100% rename from packages/shared-ux/file/file_upload/impl/src/components/cancel_button.tsx rename to src/platform/packages/shared/shared-ux/file/file_upload/impl/src/components/cancel_button.tsx diff --git a/packages/shared-ux/file/file_upload/impl/src/components/clear_button.tsx b/src/platform/packages/shared/shared-ux/file/file_upload/impl/src/components/clear_button.tsx similarity index 100% rename from packages/shared-ux/file/file_upload/impl/src/components/clear_button.tsx rename to src/platform/packages/shared/shared-ux/file/file_upload/impl/src/components/clear_button.tsx diff --git a/packages/shared-ux/file/file_upload/impl/src/components/control_button.tsx b/src/platform/packages/shared/shared-ux/file/file_upload/impl/src/components/control_button.tsx similarity index 100% rename from packages/shared-ux/file/file_upload/impl/src/components/control_button.tsx rename to src/platform/packages/shared/shared-ux/file/file_upload/impl/src/components/control_button.tsx diff --git a/packages/shared-ux/file/file_upload/impl/src/components/index.ts b/src/platform/packages/shared/shared-ux/file/file_upload/impl/src/components/index.ts similarity index 100% rename from packages/shared-ux/file/file_upload/impl/src/components/index.ts rename to src/platform/packages/shared/shared-ux/file/file_upload/impl/src/components/index.ts diff --git a/packages/shared-ux/file/file_upload/impl/src/components/retry_button.tsx b/src/platform/packages/shared/shared-ux/file/file_upload/impl/src/components/retry_button.tsx similarity index 100% rename from packages/shared-ux/file/file_upload/impl/src/components/retry_button.tsx rename to src/platform/packages/shared/shared-ux/file/file_upload/impl/src/components/retry_button.tsx diff --git a/packages/shared-ux/file/file_upload/impl/src/components/upload_button.tsx b/src/platform/packages/shared/shared-ux/file/file_upload/impl/src/components/upload_button.tsx similarity index 100% rename from packages/shared-ux/file/file_upload/impl/src/components/upload_button.tsx rename to src/platform/packages/shared/shared-ux/file/file_upload/impl/src/components/upload_button.tsx diff --git a/packages/shared-ux/file/file_upload/impl/src/context.ts b/src/platform/packages/shared/shared-ux/file/file_upload/impl/src/context.ts similarity index 100% rename from packages/shared-ux/file/file_upload/impl/src/context.ts rename to src/platform/packages/shared/shared-ux/file/file_upload/impl/src/context.ts diff --git a/packages/shared-ux/file/file_upload/impl/src/file_upload.component.tsx b/src/platform/packages/shared/shared-ux/file/file_upload/impl/src/file_upload.component.tsx similarity index 100% rename from packages/shared-ux/file/file_upload/impl/src/file_upload.component.tsx rename to src/platform/packages/shared/shared-ux/file/file_upload/impl/src/file_upload.component.tsx diff --git a/packages/shared-ux/file/file_upload/impl/src/file_upload.stories.tsx b/src/platform/packages/shared/shared-ux/file/file_upload/impl/src/file_upload.stories.tsx similarity index 100% rename from packages/shared-ux/file/file_upload/impl/src/file_upload.stories.tsx rename to src/platform/packages/shared/shared-ux/file/file_upload/impl/src/file_upload.stories.tsx diff --git a/packages/shared-ux/file/file_upload/impl/src/file_upload.test.tsx b/src/platform/packages/shared/shared-ux/file/file_upload/impl/src/file_upload.test.tsx similarity index 100% rename from packages/shared-ux/file/file_upload/impl/src/file_upload.test.tsx rename to src/platform/packages/shared/shared-ux/file/file_upload/impl/src/file_upload.test.tsx diff --git a/packages/shared-ux/file/file_upload/impl/src/file_upload.tsx b/src/platform/packages/shared/shared-ux/file/file_upload/impl/src/file_upload.tsx similarity index 100% rename from packages/shared-ux/file/file_upload/impl/src/file_upload.tsx rename to src/platform/packages/shared/shared-ux/file/file_upload/impl/src/file_upload.tsx diff --git a/packages/shared-ux/file/file_upload/impl/src/i18n_texts.ts b/src/platform/packages/shared/shared-ux/file/file_upload/impl/src/i18n_texts.ts similarity index 100% rename from packages/shared-ux/file/file_upload/impl/src/i18n_texts.ts rename to src/platform/packages/shared/shared-ux/file/file_upload/impl/src/i18n_texts.ts diff --git a/packages/shared-ux/file/file_upload/impl/src/index.tsx b/src/platform/packages/shared/shared-ux/file/file_upload/impl/src/index.tsx similarity index 100% rename from packages/shared-ux/file/file_upload/impl/src/index.tsx rename to src/platform/packages/shared/shared-ux/file/file_upload/impl/src/index.tsx diff --git a/packages/shared-ux/file/file_upload/impl/src/upload_state.test.ts b/src/platform/packages/shared/shared-ux/file/file_upload/impl/src/upload_state.test.ts similarity index 100% rename from packages/shared-ux/file/file_upload/impl/src/upload_state.test.ts rename to src/platform/packages/shared/shared-ux/file/file_upload/impl/src/upload_state.test.ts diff --git a/packages/shared-ux/file/file_upload/impl/src/upload_state.ts b/src/platform/packages/shared/shared-ux/file/file_upload/impl/src/upload_state.ts similarity index 100% rename from packages/shared-ux/file/file_upload/impl/src/upload_state.ts rename to src/platform/packages/shared/shared-ux/file/file_upload/impl/src/upload_state.ts diff --git a/packages/shared-ux/file/file_upload/impl/src/util/index.ts b/src/platform/packages/shared/shared-ux/file/file_upload/impl/src/util/index.ts similarity index 100% rename from packages/shared-ux/file/file_upload/impl/src/util/index.ts rename to src/platform/packages/shared/shared-ux/file/file_upload/impl/src/util/index.ts diff --git a/packages/shared-ux/file/file_upload/impl/src/util/parse_file_name.test.ts b/src/platform/packages/shared/shared-ux/file/file_upload/impl/src/util/parse_file_name.test.ts similarity index 100% rename from packages/shared-ux/file/file_upload/impl/src/util/parse_file_name.test.ts rename to src/platform/packages/shared/shared-ux/file/file_upload/impl/src/util/parse_file_name.test.ts diff --git a/packages/shared-ux/file/file_upload/impl/src/util/parse_file_name.ts b/src/platform/packages/shared/shared-ux/file/file_upload/impl/src/util/parse_file_name.ts similarity index 100% rename from packages/shared-ux/file/file_upload/impl/src/util/parse_file_name.ts rename to src/platform/packages/shared/shared-ux/file/file_upload/impl/src/util/parse_file_name.ts diff --git a/packages/shared-ux/file/file_upload/impl/src/util/simple_state_subject.ts b/src/platform/packages/shared/shared-ux/file/file_upload/impl/src/util/simple_state_subject.ts similarity index 100% rename from packages/shared-ux/file/file_upload/impl/src/util/simple_state_subject.ts rename to src/platform/packages/shared/shared-ux/file/file_upload/impl/src/util/simple_state_subject.ts diff --git a/packages/shared-ux/file/file_upload/impl/tsconfig.json b/src/platform/packages/shared/shared-ux/file/file_upload/impl/tsconfig.json similarity index 89% rename from packages/shared-ux/file/file_upload/impl/tsconfig.json rename to src/platform/packages/shared/shared-ux/file/file_upload/impl/tsconfig.json index 7fbdf2f04dc6f..72bac610c2960 100644 --- a/packages/shared-ux/file/file_upload/impl/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/file/file_upload/impl/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../../tsconfig.base.json", + "extends": "../../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/file/image/impl/README.mdx b/src/platform/packages/shared/shared-ux/file/image/impl/README.mdx similarity index 100% rename from packages/shared-ux/file/image/impl/README.mdx rename to src/platform/packages/shared/shared-ux/file/image/impl/README.mdx diff --git a/packages/shared-ux/file/image/impl/index.tsx b/src/platform/packages/shared/shared-ux/file/image/impl/index.tsx similarity index 100% rename from packages/shared-ux/file/image/impl/index.tsx rename to src/platform/packages/shared/shared-ux/file/image/impl/index.tsx diff --git a/packages/shared-ux/file/image/impl/kibana.jsonc b/src/platform/packages/shared/shared-ux/file/image/impl/kibana.jsonc similarity index 100% rename from packages/shared-ux/file/image/impl/kibana.jsonc rename to src/platform/packages/shared/shared-ux/file/image/impl/kibana.jsonc diff --git a/packages/shared-ux/file/image/impl/package.json b/src/platform/packages/shared/shared-ux/file/image/impl/package.json similarity index 100% rename from packages/shared-ux/file/image/impl/package.json rename to src/platform/packages/shared/shared-ux/file/image/impl/package.json diff --git a/packages/shared-ux/file/image/impl/src/image.stories.tsx b/src/platform/packages/shared/shared-ux/file/image/impl/src/image.stories.tsx similarity index 100% rename from packages/shared-ux/file/image/impl/src/image.stories.tsx rename to src/platform/packages/shared/shared-ux/file/image/impl/src/image.stories.tsx diff --git a/packages/shared-ux/file/image/impl/src/image.tsx b/src/platform/packages/shared/shared-ux/file/image/impl/src/image.tsx similarity index 100% rename from packages/shared-ux/file/image/impl/src/image.tsx rename to src/platform/packages/shared/shared-ux/file/image/impl/src/image.tsx diff --git a/packages/shared-ux/file/image/impl/src/index.ts b/src/platform/packages/shared/shared-ux/file/image/impl/src/index.ts similarity index 100% rename from packages/shared-ux/file/image/impl/src/index.ts rename to src/platform/packages/shared/shared-ux/file/image/impl/src/index.ts diff --git a/packages/shared-ux/file/image/impl/tsconfig.json b/src/platform/packages/shared/shared-ux/file/image/impl/tsconfig.json similarity index 85% rename from packages/shared-ux/file/image/impl/tsconfig.json rename to src/platform/packages/shared/shared-ux/file/image/impl/tsconfig.json index 5404f62040f0d..d464fb5126079 100644 --- a/packages/shared-ux/file/image/impl/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/file/image/impl/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../../tsconfig.base.json", + "extends": "../../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/file/image/mocks/README.md b/src/platform/packages/shared/shared-ux/file/image/mocks/README.md similarity index 100% rename from packages/shared-ux/file/image/mocks/README.md rename to src/platform/packages/shared/shared-ux/file/image/mocks/README.md diff --git a/packages/shared-ux/file/image/mocks/index.ts b/src/platform/packages/shared/shared-ux/file/image/mocks/index.ts similarity index 100% rename from packages/shared-ux/file/image/mocks/index.ts rename to src/platform/packages/shared/shared-ux/file/image/mocks/index.ts diff --git a/packages/shared-ux/file/image/mocks/kibana.jsonc b/src/platform/packages/shared/shared-ux/file/image/mocks/kibana.jsonc similarity index 100% rename from packages/shared-ux/file/image/mocks/kibana.jsonc rename to src/platform/packages/shared/shared-ux/file/image/mocks/kibana.jsonc diff --git a/packages/shared-ux/file/image/mocks/package.json b/src/platform/packages/shared/shared-ux/file/image/mocks/package.json similarity index 100% rename from packages/shared-ux/file/image/mocks/package.json rename to src/platform/packages/shared/shared-ux/file/image/mocks/package.json diff --git a/packages/shared-ux/file/image/mocks/src/index.ts b/src/platform/packages/shared/shared-ux/file/image/mocks/src/index.ts similarity index 100% rename from packages/shared-ux/file/image/mocks/src/index.ts rename to src/platform/packages/shared/shared-ux/file/image/mocks/src/index.ts diff --git a/packages/shared-ux/file/image/mocks/tsconfig.json b/src/platform/packages/shared/shared-ux/file/image/mocks/tsconfig.json similarity index 74% rename from packages/shared-ux/file/image/mocks/tsconfig.json rename to src/platform/packages/shared/shared-ux/file/image/mocks/tsconfig.json index db7f0738c6cfe..c7095560ca583 100644 --- a/packages/shared-ux/file/image/mocks/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/file/image/mocks/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../../tsconfig.base.json", + "extends": "../../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/file/mocks/README.md b/src/platform/packages/shared/shared-ux/file/mocks/README.md similarity index 100% rename from packages/shared-ux/file/mocks/README.md rename to src/platform/packages/shared/shared-ux/file/mocks/README.md diff --git a/packages/shared-ux/file/mocks/index.ts b/src/platform/packages/shared/shared-ux/file/mocks/index.ts similarity index 100% rename from packages/shared-ux/file/mocks/index.ts rename to src/platform/packages/shared/shared-ux/file/mocks/index.ts diff --git a/packages/shared-ux/file/mocks/kibana.jsonc b/src/platform/packages/shared/shared-ux/file/mocks/kibana.jsonc similarity index 100% rename from packages/shared-ux/file/mocks/kibana.jsonc rename to src/platform/packages/shared/shared-ux/file/mocks/kibana.jsonc diff --git a/packages/shared-ux/file/mocks/package.json b/src/platform/packages/shared/shared-ux/file/mocks/package.json similarity index 100% rename from packages/shared-ux/file/mocks/package.json rename to src/platform/packages/shared/shared-ux/file/mocks/package.json diff --git a/packages/shared-ux/file/mocks/tsconfig.json b/src/platform/packages/shared/shared-ux/file/mocks/tsconfig.json similarity index 81% rename from packages/shared-ux/file/mocks/tsconfig.json rename to src/platform/packages/shared/shared-ux/file/mocks/tsconfig.json index 677b4a7a9e2ae..0ce8d97ebb972 100644 --- a/packages/shared-ux/file/mocks/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/file/mocks/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ ] diff --git a/packages/shared-ux/file/types/README.md b/src/platform/packages/shared/shared-ux/file/types/README.md similarity index 100% rename from packages/shared-ux/file/types/README.md rename to src/platform/packages/shared/shared-ux/file/types/README.md diff --git a/packages/shared-ux/file/types/base_file_client.ts b/src/platform/packages/shared/shared-ux/file/types/base_file_client.ts similarity index 100% rename from packages/shared-ux/file/types/base_file_client.ts rename to src/platform/packages/shared/shared-ux/file/types/base_file_client.ts diff --git a/packages/shared-ux/file/types/index.ts b/src/platform/packages/shared/shared-ux/file/types/index.ts similarity index 100% rename from packages/shared-ux/file/types/index.ts rename to src/platform/packages/shared/shared-ux/file/types/index.ts diff --git a/packages/shared-ux/file/types/kibana.jsonc b/src/platform/packages/shared/shared-ux/file/types/kibana.jsonc similarity index 100% rename from packages/shared-ux/file/types/kibana.jsonc rename to src/platform/packages/shared/shared-ux/file/types/kibana.jsonc diff --git a/packages/shared-ux/file/types/package.json b/src/platform/packages/shared/shared-ux/file/types/package.json similarity index 100% rename from packages/shared-ux/file/types/package.json rename to src/platform/packages/shared/shared-ux/file/types/package.json diff --git a/packages/shared-ux/file/types/sharing.ts b/src/platform/packages/shared/shared-ux/file/types/sharing.ts similarity index 100% rename from packages/shared-ux/file/types/sharing.ts rename to src/platform/packages/shared/shared-ux/file/types/sharing.ts diff --git a/packages/shared-ux/file/types/tsconfig.json b/src/platform/packages/shared/shared-ux/file/types/tsconfig.json similarity index 74% rename from packages/shared-ux/file/types/tsconfig.json rename to src/platform/packages/shared/shared-ux/file/types/tsconfig.json index fef75d832cab6..feeb09c03c64e 100644 --- a/packages/shared-ux/file/types/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/file/types/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/file/util/README.mdx b/src/platform/packages/shared/shared-ux/file/util/README.mdx similarity index 100% rename from packages/shared-ux/file/util/README.mdx rename to src/platform/packages/shared/shared-ux/file/util/README.mdx diff --git a/packages/shared-ux/file/util/index.ts b/src/platform/packages/shared/shared-ux/file/util/index.ts similarity index 100% rename from packages/shared-ux/file/util/index.ts rename to src/platform/packages/shared/shared-ux/file/util/index.ts diff --git a/packages/shared-ux/file/util/jest.config.js b/src/platform/packages/shared/shared-ux/file/util/jest.config.js similarity index 83% rename from packages/shared-ux/file/util/jest.config.js rename to src/platform/packages/shared/shared-ux/file/util/jest.config.js index c41058a208c07..03f2adc5da1d8 100644 --- a/packages/shared-ux/file/util/jest.config.js +++ b/src/platform/packages/shared/shared-ux/file/util/jest.config.js @@ -9,7 +9,7 @@ module.exports = { preset: '@kbn/test', - rootDir: '../../../..', - roots: ['/packages/shared-ux/file/util'], + rootDir: '../../../../../../..', + roots: ['/src/platform/packages/shared/shared-ux/file/util'], verbose: true, }; diff --git a/packages/shared-ux/file/util/kibana.jsonc b/src/platform/packages/shared/shared-ux/file/util/kibana.jsonc similarity index 100% rename from packages/shared-ux/file/util/kibana.jsonc rename to src/platform/packages/shared/shared-ux/file/util/kibana.jsonc diff --git a/packages/shared-ux/file/util/package.json b/src/platform/packages/shared/shared-ux/file/util/package.json similarity index 100% rename from packages/shared-ux/file/util/package.json rename to src/platform/packages/shared/shared-ux/file/util/package.json diff --git a/packages/shared-ux/file/util/src/image_metadata.test.ts b/src/platform/packages/shared/shared-ux/file/util/src/image_metadata.test.ts similarity index 100% rename from packages/shared-ux/file/util/src/image_metadata.test.ts rename to src/platform/packages/shared/shared-ux/file/util/src/image_metadata.test.ts diff --git a/packages/shared-ux/file/util/src/image_metadata.ts b/src/platform/packages/shared/shared-ux/file/util/src/image_metadata.ts similarity index 100% rename from packages/shared-ux/file/util/src/image_metadata.ts rename to src/platform/packages/shared/shared-ux/file/util/src/image_metadata.ts diff --git a/packages/shared-ux/file/util/src/index.ts b/src/platform/packages/shared/shared-ux/file/util/src/index.ts similarity index 100% rename from packages/shared-ux/file/util/src/index.ts rename to src/platform/packages/shared/shared-ux/file/util/src/index.ts diff --git a/packages/shared-ux/file/util/src/use_behavior_subject.ts b/src/platform/packages/shared/shared-ux/file/util/src/use_behavior_subject.ts similarity index 100% rename from packages/shared-ux/file/util/src/use_behavior_subject.ts rename to src/platform/packages/shared/shared-ux/file/util/src/use_behavior_subject.ts diff --git a/packages/shared-ux/file/util/tsconfig.json b/src/platform/packages/shared/shared-ux/file/util/tsconfig.json similarity index 82% rename from packages/shared-ux/file/util/tsconfig.json rename to src/platform/packages/shared/shared-ux/file/util/tsconfig.json index dd3e7075a6a89..dfc5f4bc76e03 100644 --- a/packages/shared-ux/file/util/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/file/util/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/link/redirect_app/impl/README.mdx b/src/platform/packages/shared/shared-ux/link/redirect_app/impl/README.mdx similarity index 100% rename from packages/shared-ux/link/redirect_app/impl/README.mdx rename to src/platform/packages/shared/shared-ux/link/redirect_app/impl/README.mdx diff --git a/packages/shared-ux/link/redirect_app/impl/index.tsx b/src/platform/packages/shared/shared-ux/link/redirect_app/impl/index.tsx similarity index 100% rename from packages/shared-ux/link/redirect_app/impl/index.tsx rename to src/platform/packages/shared/shared-ux/link/redirect_app/impl/index.tsx diff --git a/packages/shared-ux/link/redirect_app/impl/jest.config.js b/src/platform/packages/shared/shared-ux/link/redirect_app/impl/jest.config.js similarity index 81% rename from packages/shared-ux/link/redirect_app/impl/jest.config.js rename to src/platform/packages/shared/shared-ux/link/redirect_app/impl/jest.config.js index a74c2e7a9845e..187a4e6feedbc 100644 --- a/packages/shared-ux/link/redirect_app/impl/jest.config.js +++ b/src/platform/packages/shared/shared-ux/link/redirect_app/impl/jest.config.js @@ -9,7 +9,7 @@ module.exports = { preset: '@kbn/test', - rootDir: '../../../../..', - roots: ['/packages/shared-ux/link/redirect_app'], + rootDir: '../../../../../../../..', + roots: ['/src/platform/packages/shared/shared-ux/link/redirect_app'], verbose: true, }; diff --git a/packages/shared-ux/link/redirect_app/impl/kibana.jsonc b/src/platform/packages/shared/shared-ux/link/redirect_app/impl/kibana.jsonc similarity index 100% rename from packages/shared-ux/link/redirect_app/impl/kibana.jsonc rename to src/platform/packages/shared/shared-ux/link/redirect_app/impl/kibana.jsonc diff --git a/packages/shared-ux/link/redirect_app/impl/package.json b/src/platform/packages/shared/shared-ux/link/redirect_app/impl/package.json similarity index 100% rename from packages/shared-ux/link/redirect_app/impl/package.json rename to src/platform/packages/shared/shared-ux/link/redirect_app/impl/package.json diff --git a/packages/shared-ux/link/redirect_app/impl/src/click_handler.test.ts b/src/platform/packages/shared/shared-ux/link/redirect_app/impl/src/click_handler.test.ts similarity index 100% rename from packages/shared-ux/link/redirect_app/impl/src/click_handler.test.ts rename to src/platform/packages/shared/shared-ux/link/redirect_app/impl/src/click_handler.test.ts diff --git a/packages/shared-ux/link/redirect_app/impl/src/click_handler.ts b/src/platform/packages/shared/shared-ux/link/redirect_app/impl/src/click_handler.ts similarity index 100% rename from packages/shared-ux/link/redirect_app/impl/src/click_handler.ts rename to src/platform/packages/shared/shared-ux/link/redirect_app/impl/src/click_handler.ts diff --git a/packages/shared-ux/link/redirect_app/impl/src/redirect_app_links.component.tsx b/src/platform/packages/shared/shared-ux/link/redirect_app/impl/src/redirect_app_links.component.tsx similarity index 100% rename from packages/shared-ux/link/redirect_app/impl/src/redirect_app_links.component.tsx rename to src/platform/packages/shared/shared-ux/link/redirect_app/impl/src/redirect_app_links.component.tsx diff --git a/packages/shared-ux/link/redirect_app/impl/src/redirect_app_links.container.tsx b/src/platform/packages/shared/shared-ux/link/redirect_app/impl/src/redirect_app_links.container.tsx similarity index 100% rename from packages/shared-ux/link/redirect_app/impl/src/redirect_app_links.container.tsx rename to src/platform/packages/shared/shared-ux/link/redirect_app/impl/src/redirect_app_links.container.tsx diff --git a/packages/shared-ux/link/redirect_app/impl/src/redirect_app_links.stories.tsx b/src/platform/packages/shared/shared-ux/link/redirect_app/impl/src/redirect_app_links.stories.tsx similarity index 100% rename from packages/shared-ux/link/redirect_app/impl/src/redirect_app_links.stories.tsx rename to src/platform/packages/shared/shared-ux/link/redirect_app/impl/src/redirect_app_links.stories.tsx diff --git a/packages/shared-ux/link/redirect_app/impl/src/redirect_app_links.styles.ts b/src/platform/packages/shared/shared-ux/link/redirect_app/impl/src/redirect_app_links.styles.ts similarity index 100% rename from packages/shared-ux/link/redirect_app/impl/src/redirect_app_links.styles.ts rename to src/platform/packages/shared/shared-ux/link/redirect_app/impl/src/redirect_app_links.styles.ts diff --git a/packages/shared-ux/link/redirect_app/impl/src/redirect_app_links.test.tsx b/src/platform/packages/shared/shared-ux/link/redirect_app/impl/src/redirect_app_links.test.tsx similarity index 100% rename from packages/shared-ux/link/redirect_app/impl/src/redirect_app_links.test.tsx rename to src/platform/packages/shared/shared-ux/link/redirect_app/impl/src/redirect_app_links.test.tsx diff --git a/packages/shared-ux/link/redirect_app/impl/src/redirect_app_links.tsx b/src/platform/packages/shared/shared-ux/link/redirect_app/impl/src/redirect_app_links.tsx similarity index 100% rename from packages/shared-ux/link/redirect_app/impl/src/redirect_app_links.tsx rename to src/platform/packages/shared/shared-ux/link/redirect_app/impl/src/redirect_app_links.tsx diff --git a/packages/shared-ux/link/redirect_app/impl/src/services.tsx b/src/platform/packages/shared/shared-ux/link/redirect_app/impl/src/services.tsx similarity index 100% rename from packages/shared-ux/link/redirect_app/impl/src/services.tsx rename to src/platform/packages/shared/shared-ux/link/redirect_app/impl/src/services.tsx diff --git a/packages/shared-ux/link/redirect_app/impl/tsconfig.json b/src/platform/packages/shared/shared-ux/link/redirect_app/impl/tsconfig.json similarity index 88% rename from packages/shared-ux/link/redirect_app/impl/tsconfig.json rename to src/platform/packages/shared/shared-ux/link/redirect_app/impl/tsconfig.json index 0b564979c2b9e..c3d9da4d0db41 100644 --- a/packages/shared-ux/link/redirect_app/impl/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/link/redirect_app/impl/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../../tsconfig.base.json", + "extends": "../../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/link/redirect_app/mocks/README.md b/src/platform/packages/shared/shared-ux/link/redirect_app/mocks/README.md similarity index 100% rename from packages/shared-ux/link/redirect_app/mocks/README.md rename to src/platform/packages/shared/shared-ux/link/redirect_app/mocks/README.md diff --git a/packages/shared-ux/link/redirect_app/mocks/index.ts b/src/platform/packages/shared/shared-ux/link/redirect_app/mocks/index.ts similarity index 100% rename from packages/shared-ux/link/redirect_app/mocks/index.ts rename to src/platform/packages/shared/shared-ux/link/redirect_app/mocks/index.ts diff --git a/packages/shared-ux/link/redirect_app/mocks/kibana.jsonc b/src/platform/packages/shared/shared-ux/link/redirect_app/mocks/kibana.jsonc similarity index 100% rename from packages/shared-ux/link/redirect_app/mocks/kibana.jsonc rename to src/platform/packages/shared/shared-ux/link/redirect_app/mocks/kibana.jsonc diff --git a/packages/shared-ux/link/redirect_app/mocks/package.json b/src/platform/packages/shared/shared-ux/link/redirect_app/mocks/package.json similarity index 100% rename from packages/shared-ux/link/redirect_app/mocks/package.json rename to src/platform/packages/shared/shared-ux/link/redirect_app/mocks/package.json diff --git a/packages/shared-ux/link/redirect_app/mocks/src/jest.ts b/src/platform/packages/shared/shared-ux/link/redirect_app/mocks/src/jest.ts similarity index 100% rename from packages/shared-ux/link/redirect_app/mocks/src/jest.ts rename to src/platform/packages/shared/shared-ux/link/redirect_app/mocks/src/jest.ts diff --git a/packages/shared-ux/link/redirect_app/mocks/src/storybook.ts b/src/platform/packages/shared/shared-ux/link/redirect_app/mocks/src/storybook.ts similarity index 100% rename from packages/shared-ux/link/redirect_app/mocks/src/storybook.ts rename to src/platform/packages/shared/shared-ux/link/redirect_app/mocks/src/storybook.ts diff --git a/packages/shared-ux/link/redirect_app/mocks/tsconfig.json b/src/platform/packages/shared/shared-ux/link/redirect_app/mocks/tsconfig.json similarity index 83% rename from packages/shared-ux/link/redirect_app/mocks/tsconfig.json rename to src/platform/packages/shared/shared-ux/link/redirect_app/mocks/tsconfig.json index e1d633ba8896a..4b06abddaf81a 100644 --- a/packages/shared-ux/link/redirect_app/mocks/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/link/redirect_app/mocks/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../../tsconfig.base.json", + "extends": "../../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/link/redirect_app/types/README.md b/src/platform/packages/shared/shared-ux/link/redirect_app/types/README.md similarity index 100% rename from packages/shared-ux/link/redirect_app/types/README.md rename to src/platform/packages/shared/shared-ux/link/redirect_app/types/README.md diff --git a/packages/shared-ux/link/redirect_app/types/index.d.ts b/src/platform/packages/shared/shared-ux/link/redirect_app/types/index.d.ts similarity index 100% rename from packages/shared-ux/link/redirect_app/types/index.d.ts rename to src/platform/packages/shared/shared-ux/link/redirect_app/types/index.d.ts diff --git a/packages/shared-ux/link/redirect_app/types/kibana.jsonc b/src/platform/packages/shared/shared-ux/link/redirect_app/types/kibana.jsonc similarity index 100% rename from packages/shared-ux/link/redirect_app/types/kibana.jsonc rename to src/platform/packages/shared/shared-ux/link/redirect_app/types/kibana.jsonc diff --git a/packages/shared-ux/link/redirect_app/types/package.json b/src/platform/packages/shared/shared-ux/link/redirect_app/types/package.json similarity index 100% rename from packages/shared-ux/link/redirect_app/types/package.json rename to src/platform/packages/shared/shared-ux/link/redirect_app/types/package.json diff --git a/packages/shared-ux/markdown/types/tsconfig.json b/src/platform/packages/shared/shared-ux/link/redirect_app/types/tsconfig.json similarity index 76% rename from packages/shared-ux/markdown/types/tsconfig.json rename to src/platform/packages/shared/shared-ux/link/redirect_app/types/tsconfig.json index 078865843e593..670963293a3ee 100644 --- a/packages/shared-ux/markdown/types/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/link/redirect_app/types/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/markdown/impl/README.mdx b/src/platform/packages/shared/shared-ux/markdown/impl/README.mdx similarity index 100% rename from packages/shared-ux/markdown/impl/README.mdx rename to src/platform/packages/shared/shared-ux/markdown/impl/README.mdx diff --git a/packages/shared-ux/markdown/impl/index.ts b/src/platform/packages/shared/shared-ux/markdown/impl/index.ts similarity index 100% rename from packages/shared-ux/markdown/impl/index.ts rename to src/platform/packages/shared/shared-ux/markdown/impl/index.ts diff --git a/packages/kbn-shared-ux-utility/jest.config.js b/src/platform/packages/shared/shared-ux/markdown/impl/jest.config.js similarity index 69% rename from packages/kbn-shared-ux-utility/jest.config.js rename to src/platform/packages/shared/shared-ux/markdown/impl/jest.config.js index 96e07429cae5e..4955a9b45dcfe 100644 --- a/packages/kbn-shared-ux-utility/jest.config.js +++ b/src/platform/packages/shared/shared-ux/markdown/impl/jest.config.js @@ -9,7 +9,9 @@ module.exports = { preset: '@kbn/test', - rootDir: '../..', - roots: ['/packages/kbn-shared-ux-utility'], - setupFilesAfterEnv: ['/packages/kbn-shared-ux-utility/setup_tests.ts'], + rootDir: '../../../../../../..', + roots: ['/src/platform/packages/shared/shared-ux/markdown/impl'], + setupFilesAfterEnv: [ + '/src/platform/packages/shared/shared-ux/markdown/impl/setup_tests.ts', + ], }; diff --git a/packages/shared-ux/markdown/impl/kibana.jsonc b/src/platform/packages/shared/shared-ux/markdown/impl/kibana.jsonc similarity index 100% rename from packages/shared-ux/markdown/impl/kibana.jsonc rename to src/platform/packages/shared/shared-ux/markdown/impl/kibana.jsonc diff --git a/packages/shared-ux/markdown/impl/markdown.test.tsx b/src/platform/packages/shared/shared-ux/markdown/impl/markdown.test.tsx similarity index 100% rename from packages/shared-ux/markdown/impl/markdown.test.tsx rename to src/platform/packages/shared/shared-ux/markdown/impl/markdown.test.tsx diff --git a/packages/shared-ux/markdown/impl/markdown.tsx b/src/platform/packages/shared/shared-ux/markdown/impl/markdown.tsx similarity index 100% rename from packages/shared-ux/markdown/impl/markdown.tsx rename to src/platform/packages/shared/shared-ux/markdown/impl/markdown.tsx diff --git a/packages/shared-ux/markdown/impl/markdown_editor.stories.tsx b/src/platform/packages/shared/shared-ux/markdown/impl/markdown_editor.stories.tsx similarity index 100% rename from packages/shared-ux/markdown/impl/markdown_editor.stories.tsx rename to src/platform/packages/shared/shared-ux/markdown/impl/markdown_editor.stories.tsx diff --git a/packages/shared-ux/markdown/impl/markdown_format.stories.tsx b/src/platform/packages/shared/shared-ux/markdown/impl/markdown_format.stories.tsx similarity index 100% rename from packages/shared-ux/markdown/impl/markdown_format.stories.tsx rename to src/platform/packages/shared/shared-ux/markdown/impl/markdown_format.stories.tsx diff --git a/packages/shared-ux/markdown/impl/package.json b/src/platform/packages/shared/shared-ux/markdown/impl/package.json similarity index 100% rename from packages/shared-ux/markdown/impl/package.json rename to src/platform/packages/shared/shared-ux/markdown/impl/package.json diff --git a/packages/shared-ux/markdown/impl/setup_tests.ts b/src/platform/packages/shared/shared-ux/markdown/impl/setup_tests.ts similarity index 100% rename from packages/shared-ux/markdown/impl/setup_tests.ts rename to src/platform/packages/shared/shared-ux/markdown/impl/setup_tests.ts diff --git a/packages/shared-ux/markdown/impl/tsconfig.json b/src/platform/packages/shared/shared-ux/markdown/impl/tsconfig.json similarity index 84% rename from packages/shared-ux/markdown/impl/tsconfig.json rename to src/platform/packages/shared/shared-ux/markdown/impl/tsconfig.json index a17b7a69317e1..0fc80db983460 100644 --- a/packages/shared-ux/markdown/impl/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/markdown/impl/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/markdown/mocks/README.md b/src/platform/packages/shared/shared-ux/markdown/mocks/README.md similarity index 100% rename from packages/shared-ux/markdown/mocks/README.md rename to src/platform/packages/shared/shared-ux/markdown/mocks/README.md diff --git a/packages/shared-ux/markdown/mocks/index.ts b/src/platform/packages/shared/shared-ux/markdown/mocks/index.ts similarity index 100% rename from packages/shared-ux/markdown/mocks/index.ts rename to src/platform/packages/shared/shared-ux/markdown/mocks/index.ts diff --git a/packages/shared-ux/markdown/mocks/kibana.jsonc b/src/platform/packages/shared/shared-ux/markdown/mocks/kibana.jsonc similarity index 100% rename from packages/shared-ux/markdown/mocks/kibana.jsonc rename to src/platform/packages/shared/shared-ux/markdown/mocks/kibana.jsonc diff --git a/packages/shared-ux/markdown/mocks/package.json b/src/platform/packages/shared/shared-ux/markdown/mocks/package.json similarity index 100% rename from packages/shared-ux/markdown/mocks/package.json rename to src/platform/packages/shared/shared-ux/markdown/mocks/package.json diff --git a/packages/shared-ux/markdown/mocks/storybook.ts b/src/platform/packages/shared/shared-ux/markdown/mocks/storybook.ts similarity index 100% rename from packages/shared-ux/markdown/mocks/storybook.ts rename to src/platform/packages/shared/shared-ux/markdown/mocks/storybook.ts diff --git a/packages/shared-ux/markdown/mocks/tsconfig.json b/src/platform/packages/shared/shared-ux/markdown/mocks/tsconfig.json similarity index 83% rename from packages/shared-ux/markdown/mocks/tsconfig.json rename to src/platform/packages/shared/shared-ux/markdown/mocks/tsconfig.json index 2fe699abba9f1..5f0286a339bd7 100644 --- a/packages/shared-ux/markdown/mocks/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/markdown/mocks/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/markdown/types/README.md b/src/platform/packages/shared/shared-ux/markdown/types/README.md similarity index 100% rename from packages/shared-ux/markdown/types/README.md rename to src/platform/packages/shared/shared-ux/markdown/types/README.md diff --git a/packages/shared-ux/markdown/types/index.d.ts b/src/platform/packages/shared/shared-ux/markdown/types/index.d.ts similarity index 100% rename from packages/shared-ux/markdown/types/index.d.ts rename to src/platform/packages/shared/shared-ux/markdown/types/index.d.ts diff --git a/packages/shared-ux/markdown/types/kibana.jsonc b/src/platform/packages/shared/shared-ux/markdown/types/kibana.jsonc similarity index 100% rename from packages/shared-ux/markdown/types/kibana.jsonc rename to src/platform/packages/shared/shared-ux/markdown/types/kibana.jsonc diff --git a/packages/shared-ux/markdown/types/package.json b/src/platform/packages/shared/shared-ux/markdown/types/package.json similarity index 100% rename from packages/shared-ux/markdown/types/package.json rename to src/platform/packages/shared/shared-ux/markdown/types/package.json diff --git a/packages/shared-ux/link/redirect_app/types/tsconfig.json b/src/platform/packages/shared/shared-ux/markdown/types/tsconfig.json similarity index 77% rename from packages/shared-ux/link/redirect_app/types/tsconfig.json rename to src/platform/packages/shared/shared-ux/markdown/types/tsconfig.json index fc981ba49dd7e..64ec4df40c82e 100644 --- a/packages/shared-ux/link/redirect_app/types/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/markdown/types/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../../tsconfig.base.json", + "extends": "../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/modal/tabbed/README.mdx b/src/platform/packages/shared/shared-ux/modal/tabbed/README.mdx similarity index 100% rename from packages/shared-ux/modal/tabbed/README.mdx rename to src/platform/packages/shared/shared-ux/modal/tabbed/README.mdx diff --git a/packages/shared-ux/modal/tabbed/index.tsx b/src/platform/packages/shared/shared-ux/modal/tabbed/index.tsx similarity index 100% rename from packages/shared-ux/modal/tabbed/index.tsx rename to src/platform/packages/shared/shared-ux/modal/tabbed/index.tsx diff --git a/src/platform/packages/shared/shared-ux/modal/tabbed/jest.config.js b/src/platform/packages/shared/shared-ux/modal/tabbed/jest.config.js new file mode 100644 index 0000000000000..ba6cf69faad7e --- /dev/null +++ b/src/platform/packages/shared/shared-ux/modal/tabbed/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/shared-ux/modal/tabbed'], +}; diff --git a/packages/shared-ux/modal/tabbed/kibana.jsonc b/src/platform/packages/shared/shared-ux/modal/tabbed/kibana.jsonc similarity index 83% rename from packages/shared-ux/modal/tabbed/kibana.jsonc rename to src/platform/packages/shared/shared-ux/modal/tabbed/kibana.jsonc index a81399f0f8a2e..3e44e48d95067 100644 --- a/packages/shared-ux/modal/tabbed/kibana.jsonc +++ b/src/platform/packages/shared/shared-ux/modal/tabbed/kibana.jsonc @@ -5,5 +5,5 @@ "@elastic/appex-sharedux" ], "group": "platform", - "visibility": "private" -} \ No newline at end of file + "visibility": "shared" +} diff --git a/packages/shared-ux/modal/tabbed/package.json b/src/platform/packages/shared/shared-ux/modal/tabbed/package.json similarity index 100% rename from packages/shared-ux/modal/tabbed/package.json rename to src/platform/packages/shared/shared-ux/modal/tabbed/package.json diff --git a/packages/shared-ux/modal/tabbed/src/context/index.test.tsx b/src/platform/packages/shared/shared-ux/modal/tabbed/src/context/index.test.tsx similarity index 100% rename from packages/shared-ux/modal/tabbed/src/context/index.test.tsx rename to src/platform/packages/shared/shared-ux/modal/tabbed/src/context/index.test.tsx diff --git a/packages/shared-ux/modal/tabbed/src/context/index.tsx b/src/platform/packages/shared/shared-ux/modal/tabbed/src/context/index.tsx similarity index 100% rename from packages/shared-ux/modal/tabbed/src/context/index.tsx rename to src/platform/packages/shared/shared-ux/modal/tabbed/src/context/index.tsx diff --git a/packages/shared-ux/modal/tabbed/src/tabbed_modal.stories.tsx b/src/platform/packages/shared/shared-ux/modal/tabbed/src/tabbed_modal.stories.tsx similarity index 100% rename from packages/shared-ux/modal/tabbed/src/tabbed_modal.stories.tsx rename to src/platform/packages/shared/shared-ux/modal/tabbed/src/tabbed_modal.stories.tsx diff --git a/packages/shared-ux/modal/tabbed/src/tabbed_modal.test.tsx b/src/platform/packages/shared/shared-ux/modal/tabbed/src/tabbed_modal.test.tsx similarity index 100% rename from packages/shared-ux/modal/tabbed/src/tabbed_modal.test.tsx rename to src/platform/packages/shared/shared-ux/modal/tabbed/src/tabbed_modal.test.tsx diff --git a/packages/shared-ux/modal/tabbed/src/tabbed_modal.tsx b/src/platform/packages/shared/shared-ux/modal/tabbed/src/tabbed_modal.tsx similarity index 100% rename from packages/shared-ux/modal/tabbed/src/tabbed_modal.tsx rename to src/platform/packages/shared/shared-ux/modal/tabbed/src/tabbed_modal.tsx diff --git a/packages/shared-ux/modal/tabbed/storybook/setup.ts b/src/platform/packages/shared/shared-ux/modal/tabbed/storybook/setup.ts similarity index 100% rename from packages/shared-ux/modal/tabbed/storybook/setup.ts rename to src/platform/packages/shared/shared-ux/modal/tabbed/storybook/setup.ts diff --git a/packages/shared-ux/modal/tabbed/tsconfig.json b/src/platform/packages/shared/shared-ux/modal/tabbed/tsconfig.json similarity index 79% rename from packages/shared-ux/modal/tabbed/tsconfig.json rename to src/platform/packages/shared/shared-ux/modal/tabbed/tsconfig.json index ecd52b154a2b4..e20a19c2dd168 100644 --- a/packages/shared-ux/modal/tabbed/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/modal/tabbed/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", }, diff --git a/packages/shared-ux/page/kibana_template/impl/README.mdx b/src/platform/packages/shared/shared-ux/page/kibana_template/impl/README.mdx similarity index 98% rename from packages/shared-ux/page/kibana_template/impl/README.mdx rename to src/platform/packages/shared/shared-ux/page/kibana_template/impl/README.mdx index 6d8151cbe882c..4405f0259aec1 100644 --- a/packages/shared-ux/page/kibana_template/impl/README.mdx +++ b/src/platform/packages/shared/shared-ux/page/kibana_template/impl/README.mdx @@ -124,7 +124,7 @@ Increases the consistency in messaging across all the solutions during the getti This is a built-in configuration that displays a very specific UI and requires very specific keys. It will also ignore all other configurations of the template including `pageHeader` and `children`, with the exception of continuing to show `solutionNav`. -The `noDataConfig` is of type [`NoDataPageProps`](https://github.com/elastic/kibana/blob/main/packages/shared-ux/page/no_data/types/index.d.ts): +The `noDataConfig` is of type [`NoDataPageProps`](https://github.com/elastic/kibana/blob/main/src/platform/packages/shared/shared-ux/card/no_data/types/index.d.ts): 1. `solution: string`: Single name for the current solution, used to auto-generate the title, logo, and description *(required)* 2. `docsLink: string`: Required to set the docs link for the whole solution *(required)* diff --git a/packages/shared-ux/page/kibana_template/impl/index.ts b/src/platform/packages/shared/shared-ux/page/kibana_template/impl/index.ts similarity index 100% rename from packages/shared-ux/page/kibana_template/impl/index.ts rename to src/platform/packages/shared/shared-ux/page/kibana_template/impl/index.ts diff --git a/src/platform/packages/shared/shared-ux/page/kibana_template/impl/jest.config.js b/src/platform/packages/shared/shared-ux/page/kibana_template/impl/jest.config.js new file mode 100644 index 0000000000000..e9d10068f6a15 --- /dev/null +++ b/src/platform/packages/shared/shared-ux/page/kibana_template/impl/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/shared-ux/page/kibana_template/impl'], +}; diff --git a/packages/shared-ux/page/kibana_template/impl/kibana.jsonc b/src/platform/packages/shared/shared-ux/page/kibana_template/impl/kibana.jsonc similarity index 100% rename from packages/shared-ux/page/kibana_template/impl/kibana.jsonc rename to src/platform/packages/shared/shared-ux/page/kibana_template/impl/kibana.jsonc diff --git a/packages/shared-ux/page/kibana_template/impl/package.json b/src/platform/packages/shared/shared-ux/page/kibana_template/impl/package.json similarity index 100% rename from packages/shared-ux/page/kibana_template/impl/package.json rename to src/platform/packages/shared/shared-ux/page/kibana_template/impl/package.json diff --git a/packages/shared-ux/page/kibana_template/impl/src/__snapshots__/page_template.test.tsx.snap b/src/platform/packages/shared/shared-ux/page/kibana_template/impl/src/__snapshots__/page_template.test.tsx.snap similarity index 100% rename from packages/shared-ux/page/kibana_template/impl/src/__snapshots__/page_template.test.tsx.snap rename to src/platform/packages/shared/shared-ux/page/kibana_template/impl/src/__snapshots__/page_template.test.tsx.snap diff --git a/packages/shared-ux/page/kibana_template/impl/src/__snapshots__/page_template_inner.test.tsx.snap b/src/platform/packages/shared/shared-ux/page/kibana_template/impl/src/__snapshots__/page_template_inner.test.tsx.snap similarity index 100% rename from packages/shared-ux/page/kibana_template/impl/src/__snapshots__/page_template_inner.test.tsx.snap rename to src/platform/packages/shared/shared-ux/page/kibana_template/impl/src/__snapshots__/page_template_inner.test.tsx.snap diff --git a/packages/shared-ux/page/kibana_template/impl/src/page_template.stories.tsx b/src/platform/packages/shared/shared-ux/page/kibana_template/impl/src/page_template.stories.tsx similarity index 100% rename from packages/shared-ux/page/kibana_template/impl/src/page_template.stories.tsx rename to src/platform/packages/shared/shared-ux/page/kibana_template/impl/src/page_template.stories.tsx diff --git a/packages/shared-ux/page/kibana_template/impl/src/page_template.test.tsx b/src/platform/packages/shared/shared-ux/page/kibana_template/impl/src/page_template.test.tsx similarity index 100% rename from packages/shared-ux/page/kibana_template/impl/src/page_template.test.tsx rename to src/platform/packages/shared/shared-ux/page/kibana_template/impl/src/page_template.test.tsx diff --git a/packages/shared-ux/page/kibana_template/impl/src/page_template.tsx b/src/platform/packages/shared/shared-ux/page/kibana_template/impl/src/page_template.tsx similarity index 100% rename from packages/shared-ux/page/kibana_template/impl/src/page_template.tsx rename to src/platform/packages/shared/shared-ux/page/kibana_template/impl/src/page_template.tsx diff --git a/packages/shared-ux/page/kibana_template/impl/src/page_template_inner.test.tsx b/src/platform/packages/shared/shared-ux/page/kibana_template/impl/src/page_template_inner.test.tsx similarity index 100% rename from packages/shared-ux/page/kibana_template/impl/src/page_template_inner.test.tsx rename to src/platform/packages/shared/shared-ux/page/kibana_template/impl/src/page_template_inner.test.tsx diff --git a/packages/shared-ux/page/kibana_template/impl/src/page_template_inner.tsx b/src/platform/packages/shared/shared-ux/page/kibana_template/impl/src/page_template_inner.tsx similarity index 100% rename from packages/shared-ux/page/kibana_template/impl/src/page_template_inner.tsx rename to src/platform/packages/shared/shared-ux/page/kibana_template/impl/src/page_template_inner.tsx diff --git a/packages/shared-ux/page/kibana_template/impl/src/services.tsx b/src/platform/packages/shared/shared-ux/page/kibana_template/impl/src/services.tsx similarity index 100% rename from packages/shared-ux/page/kibana_template/impl/src/services.tsx rename to src/platform/packages/shared/shared-ux/page/kibana_template/impl/src/services.tsx diff --git a/packages/shared-ux/page/kibana_template/impl/tsconfig.json b/src/platform/packages/shared/shared-ux/page/kibana_template/impl/tsconfig.json similarity index 89% rename from packages/shared-ux/page/kibana_template/impl/tsconfig.json rename to src/platform/packages/shared/shared-ux/page/kibana_template/impl/tsconfig.json index d4b2c3e87f593..d861c72d9b107 100644 --- a/packages/shared-ux/page/kibana_template/impl/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/page/kibana_template/impl/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../../tsconfig.base.json", + "extends": "../../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/page/kibana_template/mocks/README.mdx b/src/platform/packages/shared/shared-ux/page/kibana_template/mocks/README.mdx similarity index 100% rename from packages/shared-ux/page/kibana_template/mocks/README.mdx rename to src/platform/packages/shared/shared-ux/page/kibana_template/mocks/README.mdx diff --git a/packages/shared-ux/page/kibana_template/mocks/index.ts b/src/platform/packages/shared/shared-ux/page/kibana_template/mocks/index.ts similarity index 100% rename from packages/shared-ux/page/kibana_template/mocks/index.ts rename to src/platform/packages/shared/shared-ux/page/kibana_template/mocks/index.ts diff --git a/packages/shared-ux/page/kibana_template/mocks/kibana.jsonc b/src/platform/packages/shared/shared-ux/page/kibana_template/mocks/kibana.jsonc similarity index 100% rename from packages/shared-ux/page/kibana_template/mocks/kibana.jsonc rename to src/platform/packages/shared/shared-ux/page/kibana_template/mocks/kibana.jsonc diff --git a/packages/shared-ux/page/kibana_template/mocks/package.json b/src/platform/packages/shared/shared-ux/page/kibana_template/mocks/package.json similarity index 100% rename from packages/shared-ux/page/kibana_template/mocks/package.json rename to src/platform/packages/shared/shared-ux/page/kibana_template/mocks/package.json diff --git a/packages/shared-ux/page/kibana_template/mocks/src/jest.ts b/src/platform/packages/shared/shared-ux/page/kibana_template/mocks/src/jest.ts similarity index 100% rename from packages/shared-ux/page/kibana_template/mocks/src/jest.ts rename to src/platform/packages/shared/shared-ux/page/kibana_template/mocks/src/jest.ts diff --git a/packages/shared-ux/page/kibana_template/mocks/src/storybook/all.ts b/src/platform/packages/shared/shared-ux/page/kibana_template/mocks/src/storybook/all.ts similarity index 100% rename from packages/shared-ux/page/kibana_template/mocks/src/storybook/all.ts rename to src/platform/packages/shared/shared-ux/page/kibana_template/mocks/src/storybook/all.ts diff --git a/packages/shared-ux/page/kibana_template/mocks/src/storybook/index.ts b/src/platform/packages/shared/shared-ux/page/kibana_template/mocks/src/storybook/index.ts similarity index 100% rename from packages/shared-ux/page/kibana_template/mocks/src/storybook/index.ts rename to src/platform/packages/shared/shared-ux/page/kibana_template/mocks/src/storybook/index.ts diff --git a/packages/shared-ux/page/kibana_template/mocks/src/storybook/inner.tsx b/src/platform/packages/shared/shared-ux/page/kibana_template/mocks/src/storybook/inner.tsx similarity index 100% rename from packages/shared-ux/page/kibana_template/mocks/src/storybook/inner.tsx rename to src/platform/packages/shared/shared-ux/page/kibana_template/mocks/src/storybook/inner.tsx diff --git a/packages/shared-ux/page/kibana_template/mocks/src/storybook/no_data_config.ts b/src/platform/packages/shared/shared-ux/page/kibana_template/mocks/src/storybook/no_data_config.ts similarity index 100% rename from packages/shared-ux/page/kibana_template/mocks/src/storybook/no_data_config.ts rename to src/platform/packages/shared/shared-ux/page/kibana_template/mocks/src/storybook/no_data_config.ts diff --git a/packages/shared-ux/page/kibana_template/mocks/src/storybook/solution_nav.ts b/src/platform/packages/shared/shared-ux/page/kibana_template/mocks/src/storybook/solution_nav.ts similarity index 100% rename from packages/shared-ux/page/kibana_template/mocks/src/storybook/solution_nav.ts rename to src/platform/packages/shared/shared-ux/page/kibana_template/mocks/src/storybook/solution_nav.ts diff --git a/packages/shared-ux/page/kibana_template/mocks/tsconfig.json b/src/platform/packages/shared/shared-ux/page/kibana_template/mocks/tsconfig.json similarity index 87% rename from packages/shared-ux/page/kibana_template/mocks/tsconfig.json rename to src/platform/packages/shared/shared-ux/page/kibana_template/mocks/tsconfig.json index 6a11b6ecad992..ff8275b11fe3e 100644 --- a/packages/shared-ux/page/kibana_template/mocks/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/page/kibana_template/mocks/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../../tsconfig.base.json", + "extends": "../../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/page/kibana_template/types/README.mdx b/src/platform/packages/shared/shared-ux/page/kibana_template/types/README.mdx similarity index 100% rename from packages/shared-ux/page/kibana_template/types/README.mdx rename to src/platform/packages/shared/shared-ux/page/kibana_template/types/README.mdx diff --git a/packages/shared-ux/page/kibana_template/types/index.d.ts b/src/platform/packages/shared/shared-ux/page/kibana_template/types/index.d.ts similarity index 100% rename from packages/shared-ux/page/kibana_template/types/index.d.ts rename to src/platform/packages/shared/shared-ux/page/kibana_template/types/index.d.ts diff --git a/packages/shared-ux/page/kibana_template/types/kibana.jsonc b/src/platform/packages/shared/shared-ux/page/kibana_template/types/kibana.jsonc similarity index 100% rename from packages/shared-ux/page/kibana_template/types/kibana.jsonc rename to src/platform/packages/shared/shared-ux/page/kibana_template/types/kibana.jsonc diff --git a/packages/shared-ux/page/kibana_template/types/package.json b/src/platform/packages/shared/shared-ux/page/kibana_template/types/package.json similarity index 100% rename from packages/shared-ux/page/kibana_template/types/package.json rename to src/platform/packages/shared/shared-ux/page/kibana_template/types/package.json diff --git a/packages/shared-ux/page/kibana_template/types/tsconfig.json b/src/platform/packages/shared/shared-ux/page/kibana_template/types/tsconfig.json similarity index 81% rename from packages/shared-ux/page/kibana_template/types/tsconfig.json rename to src/platform/packages/shared/shared-ux/page/kibana_template/types/tsconfig.json index 8559d1570106c..2bcd7c9877d22 100644 --- a/packages/shared-ux/page/kibana_template/types/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/page/kibana_template/types/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../../tsconfig.base.json", + "extends": "../../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [] diff --git a/packages/shared-ux/page/no_data/impl/README.mdx b/src/platform/packages/shared/shared-ux/page/no_data/impl/README.mdx similarity index 100% rename from packages/shared-ux/page/no_data/impl/README.mdx rename to src/platform/packages/shared/shared-ux/page/no_data/impl/README.mdx diff --git a/packages/shared-ux/page/no_data/impl/index.ts b/src/platform/packages/shared/shared-ux/page/no_data/impl/index.ts similarity index 100% rename from packages/shared-ux/page/no_data/impl/index.ts rename to src/platform/packages/shared/shared-ux/page/no_data/impl/index.ts diff --git a/src/platform/packages/shared/shared-ux/page/no_data/impl/jest.config.js b/src/platform/packages/shared/shared-ux/page/no_data/impl/jest.config.js new file mode 100644 index 0000000000000..7c6e79f5a920a --- /dev/null +++ b/src/platform/packages/shared/shared-ux/page/no_data/impl/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/shared-ux/page/no_data/impl'], +}; diff --git a/packages/shared-ux/page/no_data/impl/kibana.jsonc b/src/platform/packages/shared/shared-ux/page/no_data/impl/kibana.jsonc similarity index 100% rename from packages/shared-ux/page/no_data/impl/kibana.jsonc rename to src/platform/packages/shared/shared-ux/page/no_data/impl/kibana.jsonc diff --git a/packages/shared-ux/page/no_data/impl/package.json b/src/platform/packages/shared/shared-ux/page/no_data/impl/package.json similarity index 100% rename from packages/shared-ux/page/no_data/impl/package.json rename to src/platform/packages/shared/shared-ux/page/no_data/impl/package.json diff --git a/packages/shared-ux/page/no_data/impl/src/action_card.tsx b/src/platform/packages/shared/shared-ux/page/no_data/impl/src/action_card.tsx similarity index 100% rename from packages/shared-ux/page/no_data/impl/src/action_card.tsx rename to src/platform/packages/shared/shared-ux/page/no_data/impl/src/action_card.tsx diff --git a/packages/shared-ux/page/no_data/impl/src/no_data_page.stories.tsx b/src/platform/packages/shared/shared-ux/page/no_data/impl/src/no_data_page.stories.tsx similarity index 100% rename from packages/shared-ux/page/no_data/impl/src/no_data_page.stories.tsx rename to src/platform/packages/shared/shared-ux/page/no_data/impl/src/no_data_page.stories.tsx diff --git a/packages/shared-ux/page/no_data/impl/src/no_data_page.test.tsx b/src/platform/packages/shared/shared-ux/page/no_data/impl/src/no_data_page.test.tsx similarity index 100% rename from packages/shared-ux/page/no_data/impl/src/no_data_page.test.tsx rename to src/platform/packages/shared/shared-ux/page/no_data/impl/src/no_data_page.test.tsx diff --git a/packages/shared-ux/page/no_data/impl/src/no_data_page.tsx b/src/platform/packages/shared/shared-ux/page/no_data/impl/src/no_data_page.tsx similarity index 100% rename from packages/shared-ux/page/no_data/impl/src/no_data_page.tsx rename to src/platform/packages/shared/shared-ux/page/no_data/impl/src/no_data_page.tsx diff --git a/packages/shared-ux/page/no_data/impl/src/services.tsx b/src/platform/packages/shared/shared-ux/page/no_data/impl/src/services.tsx similarity index 100% rename from packages/shared-ux/page/no_data/impl/src/services.tsx rename to src/platform/packages/shared/shared-ux/page/no_data/impl/src/services.tsx diff --git a/packages/shared-ux/page/no_data/impl/tsconfig.json b/src/platform/packages/shared/shared-ux/page/no_data/impl/tsconfig.json similarity index 89% rename from packages/shared-ux/page/no_data/impl/tsconfig.json rename to src/platform/packages/shared/shared-ux/page/no_data/impl/tsconfig.json index d36c0c9a9ff95..e2cf4cc1ba6e2 100644 --- a/packages/shared-ux/page/no_data/impl/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/page/no_data/impl/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../../tsconfig.base.json", + "extends": "../../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/page/no_data/mocks/README.md b/src/platform/packages/shared/shared-ux/page/no_data/mocks/README.md similarity index 100% rename from packages/shared-ux/page/no_data/mocks/README.md rename to src/platform/packages/shared/shared-ux/page/no_data/mocks/README.md diff --git a/packages/shared-ux/page/no_data/mocks/index.ts b/src/platform/packages/shared/shared-ux/page/no_data/mocks/index.ts similarity index 100% rename from packages/shared-ux/page/no_data/mocks/index.ts rename to src/platform/packages/shared/shared-ux/page/no_data/mocks/index.ts diff --git a/packages/shared-ux/page/no_data/mocks/kibana.jsonc b/src/platform/packages/shared/shared-ux/page/no_data/mocks/kibana.jsonc similarity index 100% rename from packages/shared-ux/page/no_data/mocks/kibana.jsonc rename to src/platform/packages/shared/shared-ux/page/no_data/mocks/kibana.jsonc diff --git a/packages/shared-ux/page/no_data/mocks/package.json b/src/platform/packages/shared/shared-ux/page/no_data/mocks/package.json similarity index 100% rename from packages/shared-ux/page/no_data/mocks/package.json rename to src/platform/packages/shared/shared-ux/page/no_data/mocks/package.json diff --git a/packages/shared-ux/page/no_data/mocks/src/jest.ts b/src/platform/packages/shared/shared-ux/page/no_data/mocks/src/jest.ts similarity index 100% rename from packages/shared-ux/page/no_data/mocks/src/jest.ts rename to src/platform/packages/shared/shared-ux/page/no_data/mocks/src/jest.ts diff --git a/packages/shared-ux/page/no_data/mocks/src/storybook.ts b/src/platform/packages/shared/shared-ux/page/no_data/mocks/src/storybook.ts similarity index 100% rename from packages/shared-ux/page/no_data/mocks/src/storybook.ts rename to src/platform/packages/shared/shared-ux/page/no_data/mocks/src/storybook.ts diff --git a/packages/shared-ux/page/no_data/mocks/tsconfig.json b/src/platform/packages/shared/shared-ux/page/no_data/mocks/tsconfig.json similarity index 85% rename from packages/shared-ux/page/no_data/mocks/tsconfig.json rename to src/platform/packages/shared/shared-ux/page/no_data/mocks/tsconfig.json index a7ff059474ecd..69df96b6cc570 100644 --- a/packages/shared-ux/page/no_data/mocks/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/page/no_data/mocks/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../../tsconfig.base.json", + "extends": "../../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/page/no_data/types/README.mdx b/src/platform/packages/shared/shared-ux/page/no_data/types/README.mdx similarity index 100% rename from packages/shared-ux/page/no_data/types/README.mdx rename to src/platform/packages/shared/shared-ux/page/no_data/types/README.mdx diff --git a/packages/shared-ux/page/no_data/types/index.d.ts b/src/platform/packages/shared/shared-ux/page/no_data/types/index.d.ts similarity index 100% rename from packages/shared-ux/page/no_data/types/index.d.ts rename to src/platform/packages/shared/shared-ux/page/no_data/types/index.d.ts diff --git a/packages/shared-ux/page/no_data/types/kibana.jsonc b/src/platform/packages/shared/shared-ux/page/no_data/types/kibana.jsonc similarity index 100% rename from packages/shared-ux/page/no_data/types/kibana.jsonc rename to src/platform/packages/shared/shared-ux/page/no_data/types/kibana.jsonc diff --git a/packages/shared-ux/page/no_data/types/package.json b/src/platform/packages/shared/shared-ux/page/no_data/types/package.json similarity index 100% rename from packages/shared-ux/page/no_data/types/package.json rename to src/platform/packages/shared/shared-ux/page/no_data/types/package.json diff --git a/packages/shared-ux/page/no_data/types/tsconfig.json b/src/platform/packages/shared/shared-ux/page/no_data/types/tsconfig.json similarity index 78% rename from packages/shared-ux/page/no_data/types/tsconfig.json rename to src/platform/packages/shared/shared-ux/page/no_data/types/tsconfig.json index cb496086a1a06..6a4a6cc7d8fea 100644 --- a/packages/shared-ux/page/no_data/types/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/page/no_data/types/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../../tsconfig.base.json", + "extends": "../../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [] diff --git a/packages/shared-ux/page/no_data_config/impl/README.mdx b/src/platform/packages/shared/shared-ux/page/no_data_config/impl/README.mdx similarity index 100% rename from packages/shared-ux/page/no_data_config/impl/README.mdx rename to src/platform/packages/shared/shared-ux/page/no_data_config/impl/README.mdx diff --git a/packages/shared-ux/page/no_data_config/impl/index.ts b/src/platform/packages/shared/shared-ux/page/no_data_config/impl/index.ts similarity index 100% rename from packages/shared-ux/page/no_data_config/impl/index.ts rename to src/platform/packages/shared/shared-ux/page/no_data_config/impl/index.ts diff --git a/src/platform/packages/shared/shared-ux/page/no_data_config/impl/jest.config.js b/src/platform/packages/shared/shared-ux/page/no_data_config/impl/jest.config.js new file mode 100644 index 0000000000000..f01bdb06630d3 --- /dev/null +++ b/src/platform/packages/shared/shared-ux/page/no_data_config/impl/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/shared-ux/page/no_data_config/impl'], +}; diff --git a/packages/shared-ux/page/no_data_config/impl/kibana.jsonc b/src/platform/packages/shared/shared-ux/page/no_data_config/impl/kibana.jsonc similarity index 100% rename from packages/shared-ux/page/no_data_config/impl/kibana.jsonc rename to src/platform/packages/shared/shared-ux/page/no_data_config/impl/kibana.jsonc diff --git a/packages/shared-ux/page/no_data_config/impl/package.json b/src/platform/packages/shared/shared-ux/page/no_data_config/impl/package.json similarity index 100% rename from packages/shared-ux/page/no_data_config/impl/package.json rename to src/platform/packages/shared/shared-ux/page/no_data_config/impl/package.json diff --git a/packages/shared-ux/page/no_data_config/impl/src/constants.ts b/src/platform/packages/shared/shared-ux/page/no_data_config/impl/src/constants.ts similarity index 100% rename from packages/shared-ux/page/no_data_config/impl/src/constants.ts rename to src/platform/packages/shared/shared-ux/page/no_data_config/impl/src/constants.ts diff --git a/packages/shared-ux/page/no_data_config/impl/src/no_data_config_page.stories.tsx b/src/platform/packages/shared/shared-ux/page/no_data_config/impl/src/no_data_config_page.stories.tsx similarity index 100% rename from packages/shared-ux/page/no_data_config/impl/src/no_data_config_page.stories.tsx rename to src/platform/packages/shared/shared-ux/page/no_data_config/impl/src/no_data_config_page.stories.tsx diff --git a/packages/shared-ux/page/no_data_config/impl/src/no_data_config_page.test.tsx b/src/platform/packages/shared/shared-ux/page/no_data_config/impl/src/no_data_config_page.test.tsx similarity index 100% rename from packages/shared-ux/page/no_data_config/impl/src/no_data_config_page.test.tsx rename to src/platform/packages/shared/shared-ux/page/no_data_config/impl/src/no_data_config_page.test.tsx diff --git a/packages/shared-ux/page/no_data_config/impl/src/no_data_config_page.tsx b/src/platform/packages/shared/shared-ux/page/no_data_config/impl/src/no_data_config_page.tsx similarity index 100% rename from packages/shared-ux/page/no_data_config/impl/src/no_data_config_page.tsx rename to src/platform/packages/shared/shared-ux/page/no_data_config/impl/src/no_data_config_page.tsx diff --git a/packages/shared-ux/page/no_data_config/impl/src/services.tsx b/src/platform/packages/shared/shared-ux/page/no_data_config/impl/src/services.tsx similarity index 100% rename from packages/shared-ux/page/no_data_config/impl/src/services.tsx rename to src/platform/packages/shared/shared-ux/page/no_data_config/impl/src/services.tsx diff --git a/packages/shared-ux/page/no_data_config/impl/tsconfig.json b/src/platform/packages/shared/shared-ux/page/no_data_config/impl/tsconfig.json similarity index 88% rename from packages/shared-ux/page/no_data_config/impl/tsconfig.json rename to src/platform/packages/shared/shared-ux/page/no_data_config/impl/tsconfig.json index f30535d1df3e0..1096d93de1a0c 100644 --- a/packages/shared-ux/page/no_data_config/impl/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/page/no_data_config/impl/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../../tsconfig.base.json", + "extends": "../../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/page/no_data_config/mocks/README.md b/src/platform/packages/shared/shared-ux/page/no_data_config/mocks/README.md similarity index 100% rename from packages/shared-ux/page/no_data_config/mocks/README.md rename to src/platform/packages/shared/shared-ux/page/no_data_config/mocks/README.md diff --git a/packages/shared-ux/page/no_data_config/mocks/index.ts b/src/platform/packages/shared/shared-ux/page/no_data_config/mocks/index.ts similarity index 100% rename from packages/shared-ux/page/no_data_config/mocks/index.ts rename to src/platform/packages/shared/shared-ux/page/no_data_config/mocks/index.ts diff --git a/packages/shared-ux/page/no_data_config/mocks/kibana.jsonc b/src/platform/packages/shared/shared-ux/page/no_data_config/mocks/kibana.jsonc similarity index 100% rename from packages/shared-ux/page/no_data_config/mocks/kibana.jsonc rename to src/platform/packages/shared/shared-ux/page/no_data_config/mocks/kibana.jsonc diff --git a/packages/shared-ux/page/no_data_config/mocks/package.json b/src/platform/packages/shared/shared-ux/page/no_data_config/mocks/package.json similarity index 100% rename from packages/shared-ux/page/no_data_config/mocks/package.json rename to src/platform/packages/shared/shared-ux/page/no_data_config/mocks/package.json diff --git a/packages/shared-ux/page/no_data_config/mocks/src/jest.ts b/src/platform/packages/shared/shared-ux/page/no_data_config/mocks/src/jest.ts similarity index 100% rename from packages/shared-ux/page/no_data_config/mocks/src/jest.ts rename to src/platform/packages/shared/shared-ux/page/no_data_config/mocks/src/jest.ts diff --git a/packages/shared-ux/page/no_data_config/mocks/src/storybook.ts b/src/platform/packages/shared/shared-ux/page/no_data_config/mocks/src/storybook.ts similarity index 100% rename from packages/shared-ux/page/no_data_config/mocks/src/storybook.ts rename to src/platform/packages/shared/shared-ux/page/no_data_config/mocks/src/storybook.ts diff --git a/packages/shared-ux/page/no_data_config/mocks/tsconfig.json b/src/platform/packages/shared/shared-ux/page/no_data_config/mocks/tsconfig.json similarity index 85% rename from packages/shared-ux/page/no_data_config/mocks/tsconfig.json rename to src/platform/packages/shared/shared-ux/page/no_data_config/mocks/tsconfig.json index 8512e6c9fe15c..6884ffe40e8df 100644 --- a/packages/shared-ux/page/no_data_config/mocks/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/page/no_data_config/mocks/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../../tsconfig.base.json", + "extends": "../../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/page/no_data_config/types/README.md b/src/platform/packages/shared/shared-ux/page/no_data_config/types/README.md similarity index 100% rename from packages/shared-ux/page/no_data_config/types/README.md rename to src/platform/packages/shared/shared-ux/page/no_data_config/types/README.md diff --git a/packages/shared-ux/page/no_data_config/types/index.d.ts b/src/platform/packages/shared/shared-ux/page/no_data_config/types/index.d.ts similarity index 100% rename from packages/shared-ux/page/no_data_config/types/index.d.ts rename to src/platform/packages/shared/shared-ux/page/no_data_config/types/index.d.ts diff --git a/packages/shared-ux/page/no_data_config/types/kibana.jsonc b/src/platform/packages/shared/shared-ux/page/no_data_config/types/kibana.jsonc similarity index 100% rename from packages/shared-ux/page/no_data_config/types/kibana.jsonc rename to src/platform/packages/shared/shared-ux/page/no_data_config/types/kibana.jsonc diff --git a/packages/shared-ux/page/no_data_config/types/package.json b/src/platform/packages/shared/shared-ux/page/no_data_config/types/package.json similarity index 100% rename from packages/shared-ux/page/no_data_config/types/package.json rename to src/platform/packages/shared/shared-ux/page/no_data_config/types/package.json diff --git a/packages/shared-ux/page/no_data_config/types/tsconfig.json b/src/platform/packages/shared/shared-ux/page/no_data_config/types/tsconfig.json similarity index 78% rename from packages/shared-ux/page/no_data_config/types/tsconfig.json rename to src/platform/packages/shared/shared-ux/page/no_data_config/types/tsconfig.json index 0a4ee6d632cc4..be3cb03df3949 100644 --- a/packages/shared-ux/page/no_data_config/types/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/page/no_data_config/types/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../../tsconfig.base.json", + "extends": "../../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [] diff --git a/packages/shared-ux/page/solution_nav/README.mdx b/src/platform/packages/shared/shared-ux/page/solution_nav/README.mdx similarity index 100% rename from packages/shared-ux/page/solution_nav/README.mdx rename to src/platform/packages/shared/shared-ux/page/solution_nav/README.mdx diff --git a/packages/shared-ux/page/solution_nav/index.ts b/src/platform/packages/shared/shared-ux/page/solution_nav/index.ts similarity index 100% rename from packages/shared-ux/page/solution_nav/index.ts rename to src/platform/packages/shared/shared-ux/page/solution_nav/index.ts diff --git a/src/platform/packages/shared/shared-ux/page/solution_nav/jest.config.js b/src/platform/packages/shared/shared-ux/page/solution_nav/jest.config.js new file mode 100644 index 0000000000000..3071dea06fdc1 --- /dev/null +++ b/src/platform/packages/shared/shared-ux/page/solution_nav/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/shared-ux/page/solution_nav'], +}; diff --git a/packages/shared-ux/page/solution_nav/kibana.jsonc b/src/platform/packages/shared/shared-ux/page/solution_nav/kibana.jsonc similarity index 100% rename from packages/shared-ux/page/solution_nav/kibana.jsonc rename to src/platform/packages/shared/shared-ux/page/solution_nav/kibana.jsonc diff --git a/packages/shared-ux/page/solution_nav/package.json b/src/platform/packages/shared/shared-ux/page/solution_nav/package.json similarity index 100% rename from packages/shared-ux/page/solution_nav/package.json rename to src/platform/packages/shared/shared-ux/page/solution_nav/package.json diff --git a/packages/shared-ux/page/solution_nav/src/__snapshots__/collapse_button.test.tsx.snap b/src/platform/packages/shared/shared-ux/page/solution_nav/src/__snapshots__/collapse_button.test.tsx.snap similarity index 100% rename from packages/shared-ux/page/solution_nav/src/__snapshots__/collapse_button.test.tsx.snap rename to src/platform/packages/shared/shared-ux/page/solution_nav/src/__snapshots__/collapse_button.test.tsx.snap diff --git a/packages/shared-ux/page/solution_nav/src/__snapshots__/solution_nav.test.tsx.snap b/src/platform/packages/shared/shared-ux/page/solution_nav/src/__snapshots__/solution_nav.test.tsx.snap similarity index 100% rename from packages/shared-ux/page/solution_nav/src/__snapshots__/solution_nav.test.tsx.snap rename to src/platform/packages/shared/shared-ux/page/solution_nav/src/__snapshots__/solution_nav.test.tsx.snap diff --git a/packages/shared-ux/page/solution_nav/src/__snapshots__/with_solution_nav.test.tsx.snap b/src/platform/packages/shared/shared-ux/page/solution_nav/src/__snapshots__/with_solution_nav.test.tsx.snap similarity index 100% rename from packages/shared-ux/page/solution_nav/src/__snapshots__/with_solution_nav.test.tsx.snap rename to src/platform/packages/shared/shared-ux/page/solution_nav/src/__snapshots__/with_solution_nav.test.tsx.snap diff --git a/packages/shared-ux/page/solution_nav/src/_variables.scss b/src/platform/packages/shared/shared-ux/page/solution_nav/src/_variables.scss similarity index 100% rename from packages/shared-ux/page/solution_nav/src/_variables.scss rename to src/platform/packages/shared/shared-ux/page/solution_nav/src/_variables.scss diff --git a/packages/shared-ux/page/solution_nav/src/collapse_button.scss b/src/platform/packages/shared/shared-ux/page/solution_nav/src/collapse_button.scss similarity index 100% rename from packages/shared-ux/page/solution_nav/src/collapse_button.scss rename to src/platform/packages/shared/shared-ux/page/solution_nav/src/collapse_button.scss diff --git a/packages/shared-ux/page/solution_nav/src/collapse_button.test.tsx b/src/platform/packages/shared/shared-ux/page/solution_nav/src/collapse_button.test.tsx similarity index 100% rename from packages/shared-ux/page/solution_nav/src/collapse_button.test.tsx rename to src/platform/packages/shared/shared-ux/page/solution_nav/src/collapse_button.test.tsx diff --git a/packages/shared-ux/page/solution_nav/src/collapse_button.tsx b/src/platform/packages/shared/shared-ux/page/solution_nav/src/collapse_button.tsx similarity index 100% rename from packages/shared-ux/page/solution_nav/src/collapse_button.tsx rename to src/platform/packages/shared/shared-ux/page/solution_nav/src/collapse_button.tsx diff --git a/packages/shared-ux/page/solution_nav/src/solution_nav.scss b/src/platform/packages/shared/shared-ux/page/solution_nav/src/solution_nav.scss similarity index 100% rename from packages/shared-ux/page/solution_nav/src/solution_nav.scss rename to src/platform/packages/shared/shared-ux/page/solution_nav/src/solution_nav.scss diff --git a/packages/shared-ux/page/solution_nav/src/solution_nav.stories.tsx b/src/platform/packages/shared/shared-ux/page/solution_nav/src/solution_nav.stories.tsx similarity index 100% rename from packages/shared-ux/page/solution_nav/src/solution_nav.stories.tsx rename to src/platform/packages/shared/shared-ux/page/solution_nav/src/solution_nav.stories.tsx diff --git a/packages/shared-ux/page/solution_nav/src/solution_nav.test.tsx b/src/platform/packages/shared/shared-ux/page/solution_nav/src/solution_nav.test.tsx similarity index 100% rename from packages/shared-ux/page/solution_nav/src/solution_nav.test.tsx rename to src/platform/packages/shared/shared-ux/page/solution_nav/src/solution_nav.test.tsx diff --git a/packages/shared-ux/page/solution_nav/src/solution_nav.tsx b/src/platform/packages/shared/shared-ux/page/solution_nav/src/solution_nav.tsx similarity index 100% rename from packages/shared-ux/page/solution_nav/src/solution_nav.tsx rename to src/platform/packages/shared/shared-ux/page/solution_nav/src/solution_nav.tsx diff --git a/packages/shared-ux/page/solution_nav/src/with_solution_nav.styles.ts b/src/platform/packages/shared/shared-ux/page/solution_nav/src/with_solution_nav.styles.ts similarity index 100% rename from packages/shared-ux/page/solution_nav/src/with_solution_nav.styles.ts rename to src/platform/packages/shared/shared-ux/page/solution_nav/src/with_solution_nav.styles.ts diff --git a/packages/shared-ux/page/solution_nav/src/with_solution_nav.test.tsx b/src/platform/packages/shared/shared-ux/page/solution_nav/src/with_solution_nav.test.tsx similarity index 100% rename from packages/shared-ux/page/solution_nav/src/with_solution_nav.test.tsx rename to src/platform/packages/shared/shared-ux/page/solution_nav/src/with_solution_nav.test.tsx diff --git a/packages/shared-ux/page/solution_nav/src/with_solution_nav.tsx b/src/platform/packages/shared/shared-ux/page/solution_nav/src/with_solution_nav.tsx similarity index 100% rename from packages/shared-ux/page/solution_nav/src/with_solution_nav.tsx rename to src/platform/packages/shared/shared-ux/page/solution_nav/src/with_solution_nav.tsx diff --git a/packages/shared-ux/page/solution_nav/tsconfig.json b/src/platform/packages/shared/shared-ux/page/solution_nav/tsconfig.json similarity index 86% rename from packages/shared-ux/page/solution_nav/tsconfig.json rename to src/platform/packages/shared/shared-ux/page/solution_nav/tsconfig.json index dde4935440f75..37e7246b7a449 100644 --- a/packages/shared-ux/page/solution_nav/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/page/solution_nav/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/prompt/no_data_views/impl/README.mdx b/src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/README.mdx similarity index 100% rename from packages/shared-ux/prompt/no_data_views/impl/README.mdx rename to src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/README.mdx diff --git a/packages/shared-ux/prompt/no_data_views/impl/index.ts b/src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/index.ts similarity index 100% rename from packages/shared-ux/prompt/no_data_views/impl/index.ts rename to src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/index.ts diff --git a/src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/jest.config.js b/src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/jest.config.js new file mode 100644 index 0000000000000..9b72021ba2258 --- /dev/null +++ b/src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/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/shared-ux/prompt/no_data_views'], +}; diff --git a/packages/shared-ux/prompt/no_data_views/impl/kibana.jsonc b/src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/kibana.jsonc similarity index 84% rename from packages/shared-ux/prompt/no_data_views/impl/kibana.jsonc rename to src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/kibana.jsonc index 8f2ad49cf2d7c..e5cd8a0ec9bb1 100644 --- a/packages/shared-ux/prompt/no_data_views/impl/kibana.jsonc +++ b/src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/kibana.jsonc @@ -5,5 +5,5 @@ "@elastic/appex-sharedux" ], "group": "platform", - "visibility": "private" -} \ No newline at end of file + "visibility": "shared" +} diff --git a/packages/shared-ux/prompt/no_data_views/impl/package.json b/src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/package.json similarity index 100% rename from packages/shared-ux/prompt/no_data_views/impl/package.json rename to src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/package.json diff --git a/packages/shared-ux/prompt/no_data_views/impl/src/__snapshots__/documentation_link.test.tsx.snap b/src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/src/__snapshots__/documentation_link.test.tsx.snap similarity index 100% rename from packages/shared-ux/prompt/no_data_views/impl/src/__snapshots__/documentation_link.test.tsx.snap rename to src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/src/__snapshots__/documentation_link.test.tsx.snap diff --git a/packages/shared-ux/prompt/no_data_views/impl/src/data_view_illustration.svg b/src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/src/data_view_illustration.svg similarity index 100% rename from packages/shared-ux/prompt/no_data_views/impl/src/data_view_illustration.svg rename to src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/src/data_view_illustration.svg diff --git a/packages/shared-ux/prompt/no_data_views/impl/src/data_view_illustration.tsx b/src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/src/data_view_illustration.tsx similarity index 100% rename from packages/shared-ux/prompt/no_data_views/impl/src/data_view_illustration.tsx rename to src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/src/data_view_illustration.tsx diff --git a/packages/shared-ux/prompt/no_data_views/impl/src/documentation_link.test.tsx b/src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/src/documentation_link.test.tsx similarity index 100% rename from packages/shared-ux/prompt/no_data_views/impl/src/documentation_link.test.tsx rename to src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/src/documentation_link.test.tsx diff --git a/packages/shared-ux/prompt/no_data_views/impl/src/documentation_link.tsx b/src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/src/documentation_link.tsx similarity index 100% rename from packages/shared-ux/prompt/no_data_views/impl/src/documentation_link.tsx rename to src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/src/documentation_link.tsx diff --git a/packages/shared-ux/prompt/no_data_views/impl/src/esql_illustration.svg b/src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/src/esql_illustration.svg similarity index 100% rename from packages/shared-ux/prompt/no_data_views/impl/src/esql_illustration.svg rename to src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/src/esql_illustration.svg diff --git a/packages/shared-ux/prompt/no_data_views/impl/src/esql_illustration.tsx b/src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/src/esql_illustration.tsx similarity index 100% rename from packages/shared-ux/prompt/no_data_views/impl/src/esql_illustration.tsx rename to src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/src/esql_illustration.tsx diff --git a/packages/shared-ux/prompt/no_data_views/impl/src/hooks/index.ts b/src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/src/hooks/index.ts similarity index 100% rename from packages/shared-ux/prompt/no_data_views/impl/src/hooks/index.ts rename to src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/src/hooks/index.ts diff --git a/packages/shared-ux/prompt/no_data_views/impl/src/hooks/use_on_try_esql.ts b/src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/src/hooks/use_on_try_esql.ts similarity index 100% rename from packages/shared-ux/prompt/no_data_views/impl/src/hooks/use_on_try_esql.ts rename to src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/src/hooks/use_on_try_esql.ts diff --git a/packages/shared-ux/prompt/no_data_views/impl/src/no_data_views.component.test.tsx b/src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/src/no_data_views.component.test.tsx similarity index 100% rename from packages/shared-ux/prompt/no_data_views/impl/src/no_data_views.component.test.tsx rename to src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/src/no_data_views.component.test.tsx diff --git a/packages/shared-ux/prompt/no_data_views/impl/src/no_data_views.component.tsx b/src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/src/no_data_views.component.tsx similarity index 100% rename from packages/shared-ux/prompt/no_data_views/impl/src/no_data_views.component.tsx rename to src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/src/no_data_views.component.tsx diff --git a/packages/shared-ux/prompt/no_data_views/impl/src/no_data_views.stories.tsx b/src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/src/no_data_views.stories.tsx similarity index 100% rename from packages/shared-ux/prompt/no_data_views/impl/src/no_data_views.stories.tsx rename to src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/src/no_data_views.stories.tsx diff --git a/packages/shared-ux/prompt/no_data_views/impl/src/no_data_views.test.tsx b/src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/src/no_data_views.test.tsx similarity index 100% rename from packages/shared-ux/prompt/no_data_views/impl/src/no_data_views.test.tsx rename to src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/src/no_data_views.test.tsx diff --git a/packages/shared-ux/prompt/no_data_views/impl/src/no_data_views.tsx b/src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/src/no_data_views.tsx similarity index 100% rename from packages/shared-ux/prompt/no_data_views/impl/src/no_data_views.tsx rename to src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/src/no_data_views.tsx diff --git a/packages/shared-ux/prompt/no_data_views/impl/src/services.tsx b/src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/src/services.tsx similarity index 100% rename from packages/shared-ux/prompt/no_data_views/impl/src/services.tsx rename to src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/src/services.tsx diff --git a/packages/shared-ux/prompt/no_data_views/impl/tsconfig.json b/src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/tsconfig.json similarity index 89% rename from packages/shared-ux/prompt/no_data_views/impl/tsconfig.json rename to src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/tsconfig.json index 2af357080c07c..9da3c8ba59ca7 100644 --- a/packages/shared-ux/prompt/no_data_views/impl/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../../tsconfig.base.json", + "extends": "../../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/prompt/no_data_views/mocks/README.md b/src/platform/packages/shared/shared-ux/prompt/no_data_views/mocks/README.md similarity index 100% rename from packages/shared-ux/prompt/no_data_views/mocks/README.md rename to src/platform/packages/shared/shared-ux/prompt/no_data_views/mocks/README.md diff --git a/packages/shared-ux/prompt/no_data_views/mocks/index.ts b/src/platform/packages/shared/shared-ux/prompt/no_data_views/mocks/index.ts similarity index 100% rename from packages/shared-ux/prompt/no_data_views/mocks/index.ts rename to src/platform/packages/shared/shared-ux/prompt/no_data_views/mocks/index.ts diff --git a/packages/shared-ux/prompt/no_data_views/mocks/kibana.jsonc b/src/platform/packages/shared/shared-ux/prompt/no_data_views/mocks/kibana.jsonc similarity index 85% rename from packages/shared-ux/prompt/no_data_views/mocks/kibana.jsonc rename to src/platform/packages/shared/shared-ux/prompt/no_data_views/mocks/kibana.jsonc index 2fdec6e9814c8..226a0324a793f 100644 --- a/packages/shared-ux/prompt/no_data_views/mocks/kibana.jsonc +++ b/src/platform/packages/shared/shared-ux/prompt/no_data_views/mocks/kibana.jsonc @@ -5,5 +5,5 @@ "@elastic/appex-sharedux" ], "group": "platform", - "visibility": "private" -} \ No newline at end of file + "visibility": "shared" +} diff --git a/packages/shared-ux/prompt/no_data_views/mocks/package.json b/src/platform/packages/shared/shared-ux/prompt/no_data_views/mocks/package.json similarity index 100% rename from packages/shared-ux/prompt/no_data_views/mocks/package.json rename to src/platform/packages/shared/shared-ux/prompt/no_data_views/mocks/package.json diff --git a/packages/shared-ux/prompt/no_data_views/mocks/src/jest.ts b/src/platform/packages/shared/shared-ux/prompt/no_data_views/mocks/src/jest.ts similarity index 100% rename from packages/shared-ux/prompt/no_data_views/mocks/src/jest.ts rename to src/platform/packages/shared/shared-ux/prompt/no_data_views/mocks/src/jest.ts diff --git a/packages/shared-ux/prompt/no_data_views/mocks/src/storybook.ts b/src/platform/packages/shared/shared-ux/prompt/no_data_views/mocks/src/storybook.ts similarity index 100% rename from packages/shared-ux/prompt/no_data_views/mocks/src/storybook.ts rename to src/platform/packages/shared/shared-ux/prompt/no_data_views/mocks/src/storybook.ts diff --git a/packages/shared-ux/prompt/no_data_views/mocks/tsconfig.json b/src/platform/packages/shared/shared-ux/prompt/no_data_views/mocks/tsconfig.json similarity index 83% rename from packages/shared-ux/prompt/no_data_views/mocks/tsconfig.json rename to src/platform/packages/shared/shared-ux/prompt/no_data_views/mocks/tsconfig.json index 8445aacb692ba..36a0811ad3c8c 100644 --- a/packages/shared-ux/prompt/no_data_views/mocks/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/prompt/no_data_views/mocks/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../../tsconfig.base.json", + "extends": "../../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/prompt/no_data_views/types/README.md b/src/platform/packages/shared/shared-ux/prompt/no_data_views/types/README.md similarity index 100% rename from packages/shared-ux/prompt/no_data_views/types/README.md rename to src/platform/packages/shared/shared-ux/prompt/no_data_views/types/README.md diff --git a/packages/shared-ux/prompt/no_data_views/types/index.d.ts b/src/platform/packages/shared/shared-ux/prompt/no_data_views/types/index.d.ts similarity index 100% rename from packages/shared-ux/prompt/no_data_views/types/index.d.ts rename to src/platform/packages/shared/shared-ux/prompt/no_data_views/types/index.d.ts diff --git a/packages/shared-ux/prompt/no_data_views/types/kibana.jsonc b/src/platform/packages/shared/shared-ux/prompt/no_data_views/types/kibana.jsonc similarity index 100% rename from packages/shared-ux/prompt/no_data_views/types/kibana.jsonc rename to src/platform/packages/shared/shared-ux/prompt/no_data_views/types/kibana.jsonc diff --git a/packages/shared-ux/prompt/no_data_views/types/package.json b/src/platform/packages/shared/shared-ux/prompt/no_data_views/types/package.json similarity index 100% rename from packages/shared-ux/prompt/no_data_views/types/package.json rename to src/platform/packages/shared/shared-ux/prompt/no_data_views/types/package.json diff --git a/packages/shared-ux/prompt/no_data_views/types/tsconfig.json b/src/platform/packages/shared/shared-ux/prompt/no_data_views/types/tsconfig.json similarity index 77% rename from packages/shared-ux/prompt/no_data_views/types/tsconfig.json rename to src/platform/packages/shared/shared-ux/prompt/no_data_views/types/tsconfig.json index b82ab394b8afc..c62dfd95e1205 100644 --- a/packages/shared-ux/prompt/no_data_views/types/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/prompt/no_data_views/types/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../../tsconfig.base.json", + "extends": "../../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [] diff --git a/packages/shared-ux/prompt/not_found/README.mdx b/src/platform/packages/shared/shared-ux/prompt/not_found/README.mdx similarity index 100% rename from packages/shared-ux/prompt/not_found/README.mdx rename to src/platform/packages/shared/shared-ux/prompt/not_found/README.mdx diff --git a/packages/shared-ux/prompt/not_found/index.ts b/src/platform/packages/shared/shared-ux/prompt/not_found/index.ts similarity index 100% rename from packages/shared-ux/prompt/not_found/index.ts rename to src/platform/packages/shared/shared-ux/prompt/not_found/index.ts diff --git a/src/platform/packages/shared/shared-ux/prompt/not_found/jest.config.js b/src/platform/packages/shared/shared-ux/prompt/not_found/jest.config.js new file mode 100644 index 0000000000000..5448ec2ad25ab --- /dev/null +++ b/src/platform/packages/shared/shared-ux/prompt/not_found/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/shared-ux/prompt/not_found'], +}; diff --git a/packages/shared-ux/prompt/not_found/kibana.jsonc b/src/platform/packages/shared/shared-ux/prompt/not_found/kibana.jsonc similarity index 100% rename from packages/shared-ux/prompt/not_found/kibana.jsonc rename to src/platform/packages/shared/shared-ux/prompt/not_found/kibana.jsonc diff --git a/packages/shared-ux/prompt/not_found/package.json b/src/platform/packages/shared/shared-ux/prompt/not_found/package.json similarity index 100% rename from packages/shared-ux/prompt/not_found/package.json rename to src/platform/packages/shared/shared-ux/prompt/not_found/package.json diff --git a/packages/shared-ux/prompt/not_found/src/assets/404_astronaut_dark.png b/src/platform/packages/shared/shared-ux/prompt/not_found/src/assets/404_astronaut_dark.png similarity index 100% rename from packages/shared-ux/prompt/not_found/src/assets/404_astronaut_dark.png rename to src/platform/packages/shared/shared-ux/prompt/not_found/src/assets/404_astronaut_dark.png diff --git a/packages/shared-ux/prompt/not_found/src/assets/404_astronaut_light.png b/src/platform/packages/shared/shared-ux/prompt/not_found/src/assets/404_astronaut_light.png similarity index 100% rename from packages/shared-ux/prompt/not_found/src/assets/404_astronaut_light.png rename to src/platform/packages/shared/shared-ux/prompt/not_found/src/assets/404_astronaut_light.png diff --git a/packages/shared-ux/prompt/not_found/src/not_found_prompt.stories.tsx b/src/platform/packages/shared/shared-ux/prompt/not_found/src/not_found_prompt.stories.tsx similarity index 100% rename from packages/shared-ux/prompt/not_found/src/not_found_prompt.stories.tsx rename to src/platform/packages/shared/shared-ux/prompt/not_found/src/not_found_prompt.stories.tsx diff --git a/packages/shared-ux/prompt/not_found/src/not_found_prompt.test.tsx b/src/platform/packages/shared/shared-ux/prompt/not_found/src/not_found_prompt.test.tsx similarity index 100% rename from packages/shared-ux/prompt/not_found/src/not_found_prompt.test.tsx rename to src/platform/packages/shared/shared-ux/prompt/not_found/src/not_found_prompt.test.tsx diff --git a/packages/shared-ux/prompt/not_found/src/not_found_prompt.tsx b/src/platform/packages/shared/shared-ux/prompt/not_found/src/not_found_prompt.tsx similarity index 100% rename from packages/shared-ux/prompt/not_found/src/not_found_prompt.tsx rename to src/platform/packages/shared/shared-ux/prompt/not_found/src/not_found_prompt.tsx diff --git a/packages/shared-ux/prompt/not_found/tsconfig.json b/src/platform/packages/shared/shared-ux/prompt/not_found/tsconfig.json similarity index 81% rename from packages/shared-ux/prompt/not_found/tsconfig.json rename to src/platform/packages/shared/shared-ux/prompt/not_found/tsconfig.json index 6b098efdfa673..6f0d25a86d961 100644 --- a/packages/shared-ux/prompt/not_found/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/prompt/not_found/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": ["jest", "node", "react", "@kbn/ambient-ui-types"] diff --git a/packages/shared-ux/router/impl/BUILD.bazel b/src/platform/packages/shared/shared-ux/router/impl/BUILD.bazel similarity index 100% rename from packages/shared-ux/router/impl/BUILD.bazel rename to src/platform/packages/shared/shared-ux/router/impl/BUILD.bazel diff --git a/packages/shared-ux/router/impl/README.mdx b/src/platform/packages/shared/shared-ux/router/impl/README.mdx similarity index 100% rename from packages/shared-ux/router/impl/README.mdx rename to src/platform/packages/shared/shared-ux/router/impl/README.mdx diff --git a/packages/shared-ux/router/impl/__snapshots__/route.test.tsx.snap b/src/platform/packages/shared/shared-ux/router/impl/__snapshots__/route.test.tsx.snap similarity index 100% rename from packages/shared-ux/router/impl/__snapshots__/route.test.tsx.snap rename to src/platform/packages/shared/shared-ux/router/impl/__snapshots__/route.test.tsx.snap diff --git a/packages/shared-ux/router/impl/index.ts b/src/platform/packages/shared/shared-ux/router/impl/index.ts similarity index 100% rename from packages/shared-ux/router/impl/index.ts rename to src/platform/packages/shared/shared-ux/router/impl/index.ts diff --git a/packages/shared-ux/avatar/solution/jest.config.js b/src/platform/packages/shared/shared-ux/router/impl/jest.config.js similarity index 82% rename from packages/shared-ux/avatar/solution/jest.config.js rename to src/platform/packages/shared/shared-ux/router/impl/jest.config.js index e8f11ad738a74..fad5f9e8d0aaa 100644 --- a/packages/shared-ux/avatar/solution/jest.config.js +++ b/src/platform/packages/shared/shared-ux/router/impl/jest.config.js @@ -9,6 +9,6 @@ module.exports = { preset: '@kbn/test', - rootDir: '../../../..', - roots: ['/packages/shared-ux/avatar/solution'], + rootDir: '../../../../../../..', + roots: ['/src/platform/packages/shared/shared-ux/router/impl'], }; diff --git a/packages/shared-ux/router/impl/kibana.jsonc b/src/platform/packages/shared/shared-ux/router/impl/kibana.jsonc similarity index 100% rename from packages/shared-ux/router/impl/kibana.jsonc rename to src/platform/packages/shared/shared-ux/router/impl/kibana.jsonc diff --git a/packages/shared-ux/router/impl/package.json b/src/platform/packages/shared/shared-ux/router/impl/package.json similarity index 100% rename from packages/shared-ux/router/impl/package.json rename to src/platform/packages/shared/shared-ux/router/impl/package.json diff --git a/packages/shared-ux/router/impl/route.test.tsx b/src/platform/packages/shared/shared-ux/router/impl/route.test.tsx similarity index 100% rename from packages/shared-ux/router/impl/route.test.tsx rename to src/platform/packages/shared/shared-ux/router/impl/route.test.tsx diff --git a/packages/shared-ux/router/impl/route.tsx b/src/platform/packages/shared/shared-ux/router/impl/route.tsx similarity index 100% rename from packages/shared-ux/router/impl/route.tsx rename to src/platform/packages/shared/shared-ux/router/impl/route.tsx diff --git a/packages/shared-ux/router/impl/router.tsx b/src/platform/packages/shared/shared-ux/router/impl/router.tsx similarity index 100% rename from packages/shared-ux/router/impl/router.tsx rename to src/platform/packages/shared/shared-ux/router/impl/router.tsx diff --git a/packages/shared-ux/router/impl/routes.tsx b/src/platform/packages/shared/shared-ux/router/impl/routes.tsx similarity index 100% rename from packages/shared-ux/router/impl/routes.tsx rename to src/platform/packages/shared/shared-ux/router/impl/routes.tsx diff --git a/packages/shared-ux/router/impl/routes_context.ts b/src/platform/packages/shared/shared-ux/router/impl/routes_context.ts similarity index 100% rename from packages/shared-ux/router/impl/routes_context.ts rename to src/platform/packages/shared/shared-ux/router/impl/routes_context.ts diff --git a/packages/shared-ux/router/impl/services.ts b/src/platform/packages/shared/shared-ux/router/impl/services.ts similarity index 100% rename from packages/shared-ux/router/impl/services.ts rename to src/platform/packages/shared/shared-ux/router/impl/services.ts diff --git a/packages/shared-ux/router/impl/tsconfig.json b/src/platform/packages/shared/shared-ux/router/impl/tsconfig.json similarity index 81% rename from packages/shared-ux/router/impl/tsconfig.json rename to src/platform/packages/shared/shared-ux/router/impl/tsconfig.json index 13e290e2dea0b..c556285229b32 100644 --- a/packages/shared-ux/router/impl/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/router/impl/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/router/impl/types.ts b/src/platform/packages/shared/shared-ux/router/impl/types.ts similarity index 100% rename from packages/shared-ux/router/impl/types.ts rename to src/platform/packages/shared/shared-ux/router/impl/types.ts diff --git a/packages/shared-ux/router/impl/use_execution_context.ts b/src/platform/packages/shared/shared-ux/router/impl/use_execution_context.ts similarity index 100% rename from packages/shared-ux/router/impl/use_execution_context.ts rename to src/platform/packages/shared/shared-ux/router/impl/use_execution_context.ts diff --git a/packages/shared-ux/router/mocks/README.md b/src/platform/packages/shared/shared-ux/router/mocks/README.md similarity index 100% rename from packages/shared-ux/router/mocks/README.md rename to src/platform/packages/shared/shared-ux/router/mocks/README.md diff --git a/packages/shared-ux/router/mocks/index.ts b/src/platform/packages/shared/shared-ux/router/mocks/index.ts similarity index 100% rename from packages/shared-ux/router/mocks/index.ts rename to src/platform/packages/shared/shared-ux/router/mocks/index.ts diff --git a/src/platform/packages/shared/shared-ux/router/mocks/jest.config.js b/src/platform/packages/shared/shared-ux/router/mocks/jest.config.js new file mode 100644 index 0000000000000..ffc2ca2fbaa15 --- /dev/null +++ b/src/platform/packages/shared/shared-ux/router/mocks/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/shared-ux/router/mocks'], +}; diff --git a/packages/shared-ux/router/mocks/kibana.jsonc b/src/platform/packages/shared/shared-ux/router/mocks/kibana.jsonc similarity index 100% rename from packages/shared-ux/router/mocks/kibana.jsonc rename to src/platform/packages/shared/shared-ux/router/mocks/kibana.jsonc diff --git a/packages/shared-ux/router/mocks/package.json b/src/platform/packages/shared/shared-ux/router/mocks/package.json similarity index 100% rename from packages/shared-ux/router/mocks/package.json rename to src/platform/packages/shared/shared-ux/router/mocks/package.json diff --git a/packages/shared-ux/router/mocks/src/index.ts b/src/platform/packages/shared/shared-ux/router/mocks/src/index.ts similarity index 100% rename from packages/shared-ux/router/mocks/src/index.ts rename to src/platform/packages/shared/shared-ux/router/mocks/src/index.ts diff --git a/packages/shared-ux/router/mocks/src/storybook.ts b/src/platform/packages/shared/shared-ux/router/mocks/src/storybook.ts similarity index 100% rename from packages/shared-ux/router/mocks/src/storybook.ts rename to src/platform/packages/shared/shared-ux/router/mocks/src/storybook.ts diff --git a/packages/shared-ux/router/mocks/tsconfig.json b/src/platform/packages/shared/shared-ux/router/mocks/tsconfig.json similarity index 79% rename from packages/shared-ux/router/mocks/tsconfig.json rename to src/platform/packages/shared/shared-ux/router/mocks/tsconfig.json index 693d1ee9ce31e..5a89e075e3210 100644 --- a/packages/shared-ux/router/mocks/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/router/mocks/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/router/types/README.md b/src/platform/packages/shared/shared-ux/router/types/README.md similarity index 100% rename from packages/shared-ux/router/types/README.md rename to src/platform/packages/shared/shared-ux/router/types/README.md diff --git a/packages/shared-ux/router/types/index.d.ts b/src/platform/packages/shared/shared-ux/router/types/index.d.ts similarity index 100% rename from packages/shared-ux/router/types/index.d.ts rename to src/platform/packages/shared/shared-ux/router/types/index.d.ts diff --git a/packages/shared-ux/router/types/kibana.jsonc b/src/platform/packages/shared/shared-ux/router/types/kibana.jsonc similarity index 100% rename from packages/shared-ux/router/types/kibana.jsonc rename to src/platform/packages/shared/shared-ux/router/types/kibana.jsonc diff --git a/packages/shared-ux/router/types/package.json b/src/platform/packages/shared/shared-ux/router/types/package.json similarity index 100% rename from packages/shared-ux/router/types/package.json rename to src/platform/packages/shared/shared-ux/router/types/package.json diff --git a/packages/shared-ux/router/types/tsconfig.json b/src/platform/packages/shared/shared-ux/router/types/tsconfig.json similarity index 72% rename from packages/shared-ux/router/types/tsconfig.json rename to src/platform/packages/shared/shared-ux/router/types/tsconfig.json index cf858a91253d4..77fa209b4ba88 100644 --- a/packages/shared-ux/router/types/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/router/types/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [] diff --git a/packages/shared-ux/storybook/mock/README.mdx b/src/platform/packages/shared/shared-ux/storybook/mock/README.mdx similarity index 100% rename from packages/shared-ux/storybook/mock/README.mdx rename to src/platform/packages/shared/shared-ux/storybook/mock/README.mdx diff --git a/packages/shared-ux/storybook/mock/index.ts b/src/platform/packages/shared/shared-ux/storybook/mock/index.ts similarity index 100% rename from packages/shared-ux/storybook/mock/index.ts rename to src/platform/packages/shared/shared-ux/storybook/mock/index.ts diff --git a/packages/shared-ux/storybook/mock/kibana.jsonc b/src/platform/packages/shared/shared-ux/storybook/mock/kibana.jsonc similarity index 100% rename from packages/shared-ux/storybook/mock/kibana.jsonc rename to src/platform/packages/shared/shared-ux/storybook/mock/kibana.jsonc diff --git a/packages/shared-ux/storybook/mock/package.json b/src/platform/packages/shared/shared-ux/storybook/mock/package.json similarity index 100% rename from packages/shared-ux/storybook/mock/package.json rename to src/platform/packages/shared/shared-ux/storybook/mock/package.json diff --git a/packages/shared-ux/storybook/mock/src/mocks.ts b/src/platform/packages/shared/shared-ux/storybook/mock/src/mocks.ts similarity index 100% rename from packages/shared-ux/storybook/mock/src/mocks.ts rename to src/platform/packages/shared/shared-ux/storybook/mock/src/mocks.ts diff --git a/packages/shared-ux/storybook/mock/tsconfig.json b/src/platform/packages/shared/shared-ux/storybook/mock/tsconfig.json similarity index 77% rename from packages/shared-ux/storybook/mock/tsconfig.json rename to src/platform/packages/shared/shared-ux/storybook/mock/tsconfig.json index 0f16c2b9311d8..985b163edb9b5 100644 --- a/packages/shared-ux/storybook/mock/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/storybook/mock/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/packages/shared-ux/table_persist/README.md b/src/platform/packages/shared/shared-ux/table_persist/README.md similarity index 100% rename from packages/shared-ux/table_persist/README.md rename to src/platform/packages/shared/shared-ux/table_persist/README.md diff --git a/packages/shared-ux/table_persist/index.ts b/src/platform/packages/shared/shared-ux/table_persist/index.ts similarity index 100% rename from packages/shared-ux/table_persist/index.ts rename to src/platform/packages/shared/shared-ux/table_persist/index.ts diff --git a/packages/shared-ux/card/no_data/impl/jest.config.js b/src/platform/packages/shared/shared-ux/table_persist/jest.config.js similarity index 82% rename from packages/shared-ux/card/no_data/impl/jest.config.js rename to src/platform/packages/shared/shared-ux/table_persist/jest.config.js index 29400c16c5cc2..86b4caf2e209c 100644 --- a/packages/shared-ux/card/no_data/impl/jest.config.js +++ b/src/platform/packages/shared/shared-ux/table_persist/jest.config.js @@ -9,6 +9,6 @@ module.exports = { preset: '@kbn/test', - rootDir: '../../../../..', - roots: ['/packages/shared-ux/card/no_data'], + rootDir: '../../../../../..', + roots: ['/src/platform/packages/shared/shared-ux/table_persist'], }; diff --git a/packages/shared-ux/table_persist/kibana.jsonc b/src/platform/packages/shared/shared-ux/table_persist/kibana.jsonc similarity index 83% rename from packages/shared-ux/table_persist/kibana.jsonc rename to src/platform/packages/shared/shared-ux/table_persist/kibana.jsonc index 1885d24038200..9e20cfeb183f5 100644 --- a/packages/shared-ux/table_persist/kibana.jsonc +++ b/src/platform/packages/shared/shared-ux/table_persist/kibana.jsonc @@ -5,5 +5,5 @@ "@elastic/appex-sharedux" ], "group": "platform", - "visibility": "private" -} \ No newline at end of file + "visibility": "shared" +} diff --git a/packages/shared-ux/table_persist/package.json b/src/platform/packages/shared/shared-ux/table_persist/package.json similarity index 100% rename from packages/shared-ux/table_persist/package.json rename to src/platform/packages/shared/shared-ux/table_persist/package.json diff --git a/packages/shared-ux/table_persist/src/constants.ts b/src/platform/packages/shared/shared-ux/table_persist/src/constants.ts similarity index 100% rename from packages/shared-ux/table_persist/src/constants.ts rename to src/platform/packages/shared/shared-ux/table_persist/src/constants.ts diff --git a/packages/shared-ux/table_persist/src/index.ts b/src/platform/packages/shared/shared-ux/table_persist/src/index.ts similarity index 100% rename from packages/shared-ux/table_persist/src/index.ts rename to src/platform/packages/shared/shared-ux/table_persist/src/index.ts diff --git a/packages/shared-ux/table_persist/src/storage.ts b/src/platform/packages/shared/shared-ux/table_persist/src/storage.ts similarity index 100% rename from packages/shared-ux/table_persist/src/storage.ts rename to src/platform/packages/shared/shared-ux/table_persist/src/storage.ts diff --git a/packages/shared-ux/table_persist/src/table_persist_hoc.test.tsx b/src/platform/packages/shared/shared-ux/table_persist/src/table_persist_hoc.test.tsx similarity index 100% rename from packages/shared-ux/table_persist/src/table_persist_hoc.test.tsx rename to src/platform/packages/shared/shared-ux/table_persist/src/table_persist_hoc.test.tsx diff --git a/packages/shared-ux/table_persist/src/table_persist_hoc.tsx b/src/platform/packages/shared/shared-ux/table_persist/src/table_persist_hoc.tsx similarity index 100% rename from packages/shared-ux/table_persist/src/table_persist_hoc.tsx rename to src/platform/packages/shared/shared-ux/table_persist/src/table_persist_hoc.tsx diff --git a/packages/shared-ux/table_persist/src/types.ts b/src/platform/packages/shared/shared-ux/table_persist/src/types.ts similarity index 100% rename from packages/shared-ux/table_persist/src/types.ts rename to src/platform/packages/shared/shared-ux/table_persist/src/types.ts diff --git a/packages/shared-ux/table_persist/src/use_table_persist.test.ts b/src/platform/packages/shared/shared-ux/table_persist/src/use_table_persist.test.ts similarity index 100% rename from packages/shared-ux/table_persist/src/use_table_persist.test.ts rename to src/platform/packages/shared/shared-ux/table_persist/src/use_table_persist.test.ts diff --git a/packages/shared-ux/table_persist/src/use_table_persist.ts b/src/platform/packages/shared/shared-ux/table_persist/src/use_table_persist.ts similarity index 100% rename from packages/shared-ux/table_persist/src/use_table_persist.ts rename to src/platform/packages/shared/shared-ux/table_persist/src/use_table_persist.ts diff --git a/packages/shared-ux/table_persist/src/validate_persist_data.ts b/src/platform/packages/shared/shared-ux/table_persist/src/validate_persist_data.ts similarity index 100% rename from packages/shared-ux/table_persist/src/validate_persist_data.ts rename to src/platform/packages/shared/shared-ux/table_persist/src/validate_persist_data.ts diff --git a/packages/shared-ux/table_persist/src/validate_persist_date.test.ts b/src/platform/packages/shared/shared-ux/table_persist/src/validate_persist_date.test.ts similarity index 100% rename from packages/shared-ux/table_persist/src/validate_persist_date.test.ts rename to src/platform/packages/shared/shared-ux/table_persist/src/validate_persist_date.test.ts diff --git a/packages/shared-ux/table_persist/tsconfig.json b/src/platform/packages/shared/shared-ux/table_persist/tsconfig.json similarity index 81% rename from packages/shared-ux/table_persist/tsconfig.json rename to src/platform/packages/shared/shared-ux/table_persist/tsconfig.json index 60e639fea37e0..01174e136eb6a 100644 --- a/packages/shared-ux/table_persist/tsconfig.json +++ b/src/platform/packages/shared/shared-ux/table_persist/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../tsconfig.base.json", + "extends": "../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/src/platform/plugins/private/maps_ems/public/lazy_load_bundle/create_ems_client.ts b/src/platform/plugins/private/maps_ems/public/lazy_load_bundle/create_ems_client.ts index ce279388c84f9..dd8867243bd0a 100644 --- a/src/platform/plugins/private/maps_ems/public/lazy_load_bundle/create_ems_client.ts +++ b/src/platform/plugins/private/maps_ems/public/lazy_load_bundle/create_ems_client.ts @@ -43,7 +43,7 @@ export function createEMSClient( tileApiUrl: emsSettings!.getEMSTileApiUrl(), fileApiUrl: emsSettings!.getEMSFileApiUrl(), landingPageUrl, - fetchFunction(url: string) { + fetchFunction(url: RequestInfo) { return fetch(url, { headers }); }, proxyPath: '', diff --git a/src/platform/plugins/shared/console/server/routes/api/console/autocomplete_entities/index.ts b/src/platform/plugins/shared/console/server/routes/api/console/autocomplete_entities/index.ts index 0dacd8e93cc9b..50eb9e42cda44 100644 --- a/src/platform/plugins/shared/console/server/routes/api/console/autocomplete_entities/index.ts +++ b/src/platform/plugins/shared/console/server/routes/api/console/autocomplete_entities/index.ts @@ -90,6 +90,12 @@ export const registerAutocompleteEntitiesRoute = (deps: RouteDependencies) => { options: { tags: ['access:console'], }, + security: { + authz: { + enabled: false, + reason: 'Relies on es client for authorization', + }, + }, validate: autoCompleteEntitiesValidationConfig, }, async (context, request, response) => { diff --git a/src/platform/plugins/shared/console/server/routes/api/console/es_config/index.ts b/src/platform/plugins/shared/console/server/routes/api/console/es_config/index.ts index a1d1a6cdb7950..817d8d7cc7e3a 100644 --- a/src/platform/plugins/shared/console/server/routes/api/console/es_config/index.ts +++ b/src/platform/plugins/shared/console/server/routes/api/console/es_config/index.ts @@ -11,19 +11,31 @@ import { EsConfigApiResponse } from '../../../../../common/types/api_responses'; import { RouteDependencies } from '../../..'; export const registerEsConfigRoute = ({ router, services }: RouteDependencies): void => { - router.get({ path: '/api/console/es_config', validate: false }, async (ctx, req, res) => { - const cloudUrl = services.esLegacyConfigService.getCloudUrl(); - if (cloudUrl) { - const body: EsConfigApiResponse = { host: cloudUrl }; + router.get( + { + path: '/api/console/es_config', + security: { + authz: { + enabled: false, + reason: 'Low effort request for config content', + }, + }, + validate: false, + }, + async (ctx, req, res) => { + const cloudUrl = services.esLegacyConfigService.getCloudUrl(); + if (cloudUrl) { + const body: EsConfigApiResponse = { host: cloudUrl }; - return res.ok({ body }); - } - const { - hosts: [host], - } = await services.esLegacyConfigService.readConfig(); + return res.ok({ body }); + } + const { + hosts: [host], + } = await services.esLegacyConfigService.readConfig(); - const body: EsConfigApiResponse = { host }; + const body: EsConfigApiResponse = { host }; - return res.ok({ body }); - }); + return res.ok({ body }); + } + ); }; diff --git a/src/platform/plugins/shared/console/server/routes/api/console/proxy/index.ts b/src/platform/plugins/shared/console/server/routes/api/console/proxy/index.ts index d30aa32060b73..5b0e3c6103762 100644 --- a/src/platform/plugins/shared/console/server/routes/api/console/proxy/index.ts +++ b/src/platform/plugins/shared/console/server/routes/api/console/proxy/index.ts @@ -17,12 +17,16 @@ export const registerProxyRoute = (deps: RouteDependencies) => { { path: '/api/console/proxy', options: { - tags: ['access:console'], body: { output: 'stream', parse: false, }, }, + security: { + authz: { + requiredPrivileges: ['console'], + }, + }, validate: routeValidationConfig, }, createHandler(deps) diff --git a/src/platform/plugins/shared/console/server/routes/api/console/spec_definitions/index.ts b/src/platform/plugins/shared/console/server/routes/api/console/spec_definitions/index.ts index 2b2e003e7eb39..e4f500fb14e7b 100644 --- a/src/platform/plugins/shared/console/server/routes/api/console/spec_definitions/index.ts +++ b/src/platform/plugins/shared/console/server/routes/api/console/spec_definitions/index.ts @@ -32,5 +32,17 @@ export const registerSpecDefinitionsRoute = ({ router, services }: RouteDependen }); }; - router.get({ path: '/api/console/api_server', validate: false }, handler); + router.get( + { + path: '/api/console/api_server', + security: { + authz: { + enabled: false, + reason: 'Low effort request for config info', + }, + }, + validate: false, + }, + handler + ); }; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_actions/filters_notification_popover.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_actions/filters_notification_popover.tsx index 7663b22a73c73..b3eb88acb8d3d 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_actions/filters_notification_popover.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_actions/filters_notification_popover.tsx @@ -19,7 +19,6 @@ import { EuiFormRow, EuiPopover, EuiPopoverFooter, - EuiPopoverTitle, } from '@elastic/eui'; import { css } from '@emotion/react'; @@ -95,7 +94,6 @@ export function FiltersNotificationPopover({ api }: { api: FiltersNotificationAc }} anchorPosition="upCenter" > - {displayName} { test('includes custom preference', () => { - const config = getConfigStub({ + const getConfig = getConfigStub({ [UI_SETTINGS.COURIER_SET_REQUEST_PREFERENCE]: 'custom', [UI_SETTINGS.COURIER_CUSTOM_REQUEST_PREFERENCE]: 'aaa', }); - const searchParams = getSearchParams(config); + const searchParams = getSearchParamsFromRequest({ index: 'abc', body: {} }, { getConfig }); expect(searchParams.preference).toBe('aaa'); }); @@ -94,4 +94,39 @@ describe('getSearchParams', () => { ); expect(searchParams).not.toHaveProperty('expand_wildcards', 'all'); }); + + describe('getEsPreference', () => { + const mockConfigGet = jest.fn(); + + beforeEach(() => { + mockConfigGet.mockClear(); + }); + + test('returns the session ID if set to sessionId', () => { + mockConfigGet.mockImplementation((key: string) => { + if (key === UI_SETTINGS.COURIER_SET_REQUEST_PREFERENCE) return 'sessionId'; + if (key === UI_SETTINGS.COURIER_CUSTOM_REQUEST_PREFERENCE) return 'foobar'; + }); + const preference = getEsPreference(mockConfigGet, 'my_session_id'); + expect(preference).toBe('my_session_id'); + }); + + test('returns the custom preference if set to custom', () => { + mockConfigGet.mockImplementation((key: string) => { + if (key === UI_SETTINGS.COURIER_SET_REQUEST_PREFERENCE) return 'custom'; + if (key === UI_SETTINGS.COURIER_CUSTOM_REQUEST_PREFERENCE) return 'foobar'; + }); + const preference = getEsPreference(mockConfigGet); + expect(preference).toBe('foobar'); + }); + + test('returns undefined if set to none', () => { + mockConfigGet.mockImplementation((key: string) => { + if (key === UI_SETTINGS.COURIER_SET_REQUEST_PREFERENCE) return 'none'; + if (key === UI_SETTINGS.COURIER_CUSTOM_REQUEST_PREFERENCE) return 'foobar'; + }); + const preference = getEsPreference(mockConfigGet); + expect(preference).toBe(undefined); + }); + }); }); diff --git a/src/plugins/data/common/search/search_source/fetch/get_search_params.ts b/src/plugins/data/common/search/search_source/fetch/get_search_params.ts index 221e670dae6dc..f1784770fe3ba 100644 --- a/src/plugins/data/common/search/search_source/fetch/get_search_params.ts +++ b/src/plugins/data/common/search/search_source/fetch/get_search_params.ts @@ -12,20 +12,16 @@ import { UI_SETTINGS } from '../../../constants'; import { GetConfigFn } from '../../../types'; import type { SearchRequest } from './types'; -const sessionId = Date.now(); +const defaultSessionId = `${Date.now()}`; -export function getSearchParams(getConfig: GetConfigFn) { - return { - preference: getPreference(getConfig), - }; -} - -export function getPreference(getConfig: GetConfigFn) { - const setRequestPreference = getConfig(UI_SETTINGS.COURIER_SET_REQUEST_PREFERENCE); - if (setRequestPreference === 'sessionId') return sessionId; - return setRequestPreference === 'custom' - ? getConfig(UI_SETTINGS.COURIER_CUSTOM_REQUEST_PREFERENCE) - : undefined; +export function getEsPreference( + getConfigFn: GetConfigFn, + sessionId = defaultSessionId +): SearchRequest['preference'] { + const setPreference = getConfigFn(UI_SETTINGS.COURIER_SET_REQUEST_PREFERENCE); + if (setPreference === 'sessionId') return sessionId; + const customPreference = getConfigFn(UI_SETTINGS.COURIER_CUSTOM_REQUEST_PREFERENCE); + return setPreference === 'custom' ? customPreference : undefined; } /** @public */ @@ -36,7 +32,7 @@ export function getSearchParamsFromRequest( dependencies: { getConfig: GetConfigFn } ): ISearchRequestParams { const { getConfig } = dependencies; - const searchParams = getSearchParams(getConfig); + const searchParams = { preference: getEsPreference(getConfig) }; // eslint-disable-next-line @typescript-eslint/naming-convention const { track_total_hits, ...body } = searchRequest.body; const dataView = typeof searchRequest.index !== 'string' ? searchRequest.index : undefined; diff --git a/src/plugins/data/common/search/search_source/fetch/index.ts b/src/plugins/data/common/search/search_source/fetch/index.ts index f097189fe4bae..3f621c66eeaa3 100644 --- a/src/plugins/data/common/search/search_source/fetch/index.ts +++ b/src/plugins/data/common/search/search_source/fetch/index.ts @@ -7,6 +7,6 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -export { getSearchParams, getSearchParamsFromRequest, getPreference } from './get_search_params'; +export { getSearchParamsFromRequest, getEsPreference } from './get_search_params'; export { RequestFailure } from './request_error'; export * from './types'; diff --git a/src/plugins/data/public/search/es_search/get_es_preference.test.ts b/src/plugins/data/public/search/es_search/get_es_preference.test.ts deleted file mode 100644 index e9edbdac475d8..0000000000000 --- a/src/plugins/data/public/search/es_search/get_es_preference.test.ts +++ /dev/null @@ -1,49 +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", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { MockedKeys } from '@kbn/utility-types-jest'; -import { getEsPreference } from './get_es_preference'; -import { CoreStart } from '@kbn/core/public'; -import { coreMock } from '@kbn/core/public/mocks'; -import { UI_SETTINGS } from '../../../common'; - -describe('Get ES preference', () => { - let mockCoreStart: MockedKeys; - - beforeEach(() => { - mockCoreStart = coreMock.createStart(); - }); - - test('returns the session ID if set to sessionId', () => { - mockCoreStart.uiSettings.get.mockImplementation((key: string) => { - if (key === UI_SETTINGS.COURIER_SET_REQUEST_PREFERENCE) return 'sessionId'; - if (key === UI_SETTINGS.COURIER_CUSTOM_REQUEST_PREFERENCE) return 'foobar'; - }); - const preference = getEsPreference(mockCoreStart.uiSettings, 'my_session_id'); - expect(preference).toBe('my_session_id'); - }); - - test('returns the custom preference if set to custom', () => { - mockCoreStart.uiSettings.get.mockImplementation((key: string) => { - if (key === UI_SETTINGS.COURIER_SET_REQUEST_PREFERENCE) return 'custom'; - if (key === UI_SETTINGS.COURIER_CUSTOM_REQUEST_PREFERENCE) return 'foobar'; - }); - const preference = getEsPreference(mockCoreStart.uiSettings); - expect(preference).toBe('foobar'); - }); - - test('returns undefined if set to none', () => { - mockCoreStart.uiSettings.get.mockImplementation((key: string) => { - if (key === UI_SETTINGS.COURIER_SET_REQUEST_PREFERENCE) return 'none'; - if (key === UI_SETTINGS.COURIER_CUSTOM_REQUEST_PREFERENCE) return 'foobar'; - }); - const preference = getEsPreference(mockCoreStart.uiSettings); - expect(preference).toBe(undefined); - }); -}); diff --git a/src/plugins/data/public/search/es_search/get_es_preference.ts b/src/plugins/data/public/search/es_search/get_es_preference.ts deleted file mode 100644 index e07aaf0ce99a8..0000000000000 --- a/src/plugins/data/public/search/es_search/get_es_preference.ts +++ /dev/null @@ -1,20 +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", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { IUiSettingsClient } from '@kbn/core/public'; -import { UI_SETTINGS } from '../../../common'; - -const defaultSessionId = `${Date.now()}`; - -export function getEsPreference(uiSettings: IUiSettingsClient, sessionId = defaultSessionId) { - const setPreference = uiSettings.get(UI_SETTINGS.COURIER_SET_REQUEST_PREFERENCE); - if (setPreference === 'sessionId') return `${sessionId}`; - const customPreference = uiSettings.get(UI_SETTINGS.COURIER_CUSTOM_REQUEST_PREFERENCE); - return setPreference === 'custom' ? customPreference : undefined; -} diff --git a/src/plugins/data/public/search/es_search/index.ts b/src/plugins/data/public/search/es_search/index.ts deleted file mode 100644 index 8084588003204..0000000000000 --- a/src/plugins/data/public/search/es_search/index.ts +++ /dev/null @@ -1,10 +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", 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 { getEsPreference } from './get_es_preference'; diff --git a/src/plugins/data/public/search/index.ts b/src/plugins/data/public/search/index.ts index a2f5c6fe1a3b5..a678d2d4f7521 100644 --- a/src/plugins/data/public/search/index.ts +++ b/src/plugins/data/public/search/index.ts @@ -48,7 +48,6 @@ export { SEARCH_SESSIONS_MANAGEMENT_ID, waitUntilNextSessionCompletes$, } from './session'; -export { getEsPreference } from './es_search'; export type { SearchInterceptorDeps } from './search_interceptor'; export { SearchInterceptor } from './search_interceptor'; diff --git a/tsconfig.base.json b/tsconfig.base.json index ed28741173ce0..d13e38f233218 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1606,6 +1606,8 @@ "@kbn/search-response-warnings/*": ["src/platform/packages/shared/kbn-search-response-warnings/*"], "@kbn/search-shared-ui": ["x-pack/solutions/search/packages/search/shared_ui"], "@kbn/search-shared-ui/*": ["x-pack/solutions/search/packages/search/shared_ui/*"], + "@kbn/search-synonyms": ["x-pack/solutions/search/plugins/search_synonyms"], + "@kbn/search-synonyms/*": ["x-pack/solutions/search/plugins/search_synonyms/*"], "@kbn/search-types": ["src/platform/packages/shared/kbn-search-types"], "@kbn/search-types/*": ["src/platform/packages/shared/kbn-search-types/*"], "@kbn/searchprofiler-plugin": ["x-pack/platform/plugins/shared/searchprofiler"], @@ -1736,106 +1738,106 @@ "@kbn/share-plugin/*": ["src/platform/plugins/shared/share/*"], "@kbn/shared-svg": ["src/platform/packages/shared/kbn-shared-svg"], "@kbn/shared-svg/*": ["src/platform/packages/shared/kbn-shared-svg/*"], - "@kbn/shared-ux-avatar-solution": ["packages/shared-ux/avatar/solution"], - "@kbn/shared-ux-avatar-solution/*": ["packages/shared-ux/avatar/solution/*"], - "@kbn/shared-ux-button-exit-full-screen": ["packages/shared-ux/button/exit_full_screen"], - "@kbn/shared-ux-button-exit-full-screen/*": ["packages/shared-ux/button/exit_full_screen/*"], - "@kbn/shared-ux-button-toolbar": ["packages/shared-ux/button_toolbar"], - "@kbn/shared-ux-button-toolbar/*": ["packages/shared-ux/button_toolbar/*"], - "@kbn/shared-ux-card-no-data": ["packages/shared-ux/card/no_data/impl"], - "@kbn/shared-ux-card-no-data/*": ["packages/shared-ux/card/no_data/impl/*"], - "@kbn/shared-ux-card-no-data-mocks": ["packages/shared-ux/card/no_data/mocks"], - "@kbn/shared-ux-card-no-data-mocks/*": ["packages/shared-ux/card/no_data/mocks/*"], - "@kbn/shared-ux-card-no-data-types": ["packages/shared-ux/card/no_data/types"], - "@kbn/shared-ux-card-no-data-types/*": ["packages/shared-ux/card/no_data/types/*"], - "@kbn/shared-ux-chrome-navigation": ["packages/shared-ux/chrome/navigation"], - "@kbn/shared-ux-chrome-navigation/*": ["packages/shared-ux/chrome/navigation/*"], - "@kbn/shared-ux-error-boundary": ["packages/shared-ux/error_boundary"], - "@kbn/shared-ux-error-boundary/*": ["packages/shared-ux/error_boundary/*"], - "@kbn/shared-ux-file-context": ["packages/shared-ux/file/context"], - "@kbn/shared-ux-file-context/*": ["packages/shared-ux/file/context/*"], - "@kbn/shared-ux-file-image": ["packages/shared-ux/file/image/impl"], - "@kbn/shared-ux-file-image/*": ["packages/shared-ux/file/image/impl/*"], - "@kbn/shared-ux-file-image-mocks": ["packages/shared-ux/file/image/mocks"], - "@kbn/shared-ux-file-image-mocks/*": ["packages/shared-ux/file/image/mocks/*"], - "@kbn/shared-ux-file-mocks": ["packages/shared-ux/file/mocks"], - "@kbn/shared-ux-file-mocks/*": ["packages/shared-ux/file/mocks/*"], - "@kbn/shared-ux-file-picker": ["packages/shared-ux/file/file_picker/impl"], - "@kbn/shared-ux-file-picker/*": ["packages/shared-ux/file/file_picker/impl/*"], - "@kbn/shared-ux-file-types": ["packages/shared-ux/file/types"], - "@kbn/shared-ux-file-types/*": ["packages/shared-ux/file/types/*"], - "@kbn/shared-ux-file-upload": ["packages/shared-ux/file/file_upload/impl"], - "@kbn/shared-ux-file-upload/*": ["packages/shared-ux/file/file_upload/impl/*"], - "@kbn/shared-ux-file-util": ["packages/shared-ux/file/util"], - "@kbn/shared-ux-file-util/*": ["packages/shared-ux/file/util/*"], - "@kbn/shared-ux-link-redirect-app": ["packages/shared-ux/link/redirect_app/impl"], - "@kbn/shared-ux-link-redirect-app/*": ["packages/shared-ux/link/redirect_app/impl/*"], - "@kbn/shared-ux-link-redirect-app-mocks": ["packages/shared-ux/link/redirect_app/mocks"], - "@kbn/shared-ux-link-redirect-app-mocks/*": ["packages/shared-ux/link/redirect_app/mocks/*"], - "@kbn/shared-ux-link-redirect-app-types": ["packages/shared-ux/link/redirect_app/types"], - "@kbn/shared-ux-link-redirect-app-types/*": ["packages/shared-ux/link/redirect_app/types/*"], - "@kbn/shared-ux-markdown": ["packages/shared-ux/markdown/impl"], - "@kbn/shared-ux-markdown/*": ["packages/shared-ux/markdown/impl/*"], - "@kbn/shared-ux-markdown-mocks": ["packages/shared-ux/markdown/mocks"], - "@kbn/shared-ux-markdown-mocks/*": ["packages/shared-ux/markdown/mocks/*"], - "@kbn/shared-ux-markdown-types": ["packages/shared-ux/markdown/types"], - "@kbn/shared-ux-markdown-types/*": ["packages/shared-ux/markdown/types/*"], - "@kbn/shared-ux-page-analytics-no-data": ["packages/shared-ux/page/analytics_no_data/impl"], - "@kbn/shared-ux-page-analytics-no-data/*": ["packages/shared-ux/page/analytics_no_data/impl/*"], - "@kbn/shared-ux-page-analytics-no-data-mocks": ["packages/shared-ux/page/analytics_no_data/mocks"], - "@kbn/shared-ux-page-analytics-no-data-mocks/*": ["packages/shared-ux/page/analytics_no_data/mocks/*"], - "@kbn/shared-ux-page-analytics-no-data-types": ["packages/shared-ux/page/analytics_no_data/types"], - "@kbn/shared-ux-page-analytics-no-data-types/*": ["packages/shared-ux/page/analytics_no_data/types/*"], - "@kbn/shared-ux-page-kibana-no-data": ["packages/shared-ux/page/kibana_no_data/impl"], - "@kbn/shared-ux-page-kibana-no-data/*": ["packages/shared-ux/page/kibana_no_data/impl/*"], - "@kbn/shared-ux-page-kibana-no-data-mocks": ["packages/shared-ux/page/kibana_no_data/mocks"], - "@kbn/shared-ux-page-kibana-no-data-mocks/*": ["packages/shared-ux/page/kibana_no_data/mocks/*"], - "@kbn/shared-ux-page-kibana-no-data-types": ["packages/shared-ux/page/kibana_no_data/types"], - "@kbn/shared-ux-page-kibana-no-data-types/*": ["packages/shared-ux/page/kibana_no_data/types/*"], - "@kbn/shared-ux-page-kibana-template": ["packages/shared-ux/page/kibana_template/impl"], - "@kbn/shared-ux-page-kibana-template/*": ["packages/shared-ux/page/kibana_template/impl/*"], - "@kbn/shared-ux-page-kibana-template-mocks": ["packages/shared-ux/page/kibana_template/mocks"], - "@kbn/shared-ux-page-kibana-template-mocks/*": ["packages/shared-ux/page/kibana_template/mocks/*"], - "@kbn/shared-ux-page-kibana-template-types": ["packages/shared-ux/page/kibana_template/types"], - "@kbn/shared-ux-page-kibana-template-types/*": ["packages/shared-ux/page/kibana_template/types/*"], - "@kbn/shared-ux-page-no-data": ["packages/shared-ux/page/no_data/impl"], - "@kbn/shared-ux-page-no-data/*": ["packages/shared-ux/page/no_data/impl/*"], - "@kbn/shared-ux-page-no-data-config": ["packages/shared-ux/page/no_data_config/impl"], - "@kbn/shared-ux-page-no-data-config/*": ["packages/shared-ux/page/no_data_config/impl/*"], - "@kbn/shared-ux-page-no-data-config-mocks": ["packages/shared-ux/page/no_data_config/mocks"], - "@kbn/shared-ux-page-no-data-config-mocks/*": ["packages/shared-ux/page/no_data_config/mocks/*"], - "@kbn/shared-ux-page-no-data-config-types": ["packages/shared-ux/page/no_data_config/types"], - "@kbn/shared-ux-page-no-data-config-types/*": ["packages/shared-ux/page/no_data_config/types/*"], - "@kbn/shared-ux-page-no-data-mocks": ["packages/shared-ux/page/no_data/mocks"], - "@kbn/shared-ux-page-no-data-mocks/*": ["packages/shared-ux/page/no_data/mocks/*"], - "@kbn/shared-ux-page-no-data-types": ["packages/shared-ux/page/no_data/types"], - "@kbn/shared-ux-page-no-data-types/*": ["packages/shared-ux/page/no_data/types/*"], - "@kbn/shared-ux-page-solution-nav": ["packages/shared-ux/page/solution_nav"], - "@kbn/shared-ux-page-solution-nav/*": ["packages/shared-ux/page/solution_nav/*"], - "@kbn/shared-ux-prompt-no-data-views": ["packages/shared-ux/prompt/no_data_views/impl"], - "@kbn/shared-ux-prompt-no-data-views/*": ["packages/shared-ux/prompt/no_data_views/impl/*"], - "@kbn/shared-ux-prompt-no-data-views-mocks": ["packages/shared-ux/prompt/no_data_views/mocks"], - "@kbn/shared-ux-prompt-no-data-views-mocks/*": ["packages/shared-ux/prompt/no_data_views/mocks/*"], - "@kbn/shared-ux-prompt-no-data-views-types": ["packages/shared-ux/prompt/no_data_views/types"], - "@kbn/shared-ux-prompt-no-data-views-types/*": ["packages/shared-ux/prompt/no_data_views/types/*"], - "@kbn/shared-ux-prompt-not-found": ["packages/shared-ux/prompt/not_found"], - "@kbn/shared-ux-prompt-not-found/*": ["packages/shared-ux/prompt/not_found/*"], - "@kbn/shared-ux-router": ["packages/shared-ux/router/impl"], - "@kbn/shared-ux-router/*": ["packages/shared-ux/router/impl/*"], - "@kbn/shared-ux-router-mocks": ["packages/shared-ux/router/mocks"], - "@kbn/shared-ux-router-mocks/*": ["packages/shared-ux/router/mocks/*"], - "@kbn/shared-ux-router-types": ["packages/shared-ux/router/types"], - "@kbn/shared-ux-router-types/*": ["packages/shared-ux/router/types/*"], - "@kbn/shared-ux-storybook-config": ["packages/shared-ux/storybook/config"], - "@kbn/shared-ux-storybook-config/*": ["packages/shared-ux/storybook/config/*"], - "@kbn/shared-ux-storybook-mock": ["packages/shared-ux/storybook/mock"], - "@kbn/shared-ux-storybook-mock/*": ["packages/shared-ux/storybook/mock/*"], - "@kbn/shared-ux-tabbed-modal": ["packages/shared-ux/modal/tabbed"], - "@kbn/shared-ux-tabbed-modal/*": ["packages/shared-ux/modal/tabbed/*"], - "@kbn/shared-ux-table-persist": ["packages/shared-ux/table_persist"], - "@kbn/shared-ux-table-persist/*": ["packages/shared-ux/table_persist/*"], - "@kbn/shared-ux-utility": ["packages/kbn-shared-ux-utility"], - "@kbn/shared-ux-utility/*": ["packages/kbn-shared-ux-utility/*"], + "@kbn/shared-ux-avatar-solution": ["src/platform/packages/shared/shared-ux/avatar/solution"], + "@kbn/shared-ux-avatar-solution/*": ["src/platform/packages/shared/shared-ux/avatar/solution/*"], + "@kbn/shared-ux-button-exit-full-screen": ["src/platform/packages/shared/shared-ux/button/exit_full_screen"], + "@kbn/shared-ux-button-exit-full-screen/*": ["src/platform/packages/shared/shared-ux/button/exit_full_screen/*"], + "@kbn/shared-ux-button-toolbar": ["src/platform/packages/shared/shared-ux/button_toolbar"], + "@kbn/shared-ux-button-toolbar/*": ["src/platform/packages/shared/shared-ux/button_toolbar/*"], + "@kbn/shared-ux-card-no-data": ["src/platform/packages/shared/shared-ux/card/no_data/impl"], + "@kbn/shared-ux-card-no-data/*": ["src/platform/packages/shared/shared-ux/card/no_data/impl/*"], + "@kbn/shared-ux-card-no-data-mocks": ["src/platform/packages/shared/shared-ux/card/no_data/mocks"], + "@kbn/shared-ux-card-no-data-mocks/*": ["src/platform/packages/shared/shared-ux/card/no_data/mocks/*"], + "@kbn/shared-ux-card-no-data-types": ["src/platform/packages/shared/shared-ux/card/no_data/types"], + "@kbn/shared-ux-card-no-data-types/*": ["src/platform/packages/shared/shared-ux/card/no_data/types/*"], + "@kbn/shared-ux-chrome-navigation": ["src/platform/packages/shared/shared-ux/chrome/navigation"], + "@kbn/shared-ux-chrome-navigation/*": ["src/platform/packages/shared/shared-ux/chrome/navigation/*"], + "@kbn/shared-ux-error-boundary": ["src/platform/packages/shared/shared-ux/error_boundary"], + "@kbn/shared-ux-error-boundary/*": ["src/platform/packages/shared/shared-ux/error_boundary/*"], + "@kbn/shared-ux-file-context": ["src/platform/packages/shared/shared-ux/file/context"], + "@kbn/shared-ux-file-context/*": ["src/platform/packages/shared/shared-ux/file/context/*"], + "@kbn/shared-ux-file-image": ["src/platform/packages/shared/shared-ux/file/image/impl"], + "@kbn/shared-ux-file-image/*": ["src/platform/packages/shared/shared-ux/file/image/impl/*"], + "@kbn/shared-ux-file-image-mocks": ["src/platform/packages/shared/shared-ux/file/image/mocks"], + "@kbn/shared-ux-file-image-mocks/*": ["src/platform/packages/shared/shared-ux/file/image/mocks/*"], + "@kbn/shared-ux-file-mocks": ["src/platform/packages/shared/shared-ux/file/mocks"], + "@kbn/shared-ux-file-mocks/*": ["src/platform/packages/shared/shared-ux/file/mocks/*"], + "@kbn/shared-ux-file-picker": ["src/platform/packages/shared/shared-ux/file/file_picker/impl"], + "@kbn/shared-ux-file-picker/*": ["src/platform/packages/shared/shared-ux/file/file_picker/impl/*"], + "@kbn/shared-ux-file-types": ["src/platform/packages/shared/shared-ux/file/types"], + "@kbn/shared-ux-file-types/*": ["src/platform/packages/shared/shared-ux/file/types/*"], + "@kbn/shared-ux-file-upload": ["src/platform/packages/shared/shared-ux/file/file_upload/impl"], + "@kbn/shared-ux-file-upload/*": ["src/platform/packages/shared/shared-ux/file/file_upload/impl/*"], + "@kbn/shared-ux-file-util": ["src/platform/packages/shared/shared-ux/file/util"], + "@kbn/shared-ux-file-util/*": ["src/platform/packages/shared/shared-ux/file/util/*"], + "@kbn/shared-ux-link-redirect-app": ["src/platform/packages/shared/shared-ux/link/redirect_app/impl"], + "@kbn/shared-ux-link-redirect-app/*": ["src/platform/packages/shared/shared-ux/link/redirect_app/impl/*"], + "@kbn/shared-ux-link-redirect-app-mocks": ["src/platform/packages/shared/shared-ux/link/redirect_app/mocks"], + "@kbn/shared-ux-link-redirect-app-mocks/*": ["src/platform/packages/shared/shared-ux/link/redirect_app/mocks/*"], + "@kbn/shared-ux-link-redirect-app-types": ["src/platform/packages/shared/shared-ux/link/redirect_app/types"], + "@kbn/shared-ux-link-redirect-app-types/*": ["src/platform/packages/shared/shared-ux/link/redirect_app/types/*"], + "@kbn/shared-ux-markdown": ["src/platform/packages/shared/shared-ux/markdown/impl"], + "@kbn/shared-ux-markdown/*": ["src/platform/packages/shared/shared-ux/markdown/impl/*"], + "@kbn/shared-ux-markdown-mocks": ["src/platform/packages/shared/shared-ux/markdown/mocks"], + "@kbn/shared-ux-markdown-mocks/*": ["src/platform/packages/shared/shared-ux/markdown/mocks/*"], + "@kbn/shared-ux-markdown-types": ["src/platform/packages/shared/shared-ux/markdown/types"], + "@kbn/shared-ux-markdown-types/*": ["src/platform/packages/shared/shared-ux/markdown/types/*"], + "@kbn/shared-ux-page-analytics-no-data": ["src/platform/packages/private/shared-ux/page/analytics_no_data/impl"], + "@kbn/shared-ux-page-analytics-no-data/*": ["src/platform/packages/private/shared-ux/page/analytics_no_data/impl/*"], + "@kbn/shared-ux-page-analytics-no-data-mocks": ["src/platform/packages/private/shared-ux/page/analytics_no_data/mocks"], + "@kbn/shared-ux-page-analytics-no-data-mocks/*": ["src/platform/packages/private/shared-ux/page/analytics_no_data/mocks/*"], + "@kbn/shared-ux-page-analytics-no-data-types": ["src/platform/packages/private/shared-ux/page/analytics_no_data/types"], + "@kbn/shared-ux-page-analytics-no-data-types/*": ["src/platform/packages/private/shared-ux/page/analytics_no_data/types/*"], + "@kbn/shared-ux-page-kibana-no-data": ["src/platform/packages/private/shared-ux/page/kibana_no_data/impl"], + "@kbn/shared-ux-page-kibana-no-data/*": ["src/platform/packages/private/shared-ux/page/kibana_no_data/impl/*"], + "@kbn/shared-ux-page-kibana-no-data-mocks": ["src/platform/packages/private/shared-ux/page/kibana_no_data/mocks"], + "@kbn/shared-ux-page-kibana-no-data-mocks/*": ["src/platform/packages/private/shared-ux/page/kibana_no_data/mocks/*"], + "@kbn/shared-ux-page-kibana-no-data-types": ["src/platform/packages/private/shared-ux/page/kibana_no_data/types"], + "@kbn/shared-ux-page-kibana-no-data-types/*": ["src/platform/packages/private/shared-ux/page/kibana_no_data/types/*"], + "@kbn/shared-ux-page-kibana-template": ["src/platform/packages/shared/shared-ux/page/kibana_template/impl"], + "@kbn/shared-ux-page-kibana-template/*": ["src/platform/packages/shared/shared-ux/page/kibana_template/impl/*"], + "@kbn/shared-ux-page-kibana-template-mocks": ["src/platform/packages/shared/shared-ux/page/kibana_template/mocks"], + "@kbn/shared-ux-page-kibana-template-mocks/*": ["src/platform/packages/shared/shared-ux/page/kibana_template/mocks/*"], + "@kbn/shared-ux-page-kibana-template-types": ["src/platform/packages/shared/shared-ux/page/kibana_template/types"], + "@kbn/shared-ux-page-kibana-template-types/*": ["src/platform/packages/shared/shared-ux/page/kibana_template/types/*"], + "@kbn/shared-ux-page-no-data": ["src/platform/packages/shared/shared-ux/page/no_data/impl"], + "@kbn/shared-ux-page-no-data/*": ["src/platform/packages/shared/shared-ux/page/no_data/impl/*"], + "@kbn/shared-ux-page-no-data-config": ["src/platform/packages/shared/shared-ux/page/no_data_config/impl"], + "@kbn/shared-ux-page-no-data-config/*": ["src/platform/packages/shared/shared-ux/page/no_data_config/impl/*"], + "@kbn/shared-ux-page-no-data-config-mocks": ["src/platform/packages/shared/shared-ux/page/no_data_config/mocks"], + "@kbn/shared-ux-page-no-data-config-mocks/*": ["src/platform/packages/shared/shared-ux/page/no_data_config/mocks/*"], + "@kbn/shared-ux-page-no-data-config-types": ["src/platform/packages/shared/shared-ux/page/no_data_config/types"], + "@kbn/shared-ux-page-no-data-config-types/*": ["src/platform/packages/shared/shared-ux/page/no_data_config/types/*"], + "@kbn/shared-ux-page-no-data-mocks": ["src/platform/packages/shared/shared-ux/page/no_data/mocks"], + "@kbn/shared-ux-page-no-data-mocks/*": ["src/platform/packages/shared/shared-ux/page/no_data/mocks/*"], + "@kbn/shared-ux-page-no-data-types": ["src/platform/packages/shared/shared-ux/page/no_data/types"], + "@kbn/shared-ux-page-no-data-types/*": ["src/platform/packages/shared/shared-ux/page/no_data/types/*"], + "@kbn/shared-ux-page-solution-nav": ["src/platform/packages/shared/shared-ux/page/solution_nav"], + "@kbn/shared-ux-page-solution-nav/*": ["src/platform/packages/shared/shared-ux/page/solution_nav/*"], + "@kbn/shared-ux-prompt-no-data-views": ["src/platform/packages/shared/shared-ux/prompt/no_data_views/impl"], + "@kbn/shared-ux-prompt-no-data-views/*": ["src/platform/packages/shared/shared-ux/prompt/no_data_views/impl/*"], + "@kbn/shared-ux-prompt-no-data-views-mocks": ["src/platform/packages/shared/shared-ux/prompt/no_data_views/mocks"], + "@kbn/shared-ux-prompt-no-data-views-mocks/*": ["src/platform/packages/shared/shared-ux/prompt/no_data_views/mocks/*"], + "@kbn/shared-ux-prompt-no-data-views-types": ["src/platform/packages/shared/shared-ux/prompt/no_data_views/types"], + "@kbn/shared-ux-prompt-no-data-views-types/*": ["src/platform/packages/shared/shared-ux/prompt/no_data_views/types/*"], + "@kbn/shared-ux-prompt-not-found": ["src/platform/packages/shared/shared-ux/prompt/not_found"], + "@kbn/shared-ux-prompt-not-found/*": ["src/platform/packages/shared/shared-ux/prompt/not_found/*"], + "@kbn/shared-ux-router": ["src/platform/packages/shared/shared-ux/router/impl"], + "@kbn/shared-ux-router/*": ["src/platform/packages/shared/shared-ux/router/impl/*"], + "@kbn/shared-ux-router-mocks": ["src/platform/packages/shared/shared-ux/router/mocks"], + "@kbn/shared-ux-router-mocks/*": ["src/platform/packages/shared/shared-ux/router/mocks/*"], + "@kbn/shared-ux-router-types": ["src/platform/packages/shared/shared-ux/router/types"], + "@kbn/shared-ux-router-types/*": ["src/platform/packages/shared/shared-ux/router/types/*"], + "@kbn/shared-ux-storybook-config": ["src/platform/packages/private/shared-ux/storybook/config"], + "@kbn/shared-ux-storybook-config/*": ["src/platform/packages/private/shared-ux/storybook/config/*"], + "@kbn/shared-ux-storybook-mock": ["src/platform/packages/shared/shared-ux/storybook/mock"], + "@kbn/shared-ux-storybook-mock/*": ["src/platform/packages/shared/shared-ux/storybook/mock/*"], + "@kbn/shared-ux-tabbed-modal": ["src/platform/packages/shared/shared-ux/modal/tabbed"], + "@kbn/shared-ux-tabbed-modal/*": ["src/platform/packages/shared/shared-ux/modal/tabbed/*"], + "@kbn/shared-ux-table-persist": ["src/platform/packages/shared/shared-ux/table_persist"], + "@kbn/shared-ux-table-persist/*": ["src/platform/packages/shared/shared-ux/table_persist/*"], + "@kbn/shared-ux-utility": ["src/platform/packages/shared/kbn-shared-ux-utility"], + "@kbn/shared-ux-utility/*": ["src/platform/packages/shared/kbn-shared-ux-utility/*"], "@kbn/slo-plugin": ["x-pack/solutions/observability/plugins/slo"], "@kbn/slo-plugin/*": ["x-pack/solutions/observability/plugins/slo/*"], "@kbn/slo-schema": ["x-pack/platform/packages/shared/kbn-slo-schema"], diff --git a/x-pack/.telemetryrc.json b/x-pack/.telemetryrc.json index cfa47ffe81da0..d380bcab90c75 100644 --- a/x-pack/.telemetryrc.json +++ b/x-pack/.telemetryrc.json @@ -2,9 +2,7 @@ { "output": "platform/plugins/private/telemetry_collection_xpack/schema/xpack_plugins.json", "root": "plugins/", - "exclude": [ - "platform/plugins/private/monitoring/server/telemetry_collection/" - ] + "exclude": [] }, { "output": "platform/plugins/private/telemetry_collection_xpack/schema/xpack_monitoring.json", @@ -14,7 +12,9 @@ { "output": "platform/plugins/private/telemetry_collection_xpack/schema/xpack_platform.json", "root": "platform/", - "exclude": [] + "exclude": [ + "platform/plugins/private/monitoring/server/telemetry_collection/" + ] }, { "output": "platform/plugins/private/telemetry_collection_xpack/schema/xpack_observability.json", diff --git a/x-pack/platform/packages/shared/ai-infra/inference-common/index.ts b/x-pack/platform/packages/shared/ai-infra/inference-common/index.ts index 0c6d254c0f527..b466d6ac6879b 100644 --- a/x-pack/platform/packages/shared/ai-infra/inference-common/index.ts +++ b/x-pack/platform/packages/shared/ai-infra/inference-common/index.ts @@ -10,6 +10,9 @@ export { ChatCompletionEventType, ToolChoiceType, type Message, + type MessageContentImage, + type MessageContentText, + type MessageContent, type AssistantMessage, type ToolMessage, type UserMessage, diff --git a/x-pack/platform/packages/shared/ai-infra/inference-common/src/chat_complete/index.ts b/x-pack/platform/packages/shared/ai-infra/inference-common/src/chat_complete/index.ts index cedc8297d75bc..227e72d93ca92 100644 --- a/x-pack/platform/packages/shared/ai-infra/inference-common/src/chat_complete/index.ts +++ b/x-pack/platform/packages/shared/ai-infra/inference-common/src/chat_complete/index.ts @@ -29,6 +29,9 @@ export { } from './events'; export { MessageRole, + type MessageContent, + type MessageContentImage, + type MessageContentText, type Message, type AssistantMessage, type UserMessage, diff --git a/x-pack/platform/packages/shared/ai-infra/inference-common/src/chat_complete/messages.ts b/x-pack/platform/packages/shared/ai-infra/inference-common/src/chat_complete/messages.ts index 43d03cf130c01..54b9b76d2bd8c 100644 --- a/x-pack/platform/packages/shared/ai-infra/inference-common/src/chat_complete/messages.ts +++ b/x-pack/platform/packages/shared/ai-infra/inference-common/src/chat_complete/messages.ts @@ -23,14 +23,26 @@ interface MessageBase { role: TRole; } +export interface MessageContentText { + type: 'text'; + text: string; +} + +export interface MessageContentImage { + type: 'image'; + source: { data: string; mimeType: string }; +} + +export type MessageContent = string | Array; + /** * Represents a message from the user. */ export type UserMessage = MessageBase & { /** - * The text content of the user message + * The text or image content of the user message */ - content: string; + content: MessageContent; }; /** diff --git a/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/mock/connectors.ts b/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/mock/connectors.ts index 34dfeb98ce29d..6f72a89205251 100644 --- a/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/mock/connectors.ts +++ b/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/mock/connectors.ts @@ -18,6 +18,7 @@ export const mockActionTypes = [ minimumLicenseRequired: 'basic', isSystemActionType: true, supportedFeatureIds: ['generativeAI'], + subFeature: undefined, } as ActionType, { id: '.bedrock', @@ -28,6 +29,7 @@ export const mockActionTypes = [ minimumLicenseRequired: 'basic', isSystemActionType: true, supportedFeatureIds: ['generativeAI'], + subFeature: undefined, } as ActionType, { id: '.gemini', @@ -38,6 +40,7 @@ export const mockActionTypes = [ minimumLicenseRequired: 'basic', isSystemActionType: true, supportedFeatureIds: ['generativeAI'], + subFeature: undefined, } as ActionType, ]; diff --git a/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/index.ts b/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/index.ts index a2abc5514bd05..0192b9623755c 100644 --- a/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/index.ts +++ b/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/index.ts @@ -6,5 +6,6 @@ */ export { InferenceServiceFormFields } from './src/components/inference_service_form_fields'; +export { useProviders } from './src/hooks/use_providers'; export * from './src/types/types'; diff --git a/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/additional_options_fields.tsx b/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/additional_options_fields.tsx index 381b15b78020f..e7fa0afce90e0 100644 --- a/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/additional_options_fields.tsx +++ b/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/additional_options_fields.tsx @@ -52,6 +52,7 @@ interface AdditionalOptionsFieldsProps { onTaskTypeOptionsSelect: (taskType: string, provider?: string) => void; selectedTaskType?: string; taskTypeOptions: TaskTypeOption[]; + isEdit?: boolean; } export const AdditionalOptionsFields: React.FC = ({ @@ -61,6 +62,7 @@ export const AdditionalOptionsFields: React.FC = ( selectedTaskType, onSetProviderConfigEntry, onTaskTypeOptionsSelect, + isEdit, }) => { const xsFontSize = useEuiFontSize('xs').fontSize; const { euiTheme } = useEuiTheme(); @@ -106,7 +108,18 @@ export const AdditionalOptionsFields: React.FC = ( return ( - {taskTypeOptions.length === 1 ? ( + {isEdit ? ( + + {config.taskType} + + ) : taskTypeOptions.length === 1 ? ( = ( selectedTaskType, config.taskType, xsFontSize, - euiTheme.colors, + euiTheme.colors.textSubdued, + euiTheme.colors.disabled, + euiTheme.colors.lightestShade, + euiTheme.colors.darkShade, + isEdit, taskTypeOptions, onTaskTypeOptionsSelect, ] diff --git a/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/inference_service_form_fields.test.tsx b/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/inference_service_form_fields.test.tsx index c5d19aa26919e..5c20bbecb6f1c 100644 --- a/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/inference_service_form_fields.test.tsx +++ b/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/inference_service_form_fields.test.tsx @@ -12,8 +12,10 @@ import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { Form, useForm } from '@kbn/es-ui-shared-plugin/static/forms/hook_form_lib'; import { I18nProvider } from '@kbn/i18n-react'; +import { httpServiceMock } from '@kbn/core-http-browser-mocks'; +import { notificationServiceMock } from '@kbn/core-notifications-browser-mocks'; -const providers = [ +const mockProviders = [ { service: 'hugging_face', name: 'Hugging Face', @@ -110,6 +112,15 @@ const providers = [ }, ] as InferenceProvider[]; +jest.mock('../hooks/use_providers', () => ({ + useProviders: jest.fn(() => ({ + data: mockProviders, + })), +})); + +const httpMock = httpServiceMock.createStartContract(); +const notificationsMock = notificationServiceMock.createStartContract(); + const MockFormProvider = ({ children }: { children: React.ReactElement }) => { const { form } = useForm(); @@ -124,7 +135,7 @@ describe('Inference Services', () => { it('renders', () => { render( - + ); @@ -134,7 +145,7 @@ describe('Inference Services', () => { it('renders Selectable', async () => { render( - + ); @@ -145,7 +156,7 @@ describe('Inference Services', () => { it('renders selected provider fields - hugging_face', async () => { render( - + ); @@ -165,7 +176,7 @@ describe('Inference Services', () => { it('re-renders fields when selected to anthropic from hugging_face', async () => { render( - + ); diff --git a/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/inference_service_form_fields.tsx b/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/inference_service_form_fields.tsx index 98e4dfdd6afbc..22eb4fbadc901 100644 --- a/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/inference_service_form_fields.tsx +++ b/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/components/inference_service_form_fields.tsx @@ -26,8 +26,9 @@ import { import { FormattedMessage } from '@kbn/i18n-react'; import { ConnectorFormSchema } from '@kbn/triggers-actions-ui-plugin/public'; +import { HttpSetup, IToasts } from '@kbn/core/public'; import * as LABELS from '../translations'; -import { Config, ConfigEntryView, FieldType, InferenceProvider, Secrets } from '../types/types'; +import { Config, ConfigEntryView, FieldType, Secrets } from '../types/types'; import { SERVICE_PROVIDERS } from './providers/render_service_provider/service_provider'; import { DEFAULT_TASK_TYPE, ServiceProviderKeys } from '../constants'; import { SelectableProvider } from './providers/selectable'; @@ -36,12 +37,20 @@ import { ConfigurationFormItems } from './configuration/configuration_form_items import { AdditionalOptionsFields } from './additional_options_fields'; import { ProviderSecretHiddenField } from './hidden_fields/provider_secret_hidden_field'; import { ProviderConfigHiddenField } from './hidden_fields/provider_config_hidden_field'; +import { useProviders } from '../hooks/use_providers'; interface InferenceServicesProps { - providers: InferenceProvider[]; + http: HttpSetup; + toasts: IToasts; + isEdit?: boolean; } -export const InferenceServiceFormFields: React.FC = ({ providers }) => { +export const InferenceServiceFormFields: React.FC = ({ + http, + toasts, + isEdit, +}) => { + const { data: providers, isLoading } = useProviders(http, toasts); const [isProviderPopoverOpen, setProviderPopoverOpen] = useState(false); const [providerSchema, setProviderSchema] = useState([]); const [taskTypeOptions, setTaskTypeOptions] = useState([]); @@ -213,8 +222,9 @@ export const InferenceServiceFormFields: React.FC = ({ p const providerSuperSelect = useCallback( (isInvalid: boolean) => ( = ({ p onClick={toggleProviderPopover} data-test-subj="provider-select" isInvalid={isInvalid} + disabled={isEdit} onKeyDown={handleProviderKeyboardOpen} value={config?.provider ? providerName : ''} fullWidth @@ -239,16 +250,31 @@ export const InferenceServiceFormFields: React.FC = ({ p ), [ - config?.provider, - handleProviderKeyboardOpen, - toggleProviderPopover, - isProviderPopoverOpen, + isEdit, onClearProvider, + config?.provider, providerIcon, + toggleProviderPopover, + handleProviderKeyboardOpen, providerName, + isProviderPopoverOpen, ] ); + useEffect(() => { + if (config?.provider && isEdit) { + const newProvider = providers?.find((p) => p.service === config.provider); + // Update connector providerSchema + const newProviderSchema = Object.keys(newProvider?.configurations ?? {}).map((k) => ({ + key: k, + isValid: true, + ...newProvider?.configurations[k], + })) as ConfigEntryView[]; + + setProviderSchema(newProviderSchema); + } + }, [config?.provider, config?.taskType, isEdit, providers]); + useEffect(() => { if (isSubmitting) { validateFields(['config.providerConfig']); @@ -291,7 +317,7 @@ export const InferenceServiceFormFields: React.FC = ({ p setRequiredProviderFormFields(existingConfiguration.filter((p) => p.required || p.sensitive)); }, [config?.providerConfig, providerSchema, secrets]); - return ( + return !isLoading ? ( <> = ({ p className="rightArrowIcon" > @@ -355,6 +381,7 @@ export const InferenceServiceFormFields: React.FC = ({ p onTaskTypeOptionsSelect={onTaskTypeOptionsSelect} taskTypeOptions={taskTypeOptions} selectedTaskType={selectedTaskType} + isEdit={isEdit} /> @@ -371,5 +398,5 @@ export const InferenceServiceFormFields: React.FC = ({ p ) : null} - ); + ) : null; }; diff --git a/x-pack/solutions/search/plugins/search_inference_endpoints/public/hooks/use_providers.ts b/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/hooks/use_providers.ts similarity index 98% rename from x-pack/solutions/search/plugins/search_inference_endpoints/public/hooks/use_providers.ts rename to x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/hooks/use_providers.ts index 4bef4268c798f..260d61a2aade8 100644 --- a/x-pack/solutions/search/plugins/search_inference_endpoints/public/hooks/use_providers.ts +++ b/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/hooks/use_providers.ts @@ -7,10 +7,10 @@ import type { HttpSetup } from '@kbn/core-http-browser'; import { useQuery } from '@tanstack/react-query'; -import { FieldType, InferenceProvider } from '@kbn/inference-endpoint-ui-common'; import { KibanaServerError } from '@kbn/kibana-utils-plugin/common'; -import { useKibana } from './use_kibana'; -import * as i18n from './translations'; +import { IToasts } from '@kbn/core/public'; +import { FieldType, InferenceProvider } from '../..'; +import * as i18n from '../translations'; const getProviders = (http: HttpSetup): InferenceProvider[] => { return [ @@ -624,9 +624,7 @@ const getProviders = (http: HttpSetup): InferenceProvider[] => { ]; }; -export const useProviders = () => { - const { services } = useKibana(); - const toasts = services.notifications?.toasts; +export const useProviders = (http: HttpSetup, toasts: IToasts) => { const onErrorFn = (error: { body: KibanaServerError }) => { toasts?.addError(new Error(error.body.message), { title: i18n.GET_PROVIDERS_FAILED, @@ -635,7 +633,7 @@ export const useProviders = () => { }; const query = useQuery(['user-profile'], { - queryFn: () => getProviders(services.http), + queryFn: () => getProviders(http), staleTime: Infinity, refetchOnWindowFocus: false, onError: onErrorFn, diff --git a/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/translations.ts b/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/translations.ts index 6258fc94687fe..3c9bab9ecb6fe 100644 --- a/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/translations.ts +++ b/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/src/translations.ts @@ -127,3 +127,10 @@ export const RE_ENTER_SECRETS = (label: string) => { values: { label }, }); }; + +export const GET_PROVIDERS_FAILED = i18n.translate( + 'xpack.inferenceEndpointUICommon.hooks.unableToFindProvidersQueryMessage', + { + defaultMessage: 'Unable to find providers', + } +); diff --git a/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/tsconfig.json b/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/tsconfig.json index f306c4703b7a0..5c60ee4820e4a 100644 --- a/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/tsconfig.json +++ b/x-pack/platform/packages/shared/kbn-inference-endpoint-ui-common/tsconfig.json @@ -21,6 +21,11 @@ "@kbn/i18n-react", "@kbn/search-connectors", "@kbn/es-ui-shared-plugin", - "@kbn/triggers-actions-ui-plugin" + "@kbn/triggers-actions-ui-plugin", + "@kbn/core-http-browser", + "@kbn/kibana-utils-plugin", + "@kbn/core", + "@kbn/core-http-browser-mocks", + "@kbn/core-notifications-browser-mocks" ] } diff --git a/x-pack/platform/plugins/private/monitoring/public/application/pages/logstash/node_pipelines.tsx b/x-pack/platform/plugins/private/monitoring/public/application/pages/logstash/node_pipelines.tsx index 5a15843d37989..57e3ba53d7260 100644 --- a/x-pack/platform/plugins/private/monitoring/public/application/pages/logstash/node_pipelines.tsx +++ b/x-pack/platform/plugins/private/monitoring/public/application/pages/logstash/node_pipelines.tsx @@ -99,7 +99,7 @@ export const LogStashNodePipelinesPage: React.FC = ({ clusters } {data.pipelines && (
= ({ clusters }) => const upgradeMessage = pageData ? makeUpgradeMessage(clusterStatus.versions) : null; return ( onBrush({ xaxis })} stats={clusterStatus} data={pipelines} diff --git a/x-pack/platform/plugins/private/monitoring/public/components/apm/instances/instances.tsx b/x-pack/platform/plugins/private/monitoring/public/components/apm/instances/instances.tsx index 30d4ea223a64f..c1c3d091a68e3 100644 --- a/x-pack/platform/plugins/private/monitoring/public/components/apm/instances/instances.tsx +++ b/x-pack/platform/plugins/private/monitoring/public/components/apm/instances/instances.tsx @@ -65,14 +65,12 @@ function getColumns(setupMode: SetupMode, cgroup: unknown) { }; setupModeStatus = ( -
- -
+ ); } @@ -187,7 +185,7 @@ export function ApmServerInstances({ apms, setupMode, alerts }: Props) { {setupModeCallout} - -
+ ); } @@ -161,7 +159,7 @@ export class Listing extends PureComponent { {setupModeCallOut} (theme: UseEuiTheme) => + css` + display: flex; + font-size: ${euiFontSize(theme, 'xs').fontSize}; + cursor: pointer; + color: ${theme.euiTheme.colors.textParagraph}; + display: flex; + flex-direction: row; + align-items: center; + ${isDisabled ? 'opacity: 0.5;' : ''} + `; + +const legendHorizontalStyle = ({ euiTheme }: UseEuiTheme) => css` + ${logicalCSS('margin-top', euiTheme.size.xs)} +`; + +const legendLabelStyle = css` + overflow: hidden; + white-space: nowrap; + display: flex; + flex-direction: row; + align-items: center; +`; + +const legendValueStyle = ({ euiTheme }: UseEuiTheme) => css` + overflow: hidden; + white-space: nowrap; + ${logicalCSS('margin-left', euiTheme.size.xs)} +`; + +interface Row { + id: string; + label: string; + legend?: boolean; + color?: string; + tickFormatter?: (arg: number) => number; +} + +interface Props { + series: Row[]; + seriesValues: { [key: string]: number }; + seriesFilter: string[]; + onToggle: (event: MouseEvent, id: string) => void; + legendFormatter?: (value: number) => number; + tickFormatter?: (value: number) => number; +} + +export class HorizontalLegend extends React.Component { + constructor(props: Props) { + super(props); this.formatter = this.formatter.bind(this); this.createSeries = this.createSeries.bind(this); } @@ -22,14 +77,14 @@ export class HorizontalLegend extends React.Component { /** * @param {Number} value Final value to display */ - displayValue(value) { - return {value}; + displayValue(value: number) { + return {value}; } /** * @param {Number} value True if value is falsy and/or not a number */ - validValue(value) { + validValue(value: number) { return value !== null && value !== undefined && (typeof value === 'string' || !isNaN(value)); } @@ -38,7 +93,7 @@ export class HorizontalLegend extends React.Component { * A null means no data for the time bucket and will be formatted as 'N/A' * @param {Object} row Props passed form a parent by row index */ - formatter(value, row) { + formatter(value: number, row: Row) { if (!this.validValue(value)) { return ( ; } @@ -73,12 +123,11 @@ export class HorizontalLegend extends React.Component { return ( @@ -99,8 +148,8 @@ export class HorizontalLegend extends React.Component { const rows = this.props.series.map(this.createSeries); return ( -
- +
+ {rows}
diff --git a/x-pack/platform/plugins/private/monitoring/public/components/chart/info_tooltip.scss b/x-pack/platform/plugins/private/monitoring/public/components/chart/info_tooltip.scss deleted file mode 100644 index 7798951ce23fc..0000000000000 --- a/x-pack/platform/plugins/private/monitoring/public/components/chart/info_tooltip.scss +++ /dev/null @@ -1,12 +0,0 @@ -.monChart__tooltipLabel, -.monChart__tooltipValue { - text-align: left; - font-size: $euiFontSizeXS; - padding: $euiSizeXS; - word-wrap: break-word; - white-space: normal; -} - -.monChart__tooltipLabel { - font-weight: $euiFontWeightBold; -} diff --git a/x-pack/platform/plugins/private/monitoring/public/components/chart/info_tooltip.js b/x-pack/platform/plugins/private/monitoring/public/components/chart/info_tooltip.tsx similarity index 51% rename from x-pack/platform/plugins/private/monitoring/public/components/chart/info_tooltip.js rename to x-pack/platform/plugins/private/monitoring/public/components/chart/info_tooltip.tsx index 35d7cdaf9da19..7391fadd9b14e 100644 --- a/x-pack/platform/plugins/private/monitoring/public/components/chart/info_tooltip.js +++ b/x-pack/platform/plugins/private/monitoring/public/components/chart/info_tooltip.tsx @@ -6,10 +6,36 @@ */ import React from 'react'; +import { css } from '@emotion/react'; +import { euiFontSize, UseEuiTheme } from '@elastic/eui'; + import { FormattedMessage } from '@kbn/i18n-react'; -import './info_tooltip.scss'; -export function InfoTooltip({ series, bucketSize }) { +import { Series } from './types'; + +const tooltipLabelStyle = (theme: UseEuiTheme) => css` + text-align: left; + font-size: ${euiFontSize(theme, 'xs').fontSize}; + padding: ${theme.euiTheme.size.xs}; + word-wrap: break-word; + white-space: normal; + font-weight: ${theme.euiTheme.font.weight.bold}; +`; + +const tooltipValueStyle = (theme: UseEuiTheme) => css` + text-align: left; + font-size: ${euiFontSize(theme, 'xs').fontSize}; + padding: ${theme.euiTheme.size.xs}; + word-wrap: break-word; + white-space: normal; +`; + +interface Props { + series: Series[]; + bucketSize?: string; +} + +export function InfoTooltip({ series, bucketSize }: Props) { const tableRows = series.map((item, index) => { return ( - {item.metric.label} - {item.metric.description} + {item.metric.label} + {item.metric.description} ); }); @@ -29,13 +55,13 @@ export function InfoTooltip({ series, bucketSize }) { - - + {tableRows} diff --git a/x-pack/platform/plugins/private/monitoring/public/components/chart/monitoring_timeseries_container.scss b/x-pack/platform/plugins/private/monitoring/public/components/chart/monitoring_timeseries_container.scss deleted file mode 100644 index 0da89b55e69e4..0000000000000 --- a/x-pack/platform/plugins/private/monitoring/public/components/chart/monitoring_timeseries_container.scss +++ /dev/null @@ -1,8 +0,0 @@ -.monRhythmChart__wrapper .monRhythmChart__zoom { - visibility: hidden; - padding-right: $euiSizeM; -} - -.monRhythmChart__wrapper:hover .monRhythmChart__zoom { - visibility: visible; -} diff --git a/x-pack/platform/plugins/private/monitoring/public/components/chart/monitoring_timeseries_container.tsx b/x-pack/platform/plugins/private/monitoring/public/components/chart/monitoring_timeseries_container.tsx index b8d4ba2f64868..beb86f595c662 100644 --- a/x-pack/platform/plugins/private/monitoring/public/components/chart/monitoring_timeseries_container.tsx +++ b/x-pack/platform/plugins/private/monitoring/public/components/chart/monitoring_timeseries_container.tsx @@ -6,9 +6,8 @@ */ import React, { Fragment } from 'react'; +import { css } from '@emotion/react'; import { get, first } from 'lodash'; -import { i18n } from '@kbn/i18n'; -import { FormattedMessage } from '@kbn/i18n-react'; import { EuiBadge, EuiIconTip, @@ -18,7 +17,13 @@ import { EuiScreenReaderOnly, EuiTextAlign, EuiButtonEmpty, + UseEuiTheme, + logicalCSS, } from '@elastic/eui'; + +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; + import { getTechnicalPreview } from './get_technical_preview'; import { getTitle } from './get_title'; import { getUnits } from './get_units'; @@ -26,8 +31,18 @@ import { MonitoringTimeseries } from './monitoring_timeseries'; import { InfoTooltip } from './info_tooltip'; import { AlertsBadge } from '../../alerts/badge'; import type { AlertsByName } from '../../alerts/types'; +import { Series } from './types'; -import './monitoring_timeseries_container.scss'; +const zoomStyle = ({ euiTheme }: UseEuiTheme) => css` + visibility: hidden; + ${logicalCSS('padding-right', euiTheme.size.m)} +`; + +const wrapperStyle = css` + &:hover .rhythmChart__zoom { + visibility: visible; + } +`; interface ZoomInfo { showZoomOutBtn: () => boolean; @@ -37,9 +52,7 @@ interface ZoomInfo { interface SeriesAlert { alerts: AlertsByName; } -interface Series { - metric: { title: string; label: string; description: string }; -} + interface Props { series?: Series[] | SeriesAlert; onBrush?: ({ xaxis }: any) => void; @@ -56,7 +69,7 @@ const zoomOutBtn = (zoomInfo?: ZoomInfo) => { } return ( - + @@ -123,7 +137,7 @@ export function MonitoringTimeseriesContainer({ series, onBrush, zoomInfo }: Pro } return ( - + @@ -147,7 +161,7 @@ export function MonitoringTimeseriesContainer({ series, onBrush, zoomInfo }: Pro } diff --git a/x-pack/platform/plugins/private/monitoring/public/components/chart/timeseries_visualization.js b/x-pack/platform/plugins/private/monitoring/public/components/chart/timeseries_visualization.js index 18e785874052b..8dcfb8047ae35 100644 --- a/x-pack/platform/plugins/private/monitoring/public/components/chart/timeseries_visualization.js +++ b/x-pack/platform/plugins/private/monitoring/public/components/chart/timeseries_visualization.js @@ -5,14 +5,50 @@ * 2.0. */ -import { debounce, keys, has, includes, isFunction, difference, assign } from 'lodash'; import React from 'react'; +import { css } from '@emotion/react'; +import { debounce, keys, has, includes, isFunction, difference, assign } from 'lodash'; + import { getLastValue } from './get_last_value'; import { TimeseriesContainer } from './timeseries_container'; import { HorizontalLegend } from './horizontal_legend'; import { getValuesForSeriesIndex, getValuesByX } from './get_values_for_legend'; import { DEBOUNCE_SLOW_MS } from '../../../common/constants'; -import './timeseries_visualization.scss'; + +const rhythmChartStyle = css` + position: relative; + display: flex; + flex-direction: column; + flex: 1 0 auto; +`; + +const rhythmChartContentStyle = css` + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + display: flex; + flex: 1 0 auto; + flex-direction: column; +`; + +const rhythmChartVisualizationStyle = css` + position: relative; + display: flex; + flex-direction: column; + flex: 1 0 auto; + + & > div { + min-width: 1px; + width: 100%; + height: 100%; + } + + div { + user-select: none; + } +`; export class TimeseriesVisualization extends React.Component { constructor(props) { @@ -116,11 +152,6 @@ export class TimeseriesVisualization extends React.Component { } render() { - const className = 'monRhythmChart'; - const style = { - flexDirection: 'column', // for legend position = bottom - }; - const legend = this.props.hasLegend ? ( -
-
+
+
+
div { - min-width: 1px; - width: 100%; - height: 100%; - } - - // SASSTODO: generic selector - div { - @include monitoringNoUserSelect; - } -} diff --git a/x-pack/platform/plugins/private/monitoring/public/components/chart/types.ts b/x-pack/platform/plugins/private/monitoring/public/components/chart/types.ts new file mode 100644 index 0000000000000..62035e7565313 --- /dev/null +++ b/x-pack/platform/plugins/private/monitoring/public/components/chart/types.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. + */ + +export interface Series { + metric: { + description: string; + field: any; + hasCalculation: any; + isDerivative: any; + label: string; + metricAgg: any; + title: string; + }; +} diff --git a/x-pack/platform/plugins/private/monitoring/public/components/cluster/listing/listing.js b/x-pack/platform/plugins/private/monitoring/public/components/cluster/listing/listing.js index a10dbd1fd2198..ff2f4efabdf7c 100644 --- a/x-pack/platform/plugins/private/monitoring/public/components/cluster/listing/listing.js +++ b/x-pack/platform/plugins/private/monitoring/public/components/cluster/listing/listing.js @@ -6,9 +6,9 @@ */ import React, { Fragment } from 'react'; -import { Legacy } from '../../../legacy_shims'; import moment from 'moment'; import numeral from '@elastic/numeral'; +import { css } from '@emotion/react'; import { capitalize, partial } from 'lodash'; import { EuiHealth, @@ -20,17 +20,32 @@ import { EuiSpacer, EuiIcon, EuiToolTip, + euiFontSize, } from '@elastic/eui'; -import { EuiMonitoringTable } from '../../table'; + import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; + +import { Legacy } from '../../../legacy_shims'; +import { EuiMonitoringTable } from '../../table'; import { AlertsStatus } from '../../../alerts/status'; import { STANDALONE_CLUSTER_CLUSTER_UUID } from '../../../../common/constants'; import { getSafeForExternalLink } from '../../../lib/get_safe_for_external_link'; -import './listing.scss'; import { useKibana } from '@kbn/kibana-react-plugin/public'; import { toMountPoint } from '@kbn/react-kibana-mount'; +const clusterCellExpiredStyle = ({ euiTheme }) => css` + color: ${euiTheme.colors.textParagraph}; +`; + +const clusterCellLicenseStyle = (theme) => css` + font-size: ${euiFontSize(theme, 'm').fontSize}; +`; + +const clusterCellExpirationStyle = ({ euiTheme }) => css` + color: ${euiTheme.colors.darkShade}; +`; + const IsClusterSupported = ({ isSupported, children }) => { return isSupported ? children : '-'; }; @@ -64,7 +79,7 @@ const STANDALONE_CLUSTER_STORAGE_KEY = 'viewedStandaloneCluster'; const getColumns = ( showLicenseExpiration, - changeCluster, + _changeCluster, handleClickIncompatibleLicense, handleClickInvalidLicense ) => { @@ -193,18 +208,14 @@ const getColumns = ( const license = cluster.license; if (!licenseType) { - return ( -
-
N/A
-
- ); + return
N/A
; } if (license) { const licenseExpiry = () => { if (license.expiry_date_in_millis < moment().valueOf()) { // license is expired - return Expired; + return Expired; } // license is fine @@ -213,8 +224,8 @@ const getColumns = ( return (
-
{capitalize(licenseType)}
-
+
{capitalize(licenseType)}
+
{showLicenseExpiration ? licenseExpiry() : null}
@@ -419,7 +430,7 @@ export const Listing = ({ angular, clusters, sorting, pagination, onTableChange ) : null} .euiTableRowCell > .euiTableCellContent { + padding: 0; + } +", + "toString": [Function], + } + } executeQueryOptions={ Object { "defaultFields": Array [ diff --git a/x-pack/platform/plugins/private/monitoring/public/components/elasticsearch/ccr/ccr.js b/x-pack/platform/plugins/private/monitoring/public/components/elasticsearch/ccr/ccr.js index 18474238d468d..80cac2953f1c7 100644 --- a/x-pack/platform/plugins/private/monitoring/public/components/elasticsearch/ccr/ccr.js +++ b/x-pack/platform/plugins/private/monitoring/public/components/elasticsearch/ccr/ccr.js @@ -6,6 +6,7 @@ */ import React, { Fragment, useState } from 'react'; +import { css } from '@emotion/react'; import { EuiInMemoryTable, EuiLink, @@ -17,11 +18,22 @@ import { EuiTextColor, EuiScreenReaderOnly, } from '@elastic/eui'; + import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; + import { getSafeForExternalLink } from '../../../lib/get_safe_for_external_link'; import { AlertsStatus } from '../../../alerts/status'; -import './ccr.scss'; + +/** + * We want the collapsed table (that shows the shard data) to be inline + * with the columns from the main table so we need to remove the padding + */ +const ccrListingTableStyle = css` + .euiTableRow-isExpandedRow > .euiTableRowCell > .euiTableCellContent { + padding: 0; + } +`; function toSeconds(ms) { return Math.floor(ms / 1000) + 's'; @@ -194,7 +206,7 @@ export const Ccr = (props) => { return ( .euiTableRowCell > .euiTableCellContent { - padding: 0; /* [1] */ -} diff --git a/x-pack/platform/plugins/private/monitoring/public/components/elasticsearch/indices/indices.js b/x-pack/platform/plugins/private/monitoring/public/components/elasticsearch/indices/indices.js index 1c47aa17638de..bd8784254bc75 100644 --- a/x-pack/platform/plugins/private/monitoring/public/components/elasticsearch/indices/indices.js +++ b/x-pack/platform/plugins/private/monitoring/public/components/elasticsearch/indices/indices.js @@ -7,12 +7,7 @@ import React from 'react'; import { capitalize } from 'lodash'; -import { LARGE_FLOAT, LARGE_BYTES, LARGE_ABBREVIATED } from '../../../../common/formatting'; -import { formatMetric } from '../../../lib/format_number'; -import { getSafeForExternalLink } from '../../../lib/get_safe_for_external_link'; -import { ElasticsearchStatusIcon } from '../status_icon'; -import { ClusterStatus } from '../cluster_status'; -import { EuiMonitoringTable } from '../../table'; +import { css } from '@emotion/react'; import { EuiLink, EuiPage, @@ -22,10 +17,22 @@ import { EuiSpacer, EuiScreenReaderOnly, } from '@elastic/eui'; + import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; + import { AlertsStatus } from '../../../alerts/status'; -import './indices.scss'; +import { ClusterStatus } from '../cluster_status'; +import { ElasticsearchStatusIcon } from '../status_icon'; +import { EuiMonitoringTable } from '../../table'; +import { LARGE_FLOAT, LARGE_BYTES, LARGE_ABBREVIATED } from '../../../../common/formatting'; +import { formatMetric } from '../../../lib/format_number'; +import { getSafeForExternalLink } from '../../../lib/get_safe_for_external_link'; + +const statusStyle = css` + display: flex; + align-items: center; +`; const getColumns = (alerts) => { return [ @@ -70,7 +77,7 @@ const getColumns = (alerts) => { field: 'status', sortable: true, render: (value) => ( -
+
  {capitalize(value)} @@ -183,7 +190,7 @@ export const ElasticsearchIndices = ({ /> +
N/A
`; diff --git a/x-pack/platform/plugins/private/monitoring/public/components/elasticsearch/nodes/cells.js b/x-pack/platform/plugins/private/monitoring/public/components/elasticsearch/nodes/cells.js index 1b6121f278496..b900880486eb6 100644 --- a/x-pack/platform/plugins/private/monitoring/public/components/elasticsearch/nodes/cells.js +++ b/x-pack/platform/plugins/private/monitoring/public/components/elasticsearch/nodes/cells.js @@ -7,7 +7,7 @@ import React, { useState } from 'react'; import { get } from 'lodash'; -import { formatMetric } from '../../../lib/format_number'; +import { css } from '@emotion/react'; import { EuiText, EuiPopover, @@ -17,8 +17,15 @@ import { EuiFlexGroup, EuiFlexItem, } from '@elastic/eui'; + import { i18n } from '@kbn/i18n'; +import { formatMetric } from '../../../lib/format_number'; + +const offlineStyle = ({ euiTheme }) => css` + color: ${euiTheme.colors.textParagraph}; +`; + const TRENDING_DOWN = i18n.translate('xpack.monitoring.elasticsearch.node.cells.trendingDownText', { defaultMessage: 'down', }); @@ -27,7 +34,7 @@ const TRENDING_UP = i18n.translate('xpack.monitoring.elasticsearch.node.cells.tr }); function OfflineCell() { - return
N/A
; + return
N/A
; } const getDirection = (slope) => { diff --git a/x-pack/platform/plugins/private/monitoring/public/components/elasticsearch/nodes/nodes.js b/x-pack/platform/plugins/private/monitoring/public/components/elasticsearch/nodes/nodes.js index 5a407d09230e1..e40edf1d24109 100644 --- a/x-pack/platform/plugins/private/monitoring/public/components/elasticsearch/nodes/nodes.js +++ b/x-pack/platform/plugins/private/monitoring/public/components/elasticsearch/nodes/nodes.js @@ -5,6 +5,9 @@ * 2.0. */ +import React, { Fragment } from 'react'; +import { css } from '@emotion/react'; +import { get } from 'lodash'; import { EuiBadge, EuiBadgeGroup, @@ -20,11 +23,12 @@ import { EuiSpacer, EuiText, EuiToolTip, + euiFontSize, } from '@elastic/eui'; + import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; -import { get } from 'lodash'; -import React, { Fragment } from 'react'; + import { ELASTICSEARCH_SYSTEM_ID } from '../../../../common/constants'; import { SetupModeFeature } from '../../../../common/enums'; import { AlertsStatus } from '../../../alerts/status'; @@ -37,6 +41,15 @@ import { EuiMonitoringSSPTable } from '../../table'; import { ClusterStatus } from '../cluster_status'; import { MetricCell, OfflineCell } from './cells'; +const tableCellNameStyle = (theme) => css` + ${euiFontSize(theme, 'm')} +`; + +const tableCellTransportAddressStyle = (theme) => css` + ${euiFontSize(theme, 's')} + color: ${theme.euiTheme.colors.darkShade}; +`; + const getNodeTooltip = (node) => { const { nodeTypeLabel, nodeTypeClass } = node; @@ -97,15 +110,13 @@ const getColumns = (showCgroupMetricsElasticsearch, setupMode, clusterUuid, aler }; setupModeStatus = ( -
- -
+ ); if (status.isNetNewUser) { nameLink = value; @@ -114,13 +125,13 @@ const getColumns = (showCgroupMetricsElasticsearch, setupMode, clusterUuid, aler return (
-
+
{getNodeTooltip(node)} {nameLink}
-
{extractIp(node.transport_address)}
+
{extractIp(node.transport_address)}
{setupModeStatus}
); @@ -502,7 +513,7 @@ export function ElasticsearchNodes({ clusterStatus, showCgroupMetricsElasticsear {setupModeCallout} { /> css` + ${logicalCSS('padding-top', euiTheme.size.l)} +`; + +const childTitleStyle = (theme) => css` + ${logicalCSS('padding', `${theme.euiTheme.size.l} ${theme.euiTheme.size.s}`)} + text-align: center; + font-size: ${euiFontSize(theme, 'xs').fontSize}; + color: ${theme.euiTheme.colors.ghost}; + display: flex; + flex-direction: row; + align-items: center; +`; + +const shardStyle = (theme) => css` + align-self: center; + ${logicalCSS('padding', `${theme.euiTheme.size.xs} ${theme.euiTheme.size.s}`)} + font-size: ${euiFontSize(theme, 'xs').fontSize}; + position: relative; + display: inline-block; +`; + +const childStyle = (data, shardStats) => (theme) => + css` + float: left; + align-self: center; + background-color: ${theme.euiTheme.colors.lightestShade}; + margin: ${theme.euiTheme.size.s}; + border: 1px solid ${theme.euiTheme.colors.mediumShade}; + border-radius: ${theme.euiTheme.size.xs}; + ${logicalCSS('padding', `calc(${theme.euiTheme.size.xs} / 2) 0`)} + + ${data.type === 'index' && + logicalCSS( + 'border-left', + `${theme.euiTheme.size.xs} solid ${theme.euiTheme.colors.borderStrongSuccess}` + )} + + ${shardStats?.status === 'red' && + logicalCSS( + 'border-left', + `${theme.euiTheme.size.xs} solid ${theme.euiTheme.colors.borderStrongDanger}` + )} + + ${shardStats?.status === 'yellow' && + logicalCSS( + 'border-left', + `${theme.euiTheme.size.xs} solid ${theme.euiTheme.colors.borderStrongWarning}` + )} + + ${data.type === 'shard' && shardStyle(theme)} + `; + const generateQueryAndLink = (data) => { let type = 'indices'; let ident = data.name; @@ -46,21 +100,7 @@ export class Assigned extends React.Component { createChild = (data) => { const key = data.id; - const initialClasses = ['monChild']; - if (data.type === 'index') { - initialClasses.push('monChild--index'); - } const shardStats = get(this.props.shardStats.indices, key); - if (shardStats) { - switch (shardStats.status) { - case 'red': - initialClasses.push('monChild--danger'); - break; - case 'yellow': - initialClasses.push('monChild--warning'); - break; - } - } // TODO: redesign for shard allocation const name = {data.name}; @@ -71,13 +111,13 @@ export class Assigned extends React.Component { return ( - + {name} {master} @@ -93,9 +133,10 @@ export class Assigned extends React.Component { render() { const data = sortBy(this.props.data, sortByName).map(this.createChild); + return ( -
diff --git a/x-pack/platform/plugins/private/monitoring/public/components/elasticsearch/shard_allocation/components/shard.js b/x-pack/platform/plugins/private/monitoring/public/components/elasticsearch/shard_allocation/components/shard.js index 6676b71b4bf13..67d780fd54be5 100644 --- a/x-pack/platform/plugins/private/monitoring/public/components/elasticsearch/shard_allocation/components/shard.js +++ b/x-pack/platform/plugins/private/monitoring/public/components/elasticsearch/shard_allocation/components/shard.js @@ -6,11 +6,22 @@ */ import React from 'react'; +import { css } from '@emotion/react'; import { get } from 'lodash'; +import { EuiToolTip, EuiBadge, euiFontSize, logicalCSS } from '@elastic/eui'; + +import { i18n } from '@kbn/i18n'; + import { calculateClass } from '../lib/calculate_class'; import { vents } from '../lib/vents'; -import { i18n } from '@kbn/i18n'; -import { EuiToolTip, EuiBadge } from '@elastic/eui'; + +const shardStyle = (theme) => css` + ${logicalCSS('padding', `${theme.euiTheme.size.xs} ${theme.euiTheme.size.s}`)} + align-self: center; + font-size: ${euiFontSize(theme, 'xs').fontSize}; + position: relative; + display: inline-block; +`; function getColor(classes) { const classList = classes.split(' '); @@ -117,6 +128,7 @@ export class Shard extends React.Component {
css` + vertical-align: middle; + width: calc(${euiTheme.size.l} * 10); +`; + +export const unassignedChildrenStyle = ({ euiTheme }) => css` + ${logicalCSS('padding-top', euiTheme.size.l)} +`; export class Unassigned extends React.Component { static displayName = i18n.translate( 'xpack.monitoring.elasticsearch.shardAllocation.unassignedDisplayName', - { - defaultMessage: 'Unassigned', - } + { defaultMessage: 'Unassigned' } ); createShard = (shard) => { @@ -33,14 +43,16 @@ export class Unassigned extends React.Component { '.' + shard.shard + additionId; + return ; }; render() { const shards = sortBy(this.props.shards, 'shard').map(this.createShard); + return ( -
diff --git a/x-pack/platform/plugins/private/monitoring/public/components/elasticsearch/shard_allocation/shard_allocation.js b/x-pack/platform/plugins/private/monitoring/public/components/elasticsearch/shard_allocation/shard_allocation.js index 1ac8a66fba75c..85d76647a24a9 100644 --- a/x-pack/platform/plugins/private/monitoring/public/components/elasticsearch/shard_allocation/shard_allocation.js +++ b/x-pack/platform/plugins/private/monitoring/public/components/elasticsearch/shard_allocation/shard_allocation.js @@ -6,12 +6,24 @@ */ import React from 'react'; +import { css } from '@emotion/react'; import { EuiTitle, EuiBadge, EuiFlexGroup, EuiFlexItem, EuiSpacer } from '@elastic/eui'; + import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; -import './shard_allocation.scss'; + import { ClusterView } from './components/cluster_view'; +const clusterStyle = ({ euiTheme }) => css` + th { + text-align: left; + } + + td:first-child { + width: calc(${euiTheme.base} * 12.5); + } +`; + export const ShardAllocation = (props) => { const types = [ { @@ -59,7 +71,7 @@ export const ShardAllocation = (props) => { ]; return ( -
+

); } @@ -187,7 +196,7 @@ function InstancesPageStatusIndicator({ staleMessage }: IndicatorProps) { title={title} titleSize="xxxs" textAlign="left" - className="monSummaryStatusNoWrap__stat" + css={summaryStatusNoWrapStatStyle} /> ); } diff --git a/x-pack/platform/plugins/private/monitoring/public/components/kibana/detail_status/index.js b/x-pack/platform/plugins/private/monitoring/public/components/kibana/detail_status/index.js index 5f82968177c5c..d841f8a452f08 100644 --- a/x-pack/platform/plugins/private/monitoring/public/components/kibana/detail_status/index.js +++ b/x-pack/platform/plugins/private/monitoring/public/components/kibana/detail_status/index.js @@ -5,17 +5,26 @@ * 2.0. */ -import { EuiBadge, EuiStat, EuiToolTip } from '@elastic/eui'; +import React from 'react'; +import { capitalize } from 'lodash'; +import { css } from '@emotion/react'; +import { EuiBadge, EuiStat, EuiToolTip, euiTextTruncate } from '@elastic/eui'; + import { i18n } from '@kbn/i18n'; import { useUiSetting } from '@kbn/kibana-react-plugin/public'; -import { capitalize } from 'lodash'; -import React from 'react'; + import { ExternalConfigContext } from '../../../application/contexts/external_config_context'; import { formatMetric } from '../../../lib/format_number'; import { DefaultStatusIndicator, SummaryStatus } from '../../summary_status'; import { formatLastSeenTimestamp } from '../format_last_seen_timestamp'; import { KibanaStatusIcon } from '../status_icon'; +const summaryStatusNoWrapStatStyle = css` + p { + ${euiTextTruncate()} + } +`; + export function DetailStatus({ stats }) { const { transport_address: transportAddress, @@ -77,12 +86,12 @@ export function DetailStatus({ stats }) { return ( ); }; diff --git a/x-pack/platform/plugins/private/monitoring/public/components/kibana/instances/instances.tsx b/x-pack/platform/plugins/private/monitoring/public/components/kibana/instances/instances.tsx index 1daebd5898e0a..121beddf66644 100644 --- a/x-pack/platform/plugins/private/monitoring/public/components/kibana/instances/instances.tsx +++ b/x-pack/platform/plugins/private/monitoring/public/components/kibana/instances/instances.tsx @@ -5,6 +5,9 @@ * 2.0. */ +import React, { Fragment } from 'react'; +import { css } from '@emotion/react'; +import { capitalize, get } from 'lodash'; import { EuiCallOut, EuiHealth, @@ -16,12 +19,14 @@ import { EuiScreenReaderOnly, EuiSpacer, EuiToolTip, + UseEuiTheme, + euiFontSize, } from '@elastic/eui'; + import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { useUiSetting } from '@kbn/kibana-react-plugin/public'; -import { capitalize, get } from 'lodash'; -import React, { Fragment } from 'react'; + import type { TableChange, Sorting, Pagination } from '../../../application/hooks/use_table'; import type { AlertsByName } from '../../../alerts/types'; import { KIBANA_SYSTEM_ID } from '../../../../common/constants'; @@ -40,6 +45,10 @@ import { ClusterStatus } from '../cluster_status'; import { formatLastSeenTimestamp } from '../format_last_seen_timestamp'; import type { SetupMode } from '../../setup_mode/types'; +const tableCellSplitNumber = (theme: UseEuiTheme) => css` + font-size: ${euiFontSize(theme, 'm').fontSize}; +`; + const getColumns = ( setupMode: SetupMode, alerts: AlertsByName, @@ -64,14 +73,12 @@ const getColumns = ( }; setupModeStatus = ( -
- -
+ ); if (status.isNetNewUser) { return ( @@ -188,10 +195,8 @@ const getColumns = ( return (
-
- {formatNumber(value, 'int_commas') + ' ms avg'} -
-
+
{formatNumber(value, 'int_commas') + ' ms avg'}
+
{formatNumber(kibana?.response_times?.max, 'int_commas')} ms max
@@ -319,7 +324,7 @@ export const KibanaInstances: React.FC = (props: Props) => { {setupModeCallOut} - +
{areSuggestionsVisible && !isLoadingSuggestions && suggestions.length > 0 ? ( - + {suggestions.map((suggestion, suggestionIndex) => ( ))} - + ) : null} - +
); } @@ -299,19 +306,16 @@ const withUnfocused = (state: AutocompleteFieldState) => ({ isFocused: false, }); -const AutocompleteContainer = euiStyled.div` +const autocompleteContainerCss = css` position: relative; `; -const SuggestionsPanel = euiStyled(EuiPanel).attrs(() => ({ - paddingSize: 'none', - hasShadow: true, -}))` +const suggestionsPanelCss = ({ euiTheme }: UseEuiTheme) => css` position: absolute; width: 100%; - margin-top: 2px; + ${logicalCSS('margin-top', euiTheme.size.xxs)} overflow-x: hidden; overflow-y: scroll; - z-index: ${euiThemeVars.euiZLevel1}; + z-index: ${euiTheme.levels.maskBelowHeader}; max-height: 322px; `; diff --git a/x-pack/platform/plugins/private/monitoring/public/components/kuery_bar/suggestion_item.tsx b/x-pack/platform/plugins/private/monitoring/public/components/kuery_bar/suggestion_item.tsx index 687ba1ebc5e63..5fd1d5fd7fa2a 100644 --- a/x-pack/platform/plugins/private/monitoring/public/components/kuery_bar/suggestion_item.tsx +++ b/x-pack/platform/plugins/private/monitoring/public/components/kuery_bar/suggestion_item.tsx @@ -5,11 +5,12 @@ * 2.0. */ -import { EuiIcon } from '@elastic/eui'; -import { transparentize } from 'polished'; import React from 'react'; +import { EuiIcon, UseEuiTheme, euiFontSize } from '@elastic/eui'; +import { css } from '@emotion/react'; +import { transparentize } from 'polished'; + import { QuerySuggestion, QuerySuggestionTypes } from '@kbn/unified-search-plugin/public'; -import { euiStyled } from '@kbn/kibana-react-plugin/common'; interface Props { isSelected?: boolean; @@ -18,69 +19,74 @@ interface Props { suggestion: QuerySuggestion; } -export const SuggestionItem: React.FC = (props) => { - const { isSelected, onClick, onMouseEnter, suggestion } = props; - +export const SuggestionItem: React.FC = ({ + isSelected = false, + onClick, + onMouseEnter, + suggestion, +}) => { return ( - - + // TODO: should be focusable and have relevant key events; try using an existing component from EUI + // eslint-disable-next-line jsx-a11y/click-events-have-key-events +
+
- - {suggestion.text} - {suggestion.description} - +
+
{suggestion.text}
+
{suggestion.description}
+
); }; -SuggestionItem.defaultProps = { - isSelected: false, -}; +const suggestionItemContainerStyle = (isSelected?: boolean) => (theme: UseEuiTheme) => + css` + display: flex; + flex-direction: row; + font-size: ${euiFontSize(theme, 's').fontSize}; + height: ${theme.euiTheme.size.xl}; + white-space: nowrap; + background-color: ${isSelected ? theme.euiTheme.colors.lightestShade : 'transparent'}; + `; -const SuggestionItemContainer = euiStyled.div<{ - isSelected?: boolean; -}>` - display: flex; - flex-direction: row; - font-size: ${(props) => props.theme.eui.euiFontSizeS}; - height: ${(props) => props.theme.eui.euiSizeXL}; - white-space: nowrap; - background-color: ${(props) => - props.isSelected ? props.theme.eui.euiColorLightestShade : 'transparent'}; -`; - -const SuggestionItemField = euiStyled.div` +const suggestionItemFieldStyle = ({ euiTheme }: UseEuiTheme) => css` align-items: center; cursor: pointer; display: flex; flex-direction: row; - height: ${(props) => props.theme.eui.euiSizeXL}; - padding: ${(props) => props.theme.eui.euiSizeXS}; + height: ${euiTheme.size.xl}; + padding: ${euiTheme.size.xs}; `; -const SuggestionItemIconField = euiStyled(SuggestionItemField)<{ - suggestionType: QuerySuggestionTypes; -}>` - background-color: ${(props) => - transparentize(0.9, getEuiIconColor(props.theme, props.suggestionType))}; - color: ${(props) => getEuiIconColor(props.theme, props.suggestionType)}; - flex: 0 0 auto; - justify-content: center; - width: ${(props) => props.theme.eui.euiSizeXL}; -`; +const suggestionItemIconFieldStyle = + (suggestionType: QuerySuggestionTypes) => (theme: UseEuiTheme) => + css` + ${suggestionItemFieldStyle(theme)}; + background-color: ${transparentize(0.9, getEuiIconColor(theme, suggestionType))}; + color: ${getEuiIconColor(theme, suggestionType)}; + flex: 0 0 auto; + justify-content: center; + width: ${theme.euiTheme.size.xl}; + `; -const SuggestionItemTextField = euiStyled(SuggestionItemField)` +const suggestionItemTextFieldStyle = (theme: UseEuiTheme) => css` + ${suggestionItemFieldStyle(theme)}; flex: 2 0 0; - font-family: ${(props) => props.theme.eui.euiCodeFontFamily}; + font-family: ${theme.euiTheme.font.familyCode}; `; -const SuggestionItemDescriptionField = euiStyled(SuggestionItemField)` +const suggestionItemDescriptionFieldStyle = (theme: UseEuiTheme) => css` + ${suggestionItemFieldStyle(theme)}; flex: 3 0 0; p { display: inline; span { - font-family: ${(props) => props.theme.eui.euiCodeFontFamily}; + font-family: ${theme.euiTheme.font.familyCode}; } } `; @@ -102,18 +108,21 @@ const getEuiIconType = (suggestionType: QuerySuggestionTypes) => { } }; -const getEuiIconColor = (theme: any, suggestionType: QuerySuggestionTypes): string => { +const getEuiIconColor = ( + { euiTheme }: UseEuiTheme, + suggestionType: QuerySuggestionTypes +): string => { switch (suggestionType) { case QuerySuggestionTypes.Field: - return theme?.eui.euiColorVis7; + return euiTheme.colors.vis.euiColorVis7; case QuerySuggestionTypes.Value: - return theme?.eui.euiColorVis0; + return euiTheme.colors.vis.euiColorVis0; case QuerySuggestionTypes.Operator: - return theme?.eui.euiColorVis1; + return euiTheme.colors.vis.euiColorVis1; case QuerySuggestionTypes.Conjunction: - return theme?.eui.euiColorVis2; + return euiTheme.colors.vis.euiColorVis2; case QuerySuggestionTypes.RecentSearch: default: - return theme?.eui.euiColorMediumShade; + return euiTheme.colors.mediumShade; } }; diff --git a/x-pack/platform/plugins/private/monitoring/public/components/logstash/listing/__snapshots__/listing.test.js.snap b/x-pack/platform/plugins/private/monitoring/public/components/logstash/listing/__snapshots__/listing.test.js.snap index 2e01fce7247dc..bc6cd4649a048 100644 --- a/x-pack/platform/plugins/private/monitoring/public/components/logstash/listing/__snapshots__/listing.test.js.snap +++ b/x-pack/platform/plugins/private/monitoring/public/components/logstash/listing/__snapshots__/listing.test.js.snap @@ -2,7 +2,6 @@ exports[`Listing should render with certain data pieces missing 1`] = ` - -
+ ); } @@ -202,7 +200,7 @@ export class Listing extends PureComponent { {setupModeCallOut} css` + font-size: ${euiFontSize(theme, 'l').fontSize}; +`; + export class PipelineListing extends Component { tooltipXValueFormatter(xValue, dateFormat) { return moment(xValue).format(dateFormat); @@ -76,7 +84,7 @@ export class PipelineListing extends Component { options={{ xaxis: throughput.timeRange }} /> - + {formatMetric(value, '0.[0]a', throughput.metric.units)} @@ -108,7 +116,7 @@ export class PipelineListing extends Component { options={{ xaxis: nodesCount.timeRange }} /> - + {formatMetric(value, '0a')} @@ -128,8 +136,7 @@ export class PipelineListing extends Component { } render() { - const { data, sorting, pagination, onTableChange, upgradeMessage, className, ...props } = - this.props; + const { data, sorting, pagination, onTableChange, upgradeMessage, ...props } = this.props; const sortingOptions = sorting || { field: 'id', direction: 'asc' }; if (sortingOptions.field === 'name') { @@ -152,7 +159,7 @@ export class PipelineListing extends Component { diff --git a/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/__snapshots__/detail_drawer.test.js.snap b/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/__snapshots__/detail_drawer.test.js.snap index 7bf74a1d57791..63ef44025ad2e 100644 --- a/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/__snapshots__/detail_drawer.test.js.snap +++ b/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/__snapshots__/detail_drawer.test.js.snap @@ -13,9 +13,7 @@ exports[`DetailDrawer component If vertices shows basic info and no stats for if - + @@ -66,9 +64,7 @@ exports[`DetailDrawer component Plugin vertices Plugin does not have explicit ID - + @@ -114,7 +110,17 @@ exports[`DetailDrawer component Plugin vertices Plugin does not have explicit ID
- + @@ -357,7 +391,17 @@ exports[`DetailDrawer component Plugin vertices Plugin has explicit ID shows bas
- + @@ -603,9 +675,7 @@ exports[`DetailDrawer component shows vertex title 1`] = ` - + diff --git a/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/__snapshots__/metric.test.js.snap b/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/__snapshots__/metric.test.js.snap index b9a4e1db36f68..26fd05f6d57b0 100644 --- a/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/__snapshots__/metric.test.js.snap +++ b/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/__snapshots__/metric.test.js.snap @@ -2,12 +2,12 @@ exports[`Metric component does not render warning badge when no warning present 1`] = ` @@ -19,11 +19,10 @@ exports[`Metric component does not render warning badge when no warning present exports[`Metric component renders warning badge 1`] = ` 220 diff --git a/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/__snapshots__/pipeline_viewer.test.js.snap b/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/__snapshots__/pipeline_viewer.test.js.snap index e6ef946a8108c..8df1ace748e43 100644 --- a/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/__snapshots__/pipeline_viewer.test.js.snap +++ b/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/__snapshots__/pipeline_viewer.test.js.snap @@ -13,7 +13,7 @@ exports[`PipelineViewer component passes expected props 1`] = ` @@ -20,8 +20,8 @@ exports[`PluginStatement component adds warning highlight for cpu time 1`] = ` > @@ -75,7 +75,7 @@ exports[`PluginStatement component adds warning highlight for cpu time 1`] = ` exports[`PluginStatement component adds warning highlight for event millis 1`] = ` @@ -92,8 +92,8 @@ exports[`PluginStatement component adds warning highlight for event millis 1`] = > @@ -147,7 +147,7 @@ exports[`PluginStatement component adds warning highlight for event millis 1`] = exports[`PluginStatement component does not render explicit id field if no id is specified 1`] = ` @@ -164,8 +164,8 @@ exports[`PluginStatement component does not render explicit id field if no id is > @@ -197,7 +197,7 @@ exports[`PluginStatement component does not render explicit id field if no id is exports[`PluginStatement component renders input metrics and explicit id fields 1`] = ` @@ -214,8 +214,8 @@ exports[`PluginStatement component renders input metrics and explicit id fields > @@ -257,7 +257,7 @@ exports[`PluginStatement component renders input metrics and explicit id fields exports[`PluginStatement component renders processor statement metrics 1`] = ` @@ -274,8 +274,8 @@ exports[`PluginStatement component renders processor statement metrics 1`] = ` > diff --git a/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/__snapshots__/queue.test.js.snap b/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/__snapshots__/queue.test.js.snap index 6f80a5b70f629..be23f040fe9b8 100644 --- a/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/__snapshots__/queue.test.js.snap +++ b/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/__snapshots__/queue.test.js.snap @@ -10,7 +10,7 @@ exports[`Queue component renders default elements 1`] = ` size="s" />
else @@ -40,7 +40,7 @@ exports[`Statement component renders a CollapsibleStatement with if body for bra className="monPipelineViewer__listItem" >
if @@ -85,7 +85,7 @@ exports[`Statement component renders a PluginStatement component for plugin mode className="monPipelineViewer__listItem" >
0 1`] = ` className="monPipelineViewer__listItem" >
@@ -146,7 +146,7 @@ exports[`Statement component renders spacers for element with depth > 0 1`] = ` size="xs" > else diff --git a/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/collapsible_statement.scss b/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/collapsible_statement.scss deleted file mode 100644 index 0f5e5bd0d081f..0000000000000 --- a/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/collapsible_statement.scss +++ /dev/null @@ -1,3 +0,0 @@ -.monPipelineViewer__collapsibleStatement { - padding-left: $euiSizeM; -} diff --git a/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/collapsible_statement.js b/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/collapsible_statement.tsx similarity index 56% rename from x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/collapsible_statement.js rename to x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/collapsible_statement.tsx index 458eefdebfbab..430801133be42 100644 --- a/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/collapsible_statement.js +++ b/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/collapsible_statement.tsx @@ -6,18 +6,33 @@ */ import React from 'react'; -import PropTypes from 'prop-types'; +import { css } from '@emotion/react'; -import { EuiButtonIcon, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; -import './collapsible_statement.scss'; +import { EuiButtonIcon, EuiFlexGroup, EuiFlexItem, logicalCSS, UseEuiTheme } from '@elastic/eui'; -function getToggleIconType(isCollapsed) { +const collapsibleStatementStyle = ({ euiTheme }: UseEuiTheme) => css` + ${logicalCSS('padding-left', euiTheme.size.m)} +`; + +function getToggleIconType(isCollapsed: boolean) { return isCollapsed ? 'arrowRight' : 'arrowDown'; } -export function CollapsibleStatement(props) { - const { collapse, expand, id, isCollapsed } = props; +interface CollapsibleStatementProps { + children: React.ReactNode; + collapse: (id: string) => void; + expand: (id: string) => void; + id: string; + isCollapsed: boolean; +} +export function CollapsibleStatement({ + children, + collapse, + expand, + id, + isCollapsed, +}: CollapsibleStatementProps) { const toggleClicked = () => { if (isCollapsed) { expand(id); @@ -28,10 +43,10 @@ export function CollapsibleStatement(props) { return ( - {props.children} + {children} ); } - -CollapsibleStatement.propTypes = { - collapse: PropTypes.func.isRequired, - expand: PropTypes.func.isRequired, - id: PropTypes.string.isRequired, - isCollapsed: PropTypes.bool.isRequired, -}; diff --git a/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/detail_drawer.js b/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/detail_drawer.js index 3141c633424f4..e1048b93e2d77 100644 --- a/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/detail_drawer.js +++ b/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/detail_drawer.js @@ -7,6 +7,7 @@ import React from 'react'; import { last } from 'lodash'; +import { css } from '@emotion/react'; import { EuiBadge, EuiCodeBlock, @@ -24,13 +25,19 @@ import { EuiText, EuiTitle, } from '@elastic/eui'; + +import { FormattedMessage } from '@kbn/i18n-react'; + import { Sparkline } from '../../../sparkline'; import { formatMetric } from '../../../../lib/format_number'; -import { FormattedMessage } from '@kbn/i18n-react'; -import './detail_drawer.scss'; + +// TODO: Why is this width here? +const lspvDetailDrawerSparklineContainerStyle = css` + width: 7vw; +`; function renderIcon(vertex) { - return ; + return ; } function renderPluginBasicStats(vertex, timeseriesTooltipXValueFormatter) { @@ -50,7 +57,7 @@ function renderPluginBasicStats(vertex, timeseriesTooltipXValueFormatter) { /> -
+
-
+
-
+
-
+
- {value} - - ); - } else { - stylizedValue = ( - - {value} - - ); - } - return ( - - {stylizedValue} - - ); -} - -Metric.propTypes = { - className: PropTypes.string.isRequired, - value: PropTypes.string.isRequired, - warning: PropTypes.bool, -}; diff --git a/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/metric.scss b/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/metric.scss deleted file mode 100644 index 71b16cdaf3ff4..0000000000000 --- a/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/metric.scss +++ /dev/null @@ -1,27 +0,0 @@ -.monPipelineViewer__metric { - text-align: right; - - &--cpuTime { - width: $euiSizeXXL; - } - - &--events, - &--eventsEmitted { - width: $euiSizeXXL * 4; - } - - &--eventMillis { - width: $euiSizeXXL * 2; - } -} - -@include euiBreakpoint('m') { - .monPipelineViewer__metricFlexItem { - margin-bottom: $euiSizeXS !important; // sass-lint:disable-line no-important - } - - .monPipelineViewer__metric { - text-align: left; - padding-left: $euiSizeXL; - } -} diff --git a/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/metric.tsx b/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/metric.tsx new file mode 100644 index 0000000000000..244c33f275a4e --- /dev/null +++ b/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/metric.tsx @@ -0,0 +1,74 @@ +/* + * 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 { css } from '@emotion/react'; +import { EuiFlexItem, EuiBadge, EuiText, UseEuiTheme, logicalCSS } from '@elastic/eui'; + +type Type = 'cpuTime' | 'events' | 'eventsEmitted' | 'eventMillis'; + +const metricStyle = + (type: Type) => + ({ euiTheme }: UseEuiTheme) => { + let width: string; + + switch (type) { + case 'cpuTime': + width = euiTheme.size.xxl; + break; + case 'events': + case 'eventsEmitted': + width = `calc(${euiTheme.size.xxl} * 4)`; + break; + case 'eventMillis': + width = `calc(${euiTheme.size.xxl} * 2)`; + break; + default: + width = 'auto'; + } + + return css` + text-align: right; + width: ${width}; + + @media (min-width: ${euiTheme.breakpoint.m}) { + text-align: left; + ${logicalCSS('padding-left', euiTheme.size.xl)} + } + `; + }; + +const metricFlexItemStyle = ({ euiTheme }: UseEuiTheme) => css` + @media (min-width: ${euiTheme.breakpoint.m}) { + ${logicalCSS('margin-bottom', euiTheme.size.xs)} + } +`; + +interface MetricProps { + type: Type; + value: string; + warning?: boolean; +} + +export function Metric({ type, warning, value }: MetricProps) { + let stylizedValue; + + if (warning) { + stylizedValue = {value}; + } else { + stylizedValue = ( + + {value} + + ); + } + return ( + + {stylizedValue} + + ); +} diff --git a/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/pipeline_viewer.js b/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/pipeline_viewer.js index 8ca913d34a8ea..7e09e7da854e4 100644 --- a/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/pipeline_viewer.js +++ b/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/pipeline_viewer.js @@ -52,7 +52,7 @@ export class PipelineViewer extends React.Component { />

- + css` + ${logicalCSS('margin-left', euiTheme.size.xs)} +`; + +const pluginStatementStyle = ({ euiTheme }: UseEuiTheme) => css` + ${logicalCSS('padding-left', euiTheme.size.m)} +`; -function getInputStatementMetrics({ latestEventsPerSecond }) { +function getInputStatementMetrics({ latestEventsPerSecond }: Vertex) { return [ , ]; } -function getProcessorStatementMetrics(processorVertex) { +function getProcessorStatementMetrics(processorVertex: Vertex) { const { latestMillisPerEvent, latestEventsPerSecond, percentOfTotalProcessorTime } = processorVertex; return [ , , , ]; } -function renderPluginStatementMetrics(pluginType, vertex) { +function renderPluginStatementMetrics(pluginType: string, vertex: Vertex) { return pluginType === 'input' ? getInputStatementMetrics(vertex) : getProcessorStatementMetrics(vertex); } +interface Statement { + hasExplicitId: boolean; + id: string; + name: string; + pluginType: string; + vertex: Vertex; +} + +interface PluginStatementProps { + onShowVertexDetails: (vertex: Vertex) => void; + statement: Statement; +} + export function PluginStatement({ statement: { hasExplicitId, id, name, pluginType, vertex }, onShowVertexDetails, -}) { +}: PluginStatementProps) { const statementMetrics = renderPluginStatementMetrics(pluginType, vertex); + const onNameButtonClick = () => { onShowVertexDetails(vertex); }; @@ -68,7 +99,7 @@ export function PluginStatement({ return ( @@ -77,8 +108,8 @@ export function PluginStatement({ {id} @@ -112,18 +141,3 @@ export function PluginStatement({ ); } - -PluginStatement.propTypes = { - onShowVertexDetails: PropTypes.func.isRequired, - statement: PropTypes.shape({ - hasExplicitId: PropTypes.bool.isRequired, - id: PropTypes.string.isRequired, - name: PropTypes.string.isRequired, - pluginType: PropTypes.string.isRequired, - vertex: PropTypes.shape({ - latestEventsPerSecond: PropTypes.number.isRequired, - latestMillisPerEvent: PropTypes.number, - percentOfTotalProcessorTime: PropTypes.number, - }).isRequired, - }).isRequired, -}; diff --git a/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/queue.scss b/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/queue.scss deleted file mode 100644 index 60bac9f41b991..0000000000000 --- a/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/queue.scss +++ /dev/null @@ -1,4 +0,0 @@ -.monPipelineViewer__queueMessage { - margin-left: $euiSizeL; - color: $euiColorDarkShade; -} diff --git a/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/queue.js b/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/queue.tsx similarity index 70% rename from x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/queue.js rename to x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/queue.tsx index 8b138da7dd012..5b98f67545090 100644 --- a/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/queue.js +++ b/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/queue.tsx @@ -6,17 +6,24 @@ */ import React from 'react'; -import { StatementListHeading } from './statement_list_heading'; -import { EuiSpacer, EuiText } from '@elastic/eui'; +import { css } from '@emotion/react'; +import { EuiSpacer, EuiText, UseEuiTheme, logicalCSS } from '@elastic/eui'; + import { FormattedMessage } from '@kbn/i18n-react'; -import './queue.scss'; + +import { StatementListHeading } from './statement_list_heading'; + +const queueMessageStyle = ({ euiTheme }: UseEuiTheme) => css` + ${logicalCSS('margin-left', euiTheme.size.l)} + color: ${euiTheme.colors.darkShade}; +`; export function Queue() { return (
- + - - {name} - - - ); -} - -function renderIfStatement({ condition }, onVertexSelected) { - return [ - renderStatementName('if', onVertexSelected), - - - {condition} - - , - ]; -} - -function getStatementBody(isIf, statement, vertex, onShowVertexDetails) { - const showVertexDetailsClicked = () => { - onShowVertexDetails(vertex); - }; - - return isIf - ? renderIfStatement(statement, showVertexDetailsClicked) - : renderStatementName('else', showVertexDetailsClicked); -} - -function renderNestingSpacers(depth) { - const spacers = []; - for (let i = 0; i < depth; i += 1) { - spacers.push(
); - } - return spacers; -} - -function renderStatement({ - collapse, - element, - element: { - id, - statement, - statement: { vertex }, - }, - expand, - isCollapsed, - onShowVertexDetails, -}) { - if (statement instanceof PluginStatementModel) { - return ; - } - - const statementBody = getStatementBody( - element instanceof IfElement, - statement, - vertex, - onShowVertexDetails - ); - - return ( - - {statementBody} - - ); -} - -export function Statement(props) { - const { depth } = props.element; - - return ( -
  • -
    {renderNestingSpacers(depth)}
    - {renderStatement(props)} -
  • - ); -} - -Statement.propTypes = { - collapse: PropTypes.func.isRequired, - element: PropTypes.shape({ - depth: PropTypes.number.isRequired, - id: PropTypes.string.isRequired, - statement: PropTypes.object.isRequired, - }).isRequired, - expand: PropTypes.func.isRequired, - isCollapsed: PropTypes.bool.isRequired, - onShowVertexDetails: PropTypes.func.isRequired, -}; diff --git a/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/statement.scss b/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/statement.scss deleted file mode 100644 index 00d139463af50..0000000000000 --- a/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/statement.scss +++ /dev/null @@ -1,47 +0,0 @@ -.monPipelineViewer__spaceContainer { - background-color: $euiColorEmptyShade; - align-self: stretch; - display: flex; - // Separates the left border spaces properly - border-bottom: solid 2px $euiColorEmptyShade; -} - -.monPipelineViewer__spacer { - width: $euiSizeM; - align-self: stretch; - margin-left: $euiSizeM; - border-left: 1px $euiBorderColor dashed; - - // This allows the border to be flush - &:last-child { - width: 0; - } - - &:first-child { - // Odd number is because of the single pixel border. - margin-left: $euiSizeL - 1px; - } -} - -.monPipelineViewer__list { - .monPipelineViewer__listItem { - display: flex; - min-height: $euiSizeXL; - align-items: center; - padding-right: $euiSizeM; - - &:nth-child(2n + 1) { - background: tintOrShade($euiColorLightestShade, 2%, 2%); - } - } -} - -.monPipelineViewer__conditional { - font-weight: bold; -} - -@include euiBreakpoint('m') { - .monPipelineViewer__spacer { - border: none; - } -} diff --git a/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/statement.tsx b/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/statement.tsx new file mode 100644 index 0000000000000..718603b06ef63 --- /dev/null +++ b/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/statement.tsx @@ -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 React, { MouseEventHandler } from 'react'; +import { css } from '@emotion/react'; +import { EuiButtonEmpty, EuiCodeBlock, EuiFlexItem, logicalCSS, UseEuiTheme } from '@elastic/eui'; + +import { PluginStatement as PluginStatementModel } from '../models/pipeline/plugin_statement'; +import { CollapsibleStatement } from './collapsible_statement'; +import { IfElement } from '../models/list/if_element'; +import { PluginStatement } from './plugin_statement'; +import { Vertex } from './types'; + +const spaceContainerStyle = ({ euiTheme }: UseEuiTheme) => css` + background-color: ${euiTheme.colors.backgroundBasePlain}; + align-self: stretch; + display: flex; + // Separates the left border spaces properly + ${logicalCSS('border-bottom', `solid 2px ${euiTheme.colors.emptyShade}`)} +`; + +const spacerStyle = ({ euiTheme }: UseEuiTheme) => css` + width: ${euiTheme.size.m}; + align-self: stretch; + ${logicalCSS('margin-left', euiTheme.size.m)} + ${logicalCSS('border-left', `1px ${euiTheme.border.color} dashed`)} + + // This allows the border to be flush + &:last-child { + width: 0; + } + + &:first-child { + // Odd number is because of the single pixel border + ${logicalCSS('margin-left', `calc(${euiTheme.size.l}) - 1px)`)} + } + + @media (min-width: var(${euiTheme.breakpoint.m})) { + border: none; + } +`; + +const listItemStyle = ({ euiTheme }: UseEuiTheme) => css` + display: flex; + min-height: ${euiTheme.size.xl}; + align-items: center; + ${logicalCSS('padding-right', euiTheme.size.m)} + + &:nth-child(2n + 1) { + background: ${euiTheme.colors.lightestShade}; + } +`; + +const conditionalStyle = ({ euiTheme }: UseEuiTheme) => css` + font-weight: ${euiTheme.font.weight.bold}; +`; + +function renderStatementName(name: string, onVertexSelected: MouseEventHandler) { + return ( + + + {name} + + + ); +} + +function renderIfStatement( + { condition }: { vertex?: Vertex; condition?: string }, + onVertexSelected: MouseEventHandler +) { + return [ + renderStatementName('if', onVertexSelected), + + + {condition} + + , + ]; +} + +function getStatementBody( + isIf: boolean, + statement: { vertex?: Vertex; condition?: string }, + vertex: Vertex, + onShowVertexDetails: (vertex: Vertex) => void +) { + const showVertexDetailsClicked = () => { + onShowVertexDetails(vertex); + }; + + return isIf + ? renderIfStatement(statement, showVertexDetailsClicked) + : renderStatementName('else', showVertexDetailsClicked); +} + +function renderNestingSpacers(depth: number) { + const spacers = []; + + for (let i = 0; i < depth; i += 1) { + spacers.push(
    ); + } + + return spacers; +} + +interface StatementProps { + collapse: () => void; + element: { + depth: number; + id: string; + statement: { + vertex: Vertex; + }; + }; + expand: () => void; + isCollapsed: boolean; + onShowVertexDetails: (vertex: Vertex) => void; +} + +function renderStatement({ + collapse, + element, + element: { + id, + statement, + statement: { vertex }, + }, + expand, + isCollapsed, + onShowVertexDetails, +}: StatementProps) { + if (statement instanceof PluginStatementModel) { + return ; + } + + const statementBody = getStatementBody( + element instanceof IfElement, + statement, + vertex, + onShowVertexDetails + ); + + return ( + + {statementBody} + + ); +} + +export function Statement(props: StatementProps) { + const { depth } = props.element; + + return ( +
  • +
    {renderNestingSpacers(depth)}
    + {renderStatement(props)} +
  • + ); +} diff --git a/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/types.ts b/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/types.ts new file mode 100644 index 0000000000000..6721b78ed1dfe --- /dev/null +++ b/x-pack/platform/plugins/private/monitoring/public/components/logstash/pipeline_viewer/views/types.ts @@ -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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export interface Vertex { + latestEventsPerSecond: number; + latestMillisPerEvent?: number; + percentOfTotalProcessorTime?: number; + isTimeConsuming: () => boolean; + isSlow: () => boolean; +} diff --git a/x-pack/platform/plugins/private/monitoring/public/components/sparkline/__snapshots__/index.test.js.snap b/x-pack/platform/plugins/private/monitoring/public/components/sparkline/__snapshots__/index.test.js.snap index f52e00b4432c0..31d8fe985f96b 100644 --- a/x-pack/platform/plugins/private/monitoring/public/components/sparkline/__snapshots__/index.test.js.snap +++ b/x-pack/platform/plugins/private/monitoring/public/components/sparkline/__snapshots__/index.test.js.snap @@ -3,7 +3,11 @@ exports[`Sparkline component does not show tooltip initially 1`] = `
    `; @@ -11,7 +15,11 @@ exports[`Sparkline component does not show tooltip initially 1`] = ` exports[`Sparkline component shows tooltip on hover 1`] = `
    1513814914
    25
    css` + font-weight: ${theme.euiTheme.font.weight.regular}; + background: ${transparentize(0.3, theme.euiTheme.colors.darkestShade)}; + font-size: ${euiFontSize(theme, 'xs').fontSize}; + padding: ${theme.euiTheme.size.xs}; + border-radius: ${theme.euiTheme.border.radius.medium}; + pointer-events: none; +`; + +const tooltipXValueStyle = ({ euiTheme }) => css` + color: ${transparentize(0.3, euiTheme.colors.ghost)}; +`; + +const tooltipYValueStyle = ({ euiTheme }) => css` + color: ${euiTheme.colors.ghost}; +`; + +const tooltipContainerStyle = ({ euiTheme }) => css` + position: fixed; + z-index: ${euiTheme.levels.menu}; + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; +`; + +const tooltipCaretStyle = (theme) => css` + font-size: ${euiFontSize(theme, 'l').fontSize}; + color: ${transparentize(0.3, theme.euiTheme.colors.darkestShade)}; + display: none; +`; export class Sparkline extends React.Component { constructor(props) { @@ -97,17 +133,21 @@ export class Sparkline extends React.Component { } return ( -
    - -
    -
    +
    + +
    +
    {this.props.tooltip.yValueFormatter(this.state.tooltip.yValue)}
    -
    +
    {this.props.tooltip.xValueFormatter(this.state.tooltip.xValue)}
    - +
    ); } @@ -124,7 +164,7 @@ export class Sparkline extends React.Component { render() { return (
    -
    +
    {this.renderTooltip()}
    ); diff --git a/x-pack/platform/plugins/private/monitoring/public/components/sparkline/sparkline.scss b/x-pack/platform/plugins/private/monitoring/public/components/sparkline/sparkline.scss deleted file mode 100644 index 2873b9ff444d7..0000000000000 --- a/x-pack/platform/plugins/private/monitoring/public/components/sparkline/sparkline.scss +++ /dev/null @@ -1,36 +0,0 @@ -.monSparkline { - height: 2em; -} - -// SASSTODO: Replace with EUI tooltip -.monSparklineTooltip { - font-weight: normal; - background: transparentize($euiColorDarkestShade, .3); - font-size: $euiFontSizeXS; - padding: $euiSizeXS; - border-radius: $euiBorderRadius; - pointer-events: none; -} - -.monSparklineTooltip__xValue { - color: transparentize($euiColorGhost, .3); -} - -.monSparklineTooltip__yValue { - color: $euiColorGhost; -} - -.monSparklineTooltip__caret { - font-size: $euiFontSizeL; - color: transparentize($euiColorDarkestShade, .3); - display: none; -} - -.monSparklineTooltip__container { - position: fixed; - z-index: $euiZContentMenu; - display: flex; - flex-direction: row; - justify-content: center; - align-items: center; -} diff --git a/x-pack/platform/plugins/private/monitoring/public/components/status_icon/_status_icon.scss b/x-pack/platform/plugins/private/monitoring/public/components/status_icon/_status_icon.scss deleted file mode 100644 index 50c705f80650e..0000000000000 --- a/x-pack/platform/plugins/private/monitoring/public/components/status_icon/_status_icon.scss +++ /dev/null @@ -1,25 +0,0 @@ -.monStatusIcon { - display: inline-block; - margin-left: $euiSizeXS; - padding: calc($euiSizeXS / 2) $euiSizeS; - border-radius: $euiBorderRadius; - color: $euiColorGhost; - min-width: 1.9em; - text-align: center; -} - -.monStatusIcon--green { - background-color: $euiColorSuccess; -} - -.monStatusIcon--red { - background-color: $euiColorDanger; -} - -.monStatusIcon--yellow { - background-color: $euiColorWarning; -} - -.monStatusIcon--gray { - background-color: $euiTextColor; -} diff --git a/x-pack/platform/plugins/private/monitoring/public/components/status_icon/index.tsx b/x-pack/platform/plugins/private/monitoring/public/components/status_icon/index.tsx index 59c87866d57d3..01065c7eb9afc 100644 --- a/x-pack/platform/plugins/private/monitoring/public/components/status_icon/index.tsx +++ b/x-pack/platform/plugins/private/monitoring/public/components/status_icon/index.tsx @@ -26,6 +26,7 @@ export interface StatusIconProps { type: keyof typeof STATUS_ICON_TYPES; label: string; } + export const StatusIcon: React.FunctionComponent = ({ type, label }) => { const icon = typeToIconMap[type]; diff --git a/x-pack/platform/plugins/private/monitoring/public/components/summary_status/__snapshots__/summary_status.test.js.snap b/x-pack/platform/plugins/private/monitoring/public/components/summary_status/__snapshots__/summary_status.test.js.snap index 8c6dc9bd29ee5..c1fa59647e064 100644 --- a/x-pack/platform/plugins/private/monitoring/public/components/summary_status/__snapshots__/summary_status.test.js.snap +++ b/x-pack/platform/plugins/private/monitoring/public/components/summary_status/__snapshots__/summary_status.test.js.snap @@ -1,9 +1,7 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`Summary Status Component should allow label to be optional 1`] = ` -
    +
    @@ -12,7 +10,7 @@ exports[`Summary Status Component should allow label to be optional 1`] = ` style="max-width:200px" >
    +
    @@ -99,7 +95,7 @@ exports[`Summary Status Component should allow status to be optional 1`] = ` style="max-width:200px" >
    +
    @@ -153,7 +147,7 @@ exports[`Summary Status Component should render metrics in a summary bar 1`] = ` style="max-width:200px" >
    css` + ${logicalCSS('margin-left', euiTheme.size.m)} + ${logicalCSS('margin-right', euiTheme.size.m)} +`; + +const summaryStatusNoWrapStatStyle = css` + p { + ${euiTextTruncate()} + } +`; interface Metrics { label: string; @@ -46,7 +66,7 @@ const wrapChild = ({ label, value, ...props }: Metrics, index: number) => ( > +
    } titleSize="xxxs" textAlign="left" - className="monSummaryStatusNoWrap__stat" + css={summaryStatusNoWrapStatStyle} description={i18n.translate('xpack.monitoring.summaryStatus.alertsDescription', { defaultMessage: 'Alerts', })} diff --git a/x-pack/platform/plugins/private/monitoring/public/components/table/eui_table.tsx b/x-pack/platform/plugins/private/monitoring/public/components/table/eui_table.tsx index a383fcf1cd666..4f4f17c425a29 100644 --- a/x-pack/platform/plugins/private/monitoring/public/components/table/eui_table.tsx +++ b/x-pack/platform/plugins/private/monitoring/public/components/table/eui_table.tsx @@ -67,15 +67,15 @@ export const EuiMonitoringTable: FunctionComponent> = ({ } return ( -
    +
    {footerContent}
    diff --git a/x-pack/platform/plugins/private/monitoring/public/components/table/eui_table_ssp.js b/x-pack/platform/plugins/private/monitoring/public/components/table/eui_table_ssp.js index 0c12e91512bd4..5fb8bb581bf2e 100644 --- a/x-pack/platform/plugins/private/monitoring/public/components/table/eui_table_ssp.js +++ b/x-pack/platform/plugins/private/monitoring/public/components/table/eui_table_ssp.js @@ -100,7 +100,7 @@ export function EuiMonitoringSSPTable({ }; return ( -
    +
    { diff --git a/x-pack/platform/plugins/private/upgrade_assistant/server/routes/cloud_backup_status.ts b/x-pack/platform/plugins/private/upgrade_assistant/server/routes/cloud_backup_status.ts index 17b80f6a685b3..0ae3b03eb7618 100644 --- a/x-pack/platform/plugins/private/upgrade_assistant/server/routes/cloud_backup_status.ts +++ b/x-pack/platform/plugins/private/upgrade_assistant/server/routes/cloud_backup_status.ts @@ -15,7 +15,16 @@ export function registerCloudBackupStatusRoutes({ }: RouteDependencies) { // GET most recent Cloud snapshot router.get( - { path: `${API_BASE_PATH}/cloud_backup_status`, validate: false }, + { + path: `${API_BASE_PATH}/cloud_backup_status`, + security: { + authz: { + enabled: false, + reason: 'Relies on es client for authorization', + }, + }, + validate: false, + }, versionCheckHandlerWrapper(async (context, request, response) => { const { client: clusterClient } = (await context.core).elasticsearch; diff --git a/x-pack/platform/plugins/private/upgrade_assistant/server/routes/cluster_settings.ts b/x-pack/platform/plugins/private/upgrade_assistant/server/routes/cluster_settings.ts index d85123ab3e7d6..c264df3eceaf5 100644 --- a/x-pack/platform/plugins/private/upgrade_assistant/server/routes/cluster_settings.ts +++ b/x-pack/platform/plugins/private/upgrade_assistant/server/routes/cluster_settings.ts @@ -17,6 +17,12 @@ export function registerClusterSettingsRoute({ router.post( { path: `${API_BASE_PATH}/cluster_settings`, + security: { + authz: { + enabled: false, + reason: 'Relies on es client for authorization', + }, + }, validate: { body: schema.object({ settings: schema.arrayOf(schema.string()), diff --git a/x-pack/platform/plugins/private/upgrade_assistant/server/routes/cluster_upgrade_status.ts b/x-pack/platform/plugins/private/upgrade_assistant/server/routes/cluster_upgrade_status.ts index 4ae1205d2daef..3f930ca0a67d0 100644 --- a/x-pack/platform/plugins/private/upgrade_assistant/server/routes/cluster_upgrade_status.ts +++ b/x-pack/platform/plugins/private/upgrade_assistant/server/routes/cluster_upgrade_status.ts @@ -11,7 +11,16 @@ import { RouteDependencies } from '../types'; export function registerClusterUpgradeStatusRoutes({ router }: RouteDependencies) { router.get( - { path: `${API_BASE_PATH}/cluster_upgrade_status`, validate: false }, + { + path: `${API_BASE_PATH}/cluster_upgrade_status`, + security: { + authz: { + enabled: false, + reason: 'Lightweight endpoint', + }, + }, + validate: false, + }, // We're just depending on the version check to return a 426. // Otherwise we just return a 200. versionCheckHandlerWrapper(async (context, request, response) => { diff --git a/x-pack/platform/plugins/private/upgrade_assistant/server/routes/deprecation_logging.ts b/x-pack/platform/plugins/private/upgrade_assistant/server/routes/deprecation_logging.ts index 6770869233ab8..65771c0b85815 100644 --- a/x-pack/platform/plugins/private/upgrade_assistant/server/routes/deprecation_logging.ts +++ b/x-pack/platform/plugins/private/upgrade_assistant/server/routes/deprecation_logging.ts @@ -28,6 +28,12 @@ export function registerDeprecationLoggingRoutes({ router.get( { path: `${API_BASE_PATH}/deprecation_logging`, + security: { + authz: { + enabled: false, + reason: 'Relies on es client for authorization', + }, + }, validate: false, }, versionCheckHandlerWrapper(async ({ core }, request, response) => { @@ -46,6 +52,12 @@ export function registerDeprecationLoggingRoutes({ router.put( { path: `${API_BASE_PATH}/deprecation_logging`, + security: { + authz: { + enabled: false, + reason: 'Relies on es client for authorization', + }, + }, validate: { body: schema.object({ isEnabled: schema.boolean(), @@ -70,6 +82,12 @@ export function registerDeprecationLoggingRoutes({ router.get( { path: `${API_BASE_PATH}/deprecation_logging/count`, + security: { + authz: { + enabled: false, + reason: 'Relies on es client for authorization', + }, + }, validate: { query: schema.object({ from: schema.string(), @@ -124,6 +142,12 @@ export function registerDeprecationLoggingRoutes({ router.delete( { path: `${API_BASE_PATH}/deprecation_logging/cache`, + security: { + authz: { + enabled: false, + reason: 'Relies on es client for authorization', + }, + }, validate: false, }, versionCheckHandlerWrapper(async ({ core }, request, response) => { diff --git a/x-pack/platform/plugins/private/upgrade_assistant/server/routes/es_deprecations.ts b/x-pack/platform/plugins/private/upgrade_assistant/server/routes/es_deprecations.ts index 93c95d1437426..3b3d2387c196a 100644 --- a/x-pack/platform/plugins/private/upgrade_assistant/server/routes/es_deprecations.ts +++ b/x-pack/platform/plugins/private/upgrade_assistant/server/routes/es_deprecations.ts @@ -22,6 +22,12 @@ export function registerESDeprecationRoutes({ router.get( { path: `${API_BASE_PATH}/es_deprecations`, + security: { + authz: { + enabled: false, + reason: 'Relies on es and saved object clients for authorization', + }, + }, validate: false, }, versionCheckHandlerWrapper(async ({ core }, request, response) => { diff --git a/x-pack/platform/plugins/private/upgrade_assistant/server/routes/ml_snapshots.ts b/x-pack/platform/plugins/private/upgrade_assistant/server/routes/ml_snapshots.ts index 0ad6543de5251..feb52c2ddd9e7 100644 --- a/x-pack/platform/plugins/private/upgrade_assistant/server/routes/ml_snapshots.ts +++ b/x-pack/platform/plugins/private/upgrade_assistant/server/routes/ml_snapshots.ts @@ -145,6 +145,12 @@ export function registerMlSnapshotRoutes({ router.post( { path: `${API_BASE_PATH}/ml_snapshots`, + security: { + authz: { + enabled: false, + reason: 'Relies on es client for authorization', + }, + }, validate: { body: schema.object({ snapshotId: schema.string(), @@ -195,6 +201,12 @@ export function registerMlSnapshotRoutes({ router.get( { path: `${API_BASE_PATH}/ml_snapshots/{jobId}/{snapshotId}`, + security: { + authz: { + enabled: false, + reason: 'Relies on es and saved object clients for authorization', + }, + }, validate: { params: schema.object({ snapshotId: schema.string(), diff --git a/x-pack/platform/plugins/private/upgrade_assistant/server/routes/node_disk_space.ts b/x-pack/platform/plugins/private/upgrade_assistant/server/routes/node_disk_space.ts index 5f275be8b5d73..77d8de08eb86c 100644 --- a/x-pack/platform/plugins/private/upgrade_assistant/server/routes/node_disk_space.ts +++ b/x-pack/platform/plugins/private/upgrade_assistant/server/routes/node_disk_space.ts @@ -47,6 +47,12 @@ export function registerNodeDiskSpaceRoute({ router, lib: { handleEsError } }: R router.get( { path: `${API_BASE_PATH}/node_disk_space`, + security: { + authz: { + enabled: false, + reason: 'Relies on es client for authorization', + }, + }, validate: false, }, versionCheckHandlerWrapper(async ({ core }, request, response) => { diff --git a/x-pack/platform/plugins/private/upgrade_assistant/server/routes/reindex_indices/batch_reindex_indices.ts b/x-pack/platform/plugins/private/upgrade_assistant/server/routes/reindex_indices/batch_reindex_indices.ts index d2eb315aa4a66..31857ed979c07 100644 --- a/x-pack/platform/plugins/private/upgrade_assistant/server/routes/reindex_indices/batch_reindex_indices.ts +++ b/x-pack/platform/plugins/private/upgrade_assistant/server/routes/reindex_indices/batch_reindex_indices.ts @@ -36,6 +36,12 @@ export function registerBatchReindexIndicesRoutes( router.get( { path: `${BASE_PATH}/batch/queue`, + security: { + authz: { + enabled: false, + reason: 'Relies on es client for authorization', + }, + }, options: { access: 'public', summary: `Get the batch reindex queue`, @@ -75,6 +81,12 @@ export function registerBatchReindexIndicesRoutes( router.post( { path: `${BASE_PATH}/batch`, + security: { + authz: { + enabled: false, + reason: 'Relies on es client for authorization', + }, + }, options: { access: 'public', summary: `Batch start or resume reindex`, diff --git a/x-pack/platform/plugins/private/upgrade_assistant/server/routes/reindex_indices/reindex_indices.ts b/x-pack/platform/plugins/private/upgrade_assistant/server/routes/reindex_indices/reindex_indices.ts index 11d34d48820e2..67b3792ea044b 100644 --- a/x-pack/platform/plugins/private/upgrade_assistant/server/routes/reindex_indices/reindex_indices.ts +++ b/x-pack/platform/plugins/private/upgrade_assistant/server/routes/reindex_indices/reindex_indices.ts @@ -34,6 +34,12 @@ export function registerReindexIndicesRoutes( router.post( { path: `${BASE_PATH}/{indexName}`, + security: { + authz: { + enabled: false, + reason: 'Relies on es and saved object clients for authorization', + }, + }, options: { access: 'public', summary: `Start or resume reindex`, diff --git a/x-pack/platform/plugins/private/upgrade_assistant/server/routes/remote_clusters.ts b/x-pack/platform/plugins/private/upgrade_assistant/server/routes/remote_clusters.ts index 6598051e3c7f6..7b8ad1f046085 100644 --- a/x-pack/platform/plugins/private/upgrade_assistant/server/routes/remote_clusters.ts +++ b/x-pack/platform/plugins/private/upgrade_assistant/server/routes/remote_clusters.ts @@ -13,6 +13,12 @@ export function registerRemoteClustersRoute({ router, lib: { handleEsError } }: router.get( { path: `${API_BASE_PATH}/remote_clusters`, + security: { + authz: { + enabled: false, + reason: 'Relies on es client for authorization', + }, + }, validate: false, }, versionCheckHandlerWrapper(async ({ core }, request, response) => { diff --git a/x-pack/platform/plugins/private/upgrade_assistant/server/routes/status.ts b/x-pack/platform/plugins/private/upgrade_assistant/server/routes/status.ts index de621da5a23b1..19f3a5c07a944 100644 --- a/x-pack/platform/plugins/private/upgrade_assistant/server/routes/status.ts +++ b/x-pack/platform/plugins/private/upgrade_assistant/server/routes/status.ts @@ -24,6 +24,12 @@ export function registerUpgradeStatusRoute({ router.get( { path: `${API_BASE_PATH}/status`, + security: { + authz: { + enabled: false, + reason: 'Relies on es client for authorization', + }, + }, options: { access: 'public', summary: `Get upgrade readiness status`, diff --git a/x-pack/platform/plugins/private/upgrade_assistant/server/routes/system_indices_migration.ts b/x-pack/platform/plugins/private/upgrade_assistant/server/routes/system_indices_migration.ts index aae7df2f43f15..152703ef6c365 100644 --- a/x-pack/platform/plugins/private/upgrade_assistant/server/routes/system_indices_migration.ts +++ b/x-pack/platform/plugins/private/upgrade_assistant/server/routes/system_indices_migration.ts @@ -19,7 +19,16 @@ export function registerSystemIndicesMigrationRoutes({ }: RouteDependencies) { // GET status of the system indices migration router.get( - { path: `${API_BASE_PATH}/system_indices_migration`, validate: false }, + { + path: `${API_BASE_PATH}/system_indices_migration`, + security: { + authz: { + enabled: false, + reason: 'Relies on es client for authorization', + }, + }, + validate: false, + }, versionCheckHandlerWrapper(async ({ core }, request, response) => { try { const { diff --git a/x-pack/platform/plugins/private/upgrade_assistant/server/routes/update_index_settings.ts b/x-pack/platform/plugins/private/upgrade_assistant/server/routes/update_index_settings.ts index 382ac77721616..f037381a9f52a 100644 --- a/x-pack/platform/plugins/private/upgrade_assistant/server/routes/update_index_settings.ts +++ b/x-pack/platform/plugins/private/upgrade_assistant/server/routes/update_index_settings.ts @@ -14,6 +14,12 @@ export function registerUpdateSettingsRoute({ router }: RouteDependencies) { router.post( { path: `${API_BASE_PATH}/{indexName}/index_settings`, + security: { + authz: { + enabled: false, + reason: 'Relies on es client for authorization', + }, + }, validate: { params: schema.object({ indexName: schema.string(), diff --git a/x-pack/platform/plugins/shared/actions/common/connector_feature_config.ts b/x-pack/platform/plugins/shared/actions/common/connector_feature_config.ts index cffa4c433b8f7..5a6b4c06476c4 100644 --- a/x-pack/platform/plugins/shared/actions/common/connector_feature_config.ts +++ b/x-pack/platform/plugins/shared/actions/common/connector_feature_config.ts @@ -28,6 +28,14 @@ export const SecurityConnectorFeatureId = 'siem'; export const GenerativeAIForSecurityConnectorFeatureId = 'generativeAIForSecurity'; export const GenerativeAIForObservabilityConnectorFeatureId = 'generativeAIForObservability'; export const GenerativeAIForSearchPlaygroundConnectorFeatureId = 'generativeAIForSearchPlayground'; +export const EndpointSecurityConnectorFeatureId = 'endpointSecurity'; + +const compatibilityEndpointSecurity = i18n.translate( + 'xpack.actions.availableConnectorFeatures.compatibility.endpointSecurity', + { + defaultMessage: 'Endpoint Security', + } +); const compatibilityGenerativeAIForSecurity = i18n.translate( 'xpack.actions.availableConnectorFeatures.compatibility.generativeAIForSecurity', @@ -120,6 +128,12 @@ export const GenerativeAIForSearchPlaygroundFeature: ConnectorFeatureConfig = { compatibility: compatibilityGenerativeAIForSearchPlayground, }; +export const EndpointSecurityConnectorFeature: ConnectorFeatureConfig = { + id: EndpointSecurityConnectorFeatureId, + name: compatibilityEndpointSecurity, + compatibility: compatibilityEndpointSecurity, +}; + const AllAvailableConnectorFeatures = { [AlertingConnectorFeature.id]: AlertingConnectorFeature, [CasesConnectorFeature.id]: CasesConnectorFeature, @@ -128,6 +142,7 @@ const AllAvailableConnectorFeatures = { [GenerativeAIForSecurityFeature.id]: GenerativeAIForSecurityFeature, [GenerativeAIForObservabilityFeature.id]: GenerativeAIForObservabilityFeature, [GenerativeAIForSearchPlaygroundFeature.id]: GenerativeAIForSearchPlaygroundFeature, + [EndpointSecurityConnectorFeature.id]: EndpointSecurityConnectorFeature, }; export function areValidFeatures(ids: string[]) { diff --git a/x-pack/platform/plugins/shared/actions/common/routes/connector/response/schemas/v1.ts b/x-pack/platform/plugins/shared/actions/common/routes/connector/response/schemas/v1.ts index 096e2f2943d80..d9e33dcdfce24 100644 --- a/x-pack/platform/plugins/shared/actions/common/routes/connector/response/schemas/v1.ts +++ b/x-pack/platform/plugins/shared/actions/common/routes/connector/response/schemas/v1.ts @@ -97,6 +97,13 @@ export const connectorTypesResponseSchema = schema.object({ is_system_action_type: schema.boolean({ meta: { description: 'Indicates whether the action is a system action.' }, }), + sub_feature: schema.maybe( + schema.oneOf([schema.literal('endpointSecurity')], { + meta: { + description: 'Indicates the sub-feature type the connector is grouped under.', + }, + }) + ), }); export const connectorExecuteResponseSchema = schema.object({ diff --git a/x-pack/platform/plugins/shared/actions/common/routes/connector/response/types/v1.ts b/x-pack/platform/plugins/shared/actions/common/routes/connector/response/types/v1.ts index 499cc2ec21d48..0dcee6bd4d3de 100644 --- a/x-pack/platform/plugins/shared/actions/common/routes/connector/response/types/v1.ts +++ b/x-pack/platform/plugins/shared/actions/common/routes/connector/response/types/v1.ts @@ -41,6 +41,7 @@ export interface ConnectorTypesResponse { minimum_license_required: ConnectorTypesResponseSchemaType['minimum_license_required']; supported_feature_ids: ConnectorTypesResponseSchemaType['supported_feature_ids']; is_system_action_type: ConnectorTypesResponseSchemaType['is_system_action_type']; + sub_feature?: ConnectorTypesResponseSchemaType['sub_feature']; } type ConnectorExecuteResponseSchemaType = TypeOf; diff --git a/x-pack/platform/plugins/shared/actions/common/types.ts b/x-pack/platform/plugins/shared/actions/common/types.ts index 7540056057873..153d529f76c5c 100644 --- a/x-pack/platform/plugins/shared/actions/common/types.ts +++ b/x-pack/platform/plugins/shared/actions/common/types.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { SUB_FEATURE } from '@kbn/actions-types'; import { LicenseType } from '@kbn/licensing-plugin/common/types'; import { TaskErrorSource } from '@kbn/task-manager-plugin/common'; @@ -15,6 +16,9 @@ export { SecurityConnectorFeatureId, GenerativeAIForSecurityConnectorFeatureId, } from './connector_feature_config'; + +export type SubFeature = keyof typeof SUB_FEATURE; + export interface ActionType { id: string; name: string; @@ -24,6 +28,7 @@ export interface ActionType { minimumLicenseRequired: LicenseType; supportedFeatureIds: string[]; isSystemActionType: boolean; + subFeature?: SubFeature; } export enum InvalidEmailReason { diff --git a/x-pack/platform/plugins/shared/actions/server/action_type_registry.mock.ts b/x-pack/platform/plugins/shared/actions/server/action_type_registry.mock.ts index 399bf6ed22684..1671aa22278d4 100644 --- a/x-pack/platform/plugins/shared/actions/server/action_type_registry.mock.ts +++ b/x-pack/platform/plugins/shared/actions/server/action_type_registry.mock.ts @@ -19,7 +19,8 @@ const createActionTypeRegistryMock = () => { isActionExecutable: jest.fn(), isSystemActionType: jest.fn(), getUtils: jest.fn(), - getSystemActionKibanaPrivileges: jest.fn(), + getActionKibanaPrivileges: jest.fn(), + hasSubFeature: jest.fn(), }; return mocked; }; diff --git a/x-pack/platform/plugins/shared/actions/server/action_type_registry.test.ts b/x-pack/platform/plugins/shared/actions/server/action_type_registry.test.ts index 88ae6c3678552..609105924c4c7 100644 --- a/x-pack/platform/plugins/shared/actions/server/action_type_registry.test.ts +++ b/x-pack/platform/plugins/shared/actions/server/action_type_registry.test.ts @@ -10,7 +10,7 @@ import { taskManagerMock } from '@kbn/task-manager-plugin/server/mocks'; import { schema } from '@kbn/config-schema'; import { ActionTypeRegistry, ActionTypeRegistryOpts } from './action_type_registry'; import { ActionType, ExecutorType } from './types'; -import { ActionExecutor, ILicenseState, TaskRunnerFactory } from './lib'; +import { ActionExecutionSourceType, ActionExecutor, ILicenseState, TaskRunnerFactory } from './lib'; import { actionsConfigMock } from './actions_config.mock'; import { licenseStateMock } from './lib/license_state.mock'; import { ActionsConfigurationUtilities } from './actions_config'; @@ -249,7 +249,7 @@ describe('actionTypeRegistry', () => { ).not.toThrow(); }); - test('throws if the kibana privileges are defined but the action type is not a system action type', () => { + test('throws if the kibana privileges are defined but the action type is not a system action type or sub-feature type', () => { const actionTypeRegistry = new ActionTypeRegistry(actionTypeRegistryParams); expect(() => @@ -268,7 +268,7 @@ describe('actionTypeRegistry', () => { executor, }) ).toThrowErrorMatchingInlineSnapshot( - `"Kibana privilege authorization is only supported for system action types"` + `"Kibana privilege authorization is only supported for system actions and action types that are registered under a sub-feature"` ); }); }); @@ -421,6 +421,42 @@ describe('actionTypeRegistry', () => { }, ]); }); + + test('sets the subFeature correctly for sub-feature type actions', () => { + mockedLicenseState.isLicenseValidForActionType.mockReturnValue({ isValid: true }); + const actionTypeRegistry = new ActionTypeRegistry(actionTypeRegistryParams); + + actionTypeRegistry.register({ + id: 'test.sub-feature-action', + name: 'Test', + minimumLicenseRequired: 'platinum', + supportedFeatureIds: ['siem'], + getKibanaPrivileges: () => ['test/create-sub-feature'], + validate: { + config: { schema: schema.object({}) }, + secrets: { schema: schema.object({}) }, + params: { schema: schema.object({}) }, + }, + subFeature: 'endpointSecurity', + executor, + }); + + const actionTypes = actionTypeRegistry.list(); + + expect(actionTypes).toEqual([ + { + enabled: true, + enabledInConfig: true, + enabledInLicense: true, + id: 'test.sub-feature-action', + isSystemActionType: false, + minimumLicenseRequired: 'platinum', + name: 'Test', + subFeature: 'endpointSecurity', + supportedFeatureIds: ['siem'], + }, + ]); + }); }); describe('has()', () => { @@ -767,8 +803,67 @@ describe('actionTypeRegistry', () => { }); }); - describe('getSystemActionKibanaPrivileges()', () => { - it('should get the kibana privileges correctly for system actions', () => { + describe('hasSubFeature()', () => { + it('should return true if the action type has a sub-feature type', () => { + const registry = new ActionTypeRegistry(actionTypeRegistryParams); + + registry.register({ + id: 'test.sub-feature-action', + name: 'Test', + minimumLicenseRequired: 'platinum', + supportedFeatureIds: ['siem'], + getKibanaPrivileges: () => ['test/create-sub-feature'], + validate: { + config: { schema: schema.object({}) }, + secrets: { schema: schema.object({}) }, + params: { schema: schema.object({}) }, + }, + subFeature: 'endpointSecurity', + executor, + }); + + const result = registry.hasSubFeature('test.sub-feature-action'); + expect(result).toBe(true); + }); + + it('should return false if the action type does not have a sub-feature type', () => { + mockedLicenseState.isLicenseValidForActionType.mockReturnValue({ isValid: true }); + + const registry = new ActionTypeRegistry(actionTypeRegistryParams); + + registry.register({ + id: 'foo', + name: 'Foo', + minimumLicenseRequired: 'basic', + supportedFeatureIds: ['alerting'], + validate: { + config: { schema: schema.object({}) }, + secrets: { schema: schema.object({}) }, + params: { schema: schema.object({}) }, + }, + executor, + }); + + const allTypes = registry.getAllTypes(); + expect(allTypes.length).toBe(1); + + const result = registry.hasSubFeature('foo'); + expect(result).toBe(false); + }); + + it('should return false if the action type does not exists', () => { + const registry = new ActionTypeRegistry(actionTypeRegistryParams); + + const allTypes = registry.getAllTypes(); + expect(allTypes.length).toBe(0); + + const result = registry.hasSubFeature('not-exist'); + expect(result).toBe(false); + }); + }); + + describe('getActionKibanaPrivileges()', () => { + it('should get the kibana privileges correctly', () => { const registry = new ActionTypeRegistry(actionTypeRegistryParams); registry.register({ @@ -785,12 +880,28 @@ describe('actionTypeRegistry', () => { isSystemActionType: true, executor, }); + registry.register({ + id: 'test.sub-feature-action', + name: 'Test', + minimumLicenseRequired: 'platinum', + supportedFeatureIds: ['siem'], + getKibanaPrivileges: () => ['test/create-sub-feature'], + validate: { + config: { schema: schema.object({}) }, + secrets: { schema: schema.object({}) }, + params: { schema: schema.object({}) }, + }, + subFeature: 'endpointSecurity', + executor, + }); - const result = registry.getSystemActionKibanaPrivileges('test.system-action'); + let result = registry.getActionKibanaPrivileges('test.system-action'); expect(result).toEqual(['test/create']); + result = registry.getActionKibanaPrivileges('test.sub-feature-action'); + expect(result).toEqual(['test/create-sub-feature']); }); - it('should return an empty array if the system action does not define any kibana privileges', () => { + it('should return an empty array if the action type does not define any kibana privileges', () => { const registry = new ActionTypeRegistry(actionTypeRegistryParams); registry.register({ @@ -806,12 +917,27 @@ describe('actionTypeRegistry', () => { isSystemActionType: true, executor, }); + registry.register({ + id: 'test.sub-feature-action', + name: 'Test', + minimumLicenseRequired: 'platinum', + supportedFeatureIds: ['siem'], + validate: { + config: { schema: schema.object({}) }, + secrets: { schema: schema.object({}) }, + params: { schema: schema.object({}) }, + }, + subFeature: 'endpointSecurity', + executor, + }); - const result = registry.getSystemActionKibanaPrivileges('test.system-action'); + let result = registry.getActionKibanaPrivileges('test.system-action'); + expect(result).toEqual([]); + result = registry.getActionKibanaPrivileges('test.sub-feature-action'); expect(result).toEqual([]); }); - it('should return an empty array if the action type is not a system action', () => { + it('should return an empty array if the action type is not a system action or a sub-feature type action', () => { const registry = new ActionTypeRegistry(actionTypeRegistryParams); registry.register({ @@ -827,11 +953,11 @@ describe('actionTypeRegistry', () => { executor, }); - const result = registry.getSystemActionKibanaPrivileges('foo'); + const result = registry.getActionKibanaPrivileges('foo'); expect(result).toEqual([]); }); - it('should pass the params correctly', () => { + it('should pass the params and source correctly', () => { const registry = new ActionTypeRegistry(actionTypeRegistryParams); const getKibanaPrivileges = jest.fn().mockReturnValue(['test/create']); @@ -850,8 +976,15 @@ describe('actionTypeRegistry', () => { executor, }); - registry.getSystemActionKibanaPrivileges('test.system-action', { foo: 'bar' }); - expect(getKibanaPrivileges).toHaveBeenCalledWith({ params: { foo: 'bar' } }); + registry.getActionKibanaPrivileges( + 'test.system-action', + { foo: 'bar' }, + ActionExecutionSourceType.HTTP_REQUEST + ); + expect(getKibanaPrivileges).toHaveBeenCalledWith({ + params: { foo: 'bar' }, + source: ActionExecutionSourceType.HTTP_REQUEST, + }); }); }); }); diff --git a/x-pack/platform/plugins/shared/actions/server/action_type_registry.ts b/x-pack/platform/plugins/shared/actions/server/action_type_registry.ts index a5626450d9346..d0c79f25a63fe 100644 --- a/x-pack/platform/plugins/shared/actions/server/action_type_registry.ts +++ b/x-pack/platform/plugins/shared/actions/server/action_type_registry.ts @@ -11,7 +11,12 @@ import { RunContext, TaskManagerSetupContract, TaskCost } from '@kbn/task-manage import { LicensingPluginSetup } from '@kbn/licensing-plugin/server'; import { ActionType as CommonActionType, areValidFeatures } from '../common'; import { ActionsConfigurationUtilities } from './actions_config'; -import { getActionTypeFeatureUsageName, TaskRunnerFactory, ILicenseState } from './lib'; +import { + getActionTypeFeatureUsageName, + TaskRunnerFactory, + ILicenseState, + ActionExecutionSourceType, +} from './lib'; import { ActionType, InMemoryConnector, @@ -19,7 +24,6 @@ import { ActionTypeSecrets, ActionTypeParams, } from './types'; -import { isBidirectionalConnectorType } from './lib/bidirectional_connectors'; export interface ActionTypeRegistryOpts { licensing: LicensingPluginSetup; @@ -113,19 +117,25 @@ export class ActionTypeRegistry { Boolean(this.actionTypes.get(actionTypeId)?.isSystemActionType); /** - * Returns the kibana privileges of a system action type + * Returns true if the connector type has a sub-feature type defined */ - public getSystemActionKibanaPrivileges( + public hasSubFeature = (actionTypeId: string): boolean => + Boolean(this.actionTypes.get(actionTypeId)?.subFeature); + + /** + * Returns the kibana privileges + */ + public getActionKibanaPrivileges( actionTypeId: string, - params?: Params + params?: Params, + source?: ActionExecutionSourceType ): string[] { const actionType = this.actionTypes.get(actionTypeId); - if (!actionType?.isSystemActionType) { + if (!actionType?.isSystemActionType && !actionType?.subFeature) { return []; } - - return actionType?.getKibanaPrivileges?.({ params }) ?? []; + return actionType?.getKibanaPrivileges?.({ params, source }) ?? []; } /** @@ -175,11 +185,15 @@ export class ActionTypeRegistry { ); } - if (!actionType.isSystemActionType && actionType.getKibanaPrivileges) { + if ( + !actionType.isSystemActionType && + !actionType.subFeature && + actionType.getKibanaPrivileges + ) { throw new Error( i18n.translate('xpack.actions.actionTypeRegistry.register.invalidKibanaPrivileges', { defaultMessage: - 'Kibana privilege authorization is only supported for system action types', + 'Kibana privilege authorization is only supported for system actions and action types that are registered under a sub-feature', }) ); } @@ -233,26 +247,21 @@ export class ActionTypeRegistry { * Returns a list of registered action types [{ id, name, enabled }], filtered by featureId if provided. */ public list(featureId?: string): CommonActionType[] { - return ( - Array.from(this.actionTypes) - .filter(([_, actionType]) => - featureId ? actionType.supportedFeatureIds.includes(featureId) : true - ) - // Temporarily don't return SentinelOne and Crowdstrike connector for Security Solution Rule Actions - .filter(([actionTypeId]) => - featureId ? !isBidirectionalConnectorType(actionTypeId) : true - ) - .map(([actionTypeId, actionType]) => ({ - id: actionTypeId, - name: actionType.name, - minimumLicenseRequired: actionType.minimumLicenseRequired, - enabled: this.isActionTypeEnabled(actionTypeId), - enabledInConfig: this.actionsConfigUtils.isActionTypeEnabled(actionTypeId), - enabledInLicense: !!this.licenseState.isLicenseValidForActionType(actionType).isValid, - supportedFeatureIds: actionType.supportedFeatureIds, - isSystemActionType: !!actionType.isSystemActionType, - })) - ); + return Array.from(this.actionTypes) + .filter(([_, actionType]) => { + return featureId ? actionType.supportedFeatureIds.includes(featureId) : true; + }) + .map(([actionTypeId, actionType]) => ({ + id: actionTypeId, + name: actionType.name, + minimumLicenseRequired: actionType.minimumLicenseRequired, + enabled: this.isActionTypeEnabled(actionTypeId), + enabledInConfig: this.actionsConfigUtils.isActionTypeEnabled(actionTypeId), + enabledInLicense: !!this.licenseState.isLicenseValidForActionType(actionType).isValid, + supportedFeatureIds: actionType.supportedFeatureIds, + isSystemActionType: !!actionType.isSystemActionType, + subFeature: actionType.subFeature, + })); } /** diff --git a/x-pack/platform/plugins/shared/actions/server/application/connector/methods/execute/execute.ts b/x-pack/platform/plugins/shared/actions/server/application/connector/methods/execute/execute.ts index fc96f3a38caf5..7b19652e8e34f 100644 --- a/x-pack/platform/plugins/shared/actions/server/application/connector/methods/execute/execute.ts +++ b/x-pack/platform/plugins/shared/actions/server/application/connector/methods/execute/execute.ts @@ -7,7 +7,7 @@ import { v4 as uuidv4 } from 'uuid'; import { RawAction, ActionTypeExecutorResult } from '../../../../types'; -import { getSystemActionKibanaPrivileges } from '../../../../lib/get_system_action_kibana_privileges'; +import { getActionKibanaPrivileges } from '../../../../lib/get_action_kibana_privileges'; import { isPreconfigured } from '../../../../lib/is_preconfigured'; import { isSystemAction } from '../../../../lib/is_system_action'; import { ConnectorExecuteParams } from './types'; @@ -20,7 +20,6 @@ export async function execute( ): Promise> { const log = context.logger; const { actionId, params, source, relatedSavedObjects } = connectorExecuteParams; - const additionalPrivileges = getSystemActionKibanaPrivileges(context, actionId, params); let actionTypeId: string | undefined; try { @@ -42,6 +41,12 @@ export async function execute( log.debug(`Failed to retrieve actionTypeId for action [${actionId}]`, err); } + const additionalPrivileges = getActionKibanaPrivileges( + context, + actionTypeId, + params, + source?.type + ); await context.authorization.ensureAuthorized({ operation: 'execute', additionalPrivileges, diff --git a/x-pack/platform/plugins/shared/actions/server/application/connector/schemas/connector_type_schema.ts b/x-pack/platform/plugins/shared/actions/server/application/connector/schemas/connector_type_schema.ts index e5556ab5c4a33..44a0f9d29e577 100644 --- a/x-pack/platform/plugins/shared/actions/server/application/connector/schemas/connector_type_schema.ts +++ b/x-pack/platform/plugins/shared/actions/server/application/connector/schemas/connector_type_schema.ts @@ -23,4 +23,5 @@ export const connectorTypeSchema = schema.object({ ]), supportedFeatureIds: schema.arrayOf(schema.string()), isSystemActionType: schema.boolean(), + subFeature: schema.maybe(schema.oneOf([schema.literal('endpointSecurity')])), }); diff --git a/x-pack/platform/plugins/shared/actions/server/application/connector/types/connector_type.ts b/x-pack/platform/plugins/shared/actions/server/application/connector/types/connector_type.ts index 64be01365a8ba..8bce2832290c6 100644 --- a/x-pack/platform/plugins/shared/actions/server/application/connector/types/connector_type.ts +++ b/x-pack/platform/plugins/shared/actions/server/application/connector/types/connector_type.ts @@ -19,4 +19,5 @@ export interface ConnectorType { minimumLicenseRequired: ConnectorTypeSchemaType['minimumLicenseRequired']; supportedFeatureIds: ConnectorTypeSchemaType['supportedFeatureIds']; isSystemActionType: ConnectorTypeSchemaType['isSystemActionType']; + subFeature?: ConnectorTypeSchemaType['subFeature']; } diff --git a/x-pack/platform/plugins/shared/actions/server/authorization/actions_authorization.test.ts b/x-pack/platform/plugins/shared/actions/server/authorization/actions_authorization.test.ts index 7755071e69c24..ded29e83500ec 100644 --- a/x-pack/platform/plugins/shared/actions/server/authorization/actions_authorization.test.ts +++ b/x-pack/platform/plugins/shared/actions/server/authorization/actions_authorization.test.ts @@ -12,17 +12,10 @@ import { ACTION_SAVED_OBJECT_TYPE, ACTION_TASK_PARAMS_SAVED_OBJECT_TYPE, } from '../constants/saved_objects'; -import { - CONNECTORS_ADVANCED_EXECUTE_PRIVILEGE_API_TAG, - CONNECTORS_BASIC_EXECUTE_PRIVILEGE_API_TAG, -} from '../feature'; -import { forEach } from 'lodash'; const request = {} as KibanaRequest; const mockAuthorizationAction = (type: string, operation: string) => `${type}/${operation}`; -const BASIC_EXECUTE_AUTHZ = `api:${CONNECTORS_BASIC_EXECUTE_PRIVILEGE_API_TAG}`; -const ADVANCED_EXECUTE_AUTHZ = `api:${CONNECTORS_ADVANCED_EXECUTE_PRIVILEGE_API_TAG}`; function mockSecurity() { const security = securityMock.createSetup(); @@ -87,7 +80,7 @@ describe('ensureAuthorized', () => { expect(authorization.actions.savedObject.get).toHaveBeenCalledWith('action', 'create'); expect(checkPrivileges).toHaveBeenCalledWith({ - kibana: [mockAuthorizationAction('action', 'create'), BASIC_EXECUTE_AUTHZ], + kibana: [mockAuthorizationAction('action', 'create')], }); }); @@ -127,7 +120,6 @@ describe('ensureAuthorized', () => { kibana: [ mockAuthorizationAction(ACTION_SAVED_OBJECT_TYPE, 'get'), mockAuthorizationAction(ACTION_TASK_PARAMS_SAVED_OBJECT_TYPE, 'create'), - BASIC_EXECUTE_AUTHZ, ], }); }); @@ -207,59 +199,7 @@ describe('ensureAuthorized', () => { mockAuthorizationAction(ACTION_SAVED_OBJECT_TYPE, 'get'), mockAuthorizationAction(ACTION_TASK_PARAMS_SAVED_OBJECT_TYPE, 'create'), 'test/create', - BASIC_EXECUTE_AUTHZ, ], }); }); - - describe('Bi-directional connectors', () => { - forEach(['.sentinelone', '.crowdstrike'], (actionTypeId) => { - test(`checks ${actionTypeId} connector privileges correctly`, async () => { - const { authorization } = mockSecurity(); - const checkPrivileges: jest.MockedFunction< - ReturnType - > = jest.fn(); - - authorization.checkPrivilegesDynamicallyWithRequest.mockReturnValue(checkPrivileges); - const actionsAuthorization = new ActionsAuthorization({ - request, - authorization, - }); - - checkPrivileges.mockResolvedValueOnce({ - username: 'some-user', - hasAllRequested: true, - privileges: [ - { - privilege: mockAuthorizationAction('myType', 'execute'), - authorized: true, - }, - ], - }); - - await actionsAuthorization.ensureAuthorized({ - operation: 'execute', - actionTypeId, - }); - - expect(authorization.actions.savedObject.get).toHaveBeenCalledWith( - ACTION_SAVED_OBJECT_TYPE, - 'get' - ); - - expect(authorization.actions.savedObject.get).toHaveBeenCalledWith( - ACTION_TASK_PARAMS_SAVED_OBJECT_TYPE, - 'create' - ); - - expect(checkPrivileges).toHaveBeenCalledWith({ - kibana: [ - mockAuthorizationAction(ACTION_SAVED_OBJECT_TYPE, 'get'), - mockAuthorizationAction(ACTION_TASK_PARAMS_SAVED_OBJECT_TYPE, 'create'), - ADVANCED_EXECUTE_AUTHZ, - ], - }); - }); - }); - }); }); diff --git a/x-pack/platform/plugins/shared/actions/server/authorization/actions_authorization.ts b/x-pack/platform/plugins/shared/actions/server/authorization/actions_authorization.ts index e392f8bbcc14a..26400a31c59eb 100644 --- a/x-pack/platform/plugins/shared/actions/server/authorization/actions_authorization.ts +++ b/x-pack/platform/plugins/shared/actions/server/authorization/actions_authorization.ts @@ -12,7 +12,6 @@ import { ACTION_SAVED_OBJECT_TYPE, ACTION_TASK_PARAMS_SAVED_OBJECT_TYPE, } from '../constants/saved_objects'; -import { isBidirectionalConnectorType } from '../lib/bidirectional_connectors'; export interface ConstructorOptions { request: KibanaRequest; @@ -56,15 +55,7 @@ export class ActionsAuthorization { : [authorization.actions.savedObject.get(ACTION_SAVED_OBJECT_TYPE, operation)]; const { hasAllRequested } = await checkPrivileges({ - kibana: [ - ...privileges, - ...additionalPrivileges, - // SentinelOne and Crowdstrike sub-actions require that a user have `all` privilege to Actions and Connectors. - // This is a temporary solution until a more robust RBAC approach can be implemented for sub-actions - isBidirectionalConnectorType(actionTypeId) - ? 'api:actions:execute-advanced-connectors' - : 'api:actions:execute-basic-connectors', - ], + kibana: [...privileges, ...additionalPrivileges], }); if (!hasAllRequested) { throw Boom.forbidden( diff --git a/x-pack/platform/plugins/shared/actions/server/feature.ts b/x-pack/platform/plugins/shared/actions/server/feature.ts index d4a9d3a3537bf..b9997ce64365f 100644 --- a/x-pack/platform/plugins/shared/actions/server/feature.ts +++ b/x-pack/platform/plugins/shared/actions/server/feature.ts @@ -7,15 +7,16 @@ import { DEFAULT_APP_CATEGORIES } from '@kbn/core-application-common'; import { i18n } from '@kbn/i18n'; -import { KibanaFeatureScope } from '@kbn/features-plugin/common'; +import { KibanaFeatureConfig, KibanaFeatureScope } from '@kbn/features-plugin/common'; import { ACTION_SAVED_OBJECT_TYPE, ACTION_TASK_PARAMS_SAVED_OBJECT_TYPE, CONNECTOR_TOKEN_SAVED_OBJECT_TYPE, } from './constants/saved_objects'; -export const CONNECTORS_ADVANCED_EXECUTE_PRIVILEGE_API_TAG = 'actions:execute-advanced-connectors'; -export const CONNECTORS_BASIC_EXECUTE_PRIVILEGE_API_TAG = 'actions:execute-basic-connectors'; +const ENDPOINT_SECURITY_EXECUTE_PRIVILEGE_API_TAG = 'actions:execute-endpoint-security-connectors'; +export const ENDPOINT_SECURITY_EXECUTE_PRIVILEGE = `api:${ENDPOINT_SECURITY_EXECUTE_PRIVILEGE_API_TAG}`; +export const ENDPOINT_SECURITY_SUB_ACTIONS_EXECUTE_PRIVILEGE = `api:actions:execute-endpoint-security-sub-actions`; /** * The order of appearance in the feature privilege page @@ -23,7 +24,7 @@ export const CONNECTORS_BASIC_EXECUTE_PRIVILEGE_API_TAG = 'actions:execute-basic */ const FEATURE_ORDER = 3000; -export const ACTIONS_FEATURE = { +export const ACTIONS_FEATURE: KibanaFeatureConfig = { id: 'actions', name: i18n.translate('xpack.actions.featureRegistry.actionsFeatureName', { defaultMessage: 'Actions and Connectors', @@ -38,10 +39,7 @@ export const ACTIONS_FEATURE = { privileges: { all: { app: [], - api: [ - CONNECTORS_ADVANCED_EXECUTE_PRIVILEGE_API_TAG, - CONNECTORS_BASIC_EXECUTE_PRIVILEGE_API_TAG, - ], + api: [], catalogue: [], management: { insightsAndAlerting: ['triggersActions', 'triggersActionsConnectors'], @@ -58,7 +56,7 @@ export const ACTIONS_FEATURE = { }, read: { app: [], - api: [CONNECTORS_BASIC_EXECUTE_PRIVILEGE_API_TAG], + api: [], catalogue: [], management: { insightsAndAlerting: ['triggersActions', 'triggersActionsConnectors'], @@ -71,4 +69,37 @@ export const ACTIONS_FEATURE = { ui: ['show', 'execute'], }, }, + subFeatures: [ + { + name: i18n.translate('xpack.actions.featureRegistry.endpointSecuritySubFeatureName', { + defaultMessage: 'Endpoint Security', + }), + description: i18n.translate( + 'xpack.actions.featureRegistry.endpointSecuritySubFeatureDescription', + { + defaultMessage: 'Includes: Sentinel One, Crowdstrike', + } + ), + privilegeGroups: [ + { + groupType: 'independent', + privileges: [ + { + api: [ENDPOINT_SECURITY_EXECUTE_PRIVILEGE_API_TAG], + id: 'endpoint_security_execute', + name: i18n.translate( + 'xpack.actions.featureRegistry.endpointSecuritySubFeaturePrivilege', + { + defaultMessage: 'Execute', + } + ), + includeIn: 'all', + savedObject: { all: [], read: [] }, + ui: ['endpointSecurityExecute'], + }, + ], + }, + ], + }, + ], }; diff --git a/x-pack/platform/plugins/shared/actions/server/index.ts b/x-pack/platform/plugins/shared/actions/server/index.ts index d391911ff0fc3..5cfe1a9211297 100644 --- a/x-pack/platform/plugins/shared/actions/server/index.ts +++ b/x-pack/platform/plugins/shared/actions/server/index.ts @@ -53,3 +53,4 @@ export const config: PluginConfigDescriptor = { }; export { urlAllowListValidator } from './sub_action_framework/helpers'; +export { ActionExecutionSourceType } from './lib/action_execution_source'; diff --git a/x-pack/platform/plugins/shared/actions/server/lib/action_executor.test.ts b/x-pack/platform/plugins/shared/actions/server/lib/action_executor.test.ts index b89b997ca749d..167bdaf61a022 100644 --- a/x-pack/platform/plugins/shared/actions/server/lib/action_executor.test.ts +++ b/x-pack/platform/plugins/shared/actions/server/lib/action_executor.test.ts @@ -20,13 +20,13 @@ import { spacesServiceMock } from '@kbn/spaces-plugin/server/spaces_service/spac import { ActionType as ConnectorType, ConnectorUsageCollector } from '../types'; import { actionsAuthorizationMock, actionsMock } from '../mocks'; import { + ActionExecutionSourceType, asBackgroundTaskExecutionSource, asHttpRequestExecutionSource, asSavedObjectExecutionSource, } from './action_execution_source'; import { finished } from 'stream/promises'; import { PassThrough } from 'stream'; -import { SecurityConnectorFeatureId } from '../../common'; import { TaskErrorSource } from '@kbn/task-manager-plugin/common'; import { createTaskRunError, getErrorSource } from '@kbn/task-manager-plugin/server/task_running'; import { GEN_AI_TOKEN_COUNT_EVENT } from './event_based_telemetry'; @@ -42,6 +42,7 @@ const eventLogger = eventLoggerMock.create(); const CONNECTOR_ID = '1'; const ACTION_EXECUTION_ID = '2'; const ACTION_PARAMS = { foo: true }; +const SOURCE = { type: ActionExecutionSourceType.HTTP_REQUEST, source: 'test' }; const executeUnsecuredParams = { actionExecutionId: ACTION_EXECUTION_ID, @@ -56,6 +57,7 @@ const executeParams = { params: ACTION_PARAMS, executionId: '123abc', request: {} as KibanaRequest, + source: SOURCE, }; const spacesMock = spacesServiceMock.createStartContract(); @@ -132,6 +134,20 @@ const systemConnectorType: jest.Mocked = { executor: jest.fn(), }; +const subFeatureConnectorType: jest.Mocked = { + id: 'test.sub-feature-action', + name: 'Test', + minimumLicenseRequired: 'platinum', + supportedFeatureIds: ['siem'], + subFeature: 'endpointSecurity', + validate: { + config: { schema: schema.any() }, + secrets: { schema: schema.any() }, + params: { schema: schema.any() }, + }, + executor: jest.fn(), +}; + const connectorSavedObject = { id: CONNECTOR_ID, type: 'action', @@ -149,6 +165,16 @@ const connectorSavedObject = { references: [], }; +const subFeatureConnectorSavedObject = { + ...connectorSavedObject, + attributes: { + ...connectorSavedObject.attributes, + config: {}, + secrets: {}, + actionTypeId: 'test.sub-feature-action', + }, +}; + interface ActionUsage { request_body_bytes: number; } @@ -162,6 +188,7 @@ const getBaseExecuteStartEventLogDoc = (unsecured: boolean) => { kibana: { action: { execution: { + ...(unsecured ? {} : { source: 'http_request' }), uuid: ACTION_EXECUTION_ID, }, id: CONNECTOR_ID, @@ -303,6 +330,7 @@ describe('Action Executor', () => { params: { foo: true }, logger: loggerMock, connectorUsageCollector: expect.any(ConnectorUsageCollector), + ...(executeUnsecure ? {} : { source: SOURCE }), }); expect(loggerMock.debug).toBeCalledWith('executing action test:1: 1'); @@ -458,6 +486,7 @@ describe('Action Executor', () => { params: { foo: true }, logger: loggerMock, connectorUsageCollector: expect.any(ConnectorUsageCollector), + ...(executeUnsecure ? {} : { source: SOURCE }), }); expect(loggerMock.debug).toBeCalledWith('executing action test:preconfigured: Preconfigured'); @@ -542,6 +571,7 @@ describe('Action Executor', () => { logger: loggerMock, request: {}, connectorUsageCollector: expect.any(ConnectorUsageCollector), + ...(executeUnsecure ? {} : { source: SOURCE }), }); } @@ -619,6 +649,100 @@ describe('Action Executor', () => { }); }); + test(`${label} with sub-feature connector`, async () => { + encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce( + subFeatureConnectorSavedObject + ); + connectorTypeRegistry.get.mockReturnValueOnce(subFeatureConnectorType); + connectorTypeRegistry.hasSubFeature.mockReturnValueOnce(true); + + if (executeUnsecure) { + await actionExecutor.executeUnsecured(executeUnsecuredParams); + } else { + await actionExecutor.execute(executeParams); + } + + if (executeUnsecure) { + expect(connectorTypeRegistry.hasSubFeature).not.toHaveBeenCalled(); + } else { + expect(connectorTypeRegistry.hasSubFeature).toHaveBeenCalled(); + expect(authorizationMock.ensureAuthorized).toBeCalled(); + } + + expect(encryptedSavedObjectsClient.getDecryptedAsInternalUser).toHaveBeenCalledWith( + 'action', + CONNECTOR_ID, + { namespace: 'some-namespace' } + ); + + expect(connectorTypeRegistry.get).toHaveBeenCalledWith('test.sub-feature-action'); + expect(connectorTypeRegistry.isActionExecutable).toHaveBeenCalledWith( + CONNECTOR_ID, + 'test.sub-feature-action', + { + notifyUsage: true, + } + ); + + expect(subFeatureConnectorType.executor).toHaveBeenCalledWith({ + actionId: CONNECTOR_ID, + services: expect.anything(), + config: {}, + secrets: {}, + params: { foo: true }, + logger: loggerMock, + connectorUsageCollector: expect.any(ConnectorUsageCollector), + ...(executeUnsecure ? {} : { source: SOURCE }), + }); + + expect(loggerMock.debug).toBeCalledWith('executing action test.sub-feature-action:1: 1'); + expect(eventLogger.logEvent).toHaveBeenCalledTimes(2); + + const execStartDoc = getBaseExecuteStartEventLogDoc(executeUnsecure); + const execDoc = getBaseExecuteEventLogDoc(executeUnsecure); + + expect(eventLogger.logEvent).toHaveBeenNthCalledWith(1, { + ...execStartDoc, + kibana: { + ...execStartDoc.kibana, + action: { + ...execStartDoc.kibana.action, + type_id: 'test.sub-feature-action', + }, + saved_objects: [ + { + id: '1', + namespace: 'some-namespace', + rel: 'primary', + type: 'action', + type_id: 'test.sub-feature-action', + }, + ], + }, + message: 'action started: test.sub-feature-action:1: 1', + }); + expect(eventLogger.logEvent).toHaveBeenNthCalledWith(2, { + ...execDoc, + kibana: { + ...execDoc.kibana, + action: { + ...execDoc.kibana.action, + type_id: 'test.sub-feature-action', + }, + saved_objects: [ + { + id: '1', + namespace: 'some-namespace', + rel: 'primary', + type: 'action', + type_id: 'test.sub-feature-action', + }, + ], + }, + message: 'action executed: test.sub-feature-action:1: 1', + }); + }); + test(`${label} should return error status with error message when executor returns an error`, async () => { encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce( connectorSavedObject @@ -646,59 +770,6 @@ describe('Action Executor', () => { }); }); - test(`${label} should handle SentinelOne connector type`, async () => { - const sentinelOneConnectorType: jest.Mocked = { - id: '.sentinelone', - name: 'sentinelone', - minimumLicenseRequired: 'enterprise', - supportedFeatureIds: [SecurityConnectorFeatureId], - validate: { - config: { schema: schema.any() }, - secrets: { schema: schema.any() }, - params: { schema: schema.any() }, - }, - executor: jest.fn(), - }; - const sentinelOneSavedObject = { - id: '1', - type: 'action', - attributes: { - name: '1', - actionTypeId: '.sentinelone', - config: { - bar: true, - }, - secrets: { - baz: true, - }, - isMissingSecrets: false, - }, - references: [], - }; - - encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce( - sentinelOneSavedObject - ); - connectorTypeRegistry.get.mockReturnValueOnce(sentinelOneConnectorType); - - if (executeUnsecure) { - await actionExecutor.executeUnsecured({ - ...executeUnsecuredParams, - actionId: 'sentinel-one-connector-authz', - }); - expect(authorizationMock.ensureAuthorized).not.toHaveBeenCalled(); - } else { - await actionExecutor.execute({ - ...executeParams, - actionId: 'sentinel-one-connector-authz', - }); - expect(authorizationMock.ensureAuthorized).toHaveBeenCalledWith({ - operation: 'execute', - actionTypeId: '.sentinelone', - }); - } - }); - test(`${label} with taskInfo`, async () => { if (executeUnsecure) return; @@ -923,6 +994,7 @@ describe('Action Executor', () => { params: { foo: true }, logger: loggerMock, connectorUsageCollector: expect.any(ConnectorUsageCollector), + ...(executeUnsecure ? {} : { source: SOURCE }), }); }); @@ -955,6 +1027,7 @@ describe('Action Executor', () => { logger: loggerMock, request: {}, connectorUsageCollector: expect.any(ConnectorUsageCollector), + source: SOURCE, }); }); @@ -1024,6 +1097,7 @@ describe('Action Executor', () => { params: { foo: true }, logger: loggerMock, connectorUsageCollector: expect.any(ConnectorUsageCollector), + ...(executeUnsecure ? {} : { source: SOURCE }), }); expect(loggerMock.debug).toBeCalledWith('executing action test:preconfigured: Preconfigured'); @@ -1117,6 +1191,7 @@ describe('Action Executor', () => { logger: loggerMock, request: {}, connectorUsageCollector: expect.any(ConnectorUsageCollector), + source: SOURCE, }); expect(loggerMock.debug).toBeCalledWith( @@ -1337,6 +1412,7 @@ describe('Action Executor', () => { params: { foo: true }, logger: loggerMock, connectorUsageCollector: expect.any(ConnectorUsageCollector), + source: SOURCE, }); } }); @@ -1371,7 +1447,7 @@ describe('System actions', () => { getKibanaPrivileges: () => ['test/create'], }); connectorTypeRegistry.isSystemActionType.mockReturnValueOnce(true); - connectorTypeRegistry.getSystemActionKibanaPrivileges.mockReturnValueOnce(['test/create']); + connectorTypeRegistry.getActionKibanaPrivileges.mockReturnValueOnce(['test/create']); await actionExecutor.execute({ ...executeParams, actionId: 'system-connector-.cases' }); @@ -1382,13 +1458,13 @@ describe('System actions', () => { }); }); - test('pass the params to the connectorTypeRegistry when authorizing system actions', async () => { + test('pass the params and source to the connectorTypeRegistry when authorizing system actions', async () => { connectorTypeRegistry.get.mockReturnValueOnce({ ...systemConnectorType, getKibanaPrivileges: () => ['test/create'], }); connectorTypeRegistry.isSystemActionType.mockReturnValueOnce(true); - connectorTypeRegistry.getSystemActionKibanaPrivileges.mockReturnValueOnce(['test/create']); + connectorTypeRegistry.getActionKibanaPrivileges.mockReturnValueOnce(['test/create']); await actionExecutor.execute({ ...executeParams, @@ -1396,9 +1472,13 @@ describe('System actions', () => { actionId: 'system-connector-.cases', }); - expect(connectorTypeRegistry.getSystemActionKibanaPrivileges).toHaveBeenCalledWith('.cases', { - foo: 'bar', - }); + expect(connectorTypeRegistry.getActionKibanaPrivileges).toHaveBeenCalledWith( + '.cases', + { + foo: 'bar', + }, + ActionExecutionSourceType.HTTP_REQUEST + ); expect(authorizationMock.ensureAuthorized).toBeCalledWith({ actionTypeId: '.cases', @@ -1407,6 +1487,59 @@ describe('System actions', () => { }); }); }); + +describe('Sub-feature connectors', () => { + test('calls ensureAuthorized on sub-feature connectors if additional privileges are specified', async () => { + encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce( + subFeatureConnectorSavedObject + ); + connectorTypeRegistry.get.mockReturnValueOnce({ + ...subFeatureConnectorType, + getKibanaPrivileges: () => ['test/create'], + }); + connectorTypeRegistry.hasSubFeature.mockReturnValueOnce(true); + connectorTypeRegistry.getActionKibanaPrivileges.mockReturnValueOnce(['test/create']); + + await actionExecutor.execute(executeParams); + + expect(authorizationMock.ensureAuthorized).toBeCalledWith({ + actionTypeId: 'test.sub-feature-action', + operation: 'execute', + additionalPrivileges: ['test/create'], + }); + }); + + test('pass the params and source to the connectorTypeRegistry when authorizing sub-feature connectors', async () => { + encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce( + subFeatureConnectorSavedObject + ); + connectorTypeRegistry.get.mockReturnValueOnce({ + ...subFeatureConnectorType, + getKibanaPrivileges: () => ['test/create'], + }); + connectorTypeRegistry.hasSubFeature.mockReturnValueOnce(true); + connectorTypeRegistry.getActionKibanaPrivileges.mockReturnValueOnce(['test/create']); + + await actionExecutor.execute({ + ...executeParams, + params: { foo: 'bar' }, + }); + + expect(connectorTypeRegistry.getActionKibanaPrivileges).toHaveBeenCalledWith( + 'test.sub-feature-action', + { + foo: 'bar', + }, + ActionExecutionSourceType.HTTP_REQUEST + ); + + expect(authorizationMock.ensureAuthorized).toBeCalledWith({ + actionTypeId: 'test.sub-feature-action', + operation: 'execute', + additionalPrivileges: ['test/create'], + }); + }); +}); describe('Event log', () => { test('writes to event log for execute timeout', async () => { setupActionExecutorMock(); @@ -1474,6 +1607,7 @@ describe('Event log', () => { kibana: { action: { execution: { + source: 'http_request', uuid: '2', }, name: 'action-1', @@ -1528,6 +1662,7 @@ describe('Event log', () => { kibana: { action: { execution: { + source: 'http_request', uuid: '2', }, name: 'action-1', @@ -1591,6 +1726,7 @@ describe('Event log', () => { kibana: { action: { execution: { + source: 'http_request', usage: { request_body_bytes: 0, }, @@ -1675,6 +1811,7 @@ describe('Event log', () => { gen_ai: { usage: mockGenAi.usage, }, + source: 'http_request', usage: { request_body_bytes: 0, }, @@ -1775,6 +1912,7 @@ describe('Event log', () => { total_tokens: 35, }, }, + source: 'http_request', usage: { request_body_bytes: 0, }, diff --git a/x-pack/platform/plugins/shared/actions/server/lib/action_executor.ts b/x-pack/platform/plugins/shared/actions/server/lib/action_executor.ts index b0d8e7c5b469c..f94ba76ae3b91 100644 --- a/x-pack/platform/plugins/shared/actions/server/lib/action_executor.ts +++ b/x-pack/platform/plugins/shared/actions/server/lib/action_executor.ts @@ -48,12 +48,11 @@ import { ValidatorServices, } from '../types'; import { EVENT_LOG_ACTIONS } from '../constants/event_log'; -import { ActionExecutionSource } from './action_execution_source'; +import { ActionExecutionSource, ActionExecutionSourceType } from './action_execution_source'; import { RelatedSavedObjects } from './related_saved_objects'; import { createActionEventLogRecordObject } from './create_action_event_log_record_object'; import { ActionExecutionError, ActionExecutionErrorReason } from './errors/action_execution_error'; import type { ActionsAuthorization } from '../authorization/actions_authorization'; -import { isBidirectionalConnectorType } from './bidirectional_connectors'; // 1,000,000 nanoseconds in 1 millisecond const Millis2Nanos = 1000 * 1000; @@ -169,6 +168,7 @@ export class ActionExecutor { actionTypeId: connectorTypeId, actionTypeRegistry, authorization, + source: source?.type, }); }, executeLabel: `execute_action`, @@ -719,6 +719,7 @@ interface EnsureAuthorizedToExecuteOpts { params: Record; actionTypeRegistry: ActionTypeRegistryContract; authorization: ActionsAuthorization; + source?: ActionExecutionSourceType; } const ensureAuthorizedToExecute = async ({ @@ -727,12 +728,17 @@ const ensureAuthorizedToExecute = async ({ params, actionTypeRegistry, authorization, + source, }: EnsureAuthorizedToExecuteOpts) => { try { - if (actionTypeRegistry.isSystemActionType(actionTypeId)) { - const additionalPrivileges = actionTypeRegistry.getSystemActionKibanaPrivileges( + if ( + actionTypeRegistry.isSystemActionType(actionTypeId) || + actionTypeRegistry.hasSubFeature(actionTypeId) + ) { + const additionalPrivileges = actionTypeRegistry.getActionKibanaPrivileges( actionTypeId, - params + params, + source ); await authorization.ensureAuthorized({ @@ -740,13 +746,6 @@ const ensureAuthorizedToExecute = async ({ additionalPrivileges, actionTypeId, }); - } else if (isBidirectionalConnectorType(actionTypeId)) { - // SentinelOne and Crowdstrike sub-actions require that a user have `all` privilege to Actions and Connectors. - // This is a temporary solution until a more robust RBAC approach can be implemented for sub-actions - await authorization.ensureAuthorized({ - operation: 'execute', - actionTypeId, - }); } } catch (error) { throw new ActionExecutionError(error.message, ActionExecutionErrorReason.Authorization, { diff --git a/x-pack/platform/plugins/shared/actions/server/lib/get_action_kibana_privileges.ts b/x-pack/platform/plugins/shared/actions/server/lib/get_action_kibana_privileges.ts new file mode 100644 index 0000000000000..118b575401ab4 --- /dev/null +++ b/x-pack/platform/plugins/shared/actions/server/lib/get_action_kibana_privileges.ts @@ -0,0 +1,26 @@ +/* + * 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 { ActionsClientContext } from '../actions_client'; +import { ActionExecutionSourceType } from './action_execution_source'; +import { ExecuteOptions } from './action_executor'; + +export function getActionKibanaPrivileges( + context: ActionsClientContext, + actionTypeId?: string, + params?: ExecuteOptions['params'], + source?: ActionExecutionSourceType +) { + const additionalPrivileges = + actionTypeId && + (context.actionTypeRegistry.isSystemActionType(actionTypeId) || + context.actionTypeRegistry.hasSubFeature(actionTypeId)) + ? context.actionTypeRegistry.getActionKibanaPrivileges(actionTypeId, params, source) + : []; + + return additionalPrivileges; +} diff --git a/x-pack/platform/plugins/shared/actions/server/lib/get_system_action_kibana_privileges.ts b/x-pack/platform/plugins/shared/actions/server/lib/get_system_action_kibana_privileges.ts deleted file mode 100644 index ef3b8ff853d17..0000000000000 --- a/x-pack/platform/plugins/shared/actions/server/lib/get_system_action_kibana_privileges.ts +++ /dev/null @@ -1,28 +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 { ActionsClientContext } from '../actions_client'; -import { ExecuteOptions } from './action_executor'; - -export function getSystemActionKibanaPrivileges( - context: ActionsClientContext, - connectorId: string, - params?: ExecuteOptions['params'] -) { - const inMemoryConnector = context.inMemoryConnectors.find( - (connector) => connector.id === connectorId - ); - - const additionalPrivileges = inMemoryConnector?.isSystemAction - ? context.actionTypeRegistry.getSystemActionKibanaPrivileges( - inMemoryConnector.actionTypeId, - params - ) - : []; - - return additionalPrivileges; -} diff --git a/x-pack/platform/plugins/shared/actions/server/routes/connector/list_types/list_types.test.ts b/x-pack/platform/plugins/shared/actions/server/routes/connector/list_types/list_types.test.ts index bf1ab91c5b6ab..148fe9973818f 100644 --- a/x-pack/platform/plugins/shared/actions/server/routes/connector/list_types/list_types.test.ts +++ b/x-pack/platform/plugins/shared/actions/server/routes/connector/list_types/list_types.test.ts @@ -12,6 +12,7 @@ import { mockHandlerArguments } from '../../_mock_handler_arguments'; import { listTypesRoute } from './list_types'; import { verifyAccessAndContext } from '../../verify_access_and_context'; import { actionsClientMock } from '../../../mocks'; +import { SubFeature } from '../../../../common'; jest.mock('../../verify_access_and_context', () => ({ verifyAccessAndContext: jest.fn(), @@ -43,6 +44,7 @@ describe('listTypesRoute', () => { minimumLicenseRequired: 'gold' as LicenseType, supportedFeatureIds: ['alerting'], isSystemActionType: false, + subFeature: 'endpointSecurity' as SubFeature, }, ]; @@ -61,6 +63,7 @@ describe('listTypesRoute', () => { "is_system_action_type": false, "minimum_license_required": "gold", "name": "name", + "sub_feature": "endpointSecurity", "supported_feature_ids": Array [ "alerting", ], @@ -80,6 +83,7 @@ describe('listTypesRoute', () => { supported_feature_ids: ['alerting'], minimum_license_required: 'gold', is_system_action_type: false, + sub_feature: 'endpointSecurity', }, ], }); @@ -131,6 +135,7 @@ describe('listTypesRoute', () => { "is_system_action_type": false, "minimum_license_required": "gold", "name": "name", + "sub_feature": undefined, "supported_feature_ids": Array [ "alerting", ], diff --git a/x-pack/platform/plugins/shared/actions/server/routes/connector/list_types/transforms/transform_list_types_response/v1.ts b/x-pack/platform/plugins/shared/actions/server/routes/connector/list_types/transforms/transform_list_types_response/v1.ts index e32bec2f9e1a1..e1ba6dd56d732 100644 --- a/x-pack/platform/plugins/shared/actions/server/routes/connector/list_types/transforms/transform_list_types_response/v1.ts +++ b/x-pack/platform/plugins/shared/actions/server/routes/connector/list_types/transforms/transform_list_types_response/v1.ts @@ -21,6 +21,7 @@ export const transformListTypesResponse = ( minimumLicenseRequired, supportedFeatureIds, isSystemActionType, + subFeature, }) => ({ id, name, @@ -30,6 +31,7 @@ export const transformListTypesResponse = ( minimum_license_required: minimumLicenseRequired, supported_feature_ids: supportedFeatureIds, is_system_action_type: isSystemActionType, + sub_feature: subFeature, }) ); }; diff --git a/x-pack/platform/plugins/shared/actions/server/routes/connector/list_types_system/list_types_system.test.ts b/x-pack/platform/plugins/shared/actions/server/routes/connector/list_types_system/list_types_system.test.ts index 7398d020f5972..1402dc0820721 100644 --- a/x-pack/platform/plugins/shared/actions/server/routes/connector/list_types_system/list_types_system.test.ts +++ b/x-pack/platform/plugins/shared/actions/server/routes/connector/list_types_system/list_types_system.test.ts @@ -12,6 +12,7 @@ import { mockHandlerArguments } from '../../_mock_handler_arguments'; import { listTypesWithSystemRoute } from './list_types_system'; import { verifyAccessAndContext } from '../../verify_access_and_context'; import { actionsClientMock } from '../../../mocks'; +import { SubFeature } from '../../../../common'; jest.mock('../../verify_access_and_context', () => ({ verifyAccessAndContext: jest.fn(), @@ -43,6 +44,7 @@ describe('listTypesWithSystemRoute', () => { minimumLicenseRequired: 'gold' as LicenseType, supportedFeatureIds: ['alerting'], isSystemActionType: true, + subFeature: 'endpointSecurity' as SubFeature, }, ]; @@ -61,6 +63,7 @@ describe('listTypesWithSystemRoute', () => { "is_system_action_type": true, "minimum_license_required": "gold", "name": "name", + "sub_feature": "endpointSecurity", "supported_feature_ids": Array [ "alerting", ], @@ -80,6 +83,7 @@ describe('listTypesWithSystemRoute', () => { supported_feature_ids: ['alerting'], minimum_license_required: 'gold', is_system_action_type: true, + sub_feature: 'endpointSecurity', }, ], }); @@ -131,6 +135,7 @@ describe('listTypesWithSystemRoute', () => { "is_system_action_type": false, "minimum_license_required": "gold", "name": "name", + "sub_feature": undefined, "supported_feature_ids": Array [ "alerting", ], diff --git a/x-pack/platform/plugins/shared/actions/server/sub_action_framework/register.test.ts b/x-pack/platform/plugins/shared/actions/server/sub_action_framework/register.test.ts index 8ae7f3cf3350f..51bb97f585dee 100644 --- a/x-pack/platform/plugins/shared/actions/server/sub_action_framework/register.test.ts +++ b/x-pack/platform/plugins/shared/actions/server/sub_action_framework/register.test.ts @@ -117,7 +117,29 @@ describe('Registration', () => { }); }); - it('add support for setting the kibana privileges for system connectors', async () => { + it('registers a sub-feature connector correctly', async () => { + register({ + actionTypeRegistry, + connector: { ...connector, subFeature: 'endpointSecurity' }, + configurationUtilities: mockedActionsConfig, + logger, + }); + + expect(actionTypeRegistry.register).toHaveBeenCalledTimes(1); + expect(actionTypeRegistry.register).toHaveBeenCalledWith({ + id: connector.id, + name: connector.name, + minimumLicenseRequired: connector.minimumLicenseRequired, + supportedFeatureIds: connector.supportedFeatureIds, + validate: expect.anything(), + executor: expect.any(Function), + getService: expect.any(Function), + renderParameterTemplates: expect.any(Function), + subFeature: 'endpointSecurity', + }); + }); + + it('add support for setting the kibana privileges', async () => { const getKibanaPrivileges = () => ['my-privilege']; register({ diff --git a/x-pack/platform/plugins/shared/actions/server/sub_action_framework/register.ts b/x-pack/platform/plugins/shared/actions/server/sub_action_framework/register.ts index 04e7f0d9ea417..33b420577c378 100644 --- a/x-pack/platform/plugins/shared/actions/server/sub_action_framework/register.ts +++ b/x-pack/platform/plugins/shared/actions/server/sub_action_framework/register.ts @@ -41,6 +41,7 @@ export const register = { /** @@ -119,8 +121,10 @@ export interface SubActionConnectorType { getService: (params: ServiceParams) => SubActionConnector; renderParameterTemplates?: RenderParameterTemplates; isSystemActionType?: boolean; + subFeature?: SubFeature; getKibanaPrivileges?: (args?: { params?: { subAction: string; subActionParams: Record }; + source?: ActionExecutionSourceType; }) => string[]; preSaveHook?: (params: PreSaveConnectorHookParams) => Promise; postSaveHook?: (params: PostSaveConnectorHookParams) => Promise; diff --git a/x-pack/platform/plugins/shared/actions/server/types.ts b/x-pack/platform/plugins/shared/actions/server/types.ts index e95e46d6d8cfb..c07f900a02217 100644 --- a/x-pack/platform/plugins/shared/actions/server/types.ts +++ b/x-pack/platform/plugins/shared/actions/server/types.ts @@ -23,7 +23,7 @@ import { ServiceParams } from './sub_action_framework/types'; import { ActionTypeRegistry } from './action_type_registry'; import { PluginSetupContract, PluginStartContract } from './plugin'; import { ActionsClient } from './actions_client'; -import { ActionTypeExecutorResult } from '../common'; +import { ActionTypeExecutorResult, SubFeature } from '../common'; import { TaskInfo } from './lib/action_executor'; import { ConnectorTokenClient } from './lib/connector_token_client'; import { ActionsConfigurationUtilities } from './actions_config'; @@ -40,7 +40,7 @@ export type ActionTypeParams = Record; export type ConnectorTokenClientContract = PublicMethodsOf; import { Connector, ConnectorWithExtraFindData } from './application/connector/types'; -import type { ActionExecutionSource } from './lib'; +import type { ActionExecutionSource, ActionExecutionSourceType } from './lib'; export { ActionExecutionSourceType } from './lib'; import { ConnectorUsageCollector } from './usage'; export { ConnectorUsageCollector } from './usage'; @@ -197,6 +197,7 @@ export interface ActionType< connector?: (config: Config, secrets: Secrets) => string | null; }; isSystemActionType?: boolean; + subFeature?: SubFeature; /** * Additional Kibana privileges to be checked by the actions framework. * Use it if you want to perform extra authorization checks based on a Kibana feature. @@ -208,7 +209,10 @@ export interface ActionType< * It only works with system actions and only when executing an action. * For all other scenarios they will be ignored */ - getKibanaPrivileges?: (args?: { params?: Params }) => string[]; + getKibanaPrivileges?: (args?: { + params?: Params; + source?: ActionExecutionSourceType; + }) => string[]; renderParameterTemplates?: RenderParameterTemplates; executor: ExecutorType; getService?: (params: ServiceParams) => SubActionConnector; diff --git a/x-pack/platform/plugins/shared/alerting/server/application/rule/methods/bulk_edit/bulk_edit_rules.test.ts b/x-pack/platform/plugins/shared/alerting/server/application/rule/methods/bulk_edit/bulk_edit_rules.test.ts index f0421bc53e639..b47b3c43e0e40 100644 --- a/x-pack/platform/plugins/shared/alerting/server/application/rule/methods/bulk_edit/bulk_edit_rules.test.ts +++ b/x-pack/platform/plugins/shared/alerting/server/application/rule/methods/bulk_edit/bulk_edit_rules.test.ts @@ -207,6 +207,8 @@ describe('bulkEdit()', () => { isDeprecated: false, }, ]); + actionsClient.listTypes.mockReset(); + actionsClient.listTypes.mockResolvedValue([]); rulesClientParams.getActionsClient.mockResolvedValue(actionsClient); authorization.getFindAuthorizationFilter.mockResolvedValue({ diff --git a/x-pack/platform/plugins/shared/alerting/server/application/rule/methods/create/create_rule.test.ts b/x-pack/platform/plugins/shared/alerting/server/application/rule/methods/create/create_rule.test.ts index 61a2c8aad9442..651d74def840f 100644 --- a/x-pack/platform/plugins/shared/alerting/server/application/rule/methods/create/create_rule.test.ts +++ b/x-pack/platform/plugins/shared/alerting/server/application/rule/methods/create/create_rule.test.ts @@ -162,6 +162,8 @@ describe('create()', () => { isSystemAction: false, }, ]); + actionsClient.listTypes.mockReset(); + actionsClient.listTypes.mockResolvedValue([]); actionsClient.isSystemAction.mockImplementation((id: string) => id === 'system_action-id'); diff --git a/x-pack/platform/plugins/shared/alerting/server/application/rule/methods/update/update_rule.test.ts b/x-pack/platform/plugins/shared/alerting/server/application/rule/methods/update/update_rule.test.ts index 4031d0b3175cf..7def9349c94a0 100644 --- a/x-pack/platform/plugins/shared/alerting/server/application/rule/methods/update/update_rule.test.ts +++ b/x-pack/platform/plugins/shared/alerting/server/application/rule/methods/update/update_rule.test.ts @@ -196,6 +196,8 @@ describe('update()', () => { isSystemAction: false, }, ]); + actionsClient.listTypes.mockReset(); + actionsClient.listTypes.mockResolvedValue([]); rulesClientParams.getActionsClient.mockResolvedValue(actionsClient); unsecuredSavedObjectsClient.get.mockResolvedValue(existingAlert); encryptedSavedObjects.getDecryptedAsInternalUser.mockResolvedValue(existingDecryptedAlert); diff --git a/x-pack/platform/plugins/shared/alerting/server/rules_client/lib/validate_actions.test.ts b/x-pack/platform/plugins/shared/alerting/server/rules_client/lib/validate_actions.test.ts index e565f8b1b51ed..717ca3a8444a4 100644 --- a/x-pack/platform/plugins/shared/alerting/server/rules_client/lib/validate_actions.test.ts +++ b/x-pack/platform/plugins/shared/alerting/server/rules_client/lib/validate_actions.test.ts @@ -13,6 +13,7 @@ import { NormalizedAlertAction, NormalizedSystemAction, RulesClientContext } fro describe('validateActions', () => { const loggerErrorMock = jest.fn(); const getBulkMock = jest.fn(); + const listTypesMock = jest.fn(); const ruleType: jest.Mocked = { id: 'test', name: 'My test rule', @@ -68,10 +69,15 @@ describe('validateActions', () => { getActionsClient: () => { return { getBulk: getBulkMock, + listTypes: listTypesMock, }; }, }; + beforeEach(() => { + listTypesMock.mockResolvedValue([]); + }); + afterEach(() => { jest.resetAllMocks(); }); @@ -307,4 +313,22 @@ describe('validateActions', () => { '"Failed to validate actions due to the following error: Action\'s alertsFilter days has invalid values: (111:[0,8]) "' ); }); + + it('should return error message if the action is an Endpoint Security sub-feature connector type', async () => { + getBulkMock.mockResolvedValueOnce([ + { actionTypeId: 'test.endpointSecurity', name: 'test name' }, + ]); + listTypesMock.mockResolvedValueOnce([ + { + id: 'test.endpointSecurity', + name: 'endpoint security connector type', + subFeature: 'endpointSecurity', + }, + ]); + await expect( + validateActions(context as unknown as RulesClientContext, ruleType, data, false) + ).rejects.toThrowErrorMatchingInlineSnapshot( + '"Failed to validate actions due to the following error: Endpoint security connectors cannot be used as alerting actions"' + ); + }); }); diff --git a/x-pack/platform/plugins/shared/alerting/server/rules_client/lib/validate_actions.ts b/x-pack/platform/plugins/shared/alerting/server/rules_client/lib/validate_actions.ts index 4f5be980bae89..903ac43cdd8ec 100644 --- a/x-pack/platform/plugins/shared/alerting/server/rules_client/lib/validate_actions.ts +++ b/x-pack/platform/plugins/shared/alerting/server/rules_client/lib/validate_actions.ts @@ -76,6 +76,26 @@ export async function validateActions( ); } } + + // check for invalid Endpoint Security connectors + const allConnectorTypes = await actionsClient.listTypes({}); + const endpointSecurityConnectorTypeIds = new Set( + allConnectorTypes + .filter((type) => type.subFeature === 'endpointSecurity') + .map((type) => type.id) + ); + const endpointSecurityActionTypeIds = actionResults + .map((result) => result.actionTypeId) + .filter((id) => endpointSecurityConnectorTypeIds.has(id)); + + if (endpointSecurityActionTypeIds.length > 0) { + errors.push( + i18n.translate('xpack.alerting.rulesClient.validateActions.endpointSecurityConnector', { + defaultMessage: 'Endpoint security connectors cannot be used as alerting actions', + }) + ); + } + // check for actions with invalid action groups const { actionGroups: alertTypeActionGroups } = ruleType; const usedAlertActionGroups = actions.map((action) => action.group); diff --git a/x-pack/platform/plugins/shared/fleet/common/constants/authz.ts b/x-pack/platform/plugins/shared/fleet/common/constants/authz.ts index 4cbc52cabf683..8cfa1d8f854ea 100644 --- a/x-pack/platform/plugins/shared/fleet/common/constants/authz.ts +++ b/x-pack/platform/plugins/shared/fleet/common/constants/authz.ts @@ -168,6 +168,18 @@ export const ENDPOINT_PRIVILEGES: Record = deepFreez privilegeType: 'api', privilegeName: 'writeScanOperations', }, + writeWorkflowInsights: { + appId: DEFAULT_APP_CATEGORIES.security.id, + privilegeSplit: '-', + privilegeType: 'api', + privilegeName: 'writeWorkflowInsights', + }, + readWorkflowInsights: { + appId: DEFAULT_APP_CATEGORIES.security.id, + privilegeSplit: '-', + privilegeType: 'api', + privilegeName: 'readWorkflowInsights', + }, }); export const ENDPOINT_EXCEPTIONS_PRIVILEGES: Record = deepFreeze({ diff --git a/x-pack/platform/plugins/shared/fleet/public/components/platform_selector.tsx b/x-pack/platform/plugins/shared/fleet/public/components/platform_selector.tsx index 5cee9a9a14320..33148d24ce869 100644 --- a/x-pack/platform/plugins/shared/fleet/public/components/platform_selector.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/components/platform_selector.tsx @@ -17,6 +17,7 @@ import { } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; +import { css } from '@emotion/react'; import { FLEET_CLOUD_SECURITY_POSTURE_KSPM_POLICY_TEMPLATE, @@ -224,7 +225,7 @@ export const PlatformSelector: React.FunctionComponent = ({ fontSize="m" isCopyable={!fullCopyButton} paddingSize="m" - css={` + css={css` max-width: 1100px; `} whiteSpace="pre" diff --git a/x-pack/platform/plugins/shared/fleet/server/constants/api_privileges.ts b/x-pack/platform/plugins/shared/fleet/server/constants/api_privileges.ts new file mode 100644 index 0000000000000..ab2cdedc3520e --- /dev/null +++ b/x-pack/platform/plugins/shared/fleet/server/constants/api_privileges.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 { INTEGRATIONS_PLUGIN_ID, PLUGIN_ID } from '../../common'; + +export const FLEET_API_PRIVILEGES = { + FLEET: { + READ: `${PLUGIN_ID}-read`, + ALL: `${PLUGIN_ID}-all`, + }, + AGENTS: { + READ: `${PLUGIN_ID}-agents-read`, + ALL: `${PLUGIN_ID}-agents-all`, + }, + AGENT_POLICIES: { + READ: `${PLUGIN_ID}-agent-policies-read`, + ALL: `${PLUGIN_ID}-agent-policies-all`, + }, + SETTINGS: { + READ: `${PLUGIN_ID}-settings-read`, + ALL: `${PLUGIN_ID}-settings-all`, + }, + INTEGRATIONS: { + READ: `${INTEGRATIONS_PLUGIN_ID}-read`, + ALL: `${INTEGRATIONS_PLUGIN_ID}-all`, + }, + SETUP: `fleet-setup`, +}; diff --git a/x-pack/platform/plugins/shared/fleet/server/integration_tests/helpers/docker_registry_helper.ts b/x-pack/platform/plugins/shared/fleet/server/integration_tests/helpers/docker_registry_helper.ts index d65a323e84d5b..8c5792b37807d 100644 --- a/x-pack/platform/plugins/shared/fleet/server/integration_tests/helpers/docker_registry_helper.ts +++ b/x-pack/platform/plugins/shared/fleet/server/integration_tests/helpers/docker_registry_helper.ts @@ -18,7 +18,11 @@ import pRetry from 'p-retry'; const BEFORE_SETUP_TIMEOUT = 30 * 60 * 1000; // 30 minutes; const DOCKER_START_TIMEOUT = 5 * 60 * 1000; // 5 minutes -const DOCKER_IMAGE = `docker.elastic.co/package-registry/distribution:lite`; +// This image comes from the latest successful build of https://buildkite.com/elastic/kibana-package-registry-promote +// which is promoted after acceptance tests succeed against docker.elastic.co/package-registry/distribution:lite +const DOCKER_IMAGE = + process.env.FLEET_PACKAGE_REGISTRY_DOCKER_IMAGE || + 'docker.elastic.co/kibana-ci/package-registry-distribution:lite'; function firstWithTimeout(source$: Rx.Observable, errorMsg: string, ms = 30 * 1000) { return Rx.race( diff --git a/x-pack/platform/plugins/shared/fleet/server/routes/agent/index.ts b/x-pack/platform/plugins/shared/fleet/server/routes/agent/index.ts index 82893b6590e30..ca9876d74c435 100644 --- a/x-pack/platform/plugins/shared/fleet/server/routes/agent/index.ts +++ b/x-pack/platform/plugins/shared/fleet/server/routes/agent/index.ts @@ -55,7 +55,7 @@ import { PostNewAgentActionResponseSchema, PostRetrieveAgentsByActionsResponseSchema, } from '../../types/rest_spec/agent'; - +import { FLEET_API_PRIVILEGES } from '../../constants/api_privileges'; import { calculateRouteAuthz } from '../../services/security/security'; import { genericErrorResponse } from '../schema/errors'; @@ -95,8 +95,10 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT router.versioned .get({ path: AGENT_API_ROUTES.INFO_PATTERN, - fleetAuthz: { - fleet: { readAgents: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENTS.READ], + }, }, summary: `Get an agent`, description: `Get an agent by ID.`, @@ -126,8 +128,10 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT router.versioned .put({ path: AGENT_API_ROUTES.UPDATE_PATTERN, - fleetAuthz: { - fleet: { allAgents: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENTS.ALL], + }, }, summary: `Update an agent`, description: `Update an agent by ID.`, @@ -157,8 +161,10 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT router.versioned .post({ path: AGENT_API_ROUTES.BULK_UPDATE_AGENT_TAGS_PATTERN, - fleetAuthz: { - fleet: { allAgents: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENTS.ALL], + }, }, summary: `Bulk update agent tags`, options: { @@ -187,8 +193,10 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT router.versioned .delete({ path: AGENT_API_ROUTES.DELETE_PATTERN, - fleetAuthz: { - fleet: { allAgents: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENTS.ALL], + }, }, summary: `Delete an agent`, description: `Delete an agent by ID.`, @@ -218,9 +226,10 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT router.versioned .get({ path: AGENT_API_ROUTES.LIST_PATTERN, - - fleetAuthz: { - fleet: { readAgents: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENTS.READ], + }, }, summary: `Get agents`, options: { @@ -249,8 +258,10 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT router.versioned .get({ path: AGENT_API_ROUTES.LIST_TAGS_PATTERN, - fleetAuthz: { - fleet: { readAgents: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENTS.READ], + }, }, summary: `Get agent tags`, options: { @@ -279,8 +290,10 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT router.versioned .post({ path: AGENT_API_ROUTES.ACTIONS_PATTERN, - fleetAuthz: { - fleet: { allAgents: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENTS.ALL], + }, }, summary: `Create an agent action`, options: { @@ -313,8 +326,10 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT router.versioned .post({ path: AGENT_API_ROUTES.CANCEL_ACTIONS_PATTERN, - fleetAuthz: { - fleet: { allAgents: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENTS.ALL], + }, }, summary: `Cancel an agent action`, options: { @@ -348,8 +363,10 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT router.versioned .post({ path: AGENT_API_ROUTES.LIST_PATTERN, - fleetAuthz: { - fleet: { readAgents: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENTS.READ], + }, }, summary: `Get agents by action ids`, options: { @@ -377,8 +394,10 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT router.versioned .post({ path: AGENT_API_ROUTES.UNENROLL_PATTERN, - fleetAuthz: { - fleet: { allAgents: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENTS.ALL], + }, }, summary: `Unenroll an agent`, options: { @@ -396,8 +415,10 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT router.versioned .post({ path: AGENT_API_ROUTES.REASSIGN_PATTERN, - fleetAuthz: { - fleet: { allAgents: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENTS.ALL], + }, }, summary: `Reassign an agent`, options: { @@ -425,8 +446,10 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT router.versioned .post({ path: AGENT_API_ROUTES.REQUEST_DIAGNOSTICS_PATTERN, - fleetAuthz: { - fleet: { readAgents: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENTS.READ], + }, }, summary: `Request agent diagnostics`, options: { @@ -454,8 +477,10 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT router.versioned .post({ path: AGENT_API_ROUTES.BULK_REQUEST_DIAGNOSTICS_PATTERN, - fleetAuthz: { - fleet: { readAgents: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENTS.READ], + }, }, summary: `Bulk request diagnostics from agents`, options: { @@ -483,8 +508,10 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT router.versioned .get({ path: AGENT_API_ROUTES.LIST_UPLOADS_PATTERN, - fleetAuthz: { - fleet: { readAgents: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENTS.READ], + }, }, summary: `Get agent uploads`, options: { @@ -512,8 +539,10 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT router.versioned .get({ path: AGENT_API_ROUTES.GET_UPLOAD_FILE_PATTERN, - fleetAuthz: { - fleet: { readAgents: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENTS.READ], + }, }, summary: `Get an uploaded file`, description: `Get a file uploaded by an agent.`, @@ -542,8 +571,10 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT router.versioned .delete({ path: AGENT_API_ROUTES.DELETE_UPLOAD_FILE_PATTERN, - fleetAuthz: { - fleet: { allAgents: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENTS.ALL], + }, }, summary: `Delete an uploaded file`, description: `Delete a file uploaded by an agent.`, @@ -568,11 +599,11 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT }, deleteAgentUploadFileHandler ); - // Get agent status for policy router.versioned .get({ path: AGENT_API_ROUTES.STATUS_PATTERN, + // TODO move to kibana authz https://github.com/elastic/kibana/issues/203170 fleetAuthz: (fleetAuthz: FleetAuthz): boolean => calculateRouteAuthz( fleetAuthz, @@ -604,8 +635,10 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT router.versioned .get({ path: AGENT_API_ROUTES.DATA_PATTERN, - fleetAuthz: { - fleet: { readAgents: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENTS.READ], + }, }, summary: `Get incoming agent data`, options: { @@ -634,8 +667,10 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT router.versioned .post({ path: AGENT_API_ROUTES.UPGRADE_PATTERN, - fleetAuthz: { - fleet: { allAgents: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENTS.ALL], + }, }, summary: `Upgrade an agent`, options: { @@ -663,8 +698,10 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT router.versioned .post({ path: AGENT_API_ROUTES.BULK_UPGRADE_PATTERN, - fleetAuthz: { - fleet: { allAgents: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENTS.ALL], + }, }, summary: `Bulk upgrade agents`, options: { @@ -693,8 +730,10 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT router.versioned .get({ path: AGENT_API_ROUTES.ACTION_STATUS_PATTERN, - fleetAuthz: { - fleet: { readAgents: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENTS.READ], + }, }, summary: `Get an agent action status`, options: { @@ -723,8 +762,10 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT router.versioned .post({ path: AGENT_API_ROUTES.BULK_REASSIGN_PATTERN, - fleetAuthz: { - fleet: { allAgents: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENTS.ALL], + }, }, summary: `Bulk reassign agents`, options: { @@ -753,8 +794,10 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT router.versioned .post({ path: AGENT_API_ROUTES.BULK_UNENROLL_PATTERN, - fleetAuthz: { - fleet: { allAgents: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENTS.ALL], + }, }, summary: `Bulk unenroll agents`, options: { @@ -783,8 +826,10 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT router.versioned .get({ path: AGENT_API_ROUTES.AVAILABLE_VERSIONS_PATTERN, - fleetAuthz: { - fleet: { readAgents: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENTS.READ], + }, }, summary: `Get available agent versions`, options: { @@ -817,8 +862,10 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT .get({ path: '/internal/fleet/agents/status_runtime_field', access: 'internal', - fleetAuthz: { - fleet: { readAgents: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENTS.READ], + }, }, }) .addVersion( diff --git a/x-pack/platform/plugins/shared/fleet/server/routes/agent_policy/index.ts b/x-pack/platform/plugins/shared/fleet/server/routes/agent_policy/index.ts index 0d0dc6ae68c25..9450b5e0da089 100644 --- a/x-pack/platform/plugins/shared/fleet/server/routes/agent_policy/index.ts +++ b/x-pack/platform/plugins/shared/fleet/server/routes/agent_policy/index.ts @@ -9,7 +9,7 @@ import { schema } from '@kbn/config-schema'; import type { FleetAuthzRouter } from '../../services/security'; import { API_VERSIONS } from '../../../common/constants'; - +import { FLEET_API_PRIVILEGES } from '../../constants/api_privileges'; import { AGENT_POLICY_API_ROUTES } from '../../constants'; import { GetAgentPoliciesRequestSchema, @@ -60,9 +60,18 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .get({ path: AGENT_POLICY_API_ROUTES.LIST_PATTERN, - fleetAuthz: (authz) => { - // Allow to retrieve agent policies metadata (no full) for user with only read agents permissions - return authz.fleet.readAgentPolicies || authz.fleet.readAgents; + security: { + authz: { + requiredPrivileges: [ + { + anyRequired: [ + FLEET_API_PRIVILEGES.AGENT_POLICIES.READ, + FLEET_API_PRIVILEGES.AGENTS.READ, + FLEET_API_PRIVILEGES.SETUP, + ], + }, + ], + }, }, summary: `Get agent policies`, options: { @@ -91,9 +100,18 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .post({ path: AGENT_POLICY_API_ROUTES.BULK_GET_PATTERN, - fleetAuthz: (authz) => { - // Allow to retrieve agent policies metadata (no full) for user with only read agents permissions - return authz.fleet.readAgentPolicies || authz.fleet.readAgents; + security: { + authz: { + requiredPrivileges: [ + { + anyRequired: [ + FLEET_API_PRIVILEGES.AGENT_POLICIES.READ, + FLEET_API_PRIVILEGES.AGENTS.READ, + FLEET_API_PRIVILEGES.SETUP, + ], + }, + ], + }, }, summary: `Bulk get agent policies`, options: { @@ -122,9 +140,18 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .get({ path: AGENT_POLICY_API_ROUTES.INFO_PATTERN, - fleetAuthz: (authz) => { - // Allow to retrieve agent policies metadata (no full) for user with only read agents permissions - return authz.fleet.readAgentPolicies || authz.fleet.readAgents; + security: { + authz: { + requiredPrivileges: [ + { + anyRequired: [ + FLEET_API_PRIVILEGES.AGENT_POLICIES.READ, + FLEET_API_PRIVILEGES.AGENTS.READ, + FLEET_API_PRIVILEGES.SETUP, + ], + }, + ], + }, }, summary: `Get an agent policy`, description: `Get an agent policy by ID.`, @@ -154,8 +181,10 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .post({ path: AGENT_POLICY_API_ROUTES.CREATE_PATTERN, - fleetAuthz: { - fleet: { allAgentPolicies: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENT_POLICIES.ALL], + }, }, summary: `Create an agent policy`, options: { @@ -184,8 +213,10 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .put({ path: AGENT_POLICY_API_ROUTES.UPDATE_PATTERN, - fleetAuthz: { - fleet: { allAgentPolicies: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENT_POLICIES.ALL], + }, }, summary: `Update an agent policy`, description: `Update an agent policy by ID.`, @@ -215,8 +246,10 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .post({ path: AGENT_POLICY_API_ROUTES.COPY_PATTERN, - fleetAuthz: { - fleet: { allAgentPolicies: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENT_POLICIES.ALL], + }, }, summary: `Copy an agent policy`, description: `Copy an agent policy by ID.`, @@ -246,8 +279,10 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .post({ path: AGENT_POLICY_API_ROUTES.DELETE_PATTERN, - fleetAuthz: { - fleet: { allAgentPolicies: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENT_POLICIES.ALL], + }, }, summary: `Delete an agent policy`, description: `Delete an agent policy by ID.`, @@ -277,8 +312,10 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .get({ path: AGENT_POLICY_API_ROUTES.FULL_INFO_PATTERN, - fleetAuthz: { - fleet: { readAgentPolicies: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENT_POLICIES.READ], + }, }, summary: `Get a full agent policy`, description: `Get a full agent policy by ID.`, @@ -308,8 +345,13 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .get({ path: AGENT_POLICY_API_ROUTES.FULL_INFO_DOWNLOAD_PATTERN, - fleetAuthz: { - fleet: { readAgentPolicies: true }, + security: { + authz: { + requiredPrivileges: [ + FLEET_API_PRIVILEGES.AGENT_POLICIES.READ, + FLEET_API_PRIVILEGES.SETUP, + ], + }, }, enableQueryVersion: true, summary: `Download an agent policy`, @@ -343,8 +385,13 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .get({ path: K8S_API_ROUTES.K8S_INFO_PATTERN, - fleetAuthz: { - fleet: { readAgentPolicies: true }, + security: { + authz: { + requiredPrivileges: [ + FLEET_API_PRIVILEGES.AGENT_POLICIES.READ, + FLEET_API_PRIVILEGES.SETUP, + ], + }, }, summary: `Get a full K8s agent manifest`, options: { @@ -373,8 +420,13 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .get({ path: K8S_API_ROUTES.K8S_DOWNLOAD_PATTERN, - fleetAuthz: { - fleet: { readAgentPolicies: true }, + security: { + authz: { + requiredPrivileges: [ + FLEET_API_PRIVILEGES.AGENT_POLICIES.READ, + FLEET_API_PRIVILEGES.SETUP, + ], + }, }, enableQueryVersion: true, summary: `Download an agent manifest`, @@ -406,8 +458,13 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .post({ path: AGENT_POLICY_API_ROUTES.LIST_OUTPUTS_PATTERN, - fleetAuthz: (authz) => { - return authz.fleet.readAgentPolicies && authz.fleet.readSettings; + security: { + authz: { + requiredPrivileges: [ + FLEET_API_PRIVILEGES.AGENT_POLICIES.READ, + FLEET_API_PRIVILEGES.SETTINGS.READ, + ], + }, }, summary: `Get outputs for agent policies`, description: `Get a list of outputs associated with agent policies.`, @@ -436,8 +493,13 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .get({ path: AGENT_POLICY_API_ROUTES.INFO_OUTPUTS_PATTERN, - fleetAuthz: (authz) => { - return authz.fleet.readAgentPolicies && authz.fleet.readSettings; + security: { + authz: { + requiredPrivileges: [ + FLEET_API_PRIVILEGES.AGENT_POLICIES.READ, + FLEET_API_PRIVILEGES.SETTINGS.READ, + ], + }, }, summary: `Get outputs for an agent policy`, description: `Get a list of outputs associated with agent policy by policy id.`, diff --git a/x-pack/platform/plugins/shared/fleet/server/routes/app/index.ts b/x-pack/platform/plugins/shared/fleet/server/routes/app/index.ts index e5198ea84a78c..aba2b2ff3acbb 100644 --- a/x-pack/platform/plugins/shared/fleet/server/routes/app/index.ts +++ b/x-pack/platform/plugins/shared/fleet/server/routes/app/index.ts @@ -21,6 +21,7 @@ import { CheckPermissionsRequestSchema, CheckPermissionsResponseSchema } from '. import { enableSpaceAwarenessMigration } from '../../services/spaces/enable_space_awareness'; import { type FleetConfigType } from '../../config'; import { genericErrorResponse } from '../schema/errors'; +import { FLEET_API_PRIVILEGES } from '../../constants/api_privileges'; export const getCheckPermissionsHandler: FleetRequestHandler< unknown, @@ -194,8 +195,14 @@ export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType .post({ path: '/internal/fleet/enable_space_awareness', access: 'internal', - fleetAuthz: { - fleet: { all: true }, + security: { + authz: { + requiredPrivileges: [ + FLEET_API_PRIVILEGES.AGENTS.ALL, + FLEET_API_PRIVILEGES.AGENT_POLICIES.ALL, + FLEET_API_PRIVILEGES.SETTINGS.ALL, + ], + }, }, }) .addVersion( @@ -236,8 +243,10 @@ export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType .get({ path: APP_API_ROUTES.AGENT_POLICIES_SPACES, access: 'internal', - fleetAuthz: { - fleet: { readAgentPolicies: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENT_POLICIES.READ], + }, }, }) .addVersion( @@ -251,8 +260,10 @@ export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType router.versioned .post({ path: APP_API_ROUTES.GENERATE_SERVICE_TOKEN_PATTERN, - fleetAuthz: { - fleet: { allAgents: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENTS.ALL], + }, }, summary: `Create a service token`, options: { diff --git a/x-pack/platform/plugins/shared/fleet/server/routes/data_streams/index.ts b/x-pack/platform/plugins/shared/fleet/server/routes/data_streams/index.ts index 7dc870c394bc8..e51c8ce447317 100644 --- a/x-pack/platform/plugins/shared/fleet/server/routes/data_streams/index.ts +++ b/x-pack/platform/plugins/shared/fleet/server/routes/data_streams/index.ts @@ -7,7 +7,7 @@ import { schema } from '@kbn/config-schema'; import type { FleetAuthzRouter } from '../../services/security'; - +import { FLEET_API_PRIVILEGES } from '../../constants/api_privileges'; import { API_VERSIONS } from '../../../common/constants'; import { DATA_STREAM_API_ROUTES } from '../../constants'; @@ -49,8 +49,14 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .get({ path: DATA_STREAM_API_ROUTES.LIST_PATTERN, - fleetAuthz: { - fleet: { all: true }, + security: { + authz: { + requiredPrivileges: [ + FLEET_API_PRIVILEGES.AGENTS.ALL, + FLEET_API_PRIVILEGES.AGENT_POLICIES.ALL, + FLEET_API_PRIVILEGES.SETTINGS.ALL, + ], + }, }, summary: `Get data streams`, options: { diff --git a/x-pack/platform/plugins/shared/fleet/server/routes/debug/index.ts b/x-pack/platform/plugins/shared/fleet/server/routes/debug/index.ts index bfe2bfd0f0e20..b3baf42552c34 100644 --- a/x-pack/platform/plugins/shared/fleet/server/routes/debug/index.ts +++ b/x-pack/platform/plugins/shared/fleet/server/routes/debug/index.ts @@ -9,7 +9,7 @@ import type { FleetAuthzRouter } from '../../services/security'; import { FLEET_DEBUG_ROUTES } from '../../constants'; import { API_VERSIONS } from '../../../common/constants'; - +import { FLEET_API_PRIVILEGES } from '../../constants/api_privileges'; import { FetchIndexRequestSchema, FetchSavedObjectNamesRequestSchema, @@ -27,8 +27,14 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .post({ path: FLEET_DEBUG_ROUTES.INDEX_PATTERN, access: 'internal', - fleetAuthz: { - fleet: { all: true }, + security: { + authz: { + requiredPrivileges: [ + FLEET_API_PRIVILEGES.AGENTS.ALL, + FLEET_API_PRIVILEGES.AGENT_POLICIES.ALL, + FLEET_API_PRIVILEGES.SETTINGS.ALL, + ], + }, }, }) .addVersion( @@ -43,8 +49,14 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .post({ path: FLEET_DEBUG_ROUTES.SAVED_OBJECTS_PATTERN, access: 'internal', - fleetAuthz: { - fleet: { all: true }, + security: { + authz: { + requiredPrivileges: [ + FLEET_API_PRIVILEGES.AGENTS.ALL, + FLEET_API_PRIVILEGES.AGENT_POLICIES.ALL, + FLEET_API_PRIVILEGES.SETTINGS.ALL, + ], + }, }, }) .addVersion( @@ -59,8 +71,14 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .post({ path: FLEET_DEBUG_ROUTES.SAVED_OBJECT_NAMES_PATTERN, access: 'internal', - fleetAuthz: { - fleet: { all: true }, + security: { + authz: { + requiredPrivileges: [ + FLEET_API_PRIVILEGES.AGENTS.ALL, + FLEET_API_PRIVILEGES.AGENT_POLICIES.ALL, + FLEET_API_PRIVILEGES.SETTINGS.ALL, + ], + }, }, }) .addVersion( diff --git a/x-pack/platform/plugins/shared/fleet/server/routes/download_source/index.ts b/x-pack/platform/plugins/shared/fleet/server/routes/download_source/index.ts index 687fdcf5f793f..62e97a731fa10 100644 --- a/x-pack/platform/plugins/shared/fleet/server/routes/download_source/index.ts +++ b/x-pack/platform/plugins/shared/fleet/server/routes/download_source/index.ts @@ -21,7 +21,7 @@ import { } from '../../types'; import { genericErrorResponse } from '../schema/errors'; - +import { FLEET_API_PRIVILEGES } from '../../constants/api_privileges'; import { ListResponseSchema } from '../schema/utils'; import { @@ -36,8 +36,17 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .get({ path: DOWNLOAD_SOURCE_API_ROUTES.LIST_PATTERN, - fleetAuthz: (authz) => { - return authz.fleet.readSettings || authz.fleet.readAgentPolicies; + security: { + authz: { + requiredPrivileges: [ + { + anyRequired: [ + FLEET_API_PRIVILEGES.AGENT_POLICIES.READ, + FLEET_API_PRIVILEGES.SETTINGS.READ, + ], + }, + ], + }, }, summary: `Get agent binary download sources`, options: { @@ -65,8 +74,17 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .get({ path: DOWNLOAD_SOURCE_API_ROUTES.INFO_PATTERN, - fleetAuthz: (authz) => { - return authz.fleet.readSettings || authz.fleet.readAgentPolicies; + security: { + authz: { + requiredPrivileges: [ + { + anyRequired: [ + FLEET_API_PRIVILEGES.AGENT_POLICIES.READ, + FLEET_API_PRIVILEGES.SETTINGS.READ, + ], + }, + ], + }, }, summary: `Get an agent binary download source`, description: `Get an agent binary download source by ID.`, @@ -95,8 +113,10 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .put({ path: DOWNLOAD_SOURCE_API_ROUTES.UPDATE_PATTERN, - fleetAuthz: { - fleet: { allSettings: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.SETTINGS.ALL], + }, }, summary: `Update an agent binary download source`, description: `Update an agent binary download source by ID.`, @@ -125,8 +145,10 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .post({ path: DOWNLOAD_SOURCE_API_ROUTES.CREATE_PATTERN, - fleetAuthz: { - fleet: { allSettings: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.SETTINGS.ALL], + }, }, summary: `Create an agent binary download source`, options: { @@ -154,8 +176,10 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .delete({ path: DOWNLOAD_SOURCE_API_ROUTES.DELETE_PATTERN, - fleetAuthz: { - fleet: { allSettings: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.SETTINGS.ALL], + }, }, summary: `Delete an agent binary download source`, description: `Delete an agent binary download source by ID.`, diff --git a/x-pack/platform/plugins/shared/fleet/server/routes/enrollment_api_key/index.ts b/x-pack/platform/plugins/shared/fleet/server/routes/enrollment_api_key/index.ts index e593bac3180fe..fd5ba7091ee2b 100644 --- a/x-pack/platform/plugins/shared/fleet/server/routes/enrollment_api_key/index.ts +++ b/x-pack/platform/plugins/shared/fleet/server/routes/enrollment_api_key/index.ts @@ -22,7 +22,7 @@ import { } from '../../types'; import { genericErrorResponse } from '../schema/errors'; - +import { FLEET_API_PRIVILEGES } from '../../constants/api_privileges'; import { ListResponseSchema } from '../schema/utils'; import { @@ -36,8 +36,14 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .get({ path: ENROLLMENT_API_KEY_ROUTES.INFO_PATTERN, - fleetAuthz: { - fleet: { readEnrollmentTokens: true }, + security: { + authz: { + requiredPrivileges: [ + { + anyRequired: [FLEET_API_PRIVILEGES.AGENTS.ALL, FLEET_API_PRIVILEGES.SETUP], + }, + ], + }, }, summary: `Get an enrollment API key`, description: `Get an enrollment API key by ID.`, @@ -66,8 +72,10 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .delete({ path: ENROLLMENT_API_KEY_ROUTES.DELETE_PATTERN, - fleetAuthz: { - fleet: { allAgents: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENTS.ALL], + }, }, summary: `Revoke an enrollment API key`, description: `Revoke an enrollment API key by ID by marking it as inactive.`, @@ -96,8 +104,14 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .get({ path: ENROLLMENT_API_KEY_ROUTES.LIST_PATTERN, - fleetAuthz: { - fleet: { readEnrollmentTokens: true }, + security: { + authz: { + requiredPrivileges: [ + { + anyRequired: [FLEET_API_PRIVILEGES.AGENTS.ALL, FLEET_API_PRIVILEGES.SETUP], + }, + ], + }, }, summary: `Get enrollment API keys`, options: { @@ -128,8 +142,10 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .post({ path: ENROLLMENT_API_KEY_ROUTES.CREATE_PATTERN, - fleetAuthz: { - fleet: { allAgents: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENTS.ALL], + }, }, summary: `Create an enrollment API key`, options: { diff --git a/x-pack/platform/plugins/shared/fleet/server/routes/epm/index.ts b/x-pack/platform/plugins/shared/fleet/server/routes/epm/index.ts index 787b02b69c3e8..49658b45ce2f8 100644 --- a/x-pack/platform/plugins/shared/fleet/server/routes/epm/index.ts +++ b/x-pack/platform/plugins/shared/fleet/server/routes/epm/index.ts @@ -5,8 +5,9 @@ * 2.0. */ -import { parseExperimentalConfigValue } from '../../../common/experimental_features'; +import type { RouteSecurity } from '@kbn/core-http-server'; +import { parseExperimentalConfigValue } from '../../../common/experimental_features'; import { API_VERSIONS } from '../../../common/constants'; import type { FleetAuthz } from '../../../common'; @@ -57,7 +58,7 @@ import { ReauthorizeTransformResponseSchema, } from '../../types'; import type { FleetConfigType } from '../../config'; - +import { FLEET_API_PRIVILEGES } from '../../constants/api_privileges'; import { genericErrorResponse } from '../schema/errors'; import { @@ -91,17 +92,40 @@ export const INSTALL_PACKAGES_AUTHZ: FleetAuthzRouteConfig['fleetAuthz'] = { integrations: { installPackages: true }, }; +export const INSTALL_PACKAGES_SECURITY: RouteSecurity = { + authz: { + requiredPrivileges: [ + FLEET_API_PRIVILEGES.INTEGRATIONS.ALL, + FLEET_API_PRIVILEGES.AGENT_POLICIES.ALL, + ], + }, +}; + export const READ_PACKAGE_INFO_AUTHZ: FleetAuthzRouteConfig['fleetAuthz'] = { integrations: { readPackageInfo: true }, }; +export const READ_PACKAGE_INFO_SECURITY: RouteSecurity = { + authz: { + requiredPrivileges: [ + { + anyRequired: [ + FLEET_API_PRIVILEGES.INTEGRATIONS.READ, + FLEET_API_PRIVILEGES.SETUP, + FLEET_API_PRIVILEGES.FLEET.ALL, + ], + }, + ], + }, +}; + export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType) => { const experimentalFeatures = parseExperimentalConfigValue(config.enableExperimental); router.versioned .get({ path: EPM_API_ROUTES.CATEGORIES_PATTERN, - fleetAuthz: READ_PACKAGE_INFO_AUTHZ, + security: READ_PACKAGE_INFO_SECURITY, summary: `Get package categories`, options: { tags: ['oas-tag:Elastic Package Manager (EPM)'], @@ -128,7 +152,7 @@ export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType router.versioned .get({ path: EPM_API_ROUTES.LIST_PATTERN, - fleetAuthz: READ_PACKAGE_INFO_AUTHZ, + security: READ_PACKAGE_INFO_SECURITY, summary: `Get packages`, options: { tags: ['oas-tag:Elastic Package Manager (EPM)'], @@ -155,7 +179,7 @@ export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType router.versioned .get({ path: EPM_API_ROUTES.INSTALLED_LIST_PATTERN, - fleetAuthz: READ_PACKAGE_INFO_AUTHZ, + security: READ_PACKAGE_INFO_SECURITY, summary: `Get installed packages`, options: { tags: ['oas-tag:Elastic Package Manager (EPM)'], @@ -182,7 +206,7 @@ export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType router.versioned .get({ path: EPM_API_ROUTES.LIMITED_LIST_PATTERN, - fleetAuthz: READ_PACKAGE_INFO_AUTHZ, + security: READ_PACKAGE_INFO_SECURITY, summary: `Get a limited package list`, options: { tags: ['oas-tag:Elastic Package Manager (EPM)'], @@ -209,7 +233,7 @@ export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType router.versioned .get({ path: EPM_API_ROUTES.STATS_PATTERN, - fleetAuthz: READ_PACKAGE_INFO_AUTHZ, + security: READ_PACKAGE_INFO_SECURITY, summary: `Get package stats`, options: { tags: ['oas-tag:Elastic Package Manager (EPM)'], @@ -236,7 +260,7 @@ export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType router.versioned .get({ path: EPM_API_ROUTES.INPUTS_PATTERN, - fleetAuthz: READ_PACKAGE_INFO_AUTHZ, + security: READ_PACKAGE_INFO_SECURITY, summary: `Get an inputs template`, options: { tags: ['oas-tag:Elastic Package Manager (EPM)'], @@ -263,7 +287,7 @@ export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType router.versioned .get({ path: EPM_API_ROUTES.FILEPATH_PATTERN, - fleetAuthz: READ_PACKAGE_INFO_AUTHZ, + security: READ_PACKAGE_INFO_SECURITY, summary: `Get a package file`, options: { tags: ['oas-tag:Elastic Package Manager (EPM)'], @@ -290,6 +314,7 @@ export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType router.versioned .get({ path: EPM_API_ROUTES.INFO_PATTERN, + // TODO move to kibana authz https://github.com/elastic/kibana/issues/203170 fleetAuthz: (fleetAuthz: FleetAuthz): boolean => calculateRouteAuthz(fleetAuthz, getRouteRequiredAuthz('get', EPM_API_ROUTES.INFO_PATTERN)) .granted, @@ -319,9 +344,7 @@ export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType router.versioned .put({ path: EPM_API_ROUTES.INFO_PATTERN, - fleetAuthz: { - integrations: { writePackageSettings: true }, - }, + security: INSTALL_PACKAGES_SECURITY, summary: `Update package settings`, options: { tags: ['oas-tag:Elastic Package Manager (EPM)'], @@ -348,7 +371,7 @@ export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType router.versioned .post({ path: EPM_API_ROUTES.INSTALL_FROM_REGISTRY_PATTERN, - fleetAuthz: INSTALL_PACKAGES_AUTHZ, + security: INSTALL_PACKAGES_SECURITY, summary: `Install a package from the registry`, options: { tags: ['oas-tag:Elastic Package Manager (EPM)'], @@ -376,9 +399,7 @@ export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType router.versioned .post({ path: EPM_API_ROUTES.INSTALL_KIBANA_ASSETS_PATTERN, - fleetAuthz: { - integrations: { installPackages: true }, - }, + security: INSTALL_PACKAGES_SECURITY, summary: `Install Kibana assets for a package`, options: { tags: ['oas-tag:Elastic Package Manager (EPM)'], @@ -405,9 +426,7 @@ export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType router.versioned .delete({ path: EPM_API_ROUTES.DELETE_KIBANA_ASSETS_PATTERN, - fleetAuthz: { - integrations: { installPackages: true }, - }, + security: INSTALL_PACKAGES_SECURITY, summary: `Delete Kibana assets for a package`, options: { tags: ['oas-tag:Elastic Package Manager (EPM)'], @@ -435,9 +454,7 @@ export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType router.versioned .post({ path: EPM_API_ROUTES.BULK_INSTALL_PATTERN, - fleetAuthz: { - integrations: { installPackages: true, upgradePackages: true }, - }, + security: INSTALL_PACKAGES_SECURITY, summary: `Bulk install packages`, options: { tags: ['oas-tag:Elastic Package Manager (EPM)'], @@ -473,9 +490,7 @@ export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType }, tags: [`oas-tag:Elastic Package Manager (EPM)`], }, - fleetAuthz: { - integrations: { uploadPackages: true }, - }, + security: INSTALL_PACKAGES_SECURITY, summary: `Install a package by upload`, }) .addVersion( @@ -499,7 +514,7 @@ export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType router.versioned .post({ path: EPM_API_ROUTES.CUSTOM_INTEGRATIONS_PATTERN, - fleetAuthz: INSTALL_PACKAGES_AUTHZ, + security: INSTALL_PACKAGES_SECURITY, summary: `Create a custom integration`, options: { tags: ['oas-tag:Elastic Package Manager (EPM)'], @@ -526,8 +541,13 @@ export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType router.versioned .delete({ path: EPM_API_ROUTES.DELETE_PATTERN, - fleetAuthz: { - integrations: { removePackages: true }, + security: { + authz: { + requiredPrivileges: [ + FLEET_API_PRIVILEGES.INTEGRATIONS.ALL, + FLEET_API_PRIVILEGES.AGENT_POLICIES.ALL, + ], + }, }, summary: `Delete a package`, options: { @@ -556,7 +576,7 @@ export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType router.versioned .get({ path: EPM_API_ROUTES.VERIFICATION_KEY_ID, - fleetAuthz: READ_PACKAGE_INFO_AUTHZ, + security: READ_PACKAGE_INFO_SECURITY, summary: `Get a package signature verification key ID`, options: { tags: ['oas-tag:Elastic Package Manager (EPM)'], @@ -583,7 +603,7 @@ export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType router.versioned .get({ path: EPM_API_ROUTES.DATA_STREAMS_PATTERN, - fleetAuthz: READ_PACKAGE_INFO_AUTHZ, + security: READ_PACKAGE_INFO_SECURITY, summary: `Get data streams`, options: { tags: ['oas-tag:Data streams'], @@ -610,7 +630,7 @@ export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType router.versioned .post({ path: EPM_API_ROUTES.BULK_ASSETS_PATTERN, - fleetAuthz: READ_PACKAGE_INFO_AUTHZ, + security: READ_PACKAGE_INFO_SECURITY, summary: `Bulk get assets`, options: { tags: ['oas-tag:Elastic Package Manager (EPM)'], @@ -639,6 +659,7 @@ export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType router.versioned .post({ path: EPM_API_ROUTES.REAUTHORIZE_TRANSFORMS, + // TODO move to kibana authz https://github.com/elastic/kibana/issues/203170 fleetAuthz: { ...INSTALL_PACKAGES_AUTHZ, packagePrivileges: { diff --git a/x-pack/platform/plugins/shared/fleet/server/routes/fleet_proxies/index.ts b/x-pack/platform/plugins/shared/fleet/server/routes/fleet_proxies/index.ts index 1a5ad6ccc764d..09dc7c9800492 100644 --- a/x-pack/platform/plugins/shared/fleet/server/routes/fleet_proxies/index.ts +++ b/x-pack/platform/plugins/shared/fleet/server/routes/fleet_proxies/index.ts @@ -8,7 +8,7 @@ import { schema } from '@kbn/config-schema'; import type { FleetAuthzRouter } from '../../services/security'; import { API_VERSIONS } from '../../../common/constants'; - +import { FLEET_API_PRIVILEGES } from '../../constants/api_privileges'; import { FLEET_PROXY_API_ROUTES } from '../../../common/constants'; import { FleetProxyResponseSchema, @@ -34,8 +34,10 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .get({ path: FLEET_PROXY_API_ROUTES.LIST_PATTERN, - fleetAuthz: { - fleet: { readSettings: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.SETTINGS.READ], + }, }, summary: `Get proxies`, options: { @@ -63,8 +65,10 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .post({ path: FLEET_PROXY_API_ROUTES.CREATE_PATTERN, - fleetAuthz: { - fleet: { allSettings: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.SETTINGS.ALL], + }, }, summary: `Create a proxy`, options: { @@ -92,8 +96,10 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .put({ path: FLEET_PROXY_API_ROUTES.UPDATE_PATTERN, - fleetAuthz: { - fleet: { allSettings: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.SETTINGS.ALL], + }, }, summary: `Update a proxy`, description: `Update a proxy by ID.`, @@ -122,8 +128,10 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .get({ path: FLEET_PROXY_API_ROUTES.INFO_PATTERN, - fleetAuthz: { - fleet: { readSettings: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.SETTINGS.READ], + }, }, summary: `Get a proxy`, description: `Get a proxy by ID.`, @@ -152,8 +160,10 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .delete({ path: FLEET_PROXY_API_ROUTES.DELETE_PATTERN, - fleetAuthz: { - fleet: { allSettings: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.SETTINGS.ALL], + }, }, summary: `Delete a proxy`, description: `Delete a proxy by ID`, diff --git a/x-pack/platform/plugins/shared/fleet/server/routes/fleet_server_hosts/index.ts b/x-pack/platform/plugins/shared/fleet/server/routes/fleet_server_hosts/index.ts index 667a617659492..a57f6fe86e8e3 100644 --- a/x-pack/platform/plugins/shared/fleet/server/routes/fleet_server_hosts/index.ts +++ b/x-pack/platform/plugins/shared/fleet/server/routes/fleet_server_hosts/index.ts @@ -21,7 +21,7 @@ import { } from '../../types'; import { genericErrorResponse } from '../schema/errors'; - +import { FLEET_API_PRIVILEGES } from '../../constants/api_privileges'; import { ListResponseSchema } from '../schema/utils'; import { @@ -36,8 +36,14 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .get({ path: FLEET_SERVER_HOST_API_ROUTES.LIST_PATTERN, - fleetAuthz: (authz) => { - return authz.fleet.addAgents || authz.fleet.addFleetServers || authz.fleet.readSettings; + security: { + authz: { + requiredPrivileges: [ + { + anyRequired: [FLEET_API_PRIVILEGES.AGENTS.ALL, FLEET_API_PRIVILEGES.SETTINGS.READ], + }, + ], + }, }, summary: `Get Fleet Server hosts`, options: { @@ -64,8 +70,10 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .post({ path: FLEET_SERVER_HOST_API_ROUTES.CREATE_PATTERN, - fleetAuthz: { - fleet: { allSettings: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.SETTINGS.ALL], + }, }, summary: `Create a Fleet Server host`, options: { @@ -92,8 +100,10 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .get({ path: FLEET_SERVER_HOST_API_ROUTES.INFO_PATTERN, - fleetAuthz: { - fleet: { readSettings: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.SETTINGS.READ], + }, }, summary: `Get a Fleet Server host`, description: `Get a Fleet Server host by ID.`, @@ -121,8 +131,10 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .delete({ path: FLEET_SERVER_HOST_API_ROUTES.DELETE_PATTERN, - fleetAuthz: { - fleet: { allSettings: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.SETTINGS.ALL], + }, }, summary: `Delete a Fleet Server host`, description: `Delete a Fleet Server host by ID.`, @@ -153,8 +165,10 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .put({ path: FLEET_SERVER_HOST_API_ROUTES.UPDATE_PATTERN, - fleetAuthz: { - fleet: { allSettings: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.SETTINGS.ALL], + }, }, summary: `Update a Fleet Server host`, description: `Update a Fleet Server host by ID.`, diff --git a/x-pack/platform/plugins/shared/fleet/server/routes/health_check/index.ts b/x-pack/platform/plugins/shared/fleet/server/routes/health_check/index.ts index 008340d006829..daffc5552a190 100644 --- a/x-pack/platform/plugins/shared/fleet/server/routes/health_check/index.ts +++ b/x-pack/platform/plugins/shared/fleet/server/routes/health_check/index.ts @@ -7,7 +7,7 @@ import { API_VERSIONS } from '../../../common/constants'; import type { FleetAuthzRouter } from '../../services/security'; - +import { FLEET_API_PRIVILEGES } from '../../constants/api_privileges'; import { APP_API_ROUTES } from '../../constants'; import { PostHealthCheckRequestSchema, PostHealthCheckResponseSchema } from '../../types'; import { genericErrorResponse } from '../schema/errors'; @@ -19,8 +19,10 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .post({ path: APP_API_ROUTES.HEALTH_CHECK_PATTERN, - fleetAuthz: { - fleet: { allSettings: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.SETTINGS.ALL], + }, }, summary: `Check Fleet Server health`, options: { diff --git a/x-pack/platform/plugins/shared/fleet/server/routes/message_signing_service/index.ts b/x-pack/platform/plugins/shared/fleet/server/routes/message_signing_service/index.ts index 645e7070f901a..470ba0531bba2 100644 --- a/x-pack/platform/plugins/shared/fleet/server/routes/message_signing_service/index.ts +++ b/x-pack/platform/plugins/shared/fleet/server/routes/message_signing_service/index.ts @@ -10,6 +10,7 @@ import type { FleetAuthzRouter } from '../../services/security'; import { API_VERSIONS } from '../../../common/constants'; import { MESSAGE_SIGNING_SERVICE_API_ROUTES } from '../../constants'; import { RotateKeyPairSchema } from '../../types'; +import { FLEET_API_PRIVILEGES } from '../../constants/api_privileges'; import { genericErrorResponse } from '../schema/errors'; @@ -20,8 +21,14 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .post({ path: MESSAGE_SIGNING_SERVICE_API_ROUTES.ROTATE_KEY_PAIR, - fleetAuthz: { - fleet: { all: true }, + security: { + authz: { + requiredPrivileges: [ + FLEET_API_PRIVILEGES.AGENTS.ALL, + FLEET_API_PRIVILEGES.AGENT_POLICIES.ALL, + FLEET_API_PRIVILEGES.SETTINGS.ALL, + ], + }, }, summary: 'Rotate a Fleet message signing key pair', options: { diff --git a/x-pack/platform/plugins/shared/fleet/server/routes/output/index.ts b/x-pack/platform/plugins/shared/fleet/server/routes/output/index.ts index dd89eaabf396b..b8b874b10eaaa 100644 --- a/x-pack/platform/plugins/shared/fleet/server/routes/output/index.ts +++ b/x-pack/platform/plugins/shared/fleet/server/routes/output/index.ts @@ -8,7 +8,7 @@ import type { FleetAuthzRouter } from '../../services/security'; import { API_VERSIONS } from '../../../common/constants'; - +import { FLEET_API_PRIVILEGES } from '../../constants/api_privileges'; import { OUTPUT_API_ROUTES } from '../../constants'; import { DeleteOutputRequestSchema, @@ -40,8 +40,17 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .get({ path: OUTPUT_API_ROUTES.LIST_PATTERN, - fleetAuthz: (authz) => { - return authz.fleet.readSettings || authz.fleet.readAgentPolicies; + security: { + authz: { + requiredPrivileges: [ + { + anyRequired: [ + FLEET_API_PRIVILEGES.SETTINGS.READ, + FLEET_API_PRIVILEGES.AGENT_POLICIES.READ, + ], + }, + ], + }, }, summary: 'Get outputs', options: { @@ -68,8 +77,17 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .get({ path: OUTPUT_API_ROUTES.INFO_PATTERN, - fleetAuthz: (authz) => { - return authz.fleet.readSettings || authz.fleet.readAgentPolicies; + security: { + authz: { + requiredPrivileges: [ + { + anyRequired: [ + FLEET_API_PRIVILEGES.SETTINGS.READ, + FLEET_API_PRIVILEGES.AGENT_POLICIES.READ, + ], + }, + ], + }, }, summary: 'Get output', description: 'Get output by ID.', @@ -97,8 +115,17 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .put({ path: OUTPUT_API_ROUTES.UPDATE_PATTERN, - fleetAuthz: (authz) => { - return authz.fleet.allSettings || authz.fleet.allAgentPolicies; + security: { + authz: { + requiredPrivileges: [ + { + anyRequired: [ + FLEET_API_PRIVILEGES.SETTINGS.ALL, + FLEET_API_PRIVILEGES.AGENT_POLICIES.ALL, + ], + }, + ], + }, }, summary: 'Update output', description: 'Update output by ID.', @@ -127,8 +154,10 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .post({ path: OUTPUT_API_ROUTES.CREATE_PATTERN, - fleetAuthz: { - fleet: { allSettings: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.SETTINGS.ALL], + }, }, summary: 'Create output', options: { @@ -156,8 +185,10 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .delete({ path: OUTPUT_API_ROUTES.DELETE_PATTERN, - fleetAuthz: { - fleet: { allSettings: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.SETTINGS.ALL], + }, }, summary: 'Delete output', description: 'Delete output by ID.', @@ -189,8 +220,10 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .post({ path: OUTPUT_API_ROUTES.LOGSTASH_API_KEY_PATTERN, - fleetAuthz: { - fleet: { allSettings: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.SETTINGS.ALL], + }, }, summary: 'Generate a Logstash API key', options: { @@ -218,8 +251,10 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .get({ path: OUTPUT_API_ROUTES.GET_OUTPUT_HEALTH_PATTERN, - fleetAuthz: { - fleet: { readSettings: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.SETTINGS.READ], + }, }, summary: 'Get the latest output health', options: { diff --git a/x-pack/platform/plugins/shared/fleet/server/routes/package_policy/index.ts b/x-pack/platform/plugins/shared/fleet/server/routes/package_policy/index.ts index 8a547f4127f97..6252a362b12d2 100644 --- a/x-pack/platform/plugins/shared/fleet/server/routes/package_policy/index.ts +++ b/x-pack/platform/plugins/shared/fleet/server/routes/package_policy/index.ts @@ -7,9 +7,8 @@ import { schema } from '@kbn/config-schema'; import { getRouteRequiredAuthz } from '../../services/security'; - +import { FLEET_API_PRIVILEGES } from '../../constants/api_privileges'; import type { FleetAuthzRouter } from '../../services/security'; - import type { FleetAuthz } from '../../../common'; import { API_VERSIONS } from '../../../common/constants'; import { PACKAGE_POLICY_API_ROUTES } from '../../constants'; @@ -56,6 +55,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .get({ path: PACKAGE_POLICY_API_ROUTES.LIST_PATTERN, + // TODO move to kibana authz https://github.com/elastic/kibana/issues/203170 fleetAuthz: (fleetAuthz: FleetAuthz): boolean => calculateRouteAuthz( fleetAuthz, @@ -88,6 +88,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .post({ path: PACKAGE_POLICY_API_ROUTES.BULK_GET_PATTERN, + // TODO move to kibana authz https://github.com/elastic/kibana/issues/203170 fleetAuthz: (fleetAuthz: FleetAuthz): boolean => calculateRouteAuthz( fleetAuthz, @@ -123,6 +124,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .get({ path: PACKAGE_POLICY_API_ROUTES.INFO_PATTERN, + // TODO move to kibana authz https://github.com/elastic/kibana/issues/203170 fleetAuthz: (fleetAuthz: FleetAuthz): boolean => calculateRouteAuthz( fleetAuthz, @@ -218,6 +220,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .put({ path: PACKAGE_POLICY_API_ROUTES.UPDATE_PATTERN, + // TODO move to kibana authz https://github.com/elastic/kibana/issues/203170 fleetAuthz: (fleetAuthz: FleetAuthz): boolean => calculateRouteAuthz( fleetAuthz, @@ -258,8 +261,13 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .post({ path: PACKAGE_POLICY_API_ROUTES.DELETE_PATTERN, - fleetAuthz: { - integrations: { writeIntegrationPolicies: true }, + security: { + authz: { + requiredPrivileges: [ + FLEET_API_PRIVILEGES.AGENT_POLICIES.ALL, + FLEET_API_PRIVILEGES.INTEGRATIONS.ALL, + ], + }, }, summary: 'Bulk delete package policies', options: { @@ -287,8 +295,13 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .delete({ path: PACKAGE_POLICY_API_ROUTES.INFO_PATTERN, - fleetAuthz: { - integrations: { writeIntegrationPolicies: true }, + security: { + authz: { + requiredPrivileges: [ + FLEET_API_PRIVILEGES.AGENT_POLICIES.ALL, + FLEET_API_PRIVILEGES.INTEGRATIONS.ALL, + ], + }, }, summary: 'Delete a package policy', description: 'Delete a package policy by ID.', @@ -318,8 +331,13 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .post({ path: PACKAGE_POLICY_API_ROUTES.UPGRADE_PATTERN, - fleetAuthz: { - integrations: { writeIntegrationPolicies: true }, + security: { + authz: { + requiredPrivileges: [ + FLEET_API_PRIVILEGES.AGENT_POLICIES.ALL, + FLEET_API_PRIVILEGES.INTEGRATIONS.ALL, + ], + }, }, summary: 'Upgrade a package policy', description: 'Upgrade a package policy to a newer package version.', @@ -349,8 +367,13 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .post({ path: PACKAGE_POLICY_API_ROUTES.DRYRUN_PATTERN, - fleetAuthz: { - integrations: { readIntegrationPolicies: true }, + security: { + authz: { + requiredPrivileges: [ + FLEET_API_PRIVILEGES.AGENT_POLICIES.READ, + FLEET_API_PRIVILEGES.INTEGRATIONS.READ, + ], + }, }, summary: 'Dry run a package policy upgrade', options: { diff --git a/x-pack/platform/plugins/shared/fleet/server/routes/preconfiguration/index.ts b/x-pack/platform/plugins/shared/fleet/server/routes/preconfiguration/index.ts index c62c86953acaa..0438050f43741 100644 --- a/x-pack/platform/plugins/shared/fleet/server/routes/preconfiguration/index.ts +++ b/x-pack/platform/plugins/shared/fleet/server/routes/preconfiguration/index.ts @@ -9,6 +9,7 @@ import type { FleetAuthzRouter } from '../../services/security'; import { API_VERSIONS } from '../../../common/constants'; +import { FLEET_API_PRIVILEGES } from '../../constants/api_privileges'; import { PRECONFIGURATION_API_ROUTES } from '../../constants'; import { PostResetOnePreconfiguredAgentPoliciesSchema } from '../../types'; @@ -19,8 +20,15 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .post({ path: PRECONFIGURATION_API_ROUTES.RESET_PATTERN, access: 'public', - fleetAuthz: { - fleet: { all: true }, + security: { + authz: { + requiredPrivileges: [ + FLEET_API_PRIVILEGES.AGENTS.ALL, + FLEET_API_PRIVILEGES.AGENT_POLICIES.ALL, + FLEET_API_PRIVILEGES.SETTINGS.ALL, + FLEET_API_PRIVILEGES.INTEGRATIONS.READ, + ], + }, }, }) .addVersion( @@ -35,8 +43,15 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .post({ path: PRECONFIGURATION_API_ROUTES.RESET_ONE_PATTERN, access: 'public', - fleetAuthz: { - fleet: { all: true }, + security: { + authz: { + requiredPrivileges: [ + FLEET_API_PRIVILEGES.AGENTS.ALL, + FLEET_API_PRIVILEGES.AGENT_POLICIES.ALL, + FLEET_API_PRIVILEGES.SETTINGS.ALL, + FLEET_API_PRIVILEGES.INTEGRATIONS.READ, + ], + }, }, }) .addVersion( diff --git a/x-pack/platform/plugins/shared/fleet/server/routes/settings/index.ts b/x-pack/platform/plugins/shared/fleet/server/routes/settings/index.ts index 04e6c2a955634..c307fce8aa900 100644 --- a/x-pack/platform/plugins/shared/fleet/server/routes/settings/index.ts +++ b/x-pack/platform/plugins/shared/fleet/server/routes/settings/index.ts @@ -20,7 +20,7 @@ import { GetEnrollmentSettingsResponseSchema, } from '../../types'; import type { FleetConfigType } from '../../config'; - +import { FLEET_API_PRIVILEGES } from '../../constants/api_privileges'; import { genericErrorResponse, notFoundResponse } from '../schema/errors'; import { getEnrollmentSettingsHandler } from './enrollment_settings_handler'; @@ -39,6 +39,7 @@ export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType .get({ path: SETTINGS_API_ROUTES.SPACE_INFO_PATTERN, fleetAuthz: (authz) => { + // TODO move to kibana authz https://github.com/elastic/kibana/issues/203170 return ( authz.fleet.readSettings || authz.integrations.writeIntegrationPolicies || @@ -65,8 +66,10 @@ export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType router.versioned .put({ path: SETTINGS_API_ROUTES.SPACE_UPDATE_PATTERN, - fleetAuthz: { - fleet: { allSettings: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.SETTINGS.ALL], + }, }, summary: `Create space settings`, }) @@ -89,8 +92,10 @@ export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType router.versioned .get({ path: SETTINGS_API_ROUTES.INFO_PATTERN, - fleetAuthz: { - fleet: { readSettings: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.SETTINGS.READ], + }, }, summary: `Get settings`, options: { @@ -120,8 +125,10 @@ export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType router.versioned .put({ path: SETTINGS_API_ROUTES.UPDATE_PATTERN, - fleetAuthz: { - fleet: { allSettings: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.SETTINGS.ALL], + }, }, summary: `Update settings`, options: { @@ -151,8 +158,10 @@ export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType router.versioned .get({ path: SETTINGS_API_ROUTES.ENROLLMENT_INFO_PATTERN, - fleetAuthz: (authz) => { - return authz.fleet.addAgents || authz.fleet.addFleetServers; + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENTS.ALL], + }, }, summary: `Get enrollment settings`, options: { diff --git a/x-pack/platform/plugins/shared/fleet/server/routes/setup/index.ts b/x-pack/platform/plugins/shared/fleet/server/routes/setup/index.ts index 2f41ff7eb6878..1dff6368735e9 100644 --- a/x-pack/platform/plugins/shared/fleet/server/routes/setup/index.ts +++ b/x-pack/platform/plugins/shared/fleet/server/routes/setup/index.ts @@ -7,7 +7,7 @@ import { schema } from '@kbn/config-schema'; import type { FleetAuthzRouter } from '../../services/security'; - +import { FLEET_API_PRIVILEGES } from '../../constants/api_privileges'; import { AGENTS_SETUP_API_ROUTES, SETUP_API_ROUTE } from '../../constants'; import { API_VERSIONS } from '../../../common/constants'; @@ -39,8 +39,19 @@ export const registerFleetSetupRoute = (router: FleetAuthzRouter) => { router.versioned .post({ path: SETUP_API_ROUTE, - fleetAuthz: { - fleet: { setup: true }, + security: { + authz: { + requiredPrivileges: [ + { + anyRequired: [ + FLEET_API_PRIVILEGES.AGENTS.READ, + FLEET_API_PRIVILEGES.AGENT_POLICIES.READ, + FLEET_API_PRIVILEGES.SETTINGS.READ, + FLEET_API_PRIVILEGES.SETUP, + ], + }, + ], + }, }, summary: `Initiate Fleet setup`, options: { @@ -101,8 +112,19 @@ export const registerCreateFleetSetupRoute = (router: FleetAuthzRouter) => { router.versioned .post({ path: AGENTS_SETUP_API_ROUTES.CREATE_PATTERN, - fleetAuthz: { - fleet: { setup: true }, + security: { + authz: { + requiredPrivileges: [ + { + anyRequired: [ + FLEET_API_PRIVILEGES.AGENTS.READ, + FLEET_API_PRIVILEGES.AGENT_POLICIES.READ, + FLEET_API_PRIVILEGES.SETTINGS.READ, + FLEET_API_PRIVILEGES.SETUP, + ], + }, + ], + }, }, summary: `Initiate agent setup`, options: { @@ -132,8 +154,19 @@ export const registerGetFleetStatusRoute = (router: FleetAuthzRouter) => { router.versioned .get({ path: AGENTS_SETUP_API_ROUTES.INFO_PATTERN, - fleetAuthz: { - fleet: { setup: true }, + security: { + authz: { + requiredPrivileges: [ + { + anyRequired: [ + FLEET_API_PRIVILEGES.AGENTS.READ, + FLEET_API_PRIVILEGES.AGENT_POLICIES.READ, + FLEET_API_PRIVILEGES.SETTINGS.READ, + FLEET_API_PRIVILEGES.SETUP, + ], + }, + ], + }, }, summary: `Get agent setup info`, options: { diff --git a/x-pack/platform/plugins/shared/fleet/server/routes/standalone_agent_api_key/index.ts b/x-pack/platform/plugins/shared/fleet/server/routes/standalone_agent_api_key/index.ts index f0103c23e65dd..6014e6ea42a51 100644 --- a/x-pack/platform/plugins/shared/fleet/server/routes/standalone_agent_api_key/index.ts +++ b/x-pack/platform/plugins/shared/fleet/server/routes/standalone_agent_api_key/index.ts @@ -10,7 +10,7 @@ import type { FleetAuthzRouter } from '../../services/security'; import { API_VERSIONS } from '../../../common/constants'; import { CREATE_STANDALONE_AGENT_API_KEY_ROUTE } from '../../constants'; - +import { FLEET_API_PRIVILEGES } from '../../constants/api_privileges'; import { PostStandaloneAgentAPIKeyRequestSchema } from '../../types'; import { createStandaloneAgentApiKeyHandler } from './handler'; @@ -20,8 +20,10 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .post({ path: CREATE_STANDALONE_AGENT_API_KEY_ROUTE, access: 'internal', - fleetAuthz: { - fleet: { addAgents: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENTS.ALL], + }, }, }) .addVersion( diff --git a/x-pack/platform/plugins/shared/fleet/server/routes/uninstall_token/index.ts b/x-pack/platform/plugins/shared/fleet/server/routes/uninstall_token/index.ts index 3c5e25d414b27..9710a657ca232 100644 --- a/x-pack/platform/plugins/shared/fleet/server/routes/uninstall_token/index.ts +++ b/x-pack/platform/plugins/shared/fleet/server/routes/uninstall_token/index.ts @@ -7,7 +7,7 @@ import { UNINSTALL_TOKEN_ROUTES, API_VERSIONS } from '../../../common/constants'; import type { FleetConfigType } from '../../config'; - +import { FLEET_API_PRIVILEGES } from '../../constants/api_privileges'; import type { FleetAuthzRouter } from '../../services/security'; import { GetUninstallTokenRequestSchema, @@ -28,8 +28,10 @@ export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType router.versioned .get({ path: UNINSTALL_TOKEN_ROUTES.LIST_PATTERN, - fleetAuthz: { - fleet: { allAgents: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENTS.ALL], + }, }, summary: 'Get metadata for latest uninstall tokens', description: 'List the metadata for the latest uninstall tokens per agent policy.', @@ -58,8 +60,10 @@ export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType router.versioned .get({ path: UNINSTALL_TOKEN_ROUTES.INFO_PATTERN, - fleetAuthz: { - fleet: { allAgents: true }, + security: { + authz: { + requiredPrivileges: [FLEET_API_PRIVILEGES.AGENTS.ALL], + }, }, summary: 'Get a decrypted uninstall token', description: 'Get one decrypted uninstall token by its ID.', diff --git a/x-pack/platform/plugins/shared/fleet/server/services/epm/elasticsearch/template/template.test.ts b/x-pack/platform/plugins/shared/fleet/server/services/epm/elasticsearch/template/template.test.ts index e42c92b7f0cd4..1b4ad7c8c0519 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/epm/elasticsearch/template/template.test.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/epm/elasticsearch/template/template.test.ts @@ -2234,6 +2234,60 @@ describe('EPM template', () => { }) ); }); + + it('should rollover on mapper exception that change enabled object mappings', async () => { + const esClient = elasticsearchServiceMock.createElasticsearchClient(); + esClient.indices.getDataStream.mockResponse({ + data_streams: [{ name: 'test.prefix1-default' }], + } as any); + esClient.indices.get.mockResponse({ + 'test.prefix1-default': { + mappings: {}, + }, + } as any); + esClient.indices.simulateTemplate.mockResponse({ + template: { + settings: { index: {} }, + mappings: {}, + }, + } as any); + esClient.indices.putMapping.mockImplementation(() => { + throw new errors.ResponseError({ + body: { + error: { + type: 'mapper_exception', + reason: `Mappings update for logs-cisco_ise.log-default failed due to ResponseError: mapper_exception + Root causes: + mapper_exception: the [enabled] parameter can't be updated for the object mapping [cisco_ise.log.cisco_av_pair]`, + }, + }, + } as any); + }); + + const logger = loggerMock.create(); + await updateCurrentWriteIndices(esClient, logger, [ + { + templateName: 'test', + indexTemplate: { + index_patterns: ['test.*-*'], + template: { + settings: { index: {} }, + mappings: {}, + }, + } as any, + }, + ]); + + expect(esClient.transport.request).toHaveBeenCalledWith( + expect.objectContaining({ + path: '/test.prefix1-default/_rollover', + querystring: { + lazy: true, + }, + }) + ); + }); + it('should skip rollover on expected error when flag is on', async () => { const esClient = elasticsearchServiceMock.createElasticsearchClient(); esClient.indices.getDataStream.mockResponse({ diff --git a/x-pack/platform/plugins/shared/fleet/server/services/epm/elasticsearch/template/template.ts b/x-pack/platform/plugins/shared/fleet/server/services/epm/elasticsearch/template/template.ts index 68da3857a5cff..81d280031d2c7 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/epm/elasticsearch/template/template.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/epm/elasticsearch/template/template.ts @@ -973,6 +973,30 @@ const getDataStreams = async ( })); }; +const MAPPER_EXCEPTION_REASONS_REQUIRING_ROLLOVER = [ + 'subobjects', + "[enabled] parameter can't be updated for the object mapping", +]; + +function errorNeedRollover(err: any) { + if ( + isResponseError(err) && + err.statusCode === 400 && + err.body?.error?.type === 'illegal_argument_exception' + ) { + return true; + } + if ( + err.body?.error?.type === 'mapper_exception' && + err.body?.error?.reason && + MAPPER_EXCEPTION_REASONS_REQUIRING_ROLLOVER.some((reason) => + err.body?.error?.reason?.includes(reason) + ) + ) { + return true; + } +} + const rolloverDataStream = (dataStreamName: string, esClient: ElasticsearchClient) => { try { // Do no wrap rollovers in retryTransientEsErrors since it is not idempotent @@ -1092,17 +1116,7 @@ const updateExistingDataStream = async ({ // if update fails, rollover data stream and bail out } catch (err) { - subobjectsFieldChanged = - subobjectsFieldChanged || - (err.body?.error?.type === 'mapper_exception' && - err.body?.error?.reason?.includes('subobjects')); - if ( - (isResponseError(err) && - err.statusCode === 400 && - err.body?.error?.type === 'illegal_argument_exception') || - // handling the case when subobjects field changed, it should also trigger a rollover - subobjectsFieldChanged - ) { + if (errorNeedRollover(err) || subobjectsFieldChanged) { logger.info(`Mappings update for ${dataStreamName} failed due to ${err}`); logger.trace(`Attempted mappings: ${mappings}`); if (options?.skipDataStreamRollover === true) { diff --git a/x-pack/platform/plugins/shared/fleet/server/services/epm/packages/get_bulk_assets.ts b/x-pack/platform/plugins/shared/fleet/server/services/epm/packages/get_bulk_assets.ts index ab6868dfaf65c..727d338447170 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/epm/packages/get_bulk_assets.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/epm/packages/get_bulk_assets.ts @@ -53,7 +53,10 @@ export async function getBulkAssets( const res: SimpleSOAssetType[] = resolvedObjects .map(({ saved_object: savedObject }) => savedObject) - .filter((savedObject) => displayedAssetTypesLookup.has(savedObject.type)) + .filter( + (savedObject) => + savedObject?.error?.statusCode !== 404 && displayedAssetTypesLookup.has(savedObject.type) + ) .map((obj) => { // Kibana SOs are registered with an app URL getter, so try to use that // for retrieving links to assets whenever possible diff --git a/x-pack/platform/plugins/shared/fleet/server/services/package_policy.ts b/x-pack/platform/plugins/shared/fleet/server/services/package_policy.ts index 32ec4c90b4319..3ff369994c5c7 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/package_policy.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/package_policy.ts @@ -152,6 +152,7 @@ import type { PackagePolicyClientFetchAllItemIdsOptions } from './package_policy import { validatePolicyNamespaceForSpace } from './spaces/policy_namespaces'; import { isSpaceAwarenessEnabled, isSpaceAwarenessMigrationPending } from './spaces/helpers'; import { updatePackagePolicySpaces } from './spaces/package_policy'; +import { runWithCache } from './epm/packages/cache'; export type InputsOverride = Partial & { vars?: Array; @@ -1694,40 +1695,42 @@ class PackagePolicyClientImpl implements PackagePolicyClient { packagePolicy?: PackagePolicy, pkgVersion?: string ): Promise { - const result: UpgradePackagePolicyResponse = []; + return runWithCache(async () => { + const result: UpgradePackagePolicyResponse = []; - for (const id of ids) { - try { - const { - packagePolicy: currentPackagePolicy, - packageInfo, - experimentalDataStreamFeatures, - } = await this.getUpgradePackagePolicyInfo(soClient, id, packagePolicy, pkgVersion); - - if (currentPackagePolicy.is_managed && !options?.force) { - throw new PackagePolicyRestrictionRelatedError(`Cannot upgrade package policy ${id}`); - } + for (const id of ids) { + try { + const { + packagePolicy: currentPackagePolicy, + packageInfo, + experimentalDataStreamFeatures, + } = await this.getUpgradePackagePolicyInfo(soClient, id, packagePolicy, pkgVersion); + + if (currentPackagePolicy.is_managed && !options?.force) { + throw new PackagePolicyRestrictionRelatedError(`Cannot upgrade package policy ${id}`); + } - await this.doUpgrade( - soClient, - esClient, - id, - currentPackagePolicy, - result, - packageInfo, - experimentalDataStreamFeatures, - options - ); - } catch (error) { - result.push({ - id, - success: false, - ...fleetErrorToResponseOptions(error), - }); + await this.doUpgrade( + soClient, + esClient, + id, + currentPackagePolicy, + result, + packageInfo, + experimentalDataStreamFeatures, + options + ); + } catch (error) { + result.push({ + id, + success: false, + ...fleetErrorToResponseOptions(error), + }); + } } - } - return result; + return result; + }); } private async doUpgrade( diff --git a/x-pack/platform/plugins/shared/fleet/server/services/security/fleet_router.ts b/x-pack/platform/plugins/shared/fleet/server/services/security/fleet_router.ts index b727fa5ec68d1..bf637a5b1faf4 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/security/fleet_router.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/security/fleet_router.ts @@ -52,7 +52,7 @@ function withDefaultPublicAccess( return { ...options, access: PUBLIC_API_ACCESS, - security: DEFAULT_FLEET_ROUTE_SECURITY, + security: options.security ? options.security : DEFAULT_FLEET_ROUTE_SECURITY, }; } } diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/bedrock/bedrock_claude_adapter.test.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/bedrock/bedrock_claude_adapter.test.ts index c6114c3b09e95..b0a5bcbc71bca 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/bedrock/bedrock_claude_adapter.test.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/bedrock/bedrock_claude_adapter.test.ts @@ -256,6 +256,92 @@ describe('bedrockClaudeAdapter', () => { expect(system).toEqual('Some system message'); }); + it('correctly formats messages with content parts', () => { + bedrockClaudeAdapter.chatComplete({ + executor: executorMock, + logger, + messages: [ + { + role: MessageRole.User, + content: [ + { + type: 'text', + text: 'question', + }, + ], + }, + { + role: MessageRole.Assistant, + content: 'answer', + }, + { + role: MessageRole.User, + content: [ + { + type: 'image', + source: { + data: 'aaaaaa', + mimeType: 'image/png', + }, + }, + { + type: 'image', + source: { + data: 'bbbbbb', + mimeType: 'image/png', + }, + }, + ], + }, + ], + }); + + expect(executorMock.invoke).toHaveBeenCalledTimes(1); + + const { messages } = getCallParams(); + expect(messages).toEqual([ + { + rawContent: [ + { + text: 'question', + type: 'text', + }, + ], + role: 'user', + }, + { + rawContent: [ + { + text: 'answer', + type: 'text', + }, + ], + role: 'assistant', + }, + { + rawContent: [ + { + type: 'image', + source: { + data: 'aaaaaa', + mediaType: 'image/png', + type: 'base64', + }, + }, + { + type: 'image', + source: { + data: 'bbbbbb', + mediaType: 'image/png', + type: 'base64', + }, + }, + ], + role: 'user', + }, + ]); + }); + it('correctly format tool choice', () => { bedrockClaudeAdapter.chatComplete({ executor: executorMock, diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/bedrock/bedrock_claude_adapter.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/bedrock/bedrock_claude_adapter.ts index e34605a4c96ad..3500d12dc69fa 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/bedrock/bedrock_claude_adapter.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/bedrock/bedrock_claude_adapter.ts @@ -17,7 +17,7 @@ import { } from '@kbn/inference-common'; import { parseSerdeChunkMessage } from './serde_utils'; import { InferenceConnectorAdapter } from '../../types'; -import type { BedRockMessage, BedrockToolChoice } from './types'; +import type { BedRockImagePart, BedRockMessage, BedRockTextPart, BedrockToolChoice } from './types'; import { BedrockChunkMember, serdeEventstreamIntoObservable, @@ -153,7 +153,24 @@ const messagesToBedrock = (messages: Message[]): BedRockMessage[] => { case MessageRole.User: return { role: 'user' as const, - rawContent: [{ type: 'text' as const, text: message.content }], + rawContent: (typeof message.content === 'string' + ? [message.content] + : message.content + ).map((contentPart) => { + if (typeof contentPart === 'string') { + return { text: contentPart, type: 'text' } satisfies BedRockTextPart; + } else if (contentPart.type === 'text') { + return { text: contentPart.text, type: 'text' } satisfies BedRockTextPart; + } + return { + type: 'image', + source: { + data: contentPart.source.data, + mediaType: contentPart.source.mimeType, + type: 'base64', + }, + } satisfies BedRockImagePart; + }), }; case MessageRole.Assistant: return { diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/bedrock/types.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/bedrock/types.ts index f0937a8d8ec18..805ee17c096e1 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/bedrock/types.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/bedrock/types.ts @@ -17,15 +17,38 @@ export interface BedRockMessage { /** * Bedrock message parts */ +export interface BedRockTextPart { + type: 'text'; + text: string; +} + +export interface BedRockToolUsePart { + type: 'tool_use'; + id: string; + name: string; + input: Record; +} + +export interface BedRockToolResultPart { + type: 'tool_result'; + tool_use_id: string; + content: string; +} + +export interface BedRockImagePart { + type: 'image'; + source: { + type: 'base64'; + mediaType: string; + data: string; + }; +} + export type BedRockMessagePart = - | { type: 'text'; text: string } - | { - type: 'tool_use'; - id: string; - name: string; - input: Record; - } - | { type: 'tool_result'; tool_use_id: string; content: string }; + | BedRockTextPart + | BedRockToolUsePart + | BedRockToolResultPart + | BedRockImagePart; export type BedrockToolChoice = { type: 'auto' } | { type: 'any' } | { type: 'tool'; name: string }; diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/gemini/gemini_adapter.test.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/gemini/gemini_adapter.test.ts index 5024bd1f4c87e..e7eb75453e778 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/gemini/gemini_adapter.test.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/gemini/gemini_adapter.test.ts @@ -239,6 +239,86 @@ describe('geminiAdapter', () => { ]); }); + it('correctly formats content parts', () => { + geminiAdapter.chatComplete({ + executor: executorMock, + logger, + messages: [ + { + role: MessageRole.User, + content: [ + { + type: 'text', + text: 'question', + }, + ], + }, + { + role: MessageRole.Assistant, + content: 'answer', + }, + { + role: MessageRole.User, + content: [ + { + type: 'image', + source: { + data: 'aaaaaa', + mimeType: 'image/png', + }, + }, + { + type: 'image', + source: { + data: 'bbbbbb', + mimeType: 'image/png', + }, + }, + ], + }, + ], + }); + + expect(executorMock.invoke).toHaveBeenCalledTimes(1); + + const { messages } = getCallParams(); + expect(messages).toEqual([ + { + parts: [ + { + text: 'question', + }, + ], + role: 'user', + }, + { + parts: [ + { + text: 'answer', + }, + ], + role: 'assistant', + }, + { + parts: [ + { + inlineData: { + data: 'aaaaaa', + mimeType: 'image/png', + }, + }, + { + inlineData: { + data: 'bbbbbb', + mimeType: 'image/png', + }, + }, + ], + role: 'user', + }, + ]); + }); + it('groups messages from the same user', () => { geminiAdapter.chatComplete({ logger, diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/gemini/gemini_adapter.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/gemini/gemini_adapter.ts index aa62f7006eac7..29b663be146d2 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/gemini/gemini_adapter.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/gemini/gemini_adapter.ts @@ -196,11 +196,21 @@ function messageToGeminiMapper() { case MessageRole.User: const userMessage: GeminiMessage = { role: 'user', - parts: [ - { - text: message.content, - }, - ], + parts: (typeof message.content === 'string' ? [message.content] : message.content).map( + (contentPart) => { + if (typeof contentPart === 'string') { + return { text: contentPart } satisfies Gemini.TextPart; + } else if (contentPart.type === 'text') { + return { text: contentPart.text } satisfies Gemini.TextPart; + } + return { + inlineData: { + data: contentPart.source.data, + mimeType: contentPart.source.mimeType, + }, + } satisfies Gemini.InlineDataPart; + } + ), }; return userMessage; diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/openai_adapter.test.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/openai_adapter.test.ts index d93dee627ec18..c9699f006d96b 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/openai_adapter.test.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/openai_adapter.test.ts @@ -118,6 +118,86 @@ describe('openAIAdapter', () => { ]); }); + it('correctly formats messages with content parts', () => { + openAIAdapter.chatComplete({ + executor: executorMock, + logger, + messages: [ + { + role: MessageRole.User, + content: [ + { + type: 'text', + text: 'question', + }, + ], + }, + { + role: MessageRole.Assistant, + content: 'answer', + }, + { + role: MessageRole.User, + content: [ + { + type: 'image', + source: { + data: 'aaaaaa', + mimeType: 'image/png', + }, + }, + { + type: 'image', + source: { + data: 'bbbbbb', + mimeType: 'image/png', + }, + }, + ], + }, + ], + }); + + expect(executorMock.invoke).toHaveBeenCalledTimes(1); + + const { + body: { messages }, + } = getRequest(); + + expect(messages).toEqual([ + { + content: [ + { + text: 'question', + type: 'text', + }, + ], + role: 'user', + }, + { + content: 'answer', + role: 'assistant', + }, + { + content: [ + { + type: 'image_url', + image_url: { + url: 'aaaaaa', + }, + }, + { + type: 'image_url', + image_url: { + url: 'bbbbbb', + }, + }, + ], + role: 'user', + }, + ]); + }); + it('correctly formats tools and tool choice', () => { openAIAdapter.chatComplete({ ...defaultArgs, diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/to_openai.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/to_openai.ts index 709b1fd4c6bfe..66792963c425f 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/to_openai.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/adapters/openai/to_openai.ts @@ -8,6 +8,8 @@ import type OpenAI from 'openai'; import type { ChatCompletionAssistantMessageParam, + ChatCompletionContentPartImage, + ChatCompletionContentPartText, ChatCompletionMessageParam, ChatCompletionSystemMessageParam, ChatCompletionToolMessageParam, @@ -90,7 +92,23 @@ export function messagesToOpenAI({ case MessageRole.User: const userMessage: ChatCompletionUserMessageParam = { role: 'user', - content: message.content, + content: + typeof message.content === 'string' + ? message.content + : message.content.map((contentPart) => { + if (contentPart.type === 'image') { + return { + type: 'image_url', + image_url: { + url: contentPart.source.data, + }, + } satisfies ChatCompletionContentPartImage; + } + return { + text: contentPart.text, + type: 'text', + } satisfies ChatCompletionContentPartText; + }), }; return userMessage; diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/simulated_function_calling/wrap_with_simulated_function_calling.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/simulated_function_calling/wrap_with_simulated_function_calling.ts index d2cb0bfae4999..8c207617e9bf4 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/simulated_function_calling/wrap_with_simulated_function_calling.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/simulated_function_calling/wrap_with_simulated_function_calling.ts @@ -52,9 +52,25 @@ export function wrapWithSimulatedFunctionCalling({ return message; }) .map((message) => { + let content = message.content; + + if (typeof content === 'string') { + content = replaceFunctionsWithTools(content); + } else if (Array.isArray(content)) { + content = content.map((contentPart) => { + if (contentPart.type === 'text') { + return { + ...contentPart, + text: replaceFunctionsWithTools(contentPart.text), + }; + } + return contentPart; + }); + } + return { ...message, - content: message.content ? replaceFunctionsWithTools(message.content) : message.content, + content, }; }); diff --git a/x-pack/platform/plugins/shared/ml/common/types/saved_objects.ts b/x-pack/platform/plugins/shared/ml/common/types/saved_objects.ts index adaf00fd9405f..0fbd48f0c28ae 100644 --- a/x-pack/platform/plugins/shared/ml/common/types/saved_objects.ts +++ b/x-pack/platform/plugins/shared/ml/common/types/saved_objects.ts @@ -39,6 +39,10 @@ export interface CanDeleteMLSpaceAwareItemsResponse { }; } +export interface CanSyncToAllSpacesResponse { + canSync: boolean; +} + export type JobsSpacesResponse = { [jobType in JobType]: { [jobId: string]: string[] }; }; diff --git a/x-pack/platform/plugins/shared/ml/public/application/components/job_spaces_sync/job_spaces_sync_flyout.tsx b/x-pack/platform/plugins/shared/ml/public/application/components/job_spaces_sync/job_spaces_sync_flyout.tsx index fe4b23fbdf3a1..1b16df01e49a3 100644 --- a/x-pack/platform/plugins/shared/ml/public/application/components/job_spaces_sync/job_spaces_sync_flyout.tsx +++ b/x-pack/platform/plugins/shared/ml/public/application/components/job_spaces_sync/job_spaces_sync_flyout.tsx @@ -28,6 +28,7 @@ import { useMlApi } from '../../contexts/kibana'; import type { SyncSavedObjectResponse, SyncResult } from '../../../../common/types/saved_objects'; import { SyncList } from './sync_list'; import { useToastNotificationService } from '../../services/toast_notification_service'; +import { SyncToAllSpacesWarning } from './sync_to_all_spaces_warning'; export interface Props { onClose: () => void; @@ -37,17 +38,22 @@ export const JobSpacesSyncFlyout: FC = ({ onClose }) => { const { displayErrorToast, displaySuccessToast } = useToastNotificationService(); const [loading, setLoading] = useState(false); const [canSync, setCanSync] = useState(false); + const [canSyncToAllSpaces, setCanSyncToAllSpaces] = useState(true); const [syncResp, setSyncResp] = useState(null); const { - savedObjects: { syncSavedObjects }, + savedObjects: { syncSavedObjects, canSyncToAllSpaces: canSyncToAllSpacesFunc }, } = useMlApi(); async function loadSyncList(simulate: boolean = true) { setLoading(true); try { - const resp = await syncSavedObjects(simulate); + const resp = await syncSavedObjects(simulate, canSyncToAllSpaces); setSyncResp(resp); + if (simulate === true) { + setCanSyncToAllSpaces((await canSyncToAllSpacesFunc()).canSync); + } + const count = Object.values(resp).reduce((acc, cur) => acc + Object.keys(cur).length, 0); setCanSync(count > 0); setLoading(false); @@ -118,6 +124,12 @@ export const JobSpacesSyncFlyout: FC = ({ onClose }) => { /> + {canSyncToAllSpaces === false ? ( + <> + + + + ) : null} diff --git a/x-pack/platform/plugins/shared/ml/public/application/components/job_spaces_sync/sync_to_all_spaces_warning.tsx b/x-pack/platform/plugins/shared/ml/public/application/components/job_spaces_sync/sync_to_all_spaces_warning.tsx new file mode 100644 index 0000000000000..e97f319fb6554 --- /dev/null +++ b/x-pack/platform/plugins/shared/ml/public/application/components/job_spaces_sync/sync_to_all_spaces_warning.tsx @@ -0,0 +1,51 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { FC } from 'react'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { EuiCallOut, EuiLink, EuiText } from '@elastic/eui'; +import { useMlKibana } from '../../contexts/kibana/kibana_context'; + +export const SyncToAllSpacesWarning: FC = () => { + const { + services: { + docLinks: { links }, + }, + } = useMlKibana(); + const docLink = links.security.kibanaPrivileges; + return ( + + } + color="warning" + > + + + + + ), + }} + /> + + + ); +}; diff --git a/x-pack/platform/plugins/shared/ml/public/application/routing/resolvers.ts b/x-pack/platform/plugins/shared/ml/public/application/routing/resolvers.ts index 7d7ca41ebf9c3..c504013eb3ec3 100644 --- a/x-pack/platform/plugins/shared/ml/public/application/routing/resolvers.ts +++ b/x-pack/platform/plugins/shared/ml/public/application/routing/resolvers.ts @@ -22,3 +22,7 @@ export const basicResolvers = (): Resolvers => ({ getMlNodeCount, loadMlServerInfo, }); + +export const initSavedObjects = async (mlApi: MlApi) => { + return mlApi.savedObjects.initSavedObjects().catch(() => {}); +}; diff --git a/x-pack/platform/plugins/shared/ml/public/application/routing/routes/data_frame_analytics/analytics_jobs_list.tsx b/x-pack/platform/plugins/shared/ml/public/application/routing/routes/data_frame_analytics/analytics_jobs_list.tsx index cdfb854314a72..b494d78b66294 100644 --- a/x-pack/platform/plugins/shared/ml/public/application/routing/routes/data_frame_analytics/analytics_jobs_list.tsx +++ b/x-pack/platform/plugins/shared/ml/public/application/routing/routes/data_frame_analytics/analytics_jobs_list.tsx @@ -14,7 +14,7 @@ import type { NavigateToPath } from '../../../contexts/kibana'; import type { MlRoute } from '../../router'; import { createPath, PageLoader } from '../../router'; import { useRouteResolver } from '../../use_resolver'; -import { basicResolvers } from '../../resolvers'; +import { basicResolvers, initSavedObjects } from '../../resolvers'; import { getBreadcrumbWithUrlForApp } from '../../breadcrumbs'; const Page = dynamic(async () => ({ @@ -45,7 +45,10 @@ export const analyticsJobsListRouteFactory = ( }); const PageWrapper: FC = () => { - const { context } = useRouteResolver('full', ['canGetDataFrameAnalytics'], basicResolvers()); + const { context } = useRouteResolver('full', ['canGetDataFrameAnalytics'], { + ...basicResolvers(), + initSavedObjects, + }); return ( diff --git a/x-pack/platform/plugins/shared/ml/public/application/routing/routes/jobs_list.tsx b/x-pack/platform/plugins/shared/ml/public/application/routing/routes/jobs_list.tsx index 28a71b5e7c819..359fc7236ddd6 100644 --- a/x-pack/platform/plugins/shared/ml/public/application/routing/routes/jobs_list.tsx +++ b/x-pack/platform/plugins/shared/ml/public/application/routing/routes/jobs_list.tsx @@ -24,7 +24,7 @@ import { useRouteResolver } from '../use_resolver'; import { getBreadcrumbWithUrlForApp } from '../breadcrumbs'; import { AnnotationUpdatesService } from '../../services/annotations_service'; import { MlAnnotationUpdatesContext } from '../../contexts/ml/ml_annotation_updates_context'; -import { basicResolvers } from '../resolvers'; +import { basicResolvers, initSavedObjects } from '../resolvers'; const JobsPage = dynamic(async () => ({ default: (await import('../../jobs/jobs_list')).JobsPage, @@ -51,7 +51,10 @@ export const jobListRouteFactory = (navigateToPath: NavigateToPath, basePath: st }); const PageWrapper: FC = () => { - const { context } = useRouteResolver('full', ['canGetJobs'], basicResolvers()); + const { context } = useRouteResolver('full', ['canGetJobs'], { + ...basicResolvers(), + initSavedObjects, + }); const timefilter = useTimefilter({ timeRangeSelector: false, autoRefreshSelector: true }); diff --git a/x-pack/platform/plugins/shared/ml/public/application/routing/routes/overview.tsx b/x-pack/platform/plugins/shared/ml/public/application/routing/routes/overview.tsx index 4fec14bc41294..c578cc17544e7 100644 --- a/x-pack/platform/plugins/shared/ml/public/application/routing/routes/overview.tsx +++ b/x-pack/platform/plugins/shared/ml/public/application/routing/routes/overview.tsx @@ -19,6 +19,7 @@ import { getBreadcrumbWithUrlForApp } from '../breadcrumbs'; import type { MlRoute, PageProps } from '../router'; import { createPath, PageLoader } from '../router'; import { useRouteResolver } from '../use_resolver'; +import { initSavedObjects } from '../resolvers'; const OverviewPage = React.lazy(() => import('../../overview/overview_page')); @@ -48,6 +49,7 @@ const PageWrapper: FC = () => { const { context } = useRouteResolver('full', ['canGetMlInfo'], { getMlNodeCount, loadMlServerInfo, + initSavedObjects, }); useTimefilter({ timeRangeSelector: false, autoRefreshSelector: false }); diff --git a/x-pack/platform/plugins/shared/ml/public/application/routing/routes/trained_models/models_list.tsx b/x-pack/platform/plugins/shared/ml/public/application/routing/routes/trained_models/models_list.tsx index cee2a92f03ada..2fa7f47a83ead 100644 --- a/x-pack/platform/plugins/shared/ml/public/application/routing/routes/trained_models/models_list.tsx +++ b/x-pack/platform/plugins/shared/ml/public/application/routing/routes/trained_models/models_list.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { type FC, useCallback } from 'react'; +import type { FC } from 'react'; import React from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; @@ -16,10 +16,9 @@ import type { NavigateToPath } from '../../../contexts/kibana'; import type { MlRoute } from '../../router'; import { createPath, PageLoader } from '../../router'; import { useRouteResolver } from '../../use_resolver'; -import { basicResolvers } from '../../resolvers'; +import { basicResolvers, initSavedObjects } from '../../resolvers'; import { getBreadcrumbWithUrlForApp } from '../../breadcrumbs'; import { MlPageHeader } from '../../../components/page_header'; -import { useSavedObjectsApiService } from '../../../services/ml_api_service/saved_objects'; const ModelsList = dynamic(async () => ({ default: (await import('../../../model_management/models_list')).ModelsList, @@ -49,19 +48,9 @@ export const modelsListRouteFactory = ( }); const PageWrapper: FC = () => { - const { initSavedObjects } = useSavedObjectsApiService(); - - const initSavedObjectsWrapper = useCallback(async () => { - try { - await initSavedObjects(); - } catch (error) { - // ignore error as user may not have permission to sync - } - }, [initSavedObjects]); - const { context } = useRouteResolver('full', ['canGetTrainedModels'], { ...basicResolvers(), - initSavedObjectsWrapper, + initSavedObjects, }); return ( diff --git a/x-pack/platform/plugins/shared/ml/public/application/services/ml_api_service/saved_objects.ts b/x-pack/platform/plugins/shared/ml/public/application/services/ml_api_service/saved_objects.ts index 125256770f1d4..e382eee7661a3 100644 --- a/x-pack/platform/plugins/shared/ml/public/application/services/ml_api_service/saved_objects.ts +++ b/x-pack/platform/plugins/shared/ml/public/application/services/ml_api_service/saved_objects.ts @@ -23,6 +23,7 @@ import type { JobsSpacesResponse, TrainedModelsSpacesResponse, SyncCheckResponse, + CanSyncToAllSpacesResponse, } from '../../../../common/types/saved_objects'; export const savedObjectsApiProvider = (httpService: HttpService) => ({ @@ -56,11 +57,11 @@ export const savedObjectsApiProvider = (httpService: HttpService) => ({ version: '1', }); }, - syncSavedObjects(simulate: boolean = false) { + syncSavedObjects(simulate: boolean = false, addToAllSpaces?: boolean) { return httpService.http({ path: `${ML_EXTERNAL_BASE_PATH}/saved_objects/sync`, method: 'GET', - query: { simulate }, + query: { simulate, addToAllSpaces }, version: '2023-10-31', }); }, @@ -90,6 +91,15 @@ export const savedObjectsApiProvider = (httpService: HttpService) => ({ version: '1', }); }, + canSyncToAllSpaces(mlSavedObjectType?: MlSavedObjectType) { + return httpService.http({ + path: `${ML_INTERNAL_BASE_PATH}/saved_objects/can_sync_to_all_spaces${ + mlSavedObjectType !== undefined ? `/${mlSavedObjectType}` : '' + }`, + method: 'GET', + version: '1', + }); + }, trainedModelsSpaces() { return httpService.http({ path: `${ML_INTERNAL_BASE_PATH}/saved_objects/trained_models_spaces`, diff --git a/x-pack/platform/plugins/shared/ml/server/models/data_recognizer/data_recognizer.ts b/x-pack/platform/plugins/shared/ml/server/models/data_recognizer/data_recognizer.ts index e585d73a9d894..41a8f60f912f3 100644 --- a/x-pack/platform/plugins/shared/ml/server/models/data_recognizer/data_recognizer.ts +++ b/x-pack/platform/plugins/shared/ml/server/models/data_recognizer/data_recognizer.ts @@ -870,8 +870,8 @@ export class DataRecognizer { ); if (applyToAllSpaces === true) { const canCreateGlobalJobs = await this._mlSavedObjectService.canCreateGlobalMlSavedObjects( - 'anomaly-detector', - this._request + this._request, + 'anomaly-detector' ); if (canCreateGlobalJobs === true) { await this._mlSavedObjectService.updateJobsSpaces( diff --git a/x-pack/platform/plugins/shared/ml/server/routes/saved_objects.ts b/x-pack/platform/plugins/shared/ml/server/routes/saved_objects.ts index 437f0a80eb1d7..962678cbfa867 100644 --- a/x-pack/platform/plugins/shared/ml/server/routes/saved_objects.ts +++ b/x-pack/platform/plugins/shared/ml/server/routes/saved_objects.ts @@ -92,9 +92,9 @@ export function savedObjectsRoutes( routeGuard.fullLicenseAPIGuard( async ({ client, request, response, mlSavedObjectService }) => { try { - const { simulate } = request.query; + const { simulate, addToAllSpaces } = request.query; const { syncSavedObjects } = syncSavedObjectsFactory(client, mlSavedObjectService); - const savedObjects = await syncSavedObjects(simulate); + const savedObjects = await syncSavedObjects(simulate, addToAllSpaces ?? true); return response.ok({ body: savedObjects, @@ -450,4 +450,46 @@ export function savedObjectsRoutes( } ) ); + + router.versioned + .get({ + path: `${ML_INTERNAL_BASE_PATH}/saved_objects/can_sync_to_all_spaces/{mlSavedObjectType?}`, + access: 'internal', + security: { + authz: { + requiredPrivileges: [ + 'ml:canGetJobs', + 'ml:canGetDataFrameAnalytics', + 'ml:canGetTrainedModels', + ], + }, + }, + summary: 'Check whether user can sync a job or trained model to the * space', + description: `Check the user's ability to sync jobs or trained models to the * space. Returns whether they are able to sync the job or trained model to the * space.`, + }) + .addVersion( + { + version: '1', + validate: { + request: { + params: syncCheckSchema, + }, + }, + }, + routeGuard.fullLicenseAPIGuard(async ({ request, response, mlSavedObjectService }) => { + try { + const { mlSavedObjectType } = request.params; + const canSync = await mlSavedObjectService.canCreateGlobalMlSavedObjects( + request, + mlSavedObjectType as MlSavedObjectType + ); + + return response.ok({ + body: { canSync }, + }); + } catch (e) { + return response.customError(wrapError(e)); + } + }) + ); } diff --git a/x-pack/platform/plugins/shared/ml/server/routes/schemas/saved_objects.ts b/x-pack/platform/plugins/shared/ml/server/routes/schemas/saved_objects.ts index d40638c496f00..8feac4f005d0c 100644 --- a/x-pack/platform/plugins/shared/ml/server/routes/schemas/saved_objects.ts +++ b/x-pack/platform/plugins/shared/ml/server/routes/schemas/saved_objects.ts @@ -39,7 +39,10 @@ export const itemsAndCurrentSpace = schema.object({ ids: schema.arrayOf(schema.string()), }); -export const syncJobObjects = schema.object({ simulate: schema.maybe(schema.boolean()) }); +export const syncJobObjects = schema.object({ + simulate: schema.maybe(schema.boolean()), + addToAllSpaces: schema.maybe(schema.boolean()), +}); export const syncCheckSchema = schema.object({ mlSavedObjectType: schema.maybe(schema.string()) }); diff --git a/x-pack/platform/plugins/shared/ml/server/saved_objects/checks.ts b/x-pack/platform/plugins/shared/ml/server/saved_objects/checks.ts index f8e1827c78a87..73a3601ca748b 100644 --- a/x-pack/platform/plugins/shared/ml/server/saved_objects/checks.ts +++ b/x-pack/platform/plugins/shared/ml/server/saved_objects/checks.ts @@ -319,8 +319,8 @@ export function checksFactory( }, {} as DeleteMLSpaceAwareItemsCheckResponse); } const canCreateGlobalMlSavedObjects = await mlSavedObjectService.canCreateGlobalMlSavedObjects( - mlSavedObjectType, - request + request, + mlSavedObjectType ); const savedObjects = diff --git a/x-pack/platform/plugins/shared/ml/server/saved_objects/service.ts b/x-pack/platform/plugins/shared/ml/server/saved_objects/service.ts index 3e0f81a8ba13b..a8e829d8401c3 100644 --- a/x-pack/platform/plugins/shared/ml/server/saved_objects/service.ts +++ b/x-pack/platform/plugins/shared/ml/server/saved_objects/service.ts @@ -102,7 +102,12 @@ export function mlSavedObjectServiceFactory( return jobs.saved_objects; } - async function _createJob(jobType: JobType, jobId: string, datafeedId?: string) { + async function _createJob( + jobType: JobType, + jobId: string, + datafeedId?: string, + addToAllSpaces = false + ) { await isMlReady(); const job: JobObject = { @@ -133,6 +138,7 @@ export function mlSavedObjectServiceFactory( await savedObjectsClient.create(ML_JOB_SAVED_OBJECT_TYPE, job, { id, + ...(addToAllSpaces ? { initialNamespaces: ['*'] } : {}), }); _clearSavedObjectsClientCache(); } @@ -182,8 +188,12 @@ export function mlSavedObjectServiceFactory( _clearSavedObjectsClientCache(); } - async function createAnomalyDetectionJob(jobId: string, datafeedId?: string) { - await _createJob('anomaly-detector', jobId, datafeedId); + async function createAnomalyDetectionJob( + jobId: string, + datafeedId?: string, + addToAllSpaces = false + ) { + await _createJob('anomaly-detector', jobId, datafeedId, addToAllSpaces); } async function deleteAnomalyDetectionJob(jobId: string) { @@ -194,8 +204,8 @@ export function mlSavedObjectServiceFactory( await _forceDeleteJob('anomaly-detector', jobId, namespace); } - async function createDataFrameAnalyticsJob(jobId: string) { - await _createJob('data-frame-analytics', jobId); + async function createDataFrameAnalyticsJob(jobId: string, addToAllSpaces = false) { + await _createJob('data-frame-analytics', jobId, undefined, addToAllSpaces); } async function deleteDataFrameAnalyticsJob(jobId: string) { @@ -418,8 +428,8 @@ export function mlSavedObjectServiceFactory( } async function canCreateGlobalMlSavedObjects( - mlSavedObjectType: MlSavedObjectType, - request: KibanaRequest + request: KibanaRequest, + mlSavedObjectType?: MlSavedObjectType ) { if (authorization === undefined) { return true; @@ -428,6 +438,10 @@ export function mlSavedObjectServiceFactory( const { canCreateJobsGlobally, canCreateTrainedModelsGlobally } = await authorizationCheck( request ); + if (mlSavedObjectType === undefined) { + return canCreateJobsGlobally && canCreateTrainedModelsGlobally; + } + return mlSavedObjectType === 'trained-model' ? canCreateTrainedModelsGlobally : canCreateJobsGlobally; @@ -441,8 +455,12 @@ export function mlSavedObjectServiceFactory( return modelObject; } - async function createTrainedModel(modelId: string, job: TrainedModelJob | null) { - await _createTrainedModel(modelId, job); + async function createTrainedModel( + modelId: string, + job: TrainedModelJob | null, + addToAllSpaces = false + ) { + await _createTrainedModel(modelId, job, addToAllSpaces); } async function bulkCreateTrainedModel(models: TrainedModelObject[], namespaceFallback?: string) { @@ -486,7 +504,11 @@ export function mlSavedObjectServiceFactory( return models.saved_objects; } - async function _createTrainedModel(modelId: string, job: TrainedModelJob | null) { + async function _createTrainedModel( + modelId: string, + job: TrainedModelJob | null, + addToAllSpaces = false + ) { await isMlReady(); const modelObject: TrainedModelObject = { @@ -513,7 +535,7 @@ export function mlSavedObjectServiceFactory( // the saved object may exist if a previous job with the same ID has been deleted. // if not, this error will be throw which we ignore. } - let initialNamespaces; + let initialNamespaces = addToAllSpaces ? ['*'] : undefined; // if a job exists for this model, ensure the initial namespaces for the model // are the same as the job if (job !== null) { @@ -522,7 +544,9 @@ export function mlSavedObjectServiceFactory( job.job_id ); - initialNamespaces = existingJobObject?.namespaces ?? undefined; + if (existingJobObject?.namespaces !== undefined) { + initialNamespaces = existingJobObject?.namespaces; + } } await savedObjectsClient.create( diff --git a/x-pack/platform/plugins/shared/ml/server/saved_objects/sync.ts b/x-pack/platform/plugins/shared/ml/server/saved_objects/sync.ts index f96233debf9a1..edb4e7dfca6c9 100644 --- a/x-pack/platform/plugins/shared/ml/server/saved_objects/sync.ts +++ b/x-pack/platform/plugins/shared/ml/server/saved_objects/sync.ts @@ -34,7 +34,7 @@ export function syncSavedObjectsFactory( ) { const { checkStatus } = checksFactory(client, mlSavedObjectService); - async function syncSavedObjects(simulate: boolean = false) { + async function syncSavedObjects(simulate: boolean = false, addToAllSpaces = false) { const results: SyncSavedObjectResponse = { savedObjectsCreated: {}, savedObjectsDeleted: {}, @@ -71,7 +71,11 @@ export function syncSavedObjectsFactory( const datafeedId = job.datafeedId; tasks.push(async () => { try { - await mlSavedObjectService.createAnomalyDetectionJob(jobId, datafeedId ?? undefined); + await mlSavedObjectService.createAnomalyDetectionJob( + jobId, + datafeedId ?? undefined, + addToAllSpaces + ); results.savedObjectsCreated[type]![job.jobId] = { success: true }; } catch (error) { results.savedObjectsCreated[type]![job.jobId] = { @@ -97,7 +101,7 @@ export function syncSavedObjectsFactory( const jobId = job.jobId; tasks.push(async () => { try { - await mlSavedObjectService.createDataFrameAnalyticsJob(jobId); + await mlSavedObjectService.createDataFrameAnalyticsJob(jobId, addToAllSpaces); results.savedObjectsCreated[type]![job.jobId] = { success: true, }; @@ -136,7 +140,11 @@ export function syncSavedObjectsFactory( return; } const job = getJobDetailsFromTrainedModel(mod); - await mlSavedObjectService.createTrainedModel(modelId, job); + await mlSavedObjectService.createTrainedModel( + modelId, + job, + addToAllSpaces || modelId.startsWith('.') + ); if (modelId.startsWith('.')) { // if the model id starts with a dot, it is an internal model and should be in all spaces await mlSavedObjectService.updateTrainedModelsSpaces([modelId], ['*'], []); @@ -344,9 +352,9 @@ export function syncSavedObjectsFactory( const jobObjects: Array<{ job: JobObject; namespaces: string[] }> = []; const datafeeds: Array<{ jobId: string; datafeedId: string }> = []; - const types: JobType[] = ['anomaly-detector', 'data-frame-analytics']; + const jobTypes: JobType[] = ['anomaly-detector', 'data-frame-analytics']; - types.forEach((type) => { + jobTypes.forEach((type) => { status.jobs[type].forEach((job) => { if (job.checks.savedObjectExits === false) { if (simulate === true) { diff --git a/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/plugin.ts b/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/plugin.ts index 13c440a38387c..564cabf3ed1f5 100644 --- a/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/plugin.ts +++ b/x-pack/platform/plugins/shared/observability_solution/observability_ai_assistant/server/plugin.ts @@ -14,11 +14,6 @@ import { } from '@kbn/core/server'; import { mapValues } from 'lodash'; import { i18n } from '@kbn/i18n'; -import { - CONNECTOR_TOKEN_SAVED_OBJECT_TYPE, - ACTION_SAVED_OBJECT_TYPE, - ACTION_TASK_PARAMS_SAVED_OBJECT_TYPE, -} from '@kbn/actions-plugin/server/constants/saved_objects'; import { KibanaFeatureScope } from '@kbn/features-plugin/common'; import { OBSERVABILITY_AI_ASSISTANT_FEATURE_ID } from '../common/feature'; import type { ObservabilityAIAssistantConfig } from './config'; @@ -80,11 +75,7 @@ export class ObservabilityAIAssistantPlugin api: [OBSERVABILITY_AI_ASSISTANT_FEATURE_ID, 'ai_assistant', 'manage_llm_product_doc'], catalogue: [OBSERVABILITY_AI_ASSISTANT_FEATURE_ID], savedObject: { - all: [ - ACTION_SAVED_OBJECT_TYPE, - ACTION_TASK_PARAMS_SAVED_OBJECT_TYPE, - CONNECTOR_TOKEN_SAVED_OBJECT_TYPE, - ], + all: [], read: [], }, ui: [aiAssistantCapabilities.show], diff --git a/x-pack/platform/plugins/shared/osquery/cypress/cypress_base.config.ts b/x-pack/platform/plugins/shared/osquery/cypress/cypress_base.config.ts index 7594d33496ddc..b9e60e48ba630 100644 --- a/x-pack/platform/plugins/shared/osquery/cypress/cypress_base.config.ts +++ b/x-pack/platform/plugins/shared/osquery/cypress/cypress_base.config.ts @@ -27,7 +27,7 @@ export const getCypressBaseConfig = ( { reporter: '../../../../../node_modules/cypress-multi-reporters', reporterOptions: { - configFile: './reporter_config.json', + configFile: './cypress/reporter_config.json', }, defaultCommandTimeout: 60000, @@ -53,7 +53,7 @@ export const getCypressBaseConfig = ( }, e2e: { - specPattern: './e2e/**/*.cy.ts', + specPattern: './cypress/e2e/**/*.cy.ts', experimentalRunAllSpecs: true, experimentalMemoryManagement: true, numTestsKeptInMemory: 3, diff --git a/x-pack/platform/plugins/shared/osquery/cypress/e2e/all/cases.cy.ts b/x-pack/platform/plugins/shared/osquery/cypress/e2e/all/cases.cy.ts index 0f12414149126..aed0fa2388135 100644 --- a/x-pack/platform/plugins/shared/osquery/cypress/e2e/all/cases.cy.ts +++ b/x-pack/platform/plugins/shared/osquery/cypress/e2e/all/cases.cy.ts @@ -48,7 +48,7 @@ describe('Add to Cases', () => { it('should add result a case and not have add to timeline in result', () => { addLiveQueryToCase(liveQueryId, caseId); - cy.contains(`${caseTitle} has been updated`); + cy.contains(`Case ${caseTitle} updated`); viewRecentCaseAndCheckResults(); cy.contains(liveQueryQuery); @@ -80,7 +80,7 @@ describe('Add to Cases', () => { it('should add result a case and have add to timeline in result', () => { addLiveQueryToCase(liveQueryId, caseId); - cy.contains(`${caseTitle} has been updated`); + cy.contains(`Case ${caseTitle} updated`); viewRecentCaseAndCheckResults(); cy.contains("SELECT * FROM os_version where name='Ubuntu';"); diff --git a/x-pack/platform/plugins/shared/osquery/package.json b/x-pack/platform/plugins/shared/osquery/package.json index fda5a3830020b..38a52123c522a 100644 --- a/x-pack/platform/plugins/shared/osquery/package.json +++ b/x-pack/platform/plugins/shared/osquery/package.json @@ -7,13 +7,13 @@ "scripts": { "cypress:burn": "yarn cypress:run --env burn=2 --headed", "cypress:changed-specs-only": "yarn cypress:run --changed-specs-only --env burn=2", - "cypress": "NODE_OPTIONS=--openssl-legacy-provider node ../../../../solutions/security/plugins/security_solution/scripts/start_cypress_parallel --config-file ../../platform/plugins/shared/osquery/cypress/serverless_cypress.config.ts --ftr-config-file ../../../../../x-pack/test/osquery_cypress/cli_config", + "cypress": "NODE_OPTIONS=--openssl-legacy-provider node ../../../../solutions/security/plugins/security_solution/scripts/start_cypress_parallel --config-file ../../platform/plugins/shared/osquery/cypress/cypress.config.ts --ftr-config-file ../../../../../x-pack/test/osquery_cypress/cli_config", "cypress:open": "yarn cypress open", "cypress:run": "yarn cypress run", "cypress:serverless": "NODE_OPTIONS=--openssl-legacy-provider node ../../../../solutions/security/plugins/security_solution/scripts/start_cypress_parallel --config-file ../../platform/plugins/shared/osquery/cypress/serverless_cypress.config.ts --ftr-config-file ../../../../../x-pack/test/osquery_cypress/serverless_cli_config", "cypress:serverless:open": "yarn cypress:serverless open", "cypress:serverless:run": "yarn cypress:serverless run", - "cypress:qa:serverless": "NODE_OPTIONS=--openssl-legacy-provider node ../../../../solutions/security/plugins/security_solution/scripts/start_cypress_parallel_serverless --config-file ../../platform/plugins/shared/osquery/cypress/serverless_cypress.config.ts --onBeforeHook ../../../../test/osquery_cypress/runner_qa.ts", + "cypress:qa:serverless": "NODE_OPTIONS=--openssl-legacy-provider node ../../../../solutions/security/plugins/security_solution/scripts/start_cypress_parallel_serverless --config-file ../../platform/plugins/shared/osquery/cypress/serverless_cypress_qa.config.ts --onBeforeHook ../../../../test/osquery_cypress/runner_qa.ts", "cypress:qa:serverless:run": "yarn cypress:qa:serverless run", "nyc": "../../../../../node_modules/.bin/nyc report --reporter=text-summary", "junit:merge": "../../../../../node_modules/.bin/mochawesome-merge ../../../target/kibana-osquery/cypress/results/mochawesome*.json > ../../../target/kibana-osquery/cypress/results/output.json && ../../../node_modules/.bin/marge ../../../target/kibana-osquery/cypress/results/output.json --reportDir ../../../target/kibana-osquery/cypress/results && yarn junit:transform && mkdir -p ../../../target/junit && cp ../../../target/kibana-osquery/cypress/results/*.xml ../../../target/junit/", diff --git a/x-pack/platform/plugins/shared/security/server/routes/authentication/common.test.ts b/x-pack/platform/plugins/shared/security/server/routes/authentication/common.test.ts index 0fd2c54a1e6ca..88b55f1801f69 100644 --- a/x-pack/platform/plugins/shared/security/server/routes/authentication/common.test.ts +++ b/x-pack/platform/plugins/shared/security/server/routes/authentication/common.test.ts @@ -6,8 +6,8 @@ */ import { Type } from '@kbn/config-schema'; -import type { RequestHandler, RouteConfig } from '@kbn/core/server'; import { kibanaResponseFactory } from '@kbn/core/server'; +import type { AuthzDisabled, RequestHandler, RouteConfig } from '@kbn/core/server'; import { coreMock, httpServerMock } from '@kbn/core/server/mocks'; import type { DeeplyMockedKeys } from '@kbn/utility-types-jest'; @@ -65,9 +65,11 @@ describe('Common authentication routes', () => { }); it('correctly defines route.', async () => { + expect(routeConfig.security?.authc?.enabled).toEqual(false); + expect((routeConfig.security?.authz as AuthzDisabled).enabled).toEqual(false); + expect(routeConfig.options).toEqual({ access: 'public', - authRequired: false, tags: [ROUTE_TAG_CAN_REDIRECT, ROUTE_TAG_AUTH_FLOW], excludeFromOAS: true, }); @@ -201,7 +203,9 @@ describe('Common authentication routes', () => { }); it('correctly defines route.', () => { - expect(routeConfig.options).toEqual({ authRequired: false }); + expect(routeConfig.security?.authc?.enabled).toEqual(false); + expect((routeConfig.security?.authz as AuthzDisabled).enabled).toEqual(false); + expect(routeConfig.validate).toEqual({ body: expect.any(Type), query: undefined, diff --git a/x-pack/platform/plugins/shared/security/server/routes/authentication/common.ts b/x-pack/platform/plugins/shared/security/server/routes/authentication/common.ts index 4ee2e57a33517..5acc1efcca41a 100644 --- a/x-pack/platform/plugins/shared/security/server/routes/authentication/common.ts +++ b/x-pack/platform/plugins/shared/security/server/routes/authentication/common.ts @@ -51,6 +51,11 @@ export function defineCommonRoutes({ enabled: false, reason: 'This route must remain accessible to 3rd-party IdPs', }, + authc: { + enabled: false, + reason: + 'This route is used for authentication - it does not require existing authentication', + }, }, // Allow unknown query parameters as this endpoint can be hit by the 3rd-party with any // set of query string parameters (e.g. SAML/OIDC logout request/response parameters). @@ -58,7 +63,6 @@ export function defineCommonRoutes({ options: { access: 'public', excludeFromOAS: true, - authRequired: false, tags: [ROUTE_TAG_CAN_REDIRECT, ROUTE_TAG_AUTH_FLOW], ...(isDeprecated && { deprecated: { @@ -191,7 +195,12 @@ export function defineCommonRoutes({ security: { authz: { enabled: false, - reason: `This route provides basic and token login capbility, which is delegated to the internal authentication service`, + reason: `This route provides basic and token login capability, which is delegated to the internal authentication service`, + }, + authc: { + enabled: false, + reason: + 'This route is used for authentication - it does not require existing authentication', }, }, validate: { @@ -210,7 +219,6 @@ export function defineCommonRoutes({ ), }), }, - options: { authRequired: false }, }, createLicensedRouteHandler(async (context, request, response) => { const { providerType, providerName, currentURL, params } = request.body; diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/crowdstrike/crowdstrike.ts b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/crowdstrike/crowdstrike.ts index 2b5550b157239..2a928ed7d64de 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/crowdstrike/crowdstrike.ts +++ b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/crowdstrike/crowdstrike.ts @@ -60,8 +60,6 @@ export function getConnectorType(): ConnectorTypeModel< return { errors }; }, actionConnectorFields: lazy(() => import('./crowdstrike_connector')), - actionParamsFields: lazy(() => import('./crowdstrike_params_empty')), - // TODO: Enable once we add support for automated response actions - // actionParamsFields: lazy(() => import('./crowdstrike_params')), + actionParamsFields: lazy(() => import('./crowdstrike_params')), }; } diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/crowdstrike/crowdstrike_params.test.tsx b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/crowdstrike/crowdstrike_params.test.tsx new file mode 100644 index 0000000000000..11e474e6a7ac9 --- /dev/null +++ b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/crowdstrike/crowdstrike_params.test.tsx @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { mountWithIntl } from '@kbn/test-jest-helpers'; +import { SUB_ACTION } from '../../../common/crowdstrike/constants'; +import type { CrowdstrikeActionParams } from '../../../common/crowdstrike/types'; +import CrowdstrikeParamsFields from './crowdstrike_params'; + +const actionParams = { + subAction: SUB_ACTION.GET_AGENT_DETAILS, + subActionParams: { + ids: ['test'], + }, +} as unknown as CrowdstrikeActionParams; + +describe('CrowdstrikeParamsFields renders', () => { + test('all params fields are rendered', () => { + const wrapper = mountWithIntl( + + ); + expect(wrapper.find('[data-test-subj="actionTypeSelect"]').length > 0).toBeTruthy(); + expect(wrapper.find('[data-test-subj="actionTypeSelect"]').first().prop('readOnly')).toEqual( + true + ); + expect(wrapper.find('[data-test-subj="agentIdSelect"]').length > 0).toBeTruthy(); + }); +}); diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/crowdstrike/crowdstrike_params.tsx b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/crowdstrike/crowdstrike_params.tsx new file mode 100644 index 0000000000000..a53843f683567 --- /dev/null +++ b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/crowdstrike/crowdstrike_params.tsx @@ -0,0 +1,112 @@ +/* + * 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, { useMemo, useCallback, useState, useEffect } from 'react'; +import { EuiFlexGroup, EuiFlexItem, EuiFormRow, EuiSuperSelect, EuiComboBox } from '@elastic/eui'; +import { ActionParamsProps } from '@kbn/triggers-actions-ui-plugin/public'; +import { SUB_ACTION } from '../../../common/crowdstrike/constants'; +import type { CrowdstrikeActionParams } from '../../../common/crowdstrike/types'; +import * as i18n from './translations'; + +const actionTypeOptions = [ + { + value: SUB_ACTION.GET_AGENT_DETAILS, + inputDisplay: i18n.GET_AGENT_DETAILS_ACTION_LABEL, + }, +]; + +const CrowdstrikeParamsFields: React.FunctionComponent< + ActionParamsProps +> = ({ actionParams, editAction, index, errors }) => { + const [subActionValue] = useState(SUB_ACTION.GET_AGENT_DETAILS); + + const { ids } = useMemo( + () => + actionParams.subActionParams ?? + ({ + ids: [], + } as unknown as CrowdstrikeActionParams['subActionParams']), + [actionParams.subActionParams] + ); + + const labelOptions = useMemo(() => (ids ? ids.map((label: string) => ({ label })) : []), [ids]); + + const editSubActionParams = useCallback( + (value: any) => { + return editAction( + 'subActionParams', + { + ids: value, + }, + index + ); + }, + [editAction, index] + ); + + useEffect(() => { + if (!actionParams.subAction) { + editAction('subAction', SUB_ACTION.GET_AGENT_DETAILS, index); + } + if (!actionParams.subActionParams) { + editAction( + 'subActionParams', + { + ids: [], + }, + index + ); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [actionParams]); + + return ( + + + + + + + + + { + const newOptions = [...labelOptions, { label: searchValue }]; + editSubActionParams(newOptions.map((newOption) => newOption.label)); + }} + onChange={(selectedOptions: Array<{ label: string }>) => { + editSubActionParams(selectedOptions.map((selectedOption) => selectedOption.label)); + }} + onBlur={() => { + if (!ids) { + editSubActionParams([]); + } + }} + isClearable={true} + data-test-subj="agentIdSelect" + /> + + + + ); +}; + +// eslint-disable-next-line import/no-default-export +export { CrowdstrikeParamsFields as default }; diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/crowdstrike/translations.ts b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/crowdstrike/translations.ts index e10226f532914..8d1a3ad0bbe12 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/crowdstrike/translations.ts +++ b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/crowdstrike/translations.ts @@ -43,3 +43,24 @@ export const INVALID_ACTION = i18n.translate( defaultMessage: 'Invalid action name.', } ); + +export const ACTION_TYPE_LABEL = i18n.translate( + 'xpack.stackConnectors.security.crowdstrike.params.actionTypeFieldLabel', + { + defaultMessage: 'Action type', + } +); + +export const GET_AGENT_DETAILS_ACTION_LABEL = i18n.translate( + 'xpack.stackConnectors.security.crowdstrike.params.getAgentDetailsActionLabel', + { + defaultMessage: 'Get agent details', + } +); + +export const AGENT_IDS_LABEL = i18n.translate( + 'xpack.stackConnectors.security.crowdstrike.params.agentIdsLabel', + { + defaultMessage: 'Agent IDs', + } +); diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/additional_options_fields.tsx b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/additional_options_fields.tsx deleted file mode 100644 index 5862389e6ab80..0000000000000 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/additional_options_fields.tsx +++ /dev/null @@ -1,315 +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, { useMemo } from 'react'; -import { css } from '@emotion/react'; - -import { - EuiFormRow, - EuiSpacer, - EuiTitle, - EuiAccordion, - EuiFieldText, - useEuiTheme, - EuiTextColor, - EuiButtonGroup, - EuiPanel, - EuiButtonEmpty, - EuiCopy, - EuiButton, - useEuiFontSize, -} from '@elastic/eui'; -import { - getFieldValidityAndErrorMessage, - UseField, - useFormContext, -} from '@kbn/es-ui-shared-plugin/static/forms/hook_form_lib'; -import { FormattedMessage } from '@kbn/i18n-react'; - -import { fieldValidators } from '@kbn/es-ui-shared-plugin/static/forms/helpers'; -import { ConfigEntryView } from '../../../common/dynamic_config/types'; -import { ConnectorConfigurationFormItems } from '../lib/dynamic_config/connector_configuration_form_items'; -import * as i18n from './translations'; -import { DEFAULT_TASK_TYPE } from './constants'; -import { Config } from './types'; -import { TaskTypeOption } from './helpers'; - -// Custom trigger button CSS -const buttonCss = css` - &:hover { - text-decoration: none; - } -`; - -interface AdditionalOptionsConnectorFieldsProps { - config: Config; - readOnly: boolean; - isEdit: boolean; - optionalProviderFormFields: ConfigEntryView[]; - onSetProviderConfigEntry: (key: string, value: unknown) => Promise; - onTaskTypeOptionsSelect: (taskType: string, provider?: string) => void; - selectedTaskType?: string; - taskTypeFormFields: ConfigEntryView[]; - taskTypeOptions: TaskTypeOption[]; -} - -export const AdditionalOptionsConnectorFields: React.FC = ({ - config, - readOnly, - isEdit, - taskTypeOptions, - optionalProviderFormFields, - selectedTaskType, - onSetProviderConfigEntry, - onTaskTypeOptionsSelect, -}) => { - const xsFontSize = useEuiFontSize('xs').fontSize; - const { euiTheme } = useEuiTheme(); - const { setFieldValue } = useFormContext(); - - const taskTypeSettings = useMemo( - () => - selectedTaskType || config.taskType?.length ? ( - <> - -

    - -

    -
    - -
    - -
    - - - {(field) => { - const { isInvalid, errorMessage } = getFieldValidityAndErrorMessage(field); - - return ( - - {isEdit || readOnly ? ( - - {config.taskType} - - ) : taskTypeOptions.length === 1 ? ( - onTaskTypeOptionsSelect(config.taskType)} - > - {config.taskType} - - ) : ( - onTaskTypeOptionsSelect(id)} - options={taskTypeOptions} - color="text" - type="single" - /> - )} - - ); - }} - - - ) : null, - [ - selectedTaskType, - config.taskType, - xsFontSize, - euiTheme.colors, - isEdit, - readOnly, - taskTypeOptions, - onTaskTypeOptionsSelect, - ] - ); - - const inferenceUri = useMemo(() => `_inference/${selectedTaskType}/`, [selectedTaskType]); - - return ( - - - - } - initialIsOpen={true} - > - - - {optionalProviderFormFields.length > 0 ? ( - <> - -

    - -

    -
    - -
    - -
    - - - - - ) : null} - - {taskTypeSettings} - - -

    - -

    -
    - -
    - -
    - - - - {(field) => { - const { isInvalid, errorMessage } = getFieldValidityAndErrorMessage(field); - - return ( - - } - > - { - setFieldValue('config.inferenceId', e.target.value); - }} - prepend={inferenceUri} - append={ - - {(copy) => ( - - - - )} - - } - /> - - ); - }} - -
    -
    - ); -}; - -// eslint-disable-next-line import/no-default-export -export { AdditionalOptionsConnectorFields as default }; diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/connector.test.tsx b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/connector.test.tsx index 5d20ff9595483..88889967d1dbf 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/connector.test.tsx +++ b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/connector.test.tsx @@ -9,37 +9,9 @@ import React from 'react'; import ConnectorFields from './connector'; import { ConnectorFormTestProvider } from '../lib/test_utils'; -import { render, waitFor } from '@testing-library/react'; +import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { createStartServicesMock } from '@kbn/triggers-actions-ui-plugin/public/common/lib/kibana/kibana_react.mock'; -import { useProviders } from './providers/get_providers'; -import { FieldType } from '../../../common/dynamic_config/types'; - -jest.mock('./providers/get_providers'); - -const mockUseKibanaReturnValue = createStartServicesMock(); -jest.mock('@kbn/triggers-actions-ui-plugin/public/common/lib/kibana', () => ({ - __esModule: true, - useKibana: jest.fn(() => ({ - services: mockUseKibanaReturnValue, - })), -})); - -jest.mock('@faker-js/faker', () => { - const originalModule = jest.requireActual('@faker-js/faker'); - return { - ...originalModule, - faker: { - ...originalModule.faker, - string: { - ...originalModule.faker.string, - alpha: jest.fn().mockReturnValue('123'), - }, - }, - }; -}); - -const mockProviders = useProviders as jest.Mock; const providersSchemas = [ { @@ -54,7 +26,7 @@ const providersSchemas = [ required: true, sensitive: true, updatable: true, - type: FieldType.STRING, + type: 'string', }, 'rate_limit.requests_per_minute': { default_value: null, @@ -63,7 +35,7 @@ const providersSchemas = [ required: false, sensitive: false, updatable: true, - type: FieldType.INTEGER, + type: 'int', }, }, }, @@ -79,7 +51,7 @@ const providersSchemas = [ required: false, sensitive: false, updatable: true, - type: FieldType.INTEGER, + type: 'int', }, model_id: { default_value: null, @@ -88,7 +60,7 @@ const providersSchemas = [ required: true, sensitive: false, updatable: true, - type: FieldType.STRING, + type: 'string', }, max_input_tokens: { default_value: null, @@ -97,7 +69,7 @@ const providersSchemas = [ required: false, sensitive: false, updatable: true, - type: FieldType.INTEGER, + type: 'int', }, }, }, @@ -113,7 +85,7 @@ const providersSchemas = [ required: true, sensitive: false, updatable: true, - type: FieldType.STRING, + type: 'string', }, model_id: { default_value: null, @@ -122,7 +94,7 @@ const providersSchemas = [ required: true, sensitive: false, updatable: true, - type: FieldType.STRING, + type: 'string', }, api_version: { default_value: null, @@ -131,7 +103,7 @@ const providersSchemas = [ required: true, sensitive: false, updatable: true, - type: FieldType.STRING, + type: 'string', }, max_input_tokens: { default_value: null, @@ -140,7 +112,7 @@ const providersSchemas = [ required: false, sensitive: false, updatable: true, - type: FieldType.INTEGER, + type: 'int', }, url: { default_value: null, @@ -149,7 +121,7 @@ const providersSchemas = [ required: true, sensitive: false, updatable: true, - type: FieldType.STRING, + type: 'string', }, }, }, @@ -165,7 +137,7 @@ const providersSchemas = [ required: true, sensitive: false, updatable: true, - type: FieldType.STRING, + type: 'string', }, provider: { default_value: null, @@ -174,7 +146,7 @@ const providersSchemas = [ required: true, sensitive: false, updatable: true, - type: FieldType.STRING, + type: 'string', }, api_key: { default_value: null, @@ -183,7 +155,7 @@ const providersSchemas = [ required: true, sensitive: true, updatable: true, - type: FieldType.STRING, + type: 'string', }, 'rate_limit.requests_per_minute': { default_value: null, @@ -192,7 +164,7 @@ const providersSchemas = [ required: false, sensitive: false, updatable: true, - type: FieldType.INTEGER, + type: 'int', }, target: { default_value: null, @@ -201,7 +173,7 @@ const providersSchemas = [ required: true, sensitive: false, updatable: true, - type: FieldType.STRING, + type: 'string', }, }, }, @@ -217,7 +189,7 @@ const providersSchemas = [ required: true, sensitive: true, updatable: true, - type: FieldType.STRING, + type: 'string', }, 'rate_limit.requests_per_minute': { default_value: null, @@ -226,7 +198,7 @@ const providersSchemas = [ required: false, sensitive: false, updatable: true, - type: FieldType.INTEGER, + type: 'int', }, url: { default_value: 'https://api.openai.com/v1/embeddings', @@ -235,7 +207,7 @@ const providersSchemas = [ required: true, sensitive: false, updatable: true, - type: FieldType.STRING, + type: 'string', }, }, }, @@ -251,7 +223,7 @@ const providersSchemas = [ required: true, sensitive: true, updatable: true, - type: FieldType.STRING, + type: 'string', }, provider: { default_value: null, @@ -260,7 +232,7 @@ const providersSchemas = [ required: true, sensitive: false, updatable: true, - type: FieldType.STRING, + type: 'string', }, access_key: { default_value: null, @@ -269,7 +241,7 @@ const providersSchemas = [ required: true, sensitive: true, updatable: true, - type: FieldType.STRING, + type: 'string', }, model: { default_value: null, @@ -278,7 +250,7 @@ const providersSchemas = [ required: true, sensitive: false, updatable: true, - type: FieldType.STRING, + type: 'string', }, 'rate_limit.requests_per_minute': { default_value: null, @@ -288,7 +260,7 @@ const providersSchemas = [ required: false, sensitive: false, updatable: true, - type: FieldType.INTEGER, + type: 'int', }, region: { default_value: null, @@ -297,7 +269,7 @@ const providersSchemas = [ required: true, sensitive: false, updatable: true, - type: FieldType.STRING, + type: 'string', }, }, }, @@ -313,7 +285,7 @@ const providersSchemas = [ required: true, sensitive: true, updatable: true, - type: FieldType.STRING, + type: 'string', }, 'rate_limit.requests_per_minute': { default_value: null, @@ -323,7 +295,7 @@ const providersSchemas = [ required: false, sensitive: false, updatable: true, - type: FieldType.INTEGER, + type: 'int', }, model_id: { default_value: null, @@ -332,7 +304,7 @@ const providersSchemas = [ required: true, sensitive: false, updatable: true, - type: FieldType.STRING, + type: 'string', }, }, }, @@ -348,7 +320,7 @@ const providersSchemas = [ required: true, sensitive: true, updatable: true, - type: FieldType.STRING, + type: 'string', }, 'rate_limit.requests_per_minute': { default_value: null, @@ -357,7 +329,7 @@ const providersSchemas = [ required: false, sensitive: false, updatable: true, - type: FieldType.INTEGER, + type: 'int', }, model_id: { default_value: null, @@ -366,7 +338,7 @@ const providersSchemas = [ required: true, sensitive: false, updatable: true, - type: FieldType.STRING, + type: 'string', }, }, }, @@ -383,7 +355,7 @@ const providersSchemas = [ required: true, sensitive: false, updatable: true, - type: FieldType.INTEGER, + type: 'int', }, num_threads: { default_value: 2, @@ -392,7 +364,7 @@ const providersSchemas = [ required: true, sensitive: false, updatable: true, - type: FieldType.INTEGER, + type: 'int', }, model_id: { default_value: '.multilingual-e5-small', @@ -401,7 +373,7 @@ const providersSchemas = [ required: true, sensitive: false, updatable: true, - type: FieldType.STRING, + type: 'string', }, }, }, @@ -418,7 +390,7 @@ const providersSchemas = [ required: true, sensitive: true, updatable: true, - type: FieldType.STRING, + type: 'string', }, organization_id: { default_value: null, @@ -427,7 +399,7 @@ const providersSchemas = [ required: false, sensitive: false, updatable: true, - type: FieldType.STRING, + type: 'string', }, 'rate_limit.requests_per_minute': { default_value: null, @@ -437,7 +409,7 @@ const providersSchemas = [ required: false, sensitive: false, updatable: true, - type: FieldType.INTEGER, + type: 'int', }, model_id: { default_value: null, @@ -446,7 +418,7 @@ const providersSchemas = [ required: true, sensitive: false, updatable: true, - type: FieldType.STRING, + type: 'string', }, url: { default_value: 'https://api.openai.com/v1/chat/completions', @@ -456,7 +428,7 @@ const providersSchemas = [ required: true, sensitive: false, updatable: true, - type: FieldType.STRING, + type: 'string', }, }, }, @@ -472,7 +444,7 @@ const providersSchemas = [ required: true, sensitive: true, updatable: true, - type: FieldType.STRING, + type: 'string', }, entra_id: { default_value: null, @@ -481,7 +453,7 @@ const providersSchemas = [ required: false, sensitive: true, updatable: true, - type: FieldType.STRING, + type: 'string', }, 'rate_limit.requests_per_minute': { default_value: null, @@ -491,7 +463,7 @@ const providersSchemas = [ required: false, sensitive: false, updatable: true, - type: FieldType.INTEGER, + type: 'int', }, deployment_id: { default_value: null, @@ -500,7 +472,7 @@ const providersSchemas = [ required: true, sensitive: false, updatable: true, - type: FieldType.STRING, + type: 'string', }, resource_name: { default_value: null, @@ -509,7 +481,7 @@ const providersSchemas = [ required: true, sensitive: false, updatable: true, - type: FieldType.STRING, + type: 'string', }, api_version: { default_value: null, @@ -518,7 +490,7 @@ const providersSchemas = [ required: true, sensitive: false, updatable: true, - type: FieldType.STRING, + type: 'string', }, }, }, @@ -534,7 +506,7 @@ const providersSchemas = [ required: true, sensitive: true, updatable: true, - type: FieldType.STRING, + type: 'string', }, model: { default_value: null, @@ -544,7 +516,7 @@ const providersSchemas = [ required: true, sensitive: false, updatable: true, - type: FieldType.STRING, + type: 'string', }, 'rate_limit.requests_per_minute': { default_value: null, @@ -553,7 +525,7 @@ const providersSchemas = [ required: false, sensitive: false, updatable: true, - type: FieldType.INTEGER, + type: 'int', }, max_input_tokens: { default_value: null, @@ -562,7 +534,7 @@ const providersSchemas = [ required: false, sensitive: false, updatable: true, - type: FieldType.INTEGER, + type: 'int', }, }, }, @@ -578,7 +550,7 @@ const providersSchemas = [ required: true, sensitive: true, updatable: true, - type: FieldType.STRING, + type: 'string', }, project_id: { default_value: null, @@ -588,7 +560,7 @@ const providersSchemas = [ required: true, sensitive: false, updatable: true, - type: FieldType.STRING, + type: 'string', }, location: { default_value: null, @@ -598,7 +570,7 @@ const providersSchemas = [ required: true, sensitive: false, updatable: true, - type: FieldType.STRING, + type: 'string', }, 'rate_limit.requests_per_minute': { default_value: null, @@ -607,7 +579,7 @@ const providersSchemas = [ required: false, sensitive: false, updatable: true, - type: FieldType.INTEGER, + type: 'int', }, model_id: { default_value: null, @@ -616,7 +588,7 @@ const providersSchemas = [ required: true, sensitive: false, updatable: true, - type: FieldType.STRING, + type: 'string', }, }, }, @@ -632,7 +604,7 @@ const providersSchemas = [ required: true, sensitive: false, updatable: true, - type: FieldType.STRING, + type: 'string', }, api_key: { default_value: null, @@ -641,7 +613,7 @@ const providersSchemas = [ required: true, sensitive: true, updatable: true, - type: FieldType.STRING, + type: 'string', }, service_id: { default_value: null, @@ -650,7 +622,7 @@ const providersSchemas = [ required: true, sensitive: false, updatable: true, - type: FieldType.STRING, + type: 'string', }, host: { default_value: null, @@ -660,7 +632,7 @@ const providersSchemas = [ required: true, sensitive: false, updatable: true, - type: FieldType.STRING, + type: 'string', }, 'rate_limit.requests_per_minute': { default_value: null, @@ -669,7 +641,7 @@ const providersSchemas = [ required: false, sensitive: false, updatable: true, - type: FieldType.INTEGER, + type: 'int', }, http_schema: { default_value: null, @@ -678,12 +650,40 @@ const providersSchemas = [ required: true, sensitive: false, updatable: true, - type: FieldType.STRING, + type: 'string', }, }, }, ]; +const mockUseKibanaReturnValue = createStartServicesMock(); +jest.mock('@kbn/triggers-actions-ui-plugin/public/common/lib/kibana', () => ({ + __esModule: true, + useKibana: jest.fn(() => ({ + services: mockUseKibanaReturnValue, + })), +})); + +jest.mock('@faker-js/faker', () => { + const originalModule = jest.requireActual('@faker-js/faker'); + return { + ...originalModule, + faker: { + ...originalModule.faker, + string: { + ...originalModule.faker.string, + alpha: jest.fn().mockReturnValue('123'), + }, + }, + }; +}); + +jest.mock('@kbn/inference-endpoint-ui-common/src/hooks/use_providers', () => ({ + useProviders: jest.fn(() => ({ + data: providersSchemas, + })), +})); + const openAiConnector = { actionTypeId: '.inference', name: 'AI Connector', @@ -724,14 +724,7 @@ const googleaistudioConnector = { }; describe('ConnectorFields renders', () => { - beforeEach(() => { - jest.clearAllMocks(); - mockProviders.mockReturnValue({ - isLoading: false, - data: providersSchemas, - }); - }); - test('openai provider fields are rendered', async () => { + test('openai provider fields are rendered', () => { const { getAllByTestId } = render( {}} /> @@ -746,7 +739,7 @@ describe('ConnectorFields renders', () => { expect(getAllByTestId('taskTypeSelectDisabled')[0]).toHaveTextContent('completion'); }); - test('googleaistudio provider fields are rendered', async () => { + test('googleaistudio provider fields are rendered', () => { const { getAllByTestId } = render( {}} /> @@ -771,32 +764,37 @@ describe('ConnectorFields renders', () => { }); it('connector validation succeeds when connector config is valid', async () => { - const { getByTestId } = render( + render( - {}} /> + {}} /> ); - await userEvent.click(getByTestId('form-test-provide-submit')); - - await waitFor(async () => { - expect(onSubmit).toHaveBeenCalled(); - }); + await userEvent.type( + screen.getByTestId('api_key-password'), + '{selectall}{backspace}goodpassword' + ); + await userEvent.click(screen.getByTestId('form-test-provide-submit')); + expect(onSubmit).toHaveBeenCalled(); expect(onSubmit).toBeCalledWith({ data: { config: { - inferenceId: 'openai-completion-4fzzzxjylrx', ...openAiConnector.config, }, actionTypeId: openAiConnector.actionTypeId, name: openAiConnector.name, id: openAiConnector.id, isDeprecated: openAiConnector.isDeprecated, + secrets: { + providerSecrets: { + api_key: 'goodpassword', + }, + }, }, isValid: true, }); - }); + }, 60000); it('validates correctly if the provider config url is empty', async () => { const connector = { @@ -810,29 +808,23 @@ describe('ConnectorFields renders', () => { }, }; - const res = render( + render( {}} /> ); await userEvent.type( - res.getByTestId('api_key-password'), + screen.getByTestId('api_key-password'), '{selectall}{backspace}goodpassword' ); - await userEvent.click(res.getByTestId('form-test-provide-submit')); - await waitFor(async () => { - expect(onSubmit).toHaveBeenCalled(); - }); + await userEvent.click(screen.getByTestId('form-test-provide-submit')); + expect(onSubmit).toHaveBeenCalled(); expect(onSubmit).toHaveBeenCalledWith({ data: {}, isValid: false }); - }); + }, 60000); - const tests: Array<[string, string]> = [ - ['url-input', ''], - ['api_key-password', ''], - ]; - it.each(tests)('validates correctly %p', async (field, value) => { + it('validates correctly empty password field', async () => { const connector = { ...openAiConnector, config: { @@ -841,20 +833,17 @@ describe('ConnectorFields renders', () => { }, }; - const res = render( + render( {}} /> ); - await userEvent.type(res.getByTestId(field), `{selectall}{backspace}${value}`); - - await userEvent.click(res.getByTestId('form-test-provide-submit')); - await waitFor(async () => { - expect(onSubmit).toHaveBeenCalled(); - }); + await userEvent.type(screen.getByTestId('api_key-password'), `{selectall}{backspace}`); + await userEvent.click(screen.getByTestId('form-test-provide-submit')); + expect(onSubmit).toHaveBeenCalled(); expect(onSubmit).toHaveBeenCalledWith({ data: {}, isValid: false }); - }); + }, 60000); }); }); diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/connector.tsx b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/connector.tsx index 51fc2d2a3e9f7..261c2d5a34154 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/connector.tsx +++ b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/connector.tsx @@ -5,47 +5,12 @@ * 2.0. */ -import React, { useState, useEffect, useCallback, useMemo } from 'react'; -import { - EuiFormRow, - EuiSpacer, - EuiInputPopover, - EuiFieldText, - EuiFieldTextProps, - EuiSelectableOption, - EuiFormControlLayout, - keys, - EuiHorizontalRule, -} from '@elastic/eui'; -import { - getFieldValidityAndErrorMessage, - UseField, - useFormContext, - useFormData, -} from '@kbn/es-ui-shared-plugin/static/forms/hook_form_lib'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { - ConnectorFormSchema, - type ActionConnectorFieldsProps, -} from '@kbn/triggers-actions-ui-plugin/public'; +import React from 'react'; +import { InferenceServiceFormFields } from '@kbn/inference-endpoint-ui-common'; +import { type ActionConnectorFieldsProps } from '@kbn/triggers-actions-ui-plugin/public'; import { useKibana } from '@kbn/triggers-actions-ui-plugin/public'; -import { fieldValidators } from '@kbn/es-ui-shared-plugin/static/forms/helpers'; -import { ConfigEntryView } from '../../../common/dynamic_config/types'; -import { ServiceProviderKeys } from '../../../common/inference/constants'; -import { ConnectorConfigurationFormItems } from '../lib/dynamic_config/connector_configuration_form_items'; -import * as i18n from './translations'; -import { DEFAULT_TASK_TYPE } from './constants'; -import { SelectableProvider } from './providers/selectable'; -import { Config, Secrets } from './types'; -import { generateInferenceEndpointId, getTaskTypeOptions, TaskTypeOption } from './helpers'; -import { useProviders } from './providers/get_providers'; -import { SERVICE_PROVIDERS } from './providers/render_service_provider/service_provider'; -import { AdditionalOptionsConnectorFields } from './additional_options_fields'; -import { getProviderConfigHiddenField, getProviderSecretsHiddenField } from './hidden_fields'; - const InferenceAPIConnectorFields: React.FunctionComponent = ({ - readOnly, isEdit, }) => { const { @@ -53,336 +18,7 @@ const InferenceAPIConnectorFields: React.FunctionComponent>({ - watch: [ - 'secrets.providerSecrets', - 'config.taskType', - 'config.inferenceId', - 'config.provider', - 'config.providerConfig', - ], - }); - - const { data: providers, isLoading } = useProviders(http, toasts); - - const [isProviderPopoverOpen, setProviderPopoverOpen] = useState(false); - - const [providerSchema, setProviderSchema] = useState([]); - const [optionalProviderFormFields, setOptionalProviderFormFields] = useState( - [] - ); - const [requiredProviderFormFields, setRequiredProviderFormFields] = useState( - [] - ); - - const [taskTypeOptions, setTaskTypeOptions] = useState([]); - const [selectedTaskType, setSelectedTaskType] = useState(DEFAULT_TASK_TYPE); - const [taskTypeFormFields] = useState([]); - - const handleProviderClosePopover = useCallback(() => { - setProviderPopoverOpen(false); - }, []); - - const handleProviderPopover = useCallback(() => { - setProviderPopoverOpen((isOpen) => !isOpen); - }, []); - - const handleProviderKeyboardOpen: EuiFieldTextProps['onKeyDown'] = useCallback((event: any) => { - if (event.key === keys.ENTER) { - setProviderPopoverOpen(true); - } - }, []); - - useEffect(() => { - if (!isEdit && config && !config.inferenceId) { - generateInferenceEndpointId(config, setFieldValue); - } - }, [isEdit, setFieldValue, config]); - - useEffect(() => { - if (isSubmitting) { - validateFields(['config.providerConfig']); - validateFields(['secrets.providerSecrets']); - } - }, [isSubmitting, config, validateFields]); - - const onTaskTypeOptionsSelect = useCallback( - (taskType: string) => { - // Get task type settings - setSelectedTaskType(taskType); - - updateFieldValues({ - config: { - taskType, - }, - }); - generateInferenceEndpointId({ ...config, taskType }, setFieldValue); - }, - [config, setFieldValue, updateFieldValues] - ); - - const onProviderChange = useCallback( - (provider?: string) => { - const newProvider = providers?.find((p) => p.service === provider); - - // Update task types list available for the selected provider - setTaskTypeOptions(getTaskTypeOptions(newProvider?.task_types ?? [])); - if (newProvider?.task_types && newProvider?.task_types.length > 0) { - onTaskTypeOptionsSelect(newProvider?.task_types[0]); - } - - // Update connector providerSchema - const newProviderSchema = Object.keys(newProvider?.configurations ?? {}).map((k) => ({ - key: k, - isValid: true, - ...newProvider?.configurations[k], - })) as ConfigEntryView[]; - - setProviderSchema(newProviderSchema); - - const defaultProviderConfig: Record = {}; - const defaultProviderSecrets: Record = {}; - - Object.keys(newProvider?.configurations ?? {}).forEach((k) => { - if (!newProvider?.configurations[k].sensitive) { - if (newProvider?.configurations[k] && !!newProvider?.configurations[k].default_value) { - defaultProviderConfig[k] = newProvider.configurations[k].default_value; - } else { - defaultProviderConfig[k] = null; - } - } else { - defaultProviderSecrets[k] = null; - } - }); - - updateFieldValues({ - config: { - provider: newProvider?.service, - providerConfig: defaultProviderConfig, - }, - secrets: { - providerSecrets: defaultProviderSecrets, - }, - }); - }, - [onTaskTypeOptionsSelect, providers, updateFieldValues] - ); - - useEffect(() => { - if (config?.provider && isEdit) { - const newProvider = providers?.find((p) => p.service === config.provider); - // Update connector providerSchema - const newProviderSchema = Object.keys(newProvider?.configurations ?? {}).map((k) => ({ - key: k, - isValid: true, - ...newProvider?.configurations[k], - })) as ConfigEntryView[]; - - setProviderSchema(newProviderSchema); - } - }, [config?.provider, config?.taskType, http, isEdit, providers]); - - useEffect(() => { - // Set values from the provider secrets and config to the schema - const existingConfiguration = providerSchema - ? providerSchema.map((item: ConfigEntryView) => { - const itemValue = item; - itemValue.isValid = true; - if (item.sensitive && secrets?.providerSecrets) { - itemValue.value = secrets?.providerSecrets[item.key] as any; - } else if (config?.providerConfig) { - itemValue.value = config?.providerConfig[item.key] as any; - } - return itemValue; - }) - : []; - - setOptionalProviderFormFields(existingConfiguration.filter((p) => !p.required && !p.sensitive)); - setRequiredProviderFormFields(existingConfiguration.filter((p) => p.required || p.sensitive)); - }, [config?.providerConfig, providerSchema, secrets]); - - const getProviderOptions = useCallback(() => { - return providers?.map((p) => ({ - label: p.service, - key: p.service, - })) as EuiSelectableOption[]; - }, [providers]); - - const onSetProviderConfigEntry = useCallback( - async (key: string, value: unknown) => { - const entry: ConfigEntryView | undefined = providerSchema.find( - (p: ConfigEntryView) => p.key === key - ); - if (entry) { - if (entry.sensitive) { - if (!secrets.providerSecrets) { - secrets.providerSecrets = {}; - } - const newSecrets = { ...secrets.providerSecrets }; - newSecrets[key] = value; - setFieldValue('secrets.providerSecrets', newSecrets); - await validateFields(['secrets.providerSecrets']); - } else { - if (!config.providerConfig) { - config.providerConfig = {}; - } - const newConfig = { ...config.providerConfig }; - newConfig[key] = value; - setFieldValue('config.providerConfig', newConfig); - await validateFields(['config.providerConfig']); - } - } - }, - [config, providerSchema, secrets, setFieldValue, validateFields] - ); - - const onClearProvider = useCallback(() => { - onProviderChange(); - setFieldValue('config.taskType', ''); - setFieldValue('config.provider', ''); - }, [onProviderChange, setFieldValue]); - - const providerIcon = useMemo( - () => - Object.keys(SERVICE_PROVIDERS).includes(config?.provider) - ? SERVICE_PROVIDERS[config?.provider as ServiceProviderKeys].icon - : undefined, - [config?.provider] - ); - - const providerName = useMemo( - () => - Object.keys(SERVICE_PROVIDERS).includes(config?.provider) - ? SERVICE_PROVIDERS[config?.provider as ServiceProviderKeys].name - : config?.provider, - [config?.provider] - ); - - const providerSuperSelect = useCallback( - (isInvalid: boolean) => ( - - - - ), - [ - isEdit, - readOnly, - onClearProvider, - config?.provider, - providerIcon, - handleProviderPopover, - handleProviderKeyboardOpen, - providerName, - isProviderPopoverOpen, - ] - ); - - return ( - <> - - {(field) => { - const { isInvalid, errorMessage } = getFieldValidityAndErrorMessage(field); - const selectInput = providerSuperSelect(isInvalid); - return ( - - } - isInvalid={isInvalid} - error={errorMessage} - > - - - - - ); - }} - - {config?.provider ? ( - <> - - - - - - - {getProviderSecretsHiddenField( - providerSchema, - setRequiredProviderFormFields, - isSubmitting - )} - {getProviderConfigHiddenField( - providerSchema, - setRequiredProviderFormFields, - isSubmitting - )} - - ) : null} - - ); + return ; }; // eslint-disable-next-line import/no-default-export diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/alibaba_cloud.svg b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/alibaba_cloud.svg deleted file mode 100644 index 1ae552d509c3a..0000000000000 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/alibaba_cloud.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/amazon_bedrock.svg b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/amazon_bedrock.svg deleted file mode 100644 index f8815d4f75ec5..0000000000000 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/amazon_bedrock.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/anthropic.svg b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/anthropic.svg deleted file mode 100644 index c361cda86a7df..0000000000000 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/anthropic.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/azure_ai_studio.svg b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/azure_ai_studio.svg deleted file mode 100644 index 405e182a10394..0000000000000 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/azure_ai_studio.svg +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/azure_open_ai.svg b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/azure_open_ai.svg deleted file mode 100644 index 122c0c65af13c..0000000000000 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/azure_open_ai.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/cohere.svg b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/cohere.svg deleted file mode 100644 index 69953809fec35..0000000000000 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/cohere.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/elastic.svg b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/elastic.svg deleted file mode 100644 index e763c2e2f2ab6..0000000000000 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/elastic.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/google_ai_studio.svg b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/google_ai_studio.svg deleted file mode 100644 index b6e34ae15c9e4..0000000000000 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/google_ai_studio.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/hugging_face.svg b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/hugging_face.svg deleted file mode 100644 index 87ac70c5a18f4..0000000000000 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/hugging_face.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/ibm_watsonx.svg b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/ibm_watsonx.svg deleted file mode 100644 index 5883eff3884d6..0000000000000 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/ibm_watsonx.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/mistral.svg b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/mistral.svg deleted file mode 100644 index f62258a327594..0000000000000 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/mistral.svg +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/open_ai.svg b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/open_ai.svg deleted file mode 100644 index 9ddc8f8fd63b8..0000000000000 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/assets/images/open_ai.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/get_providers.test.tsx b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/get_providers.test.tsx deleted file mode 100644 index 7ab81ee062638..0000000000000 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/get_providers.test.tsx +++ /dev/null @@ -1,52 +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 * as ReactQuery from '@tanstack/react-query'; -import { waitFor, renderHook } from '@testing-library/react'; -import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; -import { httpServiceMock, notificationServiceMock } from '@kbn/core/public/mocks'; -import { useProviders } from './get_providers'; - -const http = httpServiceMock.createStartContract(); -const toasts = notificationServiceMock.createStartContract(); -const useQuerySpy = jest.spyOn(ReactQuery, 'useQuery'); - -beforeEach(() => jest.resetAllMocks()); - -const { getProviders } = jest.requireMock('./get_providers'); - -const queryClient = new QueryClient(); - -const wrapper = ({ children }: { children: React.ReactNode }) => ( - {children} -); - -describe('useProviders', () => { - beforeEach(() => { - jest.clearAllMocks(); - }); - - it('should call useQuery', async () => { - renderHook(() => useProviders(http, toasts.toasts), { - wrapper, - }); - - await waitFor(() => { - return expect(useQuerySpy).toBeCalled(); - }); - }); - - it('should return isError = true if api fails', async () => { - getProviders.mockResolvedValue('This is an error.'); - - renderHook(() => useProviders(http, toasts.toasts), { - wrapper, - }); - - await waitFor(() => expect(useQuerySpy).toHaveBeenCalled()); - }); -}); diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/get_providers.ts b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/get_providers.ts deleted file mode 100644 index badc0cb61030d..0000000000000 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/get_providers.ts +++ /dev/null @@ -1,40 +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 { HttpSetup } from '@kbn/core-http-browser'; -import { i18n } from '@kbn/i18n'; -import { useQuery } from '@tanstack/react-query'; -import type { ToastsStart } from '@kbn/core-notifications-browser'; -import { INTERNAL_BASE_STACK_CONNECTORS_API_PATH } from '../../../../common'; -import { InferenceProvider } from '../../../../common/inference/types'; - -export const getProviders = async (http: HttpSetup): Promise => { - return await http.get(`${INTERNAL_BASE_STACK_CONNECTORS_API_PATH}/_inference/_services`); -}; - -export const useProviders = (http: HttpSetup, toasts: ToastsStart) => { - const onErrorFn = (error: Error) => { - if (error) { - toasts.addDanger( - i18n.translate( - 'xpack.stackConnectors.components.inference.unableToFindProvidersQueryMessage', - { - defaultMessage: 'Unable to find providers', - } - ) - ); - } - }; - - const query = useQuery(['user-profile'], { - queryFn: () => getProviders(http), - staleTime: Infinity, - refetchOnWindowFocus: false, - onError: onErrorFn, - }); - return query; -}; diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/render_service_provider/service_provider.test.tsx b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/render_service_provider/service_provider.test.tsx deleted file mode 100644 index 84a32286b7532..0000000000000 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/render_service_provider/service_provider.test.tsx +++ /dev/null @@ -1,42 +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 { render, screen } from '@testing-library/react'; -import React from 'react'; -import { ServiceProviderIcon, ServiceProviderName } from './service_provider'; -import { ServiceProviderKeys } from '../../../../../common/inference/constants'; - -jest.mock('../assets/images/elastic.svg', () => 'elasticIcon.svg'); -jest.mock('../assets/images/hugging_face.svg', () => 'huggingFaceIcon.svg'); -jest.mock('../assets/images/cohere.svg', () => 'cohereIcon.svg'); -jest.mock('../assets/images/open_ai.svg', () => 'openAIIcon.svg'); - -describe('ServiceProviderIcon component', () => { - it('renders Hugging Face icon and name when providerKey is hugging_face', () => { - render(); - const icon = screen.getByTestId('icon-service-provider-hugging_face'); - expect(icon).toBeInTheDocument(); - }); - - it('renders Open AI icon and name when providerKey is openai', () => { - render(); - const icon = screen.getByTestId('icon-service-provider-openai'); - expect(icon).toBeInTheDocument(); - }); -}); - -describe('ServiceProviderName component', () => { - it('renders Hugging Face icon and name when providerKey is hugging_face', () => { - render(); - expect(screen.getByText('Hugging Face')).toBeInTheDocument(); - }); - - it('renders Open AI icon and name when providerKey is openai', () => { - render(); - expect(screen.getByText('OpenAI')).toBeInTheDocument(); - }); -}); diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/render_service_provider/service_provider.tsx b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/render_service_provider/service_provider.tsx deleted file mode 100644 index 5eb8518a5ea15..0000000000000 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/render_service_provider/service_provider.tsx +++ /dev/null @@ -1,124 +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 { EuiHighlight, EuiIcon } from '@elastic/eui'; -import React from 'react'; -import { ServiceProviderKeys } from '../../../../../common/inference/constants'; -import elasticIcon from '../assets/images/elastic.svg'; -import huggingFaceIcon from '../assets/images/hugging_face.svg'; -import cohereIcon from '../assets/images/cohere.svg'; -import openAIIcon from '../assets/images/open_ai.svg'; -import azureAIStudioIcon from '../assets/images/azure_ai_studio.svg'; -import azureOpenAIIcon from '../assets/images/azure_open_ai.svg'; -import googleAIStudioIcon from '../assets/images/google_ai_studio.svg'; -import mistralIcon from '../assets/images/mistral.svg'; -import amazonBedrockIcon from '../assets/images/amazon_bedrock.svg'; -import anthropicIcon from '../assets/images/anthropic.svg'; -import alibabaCloudIcon from '../assets/images/alibaba_cloud.svg'; -import ibmWatsonxIcon from '../assets/images/ibm_watsonx.svg'; - -interface ServiceProviderProps { - providerKey: ServiceProviderKeys; - searchValue?: string; -} - -export type ProviderSolution = 'Observability' | 'Security' | 'Search'; - -interface ServiceProviderRecord { - icon: string; - name: string; - solutions: ProviderSolution[]; -} - -export const SERVICE_PROVIDERS: Record = { - [ServiceProviderKeys.amazonbedrock]: { - icon: amazonBedrockIcon, - name: 'Amazon Bedrock', - solutions: ['Observability', 'Security', 'Search'], - }, - [ServiceProviderKeys.azureaistudio]: { - icon: azureAIStudioIcon, - name: 'Azure AI Studio', - solutions: ['Search'], - }, - [ServiceProviderKeys.azureopenai]: { - icon: azureOpenAIIcon, - name: 'Azure OpenAI', - solutions: ['Observability', 'Security', 'Search'], - }, - [ServiceProviderKeys.anthropic]: { - icon: anthropicIcon, - name: 'Anthropic', - solutions: ['Search'], - }, - [ServiceProviderKeys.cohere]: { - icon: cohereIcon, - name: 'Cohere', - solutions: ['Search'], - }, - [ServiceProviderKeys.elasticsearch]: { - icon: elasticIcon, - name: 'Elasticsearch', - solutions: ['Search'], - }, - [ServiceProviderKeys.googleaistudio]: { - icon: googleAIStudioIcon, - name: 'Google AI Studio', - solutions: ['Search'], - }, - [ServiceProviderKeys.googlevertexai]: { - icon: googleAIStudioIcon, - name: 'Google Vertex AI', - solutions: ['Observability', 'Security', 'Search'], - }, - [ServiceProviderKeys.hugging_face]: { - icon: huggingFaceIcon, - name: 'Hugging Face', - solutions: ['Search'], - }, - [ServiceProviderKeys.mistral]: { - icon: mistralIcon, - name: 'Mistral', - solutions: ['Search'], - }, - [ServiceProviderKeys.openai]: { - icon: openAIIcon, - name: 'OpenAI', - solutions: ['Observability', 'Security', 'Search'], - }, - [ServiceProviderKeys['alibabacloud-ai-search']]: { - icon: alibabaCloudIcon, - name: 'AlibabaCloud AI Search', - solutions: ['Search'], - }, - [ServiceProviderKeys.watsonxai]: { - icon: ibmWatsonxIcon, - name: 'IBM Watsonx', - solutions: ['Search'], - }, -}; - -export const ServiceProviderIcon: React.FC = ({ providerKey }) => { - const provider = SERVICE_PROVIDERS[providerKey]; - - return provider ? ( - - ) : null; -}; - -export const ServiceProviderName: React.FC = ({ - providerKey, - searchValue, -}) => { - const provider = SERVICE_PROVIDERS[providerKey]; - - return provider ? ( - {provider.name} - ) : ( - {providerKey} - ); -}; diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/selectable/index.test.tsx b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/selectable/index.test.tsx deleted file mode 100644 index f83d4bcd9ea4c..0000000000000 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/selectable/index.test.tsx +++ /dev/null @@ -1,60 +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 { EuiSelectableProps } from '@elastic/eui'; -import React from 'react'; -import type { ShallowWrapper } from 'enzyme'; -import { shallow } from 'enzyme'; - -import { SelectableProvider } from '.'; - -describe('SelectableProvider', () => { - const props = { - isLoading: false, - onClosePopover: jest.fn(), - onProviderChange: jest.fn(), - getSelectableOptions: jest.fn().mockReturnValue([]), - }; - - describe('should render', () => { - let wrapper: ShallowWrapper; - - describe('provider', () => { - beforeAll(() => { - wrapper = shallow(); - }); - - afterAll(() => { - jest.clearAllMocks(); - }); - - test('render placeholder', () => { - const searchProps: EuiSelectableProps['searchProps'] = wrapper - .find('[data-test-subj="selectable-provider-input"]') - .prop('searchProps'); - expect(searchProps?.placeholder).toEqual('Search'); - }); - }); - - describe('template', () => { - beforeAll(() => { - wrapper = shallow(); - }); - - afterAll(() => { - jest.clearAllMocks(); - }); - - test('render placeholder', () => { - const searchProps: EuiSelectableProps['searchProps'] = wrapper - .find('[data-test-subj="selectable-provider-input"]') - .prop('searchProps'); - expect(searchProps?.placeholder).toEqual('Search'); - }); - }); - }); -}); diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/selectable/index.tsx b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/selectable/index.tsx deleted file mode 100644 index fc31c9dd6c4f7..0000000000000 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/inference/providers/selectable/index.tsx +++ /dev/null @@ -1,145 +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 { EuiSelectableOption, EuiSelectableProps } from '@elastic/eui'; -import { EuiSelectable, EuiFlexGroup, EuiFlexItem, EuiBadge } from '@elastic/eui'; -import React, { memo, useCallback, useMemo, useState } from 'react'; -import { i18n } from '@kbn/i18n'; -import { ServiceProviderKeys } from '../../../../../common/inference/constants'; -import { - ProviderSolution, - SERVICE_PROVIDERS, - ServiceProviderIcon, - ServiceProviderName, -} from '../render_service_provider/service_provider'; - -/** - * Modifies options by creating new property `providerTitle`(with value of `title`), and by setting `title` to undefined. - * Thus prevents appearing default browser tooltip on option hover (attribute `title` that gets rendered on li element) - * - * @param {EuiSelectableOption[]} options - * @returns {EuiSelectableOption[]} modified options - */ - -export interface SelectableProviderProps { - isLoading: boolean; - getSelectableOptions: (searchProviderValue?: string) => EuiSelectableOption[]; - onClosePopover: () => void; - onProviderChange: (provider?: string) => void; -} - -const SelectableProviderComponent: React.FC = ({ - isLoading, - getSelectableOptions, - onClosePopover, - onProviderChange, -}) => { - const [searchProviderValue, setSearchProviderValue] = useState(''); - const onSearchProvider = useCallback( - (val: string) => { - setSearchProviderValue(val); - }, - [setSearchProviderValue] - ); - - const renderProviderOption = useCallback>( - (option, searchValue) => { - const provider = Object.keys(SERVICE_PROVIDERS).includes(option.label) - ? SERVICE_PROVIDERS[option.label as ServiceProviderKeys] - : undefined; - - const supportedBySolutions = (provider && - provider.solutions.map((solution) => ( - - {solution} - - ))) ?? ( - - {'Search' as ProviderSolution} - - ); - return ( - - - - - - - - - - - - - - {supportedBySolutions} - - - - ); - }, - [] - ); - - const handleProviderChange = useCallback>( - (options) => { - const selectedProvider = options.filter((option) => option.checked === 'on'); - if (selectedProvider != null && selectedProvider.length > 0) { - onProviderChange(selectedProvider[0].label); - } - onClosePopover(); - }, - [onClosePopover, onProviderChange] - ); - - const EuiSelectableContent = useCallback>( - (list, search) => ( - <> - {search} - {list} - - ), - [] - ); - - const searchProps: EuiSelectableProps['searchProps'] = useMemo( - () => ({ - 'data-test-subj': 'provider-super-select-search-box', - placeholder: i18n.translate( - 'xpack.stackConnectors.components.inference.selectable.providerSearch', - { - defaultMessage: 'Search', - } - ), - onSearch: onSearchProvider, - incremental: false, - compressed: true, - fullWidth: true, - }), - [onSearchProvider] - ); - - return ( - - {EuiSelectableContent} - - ); -}; - -export const SelectableProvider = memo(SelectableProviderComponent); diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/lib/dynamic_config/connector_configuration_field.tsx b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/lib/dynamic_config/connector_configuration_field.tsx deleted file mode 100644 index b6dc0972492bf..0000000000000 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/lib/dynamic_config/connector_configuration_field.tsx +++ /dev/null @@ -1,237 +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, { useEffect, useState } from 'react'; - -import { - EuiAccordion, - EuiFieldText, - EuiFieldPassword, - EuiSwitch, - EuiTextArea, - EuiFieldNumber, -} from '@elastic/eui'; - -import { isEmpty } from 'lodash/fp'; -import { ConfigEntryView, FieldType } from '../../../../common/dynamic_config/types'; -import { - ensureBooleanType, - ensureCorrectTyping, - ensureStringType, -} from './connector_configuration_utils'; - -interface ConnectorConfigurationFieldProps { - configEntry: ConfigEntryView; - isLoading: boolean; - setConfigValue: (value: number | string | boolean | null) => void; -} - -interface ConfigInputFieldProps { - configEntry: ConfigEntryView; - isLoading: boolean; - validateAndSetConfigValue: (value: string | boolean) => void; -} -export const ConfigInputField: React.FC = ({ - configEntry, - isLoading, - validateAndSetConfigValue, -}) => { - // eslint-disable-next-line @typescript-eslint/naming-convention - const { isValid, value, default_value, key } = configEntry; - const [innerValue, setInnerValue] = useState( - !value || value.toString().length === 0 ? default_value : value - ); - - useEffect(() => { - setInnerValue(!value || value.toString().length === 0 ? default_value : value); - }, [default_value, value]); - return ( - { - setInnerValue(event.target.value); - validateAndSetConfigValue(event.target.value); - }} - /> - ); -}; - -export const ConfigSwitchField: React.FC = ({ - configEntry, - isLoading, - validateAndSetConfigValue, -}) => { - // eslint-disable-next-line @typescript-eslint/naming-convention - const { label, value, default_value, key } = configEntry; - const [innerValue, setInnerValue] = useState(value ?? default_value); - useEffect(() => { - setInnerValue(value ?? default_value); - }, [default_value, value]); - return ( - {label}

    } - onChange={(event) => { - setInnerValue(event.target.checked); - validateAndSetConfigValue(event.target.checked); - }} - /> - ); -}; - -export const ConfigInputTextArea: React.FC = ({ - isLoading, - configEntry, - validateAndSetConfigValue, -}) => { - // eslint-disable-next-line @typescript-eslint/naming-convention - const { isValid, value, default_value, key } = configEntry; - const [innerValue, setInnerValue] = useState(value ?? default_value); - useEffect(() => { - setInnerValue(value ?? default_value); - }, [default_value, value]); - return ( - { - setInnerValue(event.target.value); - validateAndSetConfigValue(event.target.value); - }} - /> - ); -}; - -export const ConfigNumberField: React.FC = ({ - configEntry, - isLoading, - validateAndSetConfigValue, -}) => { - // eslint-disable-next-line @typescript-eslint/naming-convention - const { isValid, value, default_value, key } = configEntry; - const [innerValue, setInnerValue] = useState(value ?? default_value); - useEffect(() => { - setInnerValue(!value || value.toString().length === 0 ? default_value : value); - }, [default_value, value]); - return ( - { - const newValue = isEmpty(event.target.value) ? '0' : event.target.value; - setInnerValue(newValue); - validateAndSetConfigValue(newValue); - }} - /> - ); -}; - -export const ConfigSensitiveTextArea: React.FC = ({ - isLoading, - configEntry, - validateAndSetConfigValue, -}) => { - const { key, label } = configEntry; - return ( - {label}

    }> - -
    - ); -}; - -export const ConfigInputPassword: React.FC = ({ - isLoading, - configEntry, - validateAndSetConfigValue, -}) => { - const { value, key } = configEntry; - const [innerValue, setInnerValue] = useState(value ?? null); - useEffect(() => { - setInnerValue(value ?? null); - }, [value]); - return ( - <> - { - setInnerValue(event.target.value); - validateAndSetConfigValue(event.target.value); - }} - /> - - ); -}; - -export const ConnectorConfigurationField: React.FC = ({ - configEntry, - isLoading, - setConfigValue, -}) => { - const validateAndSetConfigValue = (value: number | string | boolean) => { - setConfigValue(ensureCorrectTyping(configEntry.type, value)); - }; - - const { key, type, sensitive } = configEntry; - - switch (type) { - case FieldType.INTEGER: - return ( - - ); - - case FieldType.BOOLEAN: - return ( - - ); - - default: - return sensitive ? ( - - ) : ( - - ); - } -}; diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/lib/dynamic_config/connector_configuration_form_items.tsx b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/lib/dynamic_config/connector_configuration_form_items.tsx deleted file mode 100644 index ed564c247394c..0000000000000 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/lib/dynamic_config/connector_configuration_form_items.tsx +++ /dev/null @@ -1,97 +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 { - EuiCallOut, - EuiFlexGroup, - EuiFlexItem, - EuiFormRow, - EuiSpacer, - EuiText, -} from '@elastic/eui'; - -import { i18n } from '@kbn/i18n'; -import { ConfigEntryView } from '../../../../common/dynamic_config/types'; -import { ConnectorConfigurationField } from './connector_configuration_field'; - -interface ConnectorConfigurationFormItemsProps { - isLoading: boolean; - items: ConfigEntryView[]; - setConfigEntry: (key: string, value: string | number | boolean | null) => void; - direction?: 'column' | 'row' | 'rowReverse' | 'columnReverse' | undefined; - itemsGrow?: boolean; -} - -export const ConnectorConfigurationFormItems: React.FC = ({ - isLoading, - items, - setConfigEntry, - direction, -}) => { - return ( - - {items.map((configEntry) => { - const { key, isValid, label, sensitive, description, validationErrors, required } = - configEntry; - - const helpText = description; - // toggle and sensitive textarea labels go next to the element, not in the row - const rowLabel = description ? ( - - -

    {label}

    -
    -
    - ) : ( -

    {label}

    - ); - - const optionalLabel = !required ? ( - - {i18n.translate('xpack.stackConnectors.components.inference.config.optionalValue', { - defaultMessage: 'Optional', - })} - - ) : undefined; - - return ( - - - { - setConfigEntry(key, value); - }} - /> - - {sensitive ? ( - <> - - - - ) : null} - - ); - })} -
    - ); -}; diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/lib/dynamic_config/connector_configuration_utils.ts b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/lib/dynamic_config/connector_configuration_utils.ts deleted file mode 100644 index 5e78903746aee..0000000000000 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/lib/dynamic_config/connector_configuration_utils.ts +++ /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 { ConfigProperties, FieldType } from '../../../../common/dynamic_config/types'; - -export type ConnectorConfigEntry = ConfigProperties & { key: string }; - -export const validIntInput = (value: string | number | boolean | null): boolean => { - // reject non integers (including x.0 floats), but don't validate if empty - return (value !== null || value !== '') && - (isNaN(Number(value)) || - !Number.isSafeInteger(Number(value)) || - ensureStringType(value).indexOf('.') >= 0) - ? false - : true; -}; - -export const ensureCorrectTyping = ( - type: FieldType, - value: string | number | boolean | null -): string | number | boolean | null => { - switch (type) { - case FieldType.INTEGER: - return validIntInput(value) ? ensureIntType(value) : value; - case FieldType.BOOLEAN: - return ensureBooleanType(value); - default: - return ensureStringType(value); - } -}; - -export const ensureStringType = (value: string | number | boolean | null): string => { - return value !== null ? String(value) : ''; -}; - -export const ensureIntType = (value: string | number | boolean | null): number | null => { - // int is null-safe to prevent empty values from becoming zeroes - if (value === null || value === '') { - return null; - } - - return parseInt(String(value), 10); -}; - -export const ensureBooleanType = (value: string | number | boolean | null): boolean => { - return Boolean(value); -}; diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/sentinelone/sentinelone.ts b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/sentinelone/sentinelone.ts index 2344833ceb0c7..a65fc6a4f011c 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/sentinelone/sentinelone.ts +++ b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/sentinelone/sentinelone.ts @@ -60,6 +60,6 @@ export function getConnectorType(): ConnectorTypeModel< return { errors }; }, actionConnectorFields: lazy(() => import('./sentinelone_connector')), - actionParamsFields: lazy(() => import('./sentinelone_params_empty')), + actionParamsFields: lazy(() => import('./sentinelone_params')), }; } diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/sentinelone/sentinelone_params.test.tsx b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/sentinelone/sentinelone_params.test.tsx new file mode 100644 index 0000000000000..dcac22ada7809 --- /dev/null +++ b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/sentinelone/sentinelone_params.test.tsx @@ -0,0 +1,35 @@ +/* + * 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 { mountWithIntl } from '@kbn/test-jest-helpers'; +import { SUB_ACTION } from '../../../common/sentinelone/constants'; +import type { SentinelOneActionParams } from '../../../common/sentinelone/types'; +import SentinelOneParamsFields from './sentinelone_params'; + +const actionParams = { + subAction: SUB_ACTION.GET_AGENTS, + subActionParams: {}, +} as unknown as SentinelOneActionParams; + +describe('SentinelOneParamsFields renders', () => { + test('all params fields are rendered', () => { + const wrapper = mountWithIntl( + + ); + expect(wrapper.find('[data-test-subj="actionTypeSelect"]').length > 0).toBeTruthy(); + expect(wrapper.find('[data-test-subj="actionTypeSelect"]').first().prop('readOnly')).toEqual( + true + ); + }); +}); diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/sentinelone/sentinelone_params.tsx b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/sentinelone/sentinelone_params.tsx new file mode 100644 index 0000000000000..00ba91c83e25f --- /dev/null +++ b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/sentinelone/sentinelone_params.tsx @@ -0,0 +1,51 @@ +/* + * 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, { useState, useEffect } from 'react'; +import { EuiFlexGroup, EuiFlexItem, EuiFormRow, EuiSuperSelect } from '@elastic/eui'; +import { ActionParamsProps } from '@kbn/triggers-actions-ui-plugin/public'; +import { SUB_ACTION } from '../../../common/sentinelone/constants'; +import type { SentinelOneActionParams } from '../../../common/sentinelone/types'; +import * as i18n from './translations'; + +const actionTypeOptions = [ + { + value: SUB_ACTION.GET_AGENTS, + inputDisplay: i18n.GET_AGENT_ACTION_LABEL, + }, +]; + +const SentinelOneParamsFields: React.FunctionComponent< + ActionParamsProps +> = ({ editAction, index }) => { + const [subAction] = useState(SUB_ACTION.GET_AGENTS); + + useEffect(() => { + editAction('subActionParams', {}, index); + editAction('subAction', subAction, index); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( + + + + + + + + ); +}; + +// eslint-disable-next-line import/no-default-export +export { SentinelOneParamsFields as default }; diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/sentinelone/translations.ts b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/sentinelone/translations.ts index a5b9a274857c3..f2b44172850d6 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/sentinelone/translations.ts +++ b/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/sentinelone/translations.ts @@ -73,6 +73,13 @@ export const RELEASE_AGENT_ACTION_LABEL = i18n.translate( } ); +export const GET_AGENT_ACTION_LABEL = i18n.translate( + 'xpack.stackConnectors.security.sentinelone.params.getAgentActionLabel', + { + defaultMessage: 'Get agent details', + } +); + export const AGENTS_FIELD_LABEL = i18n.translate( 'xpack.stackConnectors.security.sentinelone.params.agentsFieldLabel', { @@ -90,7 +97,7 @@ export const AGENTS_FIELD_PLACEHOLDER = i18n.translate( export const ACTION_TYPE_LABEL = i18n.translate( 'xpack.stackConnectors.security.sentinelone.params.actionTypeFieldLabel', { - defaultMessage: 'Action Type', + defaultMessage: 'Action type', } ); diff --git a/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/crowdstrike/index.ts b/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/crowdstrike/index.ts index 0617822837c0a..304252e24771b 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/crowdstrike/index.ts +++ b/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/crowdstrike/index.ts @@ -9,10 +9,18 @@ import { SubActionConnectorType, ValidatorType, } from '@kbn/actions-plugin/server/sub_action_framework/types'; -import { SecurityConnectorFeatureId } from '@kbn/actions-plugin/common'; -import { urlAllowListValidator } from '@kbn/actions-plugin/server'; +import { EndpointSecurityConnectorFeatureId } from '@kbn/actions-plugin/common'; +import { urlAllowListValidator, ActionExecutionSourceType } from '@kbn/actions-plugin/server'; +import { + ENDPOINT_SECURITY_EXECUTE_PRIVILEGE, + ENDPOINT_SECURITY_SUB_ACTIONS_EXECUTE_PRIVILEGE, +} from '@kbn/actions-plugin/server/feature'; import { ExperimentalFeatures } from '../../../common/experimental_features'; -import { CROWDSTRIKE_CONNECTOR_ID, CROWDSTRIKE_TITLE } from '../../../common/crowdstrike/constants'; +import { + CROWDSTRIKE_CONNECTOR_ID, + CROWDSTRIKE_TITLE, + SUB_ACTION, +} from '../../../common/crowdstrike/constants'; import { CrowdstrikeConfigSchema, CrowdstrikeSecretsSchema, @@ -31,6 +39,17 @@ export const getCrowdstrikeConnectorType = ( secrets: CrowdstrikeSecretsSchema, }, validators: [{ type: ValidatorType.CONFIG, validator: urlAllowListValidator('url') }], - supportedFeatureIds: [SecurityConnectorFeatureId], + supportedFeatureIds: [EndpointSecurityConnectorFeatureId], minimumLicenseRequired: 'enterprise' as const, + subFeature: 'endpointSecurity', + getKibanaPrivileges: (args) => { + const privileges = [ENDPOINT_SECURITY_EXECUTE_PRIVILEGE]; + if ( + args?.source === ActionExecutionSourceType.HTTP_REQUEST && + args?.params?.subAction !== SUB_ACTION.GET_AGENT_DETAILS + ) { + privileges.push(ENDPOINT_SECURITY_SUB_ACTIONS_EXECUTE_PRIVILEGE); + } + return privileges; + }, }); diff --git a/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/sentinelone/index.ts b/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/sentinelone/index.ts index 849d54e276e11..272448a7e2bb0 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/sentinelone/index.ts +++ b/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/sentinelone/index.ts @@ -9,9 +9,15 @@ import { SubActionConnectorType, ValidatorType, } from '@kbn/actions-plugin/server/sub_action_framework/types'; -import { SecurityConnectorFeatureId } from '@kbn/actions-plugin/common'; -import { urlAllowListValidator } from '@kbn/actions-plugin/server'; +import { EndpointSecurityConnectorFeatureId } from '@kbn/actions-plugin/common'; +import { urlAllowListValidator, ActionExecutionSourceType } from '@kbn/actions-plugin/server'; +import { + ENDPOINT_SECURITY_EXECUTE_PRIVILEGE, + ENDPOINT_SECURITY_SUB_ACTIONS_EXECUTE_PRIVILEGE, +} from '@kbn/actions-plugin/server/feature'; import { SENTINELONE_CONNECTOR_ID, SENTINELONE_TITLE } from '../../../common/sentinelone/constants'; +import { SUB_ACTION } from '../../../common/sentinelone/constants'; + import { SentinelOneConfigSchema, SentinelOneSecretsSchema, @@ -32,7 +38,18 @@ export const getSentinelOneConnectorType = (): SubActionConnectorType< secrets: SentinelOneSecretsSchema, }, validators: [{ type: ValidatorType.CONFIG, validator: urlAllowListValidator('url') }], - supportedFeatureIds: [SecurityConnectorFeatureId], + supportedFeatureIds: [EndpointSecurityConnectorFeatureId], minimumLicenseRequired: 'enterprise' as const, renderParameterTemplates, + subFeature: 'endpointSecurity', + getKibanaPrivileges: (args) => { + const privileges = [ENDPOINT_SECURITY_EXECUTE_PRIVILEGE]; + if ( + args?.source === ActionExecutionSourceType.HTTP_REQUEST && + args?.params?.subAction !== SUB_ACTION.GET_AGENTS + ) { + privileges.push(ENDPOINT_SECURITY_SUB_ACTIONS_EXECUTE_PRIVILEGE); + } + return privileges; + }, }); diff --git a/x-pack/platform/plugins/shared/stack_connectors/server/plugin.ts b/x-pack/platform/plugins/shared/stack_connectors/server/plugin.ts index b20892938735b..aee84d963043d 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/server/plugin.ts +++ b/x-pack/platform/plugins/shared/stack_connectors/server/plugin.ts @@ -8,11 +8,7 @@ import { PluginInitializerContext, Plugin, CoreSetup, Logger } from '@kbn/core/server'; import { PluginSetupContract as ActionsPluginSetupContract } from '@kbn/actions-plugin/server'; import { registerConnectorTypes } from './connector_types'; -import { - validSlackApiChannelsRoute, - getWellKnownEmailServiceRoute, - getInferenceServicesRoute, -} from './routes'; +import { validSlackApiChannelsRoute, getWellKnownEmailServiceRoute } from './routes'; import { ExperimentalFeatures, parseExperimentalConfigValue, @@ -43,7 +39,6 @@ export class StackConnectorsPlugin implements Plugin { getWellKnownEmailServiceRoute(router); validSlackApiChannelsRoute(router, actions.getActionsConfigurationUtilities(), this.logger); - getInferenceServicesRoute(router); registerConnectorTypes({ actions, diff --git a/x-pack/platform/plugins/shared/stack_connectors/server/routes/get_inference_services.test.ts b/x-pack/platform/plugins/shared/stack_connectors/server/routes/get_inference_services.test.ts deleted file mode 100644 index 9e1449a37f7ff..0000000000000 --- a/x-pack/platform/plugins/shared/stack_connectors/server/routes/get_inference_services.test.ts +++ /dev/null @@ -1,677 +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 { httpServiceMock, httpServerMock } from '@kbn/core/server/mocks'; -import { coreMock } from '@kbn/core/server/mocks'; -import { getInferenceServicesRoute } from './get_inference_services'; -import { FieldType } from '../../common/dynamic_config/types'; - -describe('getInferenceServicesRoute', () => { - it('returns available service providers', async () => { - const router = httpServiceMock.createRouter(); - const core = coreMock.createRequestHandlerContext(); - - const mockResult = [ - { - service: 'cohere', - name: 'Cohere', - task_types: ['text_embedding', 'rerank', 'completion'], - configurations: { - api_key: { - default_value: null, - description: `API Key for the provider you're connecting to.`, - label: 'API Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: 'Minimize the number of rate limit errors.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - }, - }, - { - service: 'elastic', - name: 'Elastic', - task_types: ['sparse_embedding'], - configurations: { - 'rate_limit.requests_per_minute': { - default_value: null, - description: 'Minimize the number of rate limit errors.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - model_id: { - default_value: null, - description: 'The name of the model to use for the inference task.', - label: 'Model ID', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - max_input_tokens: { - default_value: null, - description: 'Allows you to specify the maximum number of tokens per input.', - label: 'Maximum Input Tokens', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - }, - }, - { - service: 'watsonxai', - name: 'IBM Watsonx', - task_types: ['text_embedding'], - configurations: { - project_id: { - default_value: null, - description: '', - label: 'Project ID', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - model_id: { - default_value: null, - description: 'The name of the model to use for the inference task.', - label: 'Model ID', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - api_version: { - default_value: null, - description: 'The IBM Watsonx API version ID to use.', - label: 'API Version', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - max_input_tokens: { - default_value: null, - description: 'Allows you to specify the maximum number of tokens per input.', - label: 'Maximum Input Tokens', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - url: { - default_value: null, - description: '', - label: 'URL', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - { - service: 'azureaistudio', - name: 'Azure AI Studio', - task_types: ['text_embedding', 'completion'], - configurations: { - endpoint_type: { - default_value: null, - description: 'Specifies the type of endpoint that is used in your model deployment.', - label: 'Endpoint Type', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - provider: { - default_value: null, - description: 'The model provider for your deployment.', - label: 'Provider', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - api_key: { - default_value: null, - description: `API Key for the provider you're connecting to.`, - label: 'API Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: 'Minimize the number of rate limit errors.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - target: { - default_value: null, - description: 'The target URL of your Azure AI Studio model deployment.', - label: 'Target', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - { - service: 'hugging_face', - name: 'Hugging Face', - task_types: ['text_embedding', 'sparse_embedding'], - configurations: { - api_key: { - default_value: null, - description: `API Key for the provider you're connecting to.`, - label: 'API Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: 'Minimize the number of rate limit errors.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - url: { - default_value: 'https://api.openai.com/v1/embeddings', - description: 'The URL endpoint to use for the requests.', - label: 'URL', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - { - service: 'amazonbedrock', - name: 'Amazon Bedrock', - task_types: ['text_embedding', 'completion'], - configurations: { - secret_key: { - default_value: null, - description: 'A valid AWS secret key that is paired with the access_key.', - label: 'Secret Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - provider: { - default_value: null, - description: 'The model provider for your deployment.', - label: 'Provider', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - access_key: { - default_value: null, - description: 'A valid AWS access key that has permissions to use Amazon Bedrock.', - label: 'Access Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - model: { - default_value: null, - description: - 'The base model ID or an ARN to a custom model based on a foundational model.', - label: 'Model', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: - 'By default, the amazonbedrock service sets the number of requests allowed per minute to 240.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - region: { - default_value: null, - description: 'The region that your model or ARN is deployed in.', - label: 'Region', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - { - service: 'anthropic', - name: 'Anthropic', - task_types: ['completion'], - configurations: { - api_key: { - default_value: null, - description: `API Key for the provider you're connecting to.`, - label: 'API Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: - 'By default, the anthropic service sets the number of requests allowed per minute to 50.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - model_id: { - default_value: null, - description: 'The name of the model to use for the inference task.', - label: 'Model ID', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - { - service: 'googleaistudio', - name: 'Google AI Studio', - task_types: ['text_embedding', 'completion'], - configurations: { - api_key: { - default_value: null, - description: `API Key for the provider you're connecting to.`, - label: 'API Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: 'Minimize the number of rate limit errors.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - model_id: { - default_value: null, - description: "ID of the LLM you're using.", - label: 'Model ID', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - { - service: 'elasticsearch', - name: 'Elasticsearch', - task_types: ['text_embedding', 'sparse_embedding', 'rerank'], - configurations: { - num_allocations: { - default_value: 1, - description: - 'The total number of allocations this model is assigned across machine learning nodes.', - label: 'Number Allocations', - required: true, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - num_threads: { - default_value: 2, - description: - 'Sets the number of threads used by each model allocation during inference.', - label: 'Number Threads', - required: true, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - model_id: { - default_value: '.multilingual-e5-small', - description: 'The name of the model to use for the inference task.', - label: 'Model ID', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - { - service: 'openai', - name: 'OpenAI', - task_types: ['text_embedding', 'completion'], - configurations: { - api_key: { - default_value: null, - description: - 'The OpenAI API authentication key. For more details about generating OpenAI API keys, refer to the https://platform.openai.com/account/api-keys.', - label: 'API Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - organization_id: { - default_value: null, - description: 'The unique identifier of your organization.', - label: 'Organization ID', - required: false, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: - 'Default number of requests allowed per minute. For text_embedding is 3000. For completion is 500.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - model_id: { - default_value: null, - description: 'The name of the model to use for the inference task.', - label: 'Model ID', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - url: { - default_value: 'https://api.openai.com/v1/chat/completions', - description: - 'The OpenAI API endpoint URL. For more information on the URL, refer to the https://platform.openai.com/docs/api-reference.', - label: 'URL', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - { - service: 'azureopenai', - name: 'Azure OpenAI', - task_types: ['text_embedding', 'completion'], - configurations: { - api_key: { - default_value: null, - description: `API Key for the provider you're connecting to.`, - label: 'API Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - entra_id: { - default_value: null, - description: 'You must provide either an API key or an Entra ID.', - label: 'Entra ID', - required: false, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: - 'The azureopenai service sets a default number of requests allowed per minute depending on the task type.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - deployment_id: { - default_value: null, - description: 'The deployment name of your deployed models.', - label: 'Deployment ID', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - resource_name: { - default_value: null, - description: 'The name of your Azure OpenAI resource.', - label: 'Resource Name', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - api_version: { - default_value: null, - description: 'The Azure API version ID to use.', - label: 'API Version', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - { - service: 'mistral', - name: 'Mistral', - task_types: ['text_embedding'], - configurations: { - api_key: { - default_value: null, - description: `API Key for the provider you're connecting to.`, - label: 'API Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - model: { - default_value: null, - description: - 'Refer to the Mistral models documentation for the list of available text embedding models.', - label: 'Model', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: 'Minimize the number of rate limit errors.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - max_input_tokens: { - default_value: null, - description: 'Allows you to specify the maximum number of tokens per input.', - label: 'Maximum Input Tokens', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - }, - }, - { - service: 'googlevertexai', - name: 'Google Vertex AI', - task_types: ['text_embedding', 'rerank'], - configurations: { - service_account_json: { - default_value: null, - description: "API Key for the provider you're connecting to.", - label: 'Credentials JSON', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - project_id: { - default_value: null, - description: - 'The GCP Project ID which has Vertex AI API(s) enabled. For more information on the URL, refer to the {geminiVertexAIDocs}.', - label: 'GCP Project', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - location: { - default_value: null, - description: - 'Please provide the GCP region where the Vertex AI API(s) is enabled. For more information, refer to the {geminiVertexAIDocs}.', - label: 'GCP Region', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: 'Minimize the number of rate limit errors.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - model_id: { - default_value: null, - description: `ID of the LLM you're using.`, - label: 'Model ID', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - { - service: 'alibabacloud-ai-search', - name: 'AlibabaCloud AI Search', - task_types: ['text_embedding', 'sparse_embedding', 'rerank', 'completion'], - configurations: { - workspace: { - default_value: null, - description: 'The name of the workspace used for the {infer} task.', - label: 'Workspace', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - api_key: { - default_value: null, - description: `A valid API key for the AlibabaCloud AI Search API.`, - label: 'API Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - service_id: { - default_value: null, - description: 'The name of the model service to use for the {infer} task.', - label: 'Project ID', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - host: { - default_value: null, - description: - 'The name of the host address used for the {infer} task. You can find the host address at https://opensearch.console.aliyun.com/cn-shanghai/rag/api-key[ the API keys section] of the documentation.', - label: 'Host', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: 'Minimize the number of rate limit errors.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - http_schema: { - default_value: null, - description: '', - label: 'HTTP Schema', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - ]; - core.elasticsearch.client.asInternalUser.transport.request.mockResolvedValue(mockResult); - - getInferenceServicesRoute(router); - - const [config, handler] = router.get.mock.calls[0]; - expect(config.path).toMatchInlineSnapshot(`"/internal/stack_connectors/_inference/_services"`); - - const mockResponse = httpServerMock.createResponseFactory(); - const mockRequest = httpServerMock.createKibanaRequest(); - await handler({ core }, mockRequest, mockResponse); - - expect(mockResponse.ok).toHaveBeenCalledWith({ - body: mockResult, - }); - }); -}); diff --git a/x-pack/platform/plugins/shared/stack_connectors/server/routes/get_inference_services.ts b/x-pack/platform/plugins/shared/stack_connectors/server/routes/get_inference_services.ts deleted file mode 100644 index 3c4a1b3aa1a35..0000000000000 --- a/x-pack/platform/plugins/shared/stack_connectors/server/routes/get_inference_services.ts +++ /dev/null @@ -1,703 +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 { - IRouter, - RequestHandlerContext, - KibanaRequest, - IKibanaResponse, - KibanaResponseFactory, -} from '@kbn/core/server'; -import { FieldType } from '../../common/dynamic_config/types'; -import { InferenceProvider } from '../../common/inference/types'; -import { INTERNAL_BASE_STACK_CONNECTORS_API_PATH } from '../../common'; - -export const getInferenceServicesRoute = (router: IRouter) => { - router.get( - { - path: `${INTERNAL_BASE_STACK_CONNECTORS_API_PATH}/_inference/_services`, - security: { - authz: { - enabled: false, - reason: - 'This route is opted out of authorization as it relies on ES authorization instead.', - }, - }, - options: { - access: 'internal', - }, - validate: false, - }, - handler - ); - - async function handler( - ctx: RequestHandlerContext, - req: KibanaRequest, - res: KibanaResponseFactory - ): Promise { - // Temporarily hard-coding the response until the real implementation is ready with the updated response - https://github.com/elastic/ml-team/issues/1428 - - // const esClient = (await ctx.core).elasticsearch.client.asInternalUser; - - // // eslint-disable-next-line @typescript-eslint/no-explicit-any - // const response = await esClient.transport.request({ - // method: 'GET', - // path: `/_inference/_services`, - // }); - - const response: InferenceProvider[] = [ - { - service: 'cohere', - name: 'Cohere', - task_types: ['text_embedding', 'rerank', 'completion'], - configurations: { - api_key: { - default_value: null, - description: `API Key for the provider you're connecting to.`, - label: 'API Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: 'Minimize the number of rate limit errors.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - }, - }, - { - service: 'elastic', - name: 'Elastic', - task_types: ['sparse_embedding'], - configurations: { - 'rate_limit.requests_per_minute': { - default_value: null, - description: 'Minimize the number of rate limit errors.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - model_id: { - default_value: null, - description: 'The name of the model to use for the inference task.', - label: 'Model ID', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - max_input_tokens: { - default_value: null, - description: 'Allows you to specify the maximum number of tokens per input.', - label: 'Maximum Input Tokens', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - }, - }, - { - service: 'watsonxai', - name: 'IBM Watsonx', - task_types: ['text_embedding'], - configurations: { - project_id: { - default_value: null, - description: '', - label: 'Project ID', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - model_id: { - default_value: null, - description: 'The name of the model to use for the inference task.', - label: 'Model ID', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - api_version: { - default_value: null, - description: 'The IBM Watsonx API version ID to use.', - label: 'API Version', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - max_input_tokens: { - default_value: null, - description: 'Allows you to specify the maximum number of tokens per input.', - label: 'Maximum Input Tokens', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - url: { - default_value: null, - description: '', - label: 'URL', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - { - service: 'azureaistudio', - name: 'Azure AI Studio', - task_types: ['text_embedding', 'completion'], - configurations: { - endpoint_type: { - default_value: null, - description: 'Specifies the type of endpoint that is used in your model deployment.', - label: 'Endpoint Type', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - provider: { - default_value: null, - description: 'The model provider for your deployment.', - label: 'Provider', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - api_key: { - default_value: null, - description: `API Key for the provider you're connecting to.`, - label: 'API Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: 'Minimize the number of rate limit errors.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - target: { - default_value: null, - description: 'The target URL of your Azure AI Studio model deployment.', - label: 'Target', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - { - service: 'hugging_face', - name: 'Hugging Face', - task_types: ['text_embedding', 'sparse_embedding'], - configurations: { - api_key: { - default_value: null, - description: `API Key for the provider you're connecting to.`, - label: 'API Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: 'Minimize the number of rate limit errors.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - url: { - default_value: 'https://api.openai.com/v1/embeddings', - description: 'The URL endpoint to use for the requests.', - label: 'URL', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - { - service: 'amazonbedrock', - name: 'Amazon Bedrock', - task_types: ['text_embedding', 'completion'], - configurations: { - secret_key: { - default_value: null, - description: 'A valid AWS secret key that is paired with the access_key.', - label: 'Secret Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - provider: { - default_value: null, - description: 'The model provider for your deployment.', - label: 'Provider', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - access_key: { - default_value: null, - description: 'A valid AWS access key that has permissions to use Amazon Bedrock.', - label: 'Access Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - model: { - default_value: null, - description: - 'The base model ID or an ARN to a custom model based on a foundational model.', - label: 'Model', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: - 'By default, the amazonbedrock service sets the number of requests allowed per minute to 240.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - region: { - default_value: null, - description: 'The region that your model or ARN is deployed in.', - label: 'Region', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - { - service: 'anthropic', - name: 'Anthropic', - task_types: ['completion'], - configurations: { - api_key: { - default_value: null, - description: `API Key for the provider you're connecting to.`, - label: 'API Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: - 'By default, the anthropic service sets the number of requests allowed per minute to 50.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - model_id: { - default_value: null, - description: 'The name of the model to use for the inference task.', - label: 'Model ID', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - { - service: 'googleaistudio', - name: 'Google AI Studio', - task_types: ['text_embedding', 'completion'], - configurations: { - api_key: { - default_value: null, - description: `API Key for the provider you're connecting to.`, - label: 'API Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: 'Minimize the number of rate limit errors.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - model_id: { - default_value: null, - description: "ID of the LLM you're using.", - label: 'Model ID', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - { - service: 'elasticsearch', - name: 'Elasticsearch', - task_types: ['text_embedding', 'sparse_embedding', 'rerank'], - configurations: { - num_allocations: { - default_value: 1, - description: - 'The total number of allocations this model is assigned across machine learning nodes.', - label: 'Number Allocations', - required: true, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - num_threads: { - default_value: 2, - description: - 'Sets the number of threads used by each model allocation during inference.', - label: 'Number Threads', - required: true, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - model_id: { - default_value: '.multilingual-e5-small', - description: 'The name of the model to use for the inference task.', - label: 'Model ID', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - { - service: 'openai', - name: 'OpenAI', - task_types: ['text_embedding', 'completion'], - configurations: { - api_key: { - default_value: null, - description: - 'The OpenAI API authentication key. For more details about generating OpenAI API keys, refer to the https://platform.openai.com/account/api-keys.', - label: 'API Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - organization_id: { - default_value: null, - description: 'The unique identifier of your organization.', - label: 'Organization ID', - required: false, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: - 'Default number of requests allowed per minute. For text_embedding is 3000. For completion is 500.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - model_id: { - default_value: null, - description: 'The name of the model to use for the inference task.', - label: 'Model ID', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - url: { - default_value: 'https://api.openai.com/v1/chat/completions', - description: - 'The OpenAI API endpoint URL. For more information on the URL, refer to the https://platform.openai.com/docs/api-reference.', - label: 'URL', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - { - service: 'azureopenai', - name: 'Azure OpenAI', - task_types: ['text_embedding', 'completion'], - configurations: { - api_key: { - default_value: null, - description: `API Key for the provider you're connecting to.`, - label: 'API Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - entra_id: { - default_value: null, - description: 'You must provide either an API key or an Entra ID.', - label: 'Entra ID', - required: false, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: - 'The azureopenai service sets a default number of requests allowed per minute depending on the task type.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - deployment_id: { - default_value: null, - description: 'The deployment name of your deployed models.', - label: 'Deployment ID', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - resource_name: { - default_value: null, - description: 'The name of your Azure OpenAI resource.', - label: 'Resource Name', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - api_version: { - default_value: null, - description: 'The Azure API version ID to use.', - label: 'API Version', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - { - service: 'mistral', - name: 'Mistral', - task_types: ['text_embedding'], - configurations: { - api_key: { - default_value: null, - description: `API Key for the provider you're connecting to.`, - label: 'API Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - model: { - default_value: null, - description: - 'Refer to the Mistral models documentation for the list of available text embedding models.', - label: 'Model', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: 'Minimize the number of rate limit errors.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - max_input_tokens: { - default_value: null, - description: 'Allows you to specify the maximum number of tokens per input.', - label: 'Maximum Input Tokens', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - }, - }, - { - service: 'googlevertexai', - name: 'Google Vertex AI', - task_types: ['text_embedding', 'rerank'], - configurations: { - service_account_json: { - default_value: null, - description: "API Key for the provider you're connecting to.", - label: 'Credentials JSON', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - project_id: { - default_value: null, - description: - 'The GCP Project ID which has Vertex AI API(s) enabled. For more information on the URL, refer to the {geminiVertexAIDocs}.', - label: 'GCP Project', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - location: { - default_value: null, - description: - 'Please provide the GCP region where the Vertex AI API(s) is enabled. For more information, refer to the {geminiVertexAIDocs}.', - label: 'GCP Region', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: 'Minimize the number of rate limit errors.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - model_id: { - default_value: null, - description: `ID of the LLM you're using.`, - label: 'Model ID', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - { - service: 'alibabacloud-ai-search', - name: 'AlibabaCloud AI Search', - task_types: ['text_embedding', 'sparse_embedding', 'rerank', 'completion'], - configurations: { - workspace: { - default_value: null, - description: 'The name of the workspace used for the {infer} task.', - label: 'Workspace', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - api_key: { - default_value: null, - description: `A valid API key for the AlibabaCloud AI Search API.`, - label: 'API Key', - required: true, - sensitive: true, - updatable: true, - type: FieldType.STRING, - }, - service_id: { - default_value: null, - description: 'The name of the model service to use for the {infer} task.', - label: 'Project ID', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - host: { - default_value: null, - description: - 'The name of the host address used for the {infer} task. You can find the host address at https://opensearch.console.aliyun.com/cn-shanghai/rag/api-key[ the API keys section] of the documentation.', - label: 'Host', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - 'rate_limit.requests_per_minute': { - default_value: null, - description: 'Minimize the number of rate limit errors.', - label: 'Rate Limit', - required: false, - sensitive: false, - updatable: true, - type: FieldType.INTEGER, - }, - http_schema: { - default_value: null, - description: '', - label: 'HTTP Schema', - required: true, - sensitive: false, - updatable: true, - type: FieldType.STRING, - }, - }, - }, - ]; - - // TODO: replace transformative map to the real type coming from the _inference/_service - return res.ok({ - body: response, - }); - } -}; diff --git a/x-pack/platform/plugins/shared/stack_connectors/server/routes/index.ts b/x-pack/platform/plugins/shared/stack_connectors/server/routes/index.ts index e64995e1a50ef..cd9857b2168ed 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/server/routes/index.ts +++ b/x-pack/platform/plugins/shared/stack_connectors/server/routes/index.ts @@ -7,4 +7,3 @@ export { getWellKnownEmailServiceRoute } from './get_well_known_email_service'; export { validSlackApiChannelsRoute } from './valid_slack_api_channels'; -export { getInferenceServicesRoute } from './get_inference_services'; diff --git a/x-pack/platform/plugins/shared/stack_connectors/tsconfig.json b/x-pack/platform/plugins/shared/stack_connectors/tsconfig.json index 222fca24ad5fa..4b7b5cdad8bb5 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/tsconfig.json +++ b/x-pack/platform/plugins/shared/stack_connectors/tsconfig.json @@ -42,8 +42,8 @@ "@kbn/utility-types", "@kbn/task-manager-plugin", "@kbn/alerting-types", - "@kbn/core-notifications-browser", "@kbn/response-ops-rule-form", + "@kbn/inference-endpoint-ui-common", ], "exclude": [ "target/**/*", diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/lib/capabilities.ts b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/lib/capabilities.ts index 6d12ffafe0ef8..92e1962670792 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/lib/capabilities.ts +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/lib/capabilities.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { SubFeature } from '@kbn/actions-plugin/common'; import { RuleType } from '../../types'; import { InitialRule } from '../sections/rule_form/rule_reducer'; @@ -18,8 +19,9 @@ type Capabilities = Record; export const hasShowActionsCapability = (capabilities: Capabilities) => capabilities?.actions?.show; export const hasSaveActionsCapability = (capabilities: Capabilities) => capabilities?.actions?.save; -export const hasExecuteActionsCapability = (capabilities: Capabilities, actionTypeId?: string) => - actionTypeId === '.sentinelone' ? capabilities?.actions?.save : capabilities?.actions?.execute; +export const hasExecuteActionsCapability = (capabilities: Capabilities, subFeature?: SubFeature) => + subFeature ? capabilities?.actions[`${subFeature}Execute`] : capabilities?.actions?.execute; + export const hasDeleteActionsCapability = (capabilities: Capabilities) => capabilities?.actions?.delete; diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/action_connector_form/edit_connector_flyout/header.tsx b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/action_connector_form/edit_connector_flyout/header.tsx index 691e7d1ff87b5..19c2fc81b72e3 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/action_connector_form/edit_connector_flyout/header.tsx +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/action_connector_form/edit_connector_flyout/header.tsx @@ -22,6 +22,7 @@ import { } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; +import { SubFeature } from '@kbn/actions-plugin/common'; import { TECH_PREVIEW_DESCRIPTION, TECH_PREVIEW_LABEL } from '../../translations'; import { EditConnectorTabs } from '../../../../types'; import { useKibana } from '../../../../common/lib/kibana'; @@ -29,9 +30,9 @@ import { hasExecuteActionsCapability } from '../../../lib/capabilities'; const FlyoutHeaderComponent: React.FC<{ isExperimental?: boolean; + subFeature?: SubFeature; isPreconfigured: boolean; connectorName: string; - connectorTypeId: string; connectorTypeDesc: string; selectedTab: EditConnectorTabs; setTab: (nextPage: EditConnectorTabs) => void; @@ -39,9 +40,9 @@ const FlyoutHeaderComponent: React.FC<{ }> = ({ icon, isExperimental = false, + subFeature, isPreconfigured, connectorName, - connectorTypeId, connectorTypeDesc, selectedTab, setTab, @@ -51,7 +52,7 @@ const FlyoutHeaderComponent: React.FC<{ } = useKibana().services; const { euiTheme } = useEuiTheme(); - const canExecute = hasExecuteActionsCapability(capabilities, connectorTypeId); + const canExecute = hasExecuteActionsCapability(capabilities, subFeature); const setConfigurationTab = useCallback(() => { setTab(EditConnectorTabs.Configuration); diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/action_connector_form/edit_connector_flyout/index.tsx b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/action_connector_form/edit_connector_flyout/index.tsx index 1188f06a87d56..09ac4c1827022 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/action_connector_form/edit_connector_flyout/index.tsx +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/action_connector_form/edit_connector_flyout/index.tsx @@ -346,12 +346,12 @@ const EditConnectorFlyoutComponent: React.FC = ({ {selectedTab === EditConnectorTabs.Configuration && renderConfigurationTab()} diff --git a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.tsx b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.tsx index 19fe53e4ee88c..b9ca9a4bd8283 100644 --- a/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.tsx +++ b/x-pack/platform/plugins/shared/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.tsx @@ -339,9 +339,12 @@ const ActionsConnectorsList = ({ void }; const handleSubmitNewEntryClick = async () => { - let entries: Array & { title: string }> = []; const text = await files[0].text(); const elements = text.split('\n').filter(Boolean); try { - entries = elements.map((el) => JSON.parse(el)); + const entries = elements.map( + (el) => + JSON.parse(el) as Omit & { + title: string; + } + ); + await mutateAsync({ entries }); } catch (_) { toasts.addError( new Error( @@ -74,8 +79,7 @@ export function KnowledgeBaseBulkImportFlyout({ onClose }: { onClose: () => void } ); } - - mutateAsync({ entries }).then(onClose); + onClose(); }; return ( diff --git a/x-pack/solutions/observability/plugins/observability_onboarding/public/application/quickstart_flows/auto_detect/auto_detect_panel.tsx b/x-pack/solutions/observability/plugins/observability_onboarding/public/application/quickstart_flows/auto_detect/auto_detect_panel.tsx index 420a788bd5f2a..47282ba9b8d69 100644 --- a/x-pack/solutions/observability/plugins/observability_onboarding/public/application/quickstart_flows/auto_detect/auto_detect_panel.tsx +++ b/x-pack/solutions/observability/plugins/observability_onboarding/public/application/quickstart_flows/auto_detect/auto_detect_panel.tsx @@ -183,6 +183,12 @@ export const AutoDetectPanel: FunctionComponent = () => { href: assetDetailsLocator.getRedirectUrl({ assetType: 'host', assetId: integration.metadata?.hostname, + assetDetails: { + dateRange: { + from: 'now-15m', + to: 'now', + }, + }, }), }, ] diff --git a/x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/state/api/alerts.ts b/x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/state/api/alerts.ts index 0157a0fb34673..d06135d57dda3 100644 --- a/x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/state/api/alerts.ts +++ b/x-pack/solutions/observability/plugins/uptime/public/legacy_uptime/state/api/alerts.ts @@ -172,6 +172,7 @@ export const fetchActionTypes = async (): Promise => { minimum_license_required: minimumLicenseRequired, supported_feature_ids: supportedFeatureIds, is_system_action_type: isSystemActionType, + sub_feature: subFeature, ...res }: AsApiContract) => ({ ...res, @@ -180,6 +181,7 @@ export const fetchActionTypes = async (): Promise => { minimumLicenseRequired, supportedFeatureIds, isSystemActionType, + subFeature, }) ); }; diff --git a/x-pack/solutions/search/plugins/enterprise_search/public/applications/shared/layout/base_nav.tsx b/x-pack/solutions/search/plugins/enterprise_search/public/applications/shared/layout/base_nav.tsx index 7fe1ba1e017c6..52cd6fe664adc 100644 --- a/x-pack/solutions/search/plugins/enterprise_search/public/applications/shared/layout/base_nav.tsx +++ b/x-pack/solutions/search/plugins/enterprise_search/public/applications/shared/layout/base_nav.tsx @@ -121,6 +121,14 @@ export const buildBaseClassicNavItems = (): ClassicNavItem[] => { }, id: 'inference_endpoints', }, + { + 'data-test-subj': 'searchSideNav-Synonyms', + deepLink: { + link: 'searchSynonyms:synonyms', + shouldShowActiveForSubroutes: true, + }, + id: 'synonyms', + }, ], name: i18n.translate('xpack.enterpriseSearch.nav.relevanceTitle', { defaultMessage: 'Relevance', diff --git a/x-pack/solutions/search/plugins/enterprise_search/public/navigation_tree.ts b/x-pack/solutions/search/plugins/enterprise_search/public/navigation_tree.ts index 1485ecd8536f3..3525a546c0676 100644 --- a/x-pack/solutions/search/plugins/enterprise_search/public/navigation_tree.ts +++ b/x-pack/solutions/search/plugins/enterprise_search/public/navigation_tree.ts @@ -207,7 +207,10 @@ export const getNavigationTreeDefinition = ({ }), }, { - children: [{ link: 'searchInferenceEndpoints:inferenceEndpoints' }], + children: [ + { link: 'searchInferenceEndpoints:inferenceEndpoints' }, + { link: 'searchSynonyms:synonyms' }, + ], id: 'relevance', title: i18n.translate('xpack.enterpriseSearch.searchNav.relevance', { defaultMessage: 'Relevance', diff --git a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/add_inference_endpoints/add_inference_flyout_wrapper.test.tsx b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/add_inference_endpoints/add_inference_flyout_wrapper.test.tsx index e21ea0d95eccb..3031bbe857656 100644 --- a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/add_inference_endpoints/add_inference_flyout_wrapper.test.tsx +++ b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/add_inference_endpoints/add_inference_flyout_wrapper.test.tsx @@ -22,7 +22,7 @@ jest.mock('../../hooks/use_add_endpoint', () => ({ }), })); -jest.mock('../../hooks/use_providers', () => ({ +jest.mock('@kbn/inference-endpoint-ui-common/src/hooks/use_providers', () => ({ useProviders: jest.fn(() => ({ data: mockProviders, })), diff --git a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/add_inference_endpoints/inference_form.tsx b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/add_inference_endpoints/inference_form.tsx index 4ed1a1090edb3..0972a6b5f2fe2 100644 --- a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/add_inference_endpoints/inference_form.tsx +++ b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/add_inference_endpoints/inference_form.tsx @@ -9,15 +9,19 @@ import { Form, useForm } from '@kbn/es-ui-shared-plugin/static/forms/hook_form_l import React, { useCallback, useState } from 'react'; import { InferenceServiceFormFields } from '@kbn/inference-endpoint-ui-common'; import { EuiButton, EuiFlexGroup, EuiFlexItem, EuiSpacer } from '@elastic/eui'; -import { useProviders } from '../../hooks/use_providers'; import * as i18n from './translations'; import { useAddEndpoint } from '../../hooks/use_add_endpoint'; import { InferenceEndpoint } from '../../types'; +import { useKibana } from '../../hooks/use_kibana'; interface InferenceFormProps { onSubmitSuccess: (state: boolean) => void; } export const InferenceForm: React.FC = ({ onSubmitSuccess }) => { + const { + http, + notifications: { toasts }, + } = useKibana().services; const [isLoading, setIsLoading] = useState(false); const onSuccess = useCallback(() => { setIsLoading(false); @@ -30,7 +34,6 @@ export const InferenceForm: React.FC = ({ onSubmitSuccess }) () => onSuccess(), () => onError() ); - const { data: providers } = useProviders(); const { form } = useForm(); const handleSubmit = useCallback(async () => { setIsLoading(true); @@ -45,9 +48,9 @@ export const InferenceForm: React.FC = ({ onSubmitSuccess }) } }, [addEndpoint, form]); - return providers ? ( + return (
    - + @@ -65,5 +68,5 @@ export const InferenceForm: React.FC = ({ onSubmitSuccess }) - ) : null; + ); }; diff --git a/x-pack/solutions/search/plugins/search_inference_endpoints/public/hooks/translations.ts b/x-pack/solutions/search/plugins/search_inference_endpoints/public/hooks/translations.ts index d7a9680dd1667..d0b9eb66cdd93 100644 --- a/x-pack/solutions/search/plugins/search_inference_endpoints/public/hooks/translations.ts +++ b/x-pack/solutions/search/plugins/search_inference_endpoints/public/hooks/translations.ts @@ -28,10 +28,3 @@ export const ENDPOINT_CREATION_FAILED = i18n.translate( defaultMessage: 'Endpoint creation failed', } ); - -export const GET_PROVIDERS_FAILED = i18n.translate( - 'xpack.searchInferenceEndpoints.addEndpoint.unableToFindProvidersQueryMessage', - { - defaultMessage: 'Unable to find providers', - } -); diff --git a/x-pack/solutions/search/plugins/search_inference_endpoints/tsconfig.json b/x-pack/solutions/search/plugins/search_inference_endpoints/tsconfig.json index 7b8da3db70c9e..8909c20100eed 100644 --- a/x-pack/solutions/search/plugins/search_inference_endpoints/tsconfig.json +++ b/x-pack/solutions/search/plugins/search_inference_endpoints/tsconfig.json @@ -39,7 +39,6 @@ "@kbn/inference-endpoint-ui-common", "@kbn/es-ui-shared-plugin", "@kbn/search-connectors", - "@kbn/core-http-browser", "@kbn/safer-lodash-set" ], "exclude": [ diff --git a/x-pack/solutions/search/plugins/search_playground/common/jest.config.js b/x-pack/solutions/search/plugins/search_playground/common/jest.config.js new file mode 100644 index 0000000000000..22e0a7cc2bb45 --- /dev/null +++ b/x-pack/solutions/search/plugins/search_playground/common/jest.config.js @@ -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. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../../../../..', + roots: ['/x-pack/solutions/search/plugins/search_playground/common'], + coverageDirectory: + '/target/kibana-coverage/jest/x-pack/solutions/search/plugins/search_playground/common', + coverageReporters: ['text', 'html'], + collectCoverageFrom: [ + '/x-pack/solutions/search/plugins/search_playground/{common}/**/*.{ts,tsx}', + ], +}; diff --git a/x-pack/solutions/search/plugins/search_playground/public/hooks/use_ai_assist_chat.ts b/x-pack/solutions/search/plugins/search_playground/public/hooks/use_ai_assist_chat.ts index d046b9425c60a..904be9b2fae45 100644 --- a/x-pack/solutions/search/plugins/search_playground/public/hooks/use_ai_assist_chat.ts +++ b/x-pack/solutions/search/plugins/search_playground/public/hooks/use_ai_assist_chat.ts @@ -59,7 +59,6 @@ const getStreamedResponse = async ( role: MessageRole.system, createdAt: new Date(), }; - // concating the last question and error message with existing chat history mutate([...previousMessages, chatRequest.messages.slice(-1)[0], systemErrorMessage], false); }, onUpdate(merged) { diff --git a/x-pack/solutions/search/plugins/search_playground/jest.config.js b/x-pack/solutions/search/plugins/search_playground/public/jest.config.js similarity index 89% rename from x-pack/solutions/search/plugins/search_playground/jest.config.js rename to x-pack/solutions/search/plugins/search_playground/public/jest.config.js index 070ff6e85ce97..fdefd6b88c4f6 100644 --- a/x-pack/solutions/search/plugins/search_playground/jest.config.js +++ b/x-pack/solutions/search/plugins/search_playground/public/jest.config.js @@ -7,12 +7,12 @@ module.exports = { preset: '@kbn/test', - rootDir: '../../../../..', - roots: ['/x-pack/solutions/search/plugins/search_playground'], + rootDir: '../../../../../..', + roots: ['/x-pack/solutions/search/plugins/search_playground/public'], coverageDirectory: '/target/kibana-coverage/jest/x-pack/solutions/search/plugins/search_playground', coverageReporters: ['text', 'html'], collectCoverageFrom: [ - '/x-pack/solutions/search/plugins/search_playground/{public,server}/**/*.{ts,tsx}', + '/x-pack/solutions/search/plugins/search_playground/{public}/**/*.{ts,tsx}', ], }; diff --git a/x-pack/solutions/search/plugins/search_playground/public/utils/api.ts b/x-pack/solutions/search/plugins/search_playground/public/utils/api.ts index bdcc494c9d08c..2b21063b7c4b7 100644 --- a/x-pack/solutions/search/plugins/search_playground/public/utils/api.ts +++ b/x-pack/solutions/search/plugins/search_playground/public/utils/api.ts @@ -61,6 +61,7 @@ export async function fetchApi({ return await parseDataStream({ reader, abortControllerRef: abortController != null ? { current: abortController() } : undefined, + handleFailure, update: onUpdate, }); } @@ -81,6 +82,7 @@ export async function parseDataStream({ reader, abortControllerRef, update, + handleFailure, generateId = uuidv4, getCurrentDate = () => new Date(), }: { @@ -89,6 +91,7 @@ export async function parseDataStream({ current: AbortController | null; }; update: (mergedMessages: Message[]) => void; + handleFailure: (error: string) => void; generateId?: () => string; getCurrentDate?: () => Date; }) { @@ -113,6 +116,9 @@ export async function parseDataStream({ createdAt, }; } + } else if (type === 'error') { + handleFailure(value); + break; } let responseMessage = prefixMap.text; diff --git a/x-pack/solutions/search/plugins/search_playground/server/jest.config.js b/x-pack/solutions/search/plugins/search_playground/server/jest.config.js new file mode 100644 index 0000000000000..1e699b6018cc3 --- /dev/null +++ b/x-pack/solutions/search/plugins/search_playground/server/jest.config.js @@ -0,0 +1,21 @@ +/* + * 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. + */ + +module.exports = { + preset: '@kbn/test/jest_node', + rootDir: '../../../../../..', + roots: ['/x-pack/solutions/search/plugins/search_playground/server'], + coverageDirectory: + '/target/kibana-coverage/jest/x-pack/solutions/search/plugins/search_playground/server', + coverageReporters: ['text', 'html'], + collectCoverageFrom: [ + '/x-pack/solutions/search/plugins/search_playground/server/**/*.{ts,tsx}', + ], + setupFilesAfterEnv: [ + '/x-pack/solutions/search/plugins/search_playground/server/setup.ts', + ], +}; diff --git a/x-pack/solutions/search/plugins/search_playground/server/lib/conversational_chain.test.ts b/x-pack/solutions/search/plugins/search_playground/server/lib/conversational_chain.test.ts index 5a56598e7387b..d8958da6ff112 100644 --- a/x-pack/solutions/search/plugins/search_playground/server/lib/conversational_chain.test.ts +++ b/x-pack/solutions/search/plugins/search_playground/server/lib/conversational_chain.test.ts @@ -14,17 +14,21 @@ import { ConversationalChain, contextLimitCheck } from './conversational_chain'; import { ChatMessage, MessageRole } from '../types'; describe('conversational chain', () => { + beforeEach(() => { + jest.resetAllMocks(); + }); + const createTestChain = async ({ responses, chat, expectedFinalAnswer, expectedDocs, expectedTokens, + expectedErrorMessage, expectedSearchRequest, contentField = { index: 'field', website: 'body_content' }, isChatModel = true, docs, - expectedHasClipped = false, modelLimit, }: { responses: string[]; @@ -32,6 +36,7 @@ describe('conversational chain', () => { expectedFinalAnswer?: string; expectedDocs?: any; expectedTokens?: any; + expectedErrorMessage?: string; expectedSearchRequest?: any; contentField?: Record; isChatModel?: boolean; @@ -39,10 +44,6 @@ describe('conversational chain', () => { expectedHasClipped?: boolean; modelLimit?: number; }) => { - if (expectedHasClipped) { - expect.assertions(1); - } - const searchMock = jest.fn().mockImplementation(() => { return { hits: { @@ -109,7 +110,6 @@ describe('conversational chain', () => { const streamToValue: string[] = await new Promise((resolve, reject) => { const reader = stream.getReader(); - const textDecoder = new TextDecoder(); const chunks: string[] = []; const read = () => { @@ -117,7 +117,7 @@ describe('conversational chain', () => { if (done) { resolve(chunks); } else { - chunks.push(textDecoder.decode(value)); + chunks.push(value); read(); } }, reject); @@ -125,10 +125,11 @@ describe('conversational chain', () => { read(); }); - const textValue = streamToValue - .filter((v) => v[0] === '0') - .reduce((acc, v) => acc + v.replace(/0:"(.*)"\n/, '$1'), ''); - expect(textValue).toEqual(expectedFinalAnswer); + const textValue = + streamToValue + .filter((v) => v[0] === '0') + .reduce((acc, v) => acc + v.replace(/0:"(.*)"\n/, '$1'), '') || ''; + expect(textValue).toEqual(expectedFinalAnswer || ''); const annotations = streamToValue .filter((v) => v[0] === '8') @@ -136,19 +137,19 @@ describe('conversational chain', () => { .map((entry) => JSON.parse(entry)) .reduce((acc, v) => acc.concat(v), []); + const error = + streamToValue + .filter((v) => v[0] === '3') + .reduce((acc, v) => acc + v.replace(/3:"(.*)"\n/, '$1'), '') || ''; + const docValues = annotations.filter((v: { type: string }) => v.type === 'retrieved_docs'); const tokens = annotations.filter((v: { type: string }) => v.type.endsWith('_token_count')); - const hasClipped = !!annotations.some((v: { type: string }) => v.type === 'context_clipped'); expect(docValues).toEqual(expectedDocs); expect(tokens).toEqual(expectedTokens); - expect(hasClipped).toEqual(expectedHasClipped); + if (expectedErrorMessage) expect(error).toEqual(expectedErrorMessage); expect(searchMock.mock.calls[0]).toEqual(expectedSearchRequest); } catch (error) { - if (expectedHasClipped) { - expect(error).toMatchInlineSnapshot(`[ContextLimitError: Context exceeds the model limit]`); - } else { - throw error; - } + throw error; } }; @@ -444,7 +445,7 @@ describe('conversational chain', () => { }); }, 10000); - it('should clip the conversation', async () => { + it('should error the conversation when over model limit', async () => { await createTestChain({ responses: ['rewrite "the" question', 'the final answer'], chat: [ @@ -480,9 +481,30 @@ describe('conversational chain', () => { }, }, ], + expectedDocs: [ + { + documents: [ + { metadata: { _id: '1', _index: 'index' }, pageContent: '' }, + { + metadata: { _id: '1', _index: 'website' }, + pageContent: Array.from({ length: 1000 }, (_, i) => `${i}value\n `).join(' '), + }, + ], + type: 'retrieved_docs', + }, + ], + expectedSearchRequest: [ + { + method: 'POST', + path: '/index,website/_search', + body: { query: { match: { field: 'rewrite "the" question' } }, size: 3 }, + }, + ], + expectedTokens: [], modelLimit: 100, expectedHasClipped: true, isChatModel: false, + expectedErrorMessage: 'Context exceeds the model limit', }); }, 10000); @@ -501,11 +523,9 @@ describe('conversational chain', () => { question: 'This is a test question.', chat_history: 'This is a test chat history.', }; - jest.spyOn(prompt, 'format'); const result = await contextLimitCheck(undefined, prompt)(input); expect(result).toBe(input); - expect(prompt.format).not.toHaveBeenCalled(); }); it('should return the input if within modelLimit', async () => { @@ -514,10 +534,8 @@ describe('conversational chain', () => { question: 'This is a test question.', chat_history: 'This is a test chat history.', }; - jest.spyOn(prompt, 'format'); const result = await contextLimitCheck(10000, prompt)(input); expect(result).toEqual(input); - expect(prompt.format).toHaveBeenCalledWith(input); }); it('should clip context if exceeds modelLimit', async () => { @@ -527,7 +545,6 @@ describe('conversational chain', () => { question: 'This is a test question.', chat_history: 'This is a test chat history.', }; - await expect(contextLimitCheck(33, prompt)(input)).rejects.toMatchInlineSnapshot( `[ContextLimitError: Context exceeds the model limit]` ); diff --git a/x-pack/solutions/search/plugins/search_playground/server/lib/conversational_chain.ts b/x-pack/solutions/search/plugins/search_playground/server/lib/conversational_chain.ts index dcd1f4189bc75..e3e797a3150fc 100644 --- a/x-pack/solutions/search/plugins/search_playground/server/lib/conversational_chain.ts +++ b/x-pack/solutions/search/plugins/search_playground/server/lib/conversational_chain.ts @@ -13,8 +13,10 @@ import { SystemMessagePromptTemplate, } from '@langchain/core/prompts'; import { Runnable, RunnableLambda, RunnableSequence } from '@langchain/core/runnables'; -import { BytesOutputParser, StringOutputParser } from '@langchain/core/output_parsers'; -import { createStreamDataTransformer, experimental_StreamData } from 'ai'; +import { StringOutputParser } from '@langchain/core/output_parsers'; +import { createDataStream, LangChainAdapter } from 'ai'; +import type { DataStreamWriter } from 'ai'; +import type { DataStreamString } from '@ai-sdk/ui-utils'; import { BaseLanguageModel } from '@langchain/core/language_models/base'; import { BaseMessage } from '@langchain/core/messages'; import { HumanMessage, AIMessage } from '@langchain/core/messages'; @@ -112,9 +114,9 @@ export function contextLimitCheck( }; } -export function registerContextTokenCounts(data: experimental_StreamData) { +export function registerContextTokenCounts(data: DataStreamWriter) { return (input: ContextInputs) => { - data.appendMessageAnnotation({ + data.writeMessageAnnotation({ type: 'context_token_count', count: getTokenEstimate(input.context), }); @@ -130,154 +132,159 @@ class ConversationalChainFn { this.options = options; } - async stream(client: AssistClient, msgs: ChatMessage[]) { - const data = new experimental_StreamData(); + async stream( + client: AssistClient, + msgs: ChatMessage[] + ): Promise> { + return createDataStream({ + execute: async (dataStream) => { + const messages = msgs ?? []; + const lcMessages = getMessages(messages); + const previousMessages = lcMessages.slice(0, -1); + const question = lcMessages[lcMessages.length - 1]!.content; + const retrievedDocs: Document[] = []; - const messages = msgs ?? []; - const lcMessages = getMessages(messages); - const previousMessages = lcMessages.slice(0, -1); - const question = lcMessages[lcMessages.length - 1]!.content; - const retrievedDocs: Document[] = []; + let retrievalChain: Runnable = RunnableLambda.from(() => ''); + const chatHistory = getSerialisedMessages(previousMessages); - let retrievalChain: Runnable = RunnableLambda.from(() => ''); - const chatHistory = getSerialisedMessages(previousMessages); + if (this.options.rag) { + const retriever = new ElasticsearchRetriever({ + retriever: this.options.rag.retriever, + index: this.options.rag.index, + client: client.getClient(), + content_field: this.options.rag.content_field, + hit_doc_mapper: this.options.rag.hit_doc_mapper ?? undefined, + k: this.options.rag.size ?? 3, + }); - if (this.options.rag) { - const retriever = new ElasticsearchRetriever({ - retriever: this.options.rag.retriever, - index: this.options.rag.index, - client: client.getClient(), - content_field: this.options.rag.content_field, - hit_doc_mapper: this.options.rag.hit_doc_mapper ?? undefined, - k: this.options.rag.size ?? 3, - }); + retrievalChain = retriever.pipe(buildContext); + } - retrievalChain = retriever.pipe(buildContext); - } - - let standaloneQuestionChain: Runnable = RunnableLambda.from((input) => { - return input.question; - }); - - if (lcMessages.length > 1) { - const questionRewritePromptTemplate = PromptTemplate.fromTemplate( - this.options.questionRewritePrompt - ); - standaloneQuestionChain = RunnableSequence.from([ - { - context: (input) => input.chat_history, - question: (input) => input.question, - }, - questionRewritePromptTemplate, - this.options.model, - new StringOutputParser(), - ]).withConfig({ - metadata: { - type: 'standalone_question', - }, - }); - } + let standaloneQuestionChain: Runnable = RunnableLambda.from((input) => { + return input.question; + }); - const prompt = ChatPromptTemplate.fromMessages([ - SystemMessagePromptTemplate.fromTemplate(this.options.prompt), - ...lcMessages, - ]); + if (lcMessages.length > 1) { + const questionRewritePromptTemplate = PromptTemplate.fromTemplate( + this.options.questionRewritePrompt + ); + standaloneQuestionChain = RunnableSequence.from([ + { + context: (input) => input.chat_history, + question: (input) => input.question, + }, + questionRewritePromptTemplate, + this.options.model, + new StringOutputParser(), + ]).withConfig({ + metadata: { + type: 'standalone_question', + }, + }); + } - const answerChain = RunnableSequence.from([ - { - context: RunnableSequence.from([(input) => input.question, retrievalChain]), - question: (input) => input.question, - }, - RunnableLambda.from((inputs) => { - data.appendMessageAnnotation({ - type: 'search_query', - question: inputs.question, - }); - return inputs; - }), - RunnableLambda.from(contextLimitCheck(this.options?.rag?.inputTokensLimit, prompt)), - RunnableLambda.from(registerContextTokenCounts(data)), - prompt, - this.options.model.withConfig({ metadata: { type: 'question_answer_qa' } }), - ]); + const prompt = ChatPromptTemplate.fromMessages([ + SystemMessagePromptTemplate.fromTemplate(this.options.prompt), + ...lcMessages, + ]); - const conversationalRetrievalQAChain = RunnableSequence.from([ - { - question: standaloneQuestionChain, - chat_history: (input) => input.chat_history, - }, - answerChain, - new BytesOutputParser(), - ]); + const answerChain = RunnableSequence.from([ + { + context: RunnableSequence.from([(input) => input.question, retrievalChain]), + question: (input) => input.question, + }, + RunnableLambda.from((inputs) => { + dataStream.writeMessageAnnotation({ + type: 'search_query', + question: inputs.question, + }); + return inputs; + }), + RunnableLambda.from(contextLimitCheck(this.options?.rag?.inputTokensLimit, prompt)), + RunnableLambda.from(registerContextTokenCounts(dataStream)), + prompt, + this.options.model.withConfig({ metadata: { type: 'question_answer_qa' } }), + ]); - const stream = await conversationalRetrievalQAChain.stream( - { - question, - chat_history: chatHistory, - }, - { - callbacks: [ + const conversationalRetrievalQAChain = RunnableSequence.from([ { - // callback for chat based models (OpenAI) - handleChatModelStart( - llm, - msg: BaseMessage[][], - runId, - parentRunId, - extraParams, - tags, - metadata: Record - ) { - if (metadata?.type === 'question_answer_qa') { - data.appendMessageAnnotation({ - type: 'prompt_token_count', - count: getTokenEstimateFromMessages(msg), - }); - data.appendMessageAnnotation({ - type: 'search_query', - question, - }); - } - }, - // callback for prompt based models (Bedrock uses ActionsClientLlm) - handleLLMStart(llm, input, runId, parentRunId, extraParams, tags, metadata) { - if (metadata?.type === 'question_answer_qa') { - data.appendMessageAnnotation({ - type: 'prompt_token_count', - count: getTokenEstimate(input[0]), - }); - } - }, - handleRetrieverEnd(documents) { - retrievedDocs.push(...documents); - data.appendMessageAnnotation({ - type: 'retrieved_docs', - documents: documents as any, - }); - }, - handleChainEnd(outputs, runId, parentRunId) { - if (outputs?.constructor?.name === 'AIMessageChunk') { - data.appendMessageAnnotation({ - type: 'citations', - documents: getCitations( - outputs.content as string, - 'inline', - retrievedDocs - ) as any, - }); - } + question: standaloneQuestionChain, + chat_history: (input) => input.chat_history, + }, + answerChain, + ]); - // check that main chain (without parent) is finished: - if (parentRunId == null) { - data.close().catch(() => {}); - } - }, + const lcStream = await conversationalRetrievalQAChain.stream( + { + question, + chat_history: chatHistory, }, - ], - } - ); + { + callbacks: [ + { + // callback for chat based models (OpenAI) + handleChatModelStart( + llm, + msg: BaseMessage[][], + runId, + parentRunId, + extraParams, + tags, + metadata: Record + ) { + if (metadata?.type === 'question_answer_qa') { + dataStream.writeMessageAnnotation({ + type: 'prompt_token_count', + count: getTokenEstimateFromMessages(msg), + }); + dataStream.writeMessageAnnotation({ + type: 'search_query', + question, + }); + } + }, + // callback for prompt based models (Bedrock uses ActionsClientLlm) + handleLLMStart(llm, input, runId, parentRunId, extraParams, tags, metadata) { + if (metadata?.type === 'question_answer_qa') { + dataStream.writeMessageAnnotation({ + type: 'prompt_token_count', + count: getTokenEstimate(input[0]), + }); + } + }, + handleRetrieverEnd(documents) { + retrievedDocs.push(...documents); + dataStream.writeMessageAnnotation({ + type: 'retrieved_docs', + documents: documents as any, + }); + }, + handleChainEnd(outputs, runId, parentRunId) { + if (outputs?.constructor?.name === 'AIMessageChunk') { + dataStream.writeMessageAnnotation({ + type: 'citations', + documents: getCitations( + outputs.content as string, + 'inline', + retrievedDocs + ) as any, + }); + } + }, + }, + ], + } + ); - return stream.pipeThrough(createStreamDataTransformer(true)).pipeThrough(data.stream); + return LangChainAdapter.mergeIntoDataStream(lcStream, { dataStream }); + }, + onError: (error: unknown) => { + if (error instanceof Error) { + return error.message; + } + return 'An error occurred while processing the request'; + }, + }); } } diff --git a/x-pack/solutions/search/plugins/search_playground/server/routes.ts b/x-pack/solutions/search/plugins/search_playground/server/routes.ts index 3aca695cc0b08..f229abe46677f 100644 --- a/x-pack/solutions/search/plugins/search_playground/server/routes.ts +++ b/x-pack/solutions/search/plugins/search_playground/server/routes.ts @@ -155,10 +155,8 @@ export function defineRoutes({ questionRewritePrompt, }); - let stream: ReadableStream; - try { - stream = await chain.stream(aiClient, messages); + const stream = await chain.stream(aiClient, messages); analytics.reportEvent(sendMessageEvent.eventType, { connectorType: diff --git a/x-pack/solutions/search/plugins/search_playground/server/setup.ts b/x-pack/solutions/search/plugins/search_playground/server/setup.ts new file mode 100644 index 0000000000000..541018259cc7f --- /dev/null +++ b/x-pack/solutions/search/plugins/search_playground/server/setup.ts @@ -0,0 +1,12 @@ +/* + * 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. + */ + +// webstream-polyfill doesn't fully support the whole spec. This is a workaround to rely on node native streaming support. +// see /kibana/packages/kbn-test/src/jest/setup/setup_test.js +const webStream = jest.requireActual('node:stream/web'); + +Object.assign(global, webStream); diff --git a/x-pack/solutions/search/plugins/search_playground/server/utils/handle_stream_response.test.ts b/x-pack/solutions/search/plugins/search_playground/server/utils/handle_stream_response.test.ts index a4ddf1178e00e..6f6aefdeb1370 100644 --- a/x-pack/solutions/search/plugins/search_playground/server/utils/handle_stream_response.test.ts +++ b/x-pack/solutions/search/plugins/search_playground/server/utils/handle_stream_response.test.ts @@ -47,6 +47,10 @@ describe('handleStreamResponse', () => { }; }); + afterEach(() => { + jest.restoreAllMocks(); + }); + it('should handle stream correctly', async () => { expect.assertions(3); const data = ['Hello', 'World']; @@ -67,32 +71,4 @@ describe('handleStreamResponse', () => { expect(response.ok).toHaveBeenCalled(); expect(logger.error).not.toHaveBeenCalled(); }); - - it('should handle decoding errors', async () => { - expect.assertions(3); - // @ts-ignore - jest.spyOn(global, 'TextDecoder').mockImplementation(() => ({ - decode: jest.fn(() => { - throw new Error('Test error'); - }), - })); - const reader = { - read: jest - .fn() - .mockResolvedValueOnce({ done: false, value: null }) - .mockResolvedValueOnce({ done: true }), - }; - - stream.getReader.mockReturnValue(reader); - - // @ts-ignore - await handleStreamResponse({ stream, request, response, logger, maxTimeoutMs: 0 }); - await new Promise((r) => setTimeout(r, 100)); - - expect(reader.read).toHaveBeenCalledTimes(2); - expect(logger.error).toHaveBeenCalled(); - expect(response.ok).toHaveBeenCalled(); - - jest.restoreAllMocks(); - }); }); diff --git a/x-pack/solutions/search/plugins/search_playground/server/utils/handle_stream_response.ts b/x-pack/solutions/search/plugins/search_playground/server/utils/handle_stream_response.ts index 3f08a698a07f8..b94540584fe2a 100644 --- a/x-pack/solutions/search/plugins/search_playground/server/utils/handle_stream_response.ts +++ b/x-pack/solutions/search/plugins/search_playground/server/utils/handle_stream_response.ts @@ -25,7 +25,6 @@ export const handleStreamResponse = async ({ }) => { const { end, push, responseWithHeaders } = streamFactory(logger, isCloud); const reader = stream.getReader(); - const textDecoder = new TextDecoder(); const abortController = new AbortController(); @@ -38,21 +37,13 @@ export const handleStreamResponse = async ({ async function pushStreamUpdate() { try { - const { done, value }: { done: boolean; value?: Uint8Array } = await reader.read(); + const { done, value }: { done: boolean; value?: string } = await reader.read(); if (done || abortController.signal.aborted) { end(); return; } - let decodedValue; - try { - decodedValue = textDecoder.decode(value); - } catch (e) { - decodedValue = ''; - logger.error(`Could not decode the data: ${e.toString()}`); - } - - push(decodedValue); + if (value) push(value); void pushStreamUpdate(); } catch (error) { diff --git a/x-pack/solutions/search/plugins/search_playground/server/utils/stream_factory.test.ts b/x-pack/solutions/search/plugins/search_playground/server/utils/stream_factory.test.ts index 24447351a3eb1..db9b491c7ae68 100644 --- a/x-pack/solutions/search/plugins/search_playground/server/utils/stream_factory.test.ts +++ b/x-pack/solutions/search/plugins/search_playground/server/utils/stream_factory.test.ts @@ -16,7 +16,7 @@ describe('streamFactory', () => { debug: jest.fn(), } as unknown as Logger; - const { DELIMITER, responseWithHeaders } = streamFactory(logger); + const { DELIMITER, responseWithHeaders, end } = streamFactory(logger); expect(DELIMITER).toBe('\n'); expect(responseWithHeaders.headers).toEqual({ @@ -27,6 +27,7 @@ describe('streamFactory', () => { 'Transfer-Encoding': 'chunked', }); expect(responseWithHeaders.body).toBeInstanceOf(PassThrough); + end(); }); it('should push data to the stream correctly', () => { @@ -35,7 +36,7 @@ describe('streamFactory', () => { debug: jest.fn(), } as unknown as Logger; - const { push, responseWithHeaders } = streamFactory(logger); + const { push, responseWithHeaders, end } = streamFactory(logger); const data = 'test data'; push(data); @@ -47,6 +48,7 @@ describe('streamFactory', () => { responseWithHeaders.body.end(() => { expect(output).toContain(data); + end(); }); }); @@ -56,7 +58,7 @@ describe('streamFactory', () => { debug: jest.fn(), } as unknown as Logger; - const { push, responseWithHeaders } = streamFactory(logger); + const { push, responseWithHeaders, end } = streamFactory(logger); const data = 'short'; push(data); @@ -68,6 +70,7 @@ describe('streamFactory', () => { responseWithHeaders.body.end(() => { expect(output).toContain(data); + end(); }); }); @@ -77,7 +80,7 @@ describe('streamFactory', () => { debug: jest.fn(), } as unknown as Logger; - const { push, responseWithHeaders } = streamFactory(logger); + const { push, responseWithHeaders, end } = streamFactory(logger); // Mock the write method to simulate backpressure const originalWrite = responseWithHeaders.body.write.bind(responseWithHeaders.body); @@ -103,6 +106,7 @@ describe('streamFactory', () => { responseWithHeaders.body.on('end', () => { expect(output).toContain(data); + end(); done(); }); diff --git a/x-pack/solutions/search/plugins/search_synonyms/README.md b/x-pack/solutions/search/plugins/search_synonyms/README.md new file mode 100644 index 0000000000000..7409c829e67e0 --- /dev/null +++ b/x-pack/solutions/search/plugins/search_synonyms/README.md @@ -0,0 +1,3 @@ +# Search Synonyms + +A plugin to manage synonyms in Elasticsearch through Synonyms APIs through Kibana. \ No newline at end of file diff --git a/x-pack/solutions/search/plugins/search_synonyms/common/index.ts b/x-pack/solutions/search/plugins/search_synonyms/common/index.ts new file mode 100644 index 0000000000000..2ab4629a71e7e --- /dev/null +++ b/x-pack/solutions/search/plugins/search_synonyms/common/index.ts @@ -0,0 +1,15 @@ +/* + * 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'; + +export const PLUGIN_ID = 'searchSynonyms'; +export const PLUGIN_NAME = 'Synonyms'; + +export const PLUGIN_TITLE = i18n.translate('xpack.searchSynonyms.pluginTitle', { + defaultMessage: 'Synonyms', +}); diff --git a/x-pack/solutions/search/plugins/search_synonyms/common/types.ts b/x-pack/solutions/search/plugins/search_synonyms/common/types.ts new file mode 100644 index 0000000000000..90fc8bbe91a89 --- /dev/null +++ b/x-pack/solutions/search/plugins/search_synonyms/common/types.ts @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface SearchSynonymsPluginSetup {} + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface SearchSynonymsPluginStart {} + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface AppPluginSetupDependencies {} + +export interface SearchSynonymsConfigType { + enabled: boolean; +} diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/constants.ts b/x-pack/solutions/search/plugins/search_synonyms/common/ui_flags.ts similarity index 69% rename from x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/constants.ts rename to x-pack/solutions/search/plugins/search_synonyms/common/ui_flags.ts index c67b052fbf2b5..0fd2aa78bed48 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/constants.ts +++ b/x-pack/solutions/search/plugins/search_synonyms/common/ui_flags.ts @@ -5,6 +5,4 @@ * 2.0. */ -import { euiThemeVars } from '@kbn/ui-theme'; - -export const DEFAULT_INDEX_COLOR = euiThemeVars.euiColorPrimary; +export const SYNONYMS_UI_FLAG = 'searchSynonyms:synonymsEnabled'; diff --git a/x-pack/solutions/search/plugins/search_synonyms/jest.config.js b/x-pack/solutions/search/plugins/search_synonyms/jest.config.js new file mode 100644 index 0000000000000..0f2b06ee0fb16 --- /dev/null +++ b/x-pack/solutions/search/plugins/search_synonyms/jest.config.js @@ -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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../../../..', + roots: ['/x-pack/solutions/search/plugins/search_synonyms'], + coverageDirectory: '/target/kibana-coverage/jest/x-pack/plugins/search_synonyms', + coverageReporters: ['text', 'html'], + collectCoverageFrom: [ + '/x-pack/solutions/search/plugins/search_synonyms/{public,server}/**/*.{ts,tsx}', + ], +}; diff --git a/x-pack/solutions/search/plugins/search_synonyms/kibana.jsonc b/x-pack/solutions/search/plugins/search_synonyms/kibana.jsonc new file mode 100644 index 0000000000000..434936655b317 --- /dev/null +++ b/x-pack/solutions/search/plugins/search_synonyms/kibana.jsonc @@ -0,0 +1,26 @@ +{ + "type": "plugin", + "id": "@kbn/search-synonyms", + "owner": "@elastic/search-kibana", + "group": "search", + "visibility": "private", + "plugin": { + "id": "searchSynonyms", + "server": true, + "browser": true, + "configPath": [ + "xpack", + "searchSynonyms" + ], + "requiredPlugins": [ + "features", + ], + "optionalPlugins": [ + "console", + "searchNavigation", + ], + "requiredBundles": [ + "kibanaReact", + ] + } +} diff --git a/x-pack/solutions/search/plugins/search_synonyms/public/application.tsx b/x-pack/solutions/search/plugins/search_synonyms/public/application.tsx new file mode 100644 index 0000000000000..d62f8196e7282 --- /dev/null +++ b/x-pack/solutions/search/plugins/search_synonyms/public/application.tsx @@ -0,0 +1,35 @@ +/* + * 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 ReactDOM from 'react-dom'; +import { CoreStart } from '@kbn/core/public'; +import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; +import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; +import { I18nProvider } from '@kbn/i18n-react'; +import { Router } from '@kbn/shared-ux-router'; +import { AppPluginStartDependencies } from './types'; + +export const renderApp = async ( + core: CoreStart, + services: AppPluginStartDependencies, + element: HTMLElement +) => { + ReactDOM.render( + + + + +
    Synonyms
    +
    +
    +
    +
    , + element + ); + return () => ReactDOM.unmountComponentAtNode(element); +}; diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/sentinelone/sentinelone_params_empty.tsx b/x-pack/solutions/search/plugins/search_synonyms/public/index.ts similarity index 59% rename from x-pack/platform/plugins/shared/stack_connectors/public/connector_types/sentinelone/sentinelone_params_empty.tsx rename to x-pack/solutions/search/plugins/search_synonyms/public/index.ts index 35895d35bcebf..254e3206ef64b 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/sentinelone/sentinelone_params_empty.tsx +++ b/x-pack/solutions/search/plugins/search_synonyms/public/index.ts @@ -5,9 +5,8 @@ * 2.0. */ -import React from 'react'; +import { SearchSynonymsPlugin } from './plugin'; -const SentinelOneParamsFields = () => <>; - -// eslint-disable-next-line import/no-default-export -export { SentinelOneParamsFields as default }; +export function plugin() { + return new SearchSynonymsPlugin(); +} diff --git a/x-pack/solutions/search/plugins/search_synonyms/public/plugin.ts b/x-pack/solutions/search/plugins/search_synonyms/public/plugin.ts new file mode 100644 index 0000000000000..c6762d8b545c3 --- /dev/null +++ b/x-pack/solutions/search/plugins/search_synonyms/public/plugin.ts @@ -0,0 +1,68 @@ +/* + * 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 { CoreSetup, Plugin, AppMountParameters } from '@kbn/core/public'; +import { PLUGIN_ID, PLUGIN_NAME, PLUGIN_TITLE } from '../common'; +import { + AppPluginSetupDependencies, + AppPluginStartDependencies, + SearchSynonymsPluginSetup, + SearchSynonymsPluginStart, +} from './types'; +import { SYNONYMS_UI_FLAG } from '../common/ui_flags'; + +export class SearchSynonymsPlugin + implements Plugin +{ + constructor() {} + + public setup( + core: CoreSetup, + _: AppPluginSetupDependencies + ): SearchSynonymsPluginSetup { + if (!core.settings.client.get(SYNONYMS_UI_FLAG, false)) { + return {}; + } + core.application.register({ + id: PLUGIN_ID, + appRoute: '/app/elasticsearch/synonyms', + title: PLUGIN_TITLE, + deepLinks: [ + { + id: 'synonyms', + path: '/', + title: PLUGIN_TITLE, + visibleIn: ['globalSearch'], + }, + ], + async mount({ element, history }: AppMountParameters) { + const { renderApp } = await import('./application'); + const [coreStart, depsStart] = await core.getStartServices(); + + coreStart.chrome.docTitle.change(PLUGIN_NAME); + + const startDeps: AppPluginStartDependencies = { + ...depsStart, + history, + }; + + depsStart.searchNavigation?.handleOnAppMount(); + + return renderApp(coreStart, startDeps, element); + }, + visibleIn: [], + }); + + return {}; + } + + public start(): SearchSynonymsPluginStart { + return {}; + } + + public stop() {} +} diff --git a/x-pack/solutions/search/plugins/search_synonyms/public/types.ts b/x-pack/solutions/search/plugins/search_synonyms/public/types.ts new file mode 100644 index 0000000000000..eec1ad13ade6c --- /dev/null +++ b/x-pack/solutions/search/plugins/search_synonyms/public/types.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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { SearchNavigationPluginStart } from '@kbn/search-navigation/public'; +import { AppMountParameters } from '@kbn/core/public'; +import type { ConsolePluginStart } from '@kbn/console-plugin/public'; + +export * from '../common/types'; +export interface AppPluginStartDependencies { + history: AppMountParameters['history']; + console?: ConsolePluginStart; + searchNavigation?: SearchNavigationPluginStart; +} diff --git a/x-pack/solutions/search/plugins/search_synonyms/server/config.ts b/x-pack/solutions/search/plugins/search_synonyms/server/config.ts new file mode 100644 index 0000000000000..b76d647a692be --- /dev/null +++ b/x-pack/solutions/search/plugins/search_synonyms/server/config.ts @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { schema, TypeOf } from '@kbn/config-schema'; +import { PluginConfigDescriptor } from '@kbn/core/server'; + +const configSchema = schema.object({ + enabled: schema.boolean({ defaultValue: false }), +}); + +export type SearchPlaygroundConfig = TypeOf; + +export const config: PluginConfigDescriptor = { + schema: configSchema, +}; diff --git a/x-pack/solutions/search/plugins/search_synonyms/server/index.ts b/x-pack/solutions/search/plugins/search_synonyms/server/index.ts new file mode 100644 index 0000000000000..9b8e954852ef7 --- /dev/null +++ b/x-pack/solutions/search/plugins/search_synonyms/server/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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { PluginInitializerContext } from '@kbn/core/server'; + +export { config } from './config'; + +export async function plugin(initializerContext: PluginInitializerContext) { + const { SearchSynonymsPlugin } = await import('./plugin'); + return new SearchSynonymsPlugin(initializerContext); +} + +export type { SearchSynonymsPluginSetup, SearchSynonymsPluginStart } from './types'; diff --git a/x-pack/solutions/search/plugins/search_synonyms/server/plugin.ts b/x-pack/solutions/search/plugins/search_synonyms/server/plugin.ts new file mode 100644 index 0000000000000..5e07a6ae80d3d --- /dev/null +++ b/x-pack/solutions/search/plugins/search_synonyms/server/plugin.ts @@ -0,0 +1,80 @@ +/* + * 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 { + PluginInitializerContext, + CoreSetup, + CoreStart, + Plugin, + Logger, + DEFAULT_APP_CATEGORIES, +} from '@kbn/core/server'; + +import { KibanaFeatureScope } from '@kbn/features-plugin/common'; +import { + SearchSynonymsPluginSetup, + SearchSynonymsPluginSetupDependencies, + SearchSynonymsPluginStart, +} from './types'; + +import { defineRoutes } from './routes'; +import { PLUGIN_ID, PLUGIN_TITLE } from '../common'; + +export class SearchSynonymsPlugin + implements Plugin +{ + private readonly logger: Logger; + + constructor(initializerContext: PluginInitializerContext) { + this.logger = initializerContext.logger.get(); + } + + public setup(core: CoreSetup, plugins: SearchSynonymsPluginSetupDependencies) { + const router = core.http.createRouter(); + + defineRoutes({ router, logger: this.logger }); + + plugins.features.registerKibanaFeature({ + id: PLUGIN_ID, + name: PLUGIN_TITLE, + order: 0, + category: DEFAULT_APP_CATEGORIES.enterpriseSearch, + app: ['kibana', PLUGIN_ID], + scope: [KibanaFeatureScope.Spaces, KibanaFeatureScope.Security], + catalogue: [PLUGIN_ID], + privileges: { + all: { + app: ['kibana', PLUGIN_ID], + api: ['synonyms:manage', 'synonyms:read'], + catalogue: [PLUGIN_ID], + savedObject: { + all: [], + read: [], + }, + ui: ['read', 'save'], + }, + read: { + app: ['kibana', PLUGIN_ID], + api: ['synonyms:read'], + savedObject: { + all: [], + read: [], + }, + ui: ['read'], + }, + }, + }); + + return {}; + } + + public start(core: CoreStart) { + return {}; + } + + public stop() {} +} diff --git a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/crowdstrike/crowdstrike_params_empty.tsx b/x-pack/solutions/search/plugins/search_synonyms/server/routes.ts similarity index 59% rename from x-pack/platform/plugins/shared/stack_connectors/public/connector_types/crowdstrike/crowdstrike_params_empty.tsx rename to x-pack/solutions/search/plugins/search_synonyms/server/routes.ts index 9b99e68368405..9411887ffb311 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/public/connector_types/crowdstrike/crowdstrike_params_empty.tsx +++ b/x-pack/solutions/search/plugins/search_synonyms/server/routes.ts @@ -5,9 +5,6 @@ * 2.0. */ -import React from 'react'; +import { IRouter, Logger } from '@kbn/core/server'; -const CrowdstrikeParamsFields = () => <>; - -// eslint-disable-next-line import/no-default-export -export { CrowdstrikeParamsFields as default }; +export function defineRoutes({ logger, router }: { logger: Logger; router: IRouter }) {} diff --git a/x-pack/solutions/search/plugins/search_synonyms/server/types.ts b/x-pack/solutions/search/plugins/search_synonyms/server/types.ts new file mode 100644 index 0000000000000..de63a55f0b023 --- /dev/null +++ b/x-pack/solutions/search/plugins/search_synonyms/server/types.ts @@ -0,0 +1,13 @@ +/* + * 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 { FeaturesPluginSetup } from '@kbn/features-plugin/server'; +export * from '../common/types'; + +export interface SearchSynonymsPluginSetupDependencies { + features: FeaturesPluginSetup; +} diff --git a/x-pack/solutions/search/plugins/search_synonyms/tsconfig.json b/x-pack/solutions/search/plugins/search_synonyms/tsconfig.json new file mode 100644 index 0000000000000..f8af8bac5e3d3 --- /dev/null +++ b/x-pack/solutions/search/plugins/search_synonyms/tsconfig.json @@ -0,0 +1,27 @@ +{ + "extends": "../../../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + }, + "include": [ + "__mocks__/**/*", + "common/**/*", + "public/**/*", + "server/**/*", + ], + "kbn_references": [ + "@kbn/config-schema", + "@kbn/core", + "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/kibana-react-plugin", + "@kbn/shared-ux-router", + "@kbn/react-kibana-context-render", + "@kbn/console-plugin", + "@kbn/features-plugin", + "@kbn/search-navigation", + ], + "exclude": [ + "target/**/*", + ] +} diff --git a/x-pack/solutions/search/plugins/serverless_search/public/navigation_tree.ts b/x-pack/solutions/search/plugins/serverless_search/public/navigation_tree.ts index 7d62be658166a..d9b4982928045 100644 --- a/x-pack/solutions/search/plugins/serverless_search/public/navigation_tree.ts +++ b/x-pack/solutions/search/plugins/serverless_search/public/navigation_tree.ts @@ -103,6 +103,13 @@ export const navigationTree = ({ isAppRegistered }: ApplicationStart): Navigatio ), link: 'searchInferenceEndpoints', }, + { + id: 'searchSynonyms', + title: i18n.translate('xpack.serverlessSearch.nav.relevance.searchSynonyms', { + defaultMessage: 'Synonyms', + }), + link: 'searchSynonyms', + }, ], }, { diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/actions/add_to_new_case/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/actions/add_to_new_case/index.tsx index 93d5b7ba7e20b..7c0688f4736cc 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/actions/add_to_new_case/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/actions/add_to_new_case/index.tsx @@ -10,7 +10,7 @@ import { EuiIcon, EuiLink } from '@elastic/eui'; import { useDataQualityContext } from '../../data_quality_context'; import { useAddToNewCase } from './hooks/use_add_to_new_case'; -import { StyledLinkText } from '../styles'; +import { linkTextCss } from '../styles'; import { ADD_TO_NEW_CASE } from '../../translations'; interface Props { @@ -42,10 +42,10 @@ const AddToNewCaseActionComponent: React.FC = ({ markdownComment }) => { disabled={addToNewCaseDisabled || disableAll} onClick={addToNewCaseContextMenuOnClick} > - + {ADD_TO_NEW_CASE} - + ); }; diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/actions/chat/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/actions/chat/index.tsx index 51c4b26f6255c..02953da399d03 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/actions/chat/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/actions/chat/index.tsx @@ -7,7 +7,8 @@ import React, { FC, useCallback } from 'react'; import { NewChat } from '@kbn/elastic-assistant'; -import styled from 'styled-components'; +import { css } from '@emotion/react'; +import { useEuiTheme } from '@elastic/eui'; import { AssistantIcon } from '@kbn/ai-assistant-icon'; import { @@ -19,10 +20,16 @@ import { import { useDataQualityContext } from '../../data_quality_context'; import { ASK_ASSISTANT } from './translations'; -const StyledLinkText = styled.span` - display: flex; - gap: ${({ theme }) => theme.eui.euiSizeXS}; -`; +const useStyles = () => { + const { euiTheme } = useEuiTheme(); + + return { + linkText: css({ + display: 'flex', + gap: euiTheme.size.xs, + }), + }; +}; interface Props { markdownComment: string; @@ -30,8 +37,10 @@ interface Props { } const ChatActionComponent: FC = ({ indexName, markdownComment }) => { + const styles = useStyles(); const { isAssistantEnabled } = useDataQualityContext(); const getPromptContext = useCallback(async () => markdownComment, [markdownComment]); + return ( = ({ indexName, markdownComment }) => { isAssistantEnabled={isAssistantEnabled} iconType={null} > - + {ASK_ASSISTANT} - + ); }; diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/actions/copy_to_clipboard/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/actions/copy_to_clipboard/index.tsx index 23df7dd8ad88e..ea332ddd5950d 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/actions/copy_to_clipboard/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/actions/copy_to_clipboard/index.tsx @@ -10,7 +10,7 @@ import { EuiIcon, EuiLink, copyToClipboard } from '@elastic/eui'; import { useDataQualityContext } from '../../data_quality_context'; import { COPIED_RESULTS_TOAST_TITLE, COPY_TO_CLIPBOARD } from '../../translations'; -import { StyledLinkText } from '../styles'; +import { linkTextCss } from '../styles'; interface Props { markdownComment: string; @@ -33,10 +33,10 @@ const CopyToClipboardActionComponent: React.FC = ({ markdownComment }) => disabled={ilmPhases.length === 0} onClick={onCopy} > - + {COPY_TO_CLIPBOARD} - + ); }; diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/actions/styles.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/actions/styles.tsx index 4319efa6b1304..3458166a8cd75 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/actions/styles.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/actions/styles.tsx @@ -5,9 +5,10 @@ * 2.0. */ -import styled from 'styled-components'; +import { UseEuiTheme } from '@elastic/eui'; +import { CSSObject } from '@emotion/react'; -export const StyledLinkText = styled.span` - display: flex; - gap: ${({ theme }) => theme.eui.euiSizeS}; -`; +export const linkTextCss = ({ euiTheme }: UseEuiTheme): CSSObject => ({ + display: 'flex', + gap: euiTheme.size.s, +}); diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/ilm_phases_empty_prompt/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/ilm_phases_empty_prompt/index.tsx index fe5c4cf59e8a8..bb57e2811192b 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/ilm_phases_empty_prompt/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/ilm_phases_empty_prompt/index.tsx @@ -5,9 +5,9 @@ * 2.0. */ -import { EuiEmptyPrompt, EuiSpacer, EuiText, EuiTitle } from '@elastic/eui'; +import { EuiEmptyPrompt, EuiSpacer, EuiText, EuiTitle, useEuiTheme } from '@elastic/eui'; import React, { useMemo } from 'react'; -import styled from 'styled-components'; +import { css } from '@emotion/react'; import { COLD_DESCRIPTION, @@ -23,16 +23,21 @@ import { } from '../../translations'; import * as i18n from './translations'; -const Ul = styled.ul` - text-align: left; -`; - -const Li = styled.ul` - margin-bottom: ${({ theme }) => theme.eui.euiSizeS}; - text-align: left; -`; +const useStyles = () => { + const { euiTheme } = useEuiTheme(); + return { + ul: css({ + textAlign: 'left', + }), + li: css({ + marginBottom: euiTheme.size.s, + textAlign: 'left', + }), + }; +}; const IlmPhasesEmptyPromptComponent: React.FC = () => { + const styles = useStyles(); const title = useMemo(() =>

    {i18n.TITLE}

    , []); const body = useMemo(() =>

    {i18n.BODY}

    , []); const footer = useMemo( @@ -44,23 +49,23 @@ const IlmPhasesEmptyPromptComponent: React.FC = () => { -
      -
    • +
        +
      • {HOT} {': '} {HOT_DESCRIPTION} -
      • -
      • +
      • +
      • {WARM} {': '} {WARM_DESCRIPTION} -
      • -
      • +
      • +
      • {UNMANAGED} {': '} {UNMANAGED_DESCRIPTION} -
      • -
      +
    • +
    @@ -74,21 +79,21 @@ const IlmPhasesEmptyPromptComponent: React.FC = () => { -
      -
    • +
        +
      • {COLD} {': '} {COLD_DESCRIPTION} -
      • -
      • +
      • +
      • {FROZEN} {': '} {FROZEN_DESCRIPTION} -
      • -
      +
    • +
    ), - [] + [styles.li, styles.ul] ); return ; diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/index.tsx index b3b708291a983..5a6f8dffea3c2 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/index.tsx @@ -5,9 +5,9 @@ * 2.0. */ -import { EuiFlexItem } from '@elastic/eui'; +import { EuiFlexItem, useEuiTheme } from '@elastic/eui'; import React, { useState, useCallback, useEffect } from 'react'; -import styled from 'styled-components'; +import { css } from '@emotion/react'; import { useResultsRollupContext } from '../../contexts/results_rollup_context'; import { Pattern } from './pattern'; @@ -15,13 +15,18 @@ import { SelectedIndex } from '../../types'; import { useDataQualityContext } from '../../data_quality_context'; import { useIsHistoricalResultsTourActive } from './hooks/use_is_historical_results_tour_active'; -const StyledPatternWrapperFlexItem = styled(EuiFlexItem)` - margin-bottom: ${({ theme }) => theme.eui.euiSize}; - - &:last-child { - margin-bottom: 0; - } -`; +const useStyles = () => { + const { euiTheme } = useEuiTheme(); + + return { + patternWrapperFlexItem: css({ + marginBottom: euiTheme.size.base, + ':last-child': { + marginBottom: 0, + }, + }), + }; +}; export interface Props { chartSelectedIndex: SelectedIndex | null; @@ -32,6 +37,7 @@ const IndicesDetailsComponent: React.FC = ({ chartSelectedIndex, setChartSelectedIndex, }) => { + const styles = useStyles(); const { patternRollups, patternIndexNames } = useResultsRollupContext(); const { patterns } = useDataQualityContext(); @@ -73,7 +79,7 @@ const IndicesDetailsComponent: React.FC = ({ return (
    {patterns.map((pattern) => ( - + = ({ // when surrounding accordions get toggled and affect the layout {...(pattern === firstOpenNonEmptyPattern && { openPatternsUpdatedAt })} /> - + ))}
    ); diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/historical_results_tour/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/historical_results_tour/index.tsx index c35dce5da868e..6b78be1d0d0e1 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/historical_results_tour/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/historical_results_tour/index.tsx @@ -7,7 +7,7 @@ import React, { FC, useEffect, useState } from 'react'; import { EuiButton, EuiButtonEmpty, EuiText, EuiTourStep } from '@elastic/eui'; -import styled from 'styled-components'; +import { css } from '@emotion/react'; import { HISTORICAL_RESULTS_TOUR_SELECTOR_KEY } from '../constants'; import { CLOSE, INTRODUCING_DATA_QUALITY_HISTORY, TRY_IT, VIEW_PAST_RESULTS } from './translations'; @@ -20,9 +20,11 @@ export interface Props { zIndex?: number; } -const StyledText = styled(EuiText)` - margin-block-start: -10px; -`; +const styles = { + text: css({ + marginBlockStart: '-10px', + }), +}; export const HistoricalResultsTour: FC = ({ anchorSelectorValue, @@ -52,9 +54,9 @@ export const HistoricalResultsTour: FC = ({ return ( +

    {VIEW_PAST_RESULTS}

    - +
    } data-test-subj="historicalResultsTour" isStepOpen={isOpen} diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index.tsx index fd0100bc1192e..e19e9a77a6369 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { EuiSpacer, useGeneratedHtmlId } from '@elastic/eui'; +import { EuiAccordion, EuiSpacer, useGeneratedHtmlId } from '@elastic/eui'; import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { ErrorEmptyPrompt } from './error_empty_prompt'; @@ -21,7 +21,7 @@ import type { PatternRollup, SelectedIndex, SortConfig } from '../../../types'; import { useIlmExplain } from './hooks/use_ilm_explain'; import { useStats } from './hooks/use_stats'; import { useDataQualityContext } from '../../../data_quality_context'; -import { PatternAccordion, PatternAccordionChildren } from './styles'; +import { patternAccordionChildrenCss, patternAccordionCss } from './styles'; import { IndexCheckFlyout } from './index_check_flyout'; import { useResultsRollupContext } from '../../../contexts/results_rollup_context'; import { useIndicesCheckContext } from '../../../contexts/indices_check_context'; @@ -318,7 +318,8 @@ const PatternComponent: React.FC = ({ return (
    - = ({ /> } > - +
    {!loading && pattern.includes(':') && ( <> @@ -404,8 +405,8 @@ const PatternComponent: React.FC = ({ />
    )} -
    -
    +
    + {isFlyoutVisible ? ( void; @@ -46,10 +48,7 @@ export interface Props { tabs: CheckFieldsTab[]; renderButtonGroup: ( props: CheckFieldsSingleButtonGroupProps - ) => React.ReactElement< - EuiButtonGroupProps, - StyledComponent | typeof EuiButtonGroup - >; + ) => React.ReactElement; } const CheckFieldsTabsComponent: React.FC = ({ tabs, renderButtonGroup }) => { @@ -58,7 +57,11 @@ const CheckFieldsTabsComponent: React.FC = ({ tabs, renderButtonGroup }) tabs.map((tab) => ({ id: tab.id, name: tab.name, - append: {tab.badgeCount ?? 0}, + append: ( + + {tab.badgeCount ?? 0} + + ), content: tab.content ?? null, disabled: Boolean(tab.disabled), ...(tab.disabled && { disabledReason: tab.disabledReason }), @@ -72,16 +75,17 @@ const CheckFieldsTabsComponent: React.FC = ({ tabs, renderButtonGroup }) () => checkFieldsTabs.map((tab) => { let label = ( - - {tab.name} +
    {tab.name}
    {tab.append} -
    + ); if (tab.disabled && tab.disabledReason) { diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/ecs_allowed_values/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/ecs_allowed_values/index.tsx index 69c46bba6a211..648ef03e1ff52 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/ecs_allowed_values/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/ecs_allowed_values/index.tsx @@ -9,7 +9,7 @@ import { EuiCode, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import React from 'react'; import { EMPTY_PLACEHOLDER } from '../../../../../constants'; -import { CodeSuccess } from '../../../../../styles'; +import { codeSuccessCss } from '../../../../../styles'; import type { AllowedValue } from '../../../../../types'; interface Props { @@ -23,7 +23,7 @@ const EcsAllowedValuesComponent: React.FC = ({ allowedValues }) => {allowedValues.map((x, i) => ( - {x.name} + {x.name} ))} diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/historical_results/historical_results_list/historical_result/historical_check_fields/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/historical_results/historical_results_list/historical_result/historical_check_fields/index.tsx index a8f206dec39a6..d799418d54666 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/historical_results/historical_results_list/historical_result/historical_check_fields/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/historical_results/historical_results_list/historical_result/historical_check_fields/index.tsx @@ -6,6 +6,7 @@ */ import React, { useMemo } from 'react'; +import { EuiButtonGroup } from '@elastic/eui'; import type { NonLegacyHistoricalResult } from '../../../../../../../../types'; import { getIncompatibleStatBadgeColor } from '../../../../../../../../utils/get_incompatible_stat_badge_color'; @@ -15,7 +16,7 @@ import { getIncompatibleAndSameFamilyFieldsFromHistoricalResult } from './utils/ import { IncompatibleTab } from '../../../../incompatible_tab'; import { SameFamilyTab } from '../../../../same_family_tab'; import { CheckFieldsTabs } from '../../../../check_fields_tabs'; -import { StyledHistoricalResultsCheckFieldsButtonGroup } from '../styles'; +import { historicalResultsCheckFieldsButtonGroupCss } from '../styles'; export interface Props { indexName: string; @@ -101,7 +102,9 @@ const HistoricalCheckFieldsComponent: React.FC = ({ indexName, historical
    } + renderButtonGroup={(props) => ( + + )} />
    ); diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/historical_results/historical_results_list/historical_result/legacy_historical_check_fields/index.test.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/historical_results/historical_results_list/historical_result/legacy_historical_check_fields/index.test.tsx index d232db88e5a64..7de7bbb78c0ed 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/historical_results/historical_results_list/historical_result/legacy_historical_check_fields/index.test.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/historical_results/historical_results_list/historical_result/legacy_historical_check_fields/index.test.tsx @@ -113,7 +113,7 @@ describe('LegacyHistoricalCheckFields', () => { {tablesMarkdown} - ).container.innerHTML + ).container.children[0].innerHTML ); expect(screen.getByTestId('incompatibleTablesMarkdown')).toBeInTheDocument(); diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/historical_results/historical_results_list/historical_result/legacy_historical_check_fields/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/historical_results/historical_results_list/historical_result/legacy_historical_check_fields/index.tsx index 177ba83110852..c4fd94ed4702b 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/historical_results/historical_results_list/historical_result/legacy_historical_check_fields/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/historical_results/historical_results_list/historical_result/legacy_historical_check_fields/index.tsx @@ -6,7 +6,7 @@ */ import React, { FC, memo, useMemo } from 'react'; -import { EuiMarkdownFormat, EuiSpacer } from '@elastic/eui'; +import { EuiButtonGroup, EuiMarkdownFormat, EuiSpacer } from '@elastic/eui'; import { INCOMPATIBLE_FIELDS, SAME_FAMILY } from '../../../../../../../../translations'; import { Actions } from '../../../../../../../../actions'; @@ -16,7 +16,7 @@ import { CheckSuccessEmptyPrompt } from '../../../../check_success_empty_prompt' import { INCOMPATIBLE_TAB_ID, SAME_FAMILY_TAB_ID } from '../../../../constants'; import { getIncompatibleStatBadgeColor } from '../../../../../../../../utils/get_incompatible_stat_badge_color'; import { CheckFieldsTabs } from '../../../../check_fields_tabs'; -import { StyledHistoricalResultsCheckFieldsButtonGroup } from '../styles'; +import { historicalResultsCheckFieldsButtonGroupCss } from '../styles'; import { NOT_INCLUDED_IN_HISTORICAL_RESULTS } from './translations'; interface Props { @@ -88,7 +88,9 @@ const LegacyHistoricalCheckFieldsComponent: FC = ({ indexName, historical
    } + renderButtonGroup={(props) => ( + + )} />
    ); diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/historical_results/historical_results_list/historical_result/styles.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/historical_results/historical_results_list/historical_result/styles.tsx index 8ae6a86dda62c..aa4d2245a2a6a 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/historical_results/historical_results_list/historical_result/styles.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/historical_results/historical_results_list/historical_result/styles.tsx @@ -5,17 +5,16 @@ * 2.0. */ -import styled from 'styled-components'; -import { EuiButtonGroup } from '@elastic/eui'; +import { css } from '@emotion/react'; import { INCOMPATIBLE_TAB_ID, SAME_FAMILY_TAB_ID } from '../../../constants'; -export const StyledHistoricalResultsCheckFieldsButtonGroup = styled(EuiButtonGroup)` - min-width: 50%; - button[data-test-subj='${INCOMPATIBLE_TAB_ID}'] { - flex-grow: 1; - } - button[data-test-subj='${SAME_FAMILY_TAB_ID}'] { - flex-grow: 1; - } -`; +export const historicalResultsCheckFieldsButtonGroupCss = css({ + minWidth: '50%', + [`button[data-test-subj='${INCOMPATIBLE_TAB_ID}']`]: { + flexGrow: 1, + }, + [`button[data-test-subj='${SAME_FAMILY_TAB_ID}']`]: { + flexGrow: 1, + }, +}); diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/historical_results/historical_results_list/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/historical_results/historical_results_list/index.tsx index 4032f72389d58..bcacc6aa0c686 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/historical_results/historical_results_list/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/historical_results/historical_results_list/index.tsx @@ -7,6 +7,7 @@ import React, { FC, Fragment, memo, useState } from 'react'; import { + EuiAccordion, EuiEmptyPrompt, EuiFlexGroup, EuiFlexItem, @@ -18,11 +19,10 @@ import { import { useDataQualityContext } from '../../../../../../data_quality_context'; import { useHistoricalResultsContext } from '../../../contexts/historical_results_context'; -import { StyledAccordion } from './styles'; +import { accordionCss } from './styles'; import { getFormattedCheckTime } from '../../utils/get_formatted_check_time'; import { IndexResultBadge } from '../../../index_result_badge'; import { HistoricalResult } from './historical_result'; -import { StyledText } from '../styles'; import { getCheckTextColor } from '../../../utils/get_check_text_color'; import { CHANGE_YOUR_SEARCH_CRITERIA_OR_RUN, @@ -30,6 +30,7 @@ import { NO_RESULTS_MATCH_YOUR_SEARCH_CRITERIA, TOGGLE_HISTORICAL_RESULT_CHECKED_AT, } from './translations'; +import { textCss } from '../styles'; interface Props { indexName: string; @@ -51,7 +52,8 @@ export const HistoricalResultsListComponent: FC = ({ indexName }) => { {results.map((result) => ( - = ({ indexName }) => { - {getFormattedCheckTime(result.checkedAt)} + + {getFormattedCheckTime(result.checkedAt)} + {!accordionState[result.checkedAt] && ( @@ -87,7 +91,7 @@ export const HistoricalResultsListComponent: FC = ({ indexName }) => { } > - + ))} diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/historical_results/historical_results_list/styles.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/historical_results/historical_results_list/styles.tsx index 7109a1efa07bf..95d7862748744 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/historical_results/historical_results_list/styles.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/historical_results/historical_results_list/styles.tsx @@ -5,19 +5,18 @@ * 2.0. */ -import { EuiAccordion } from '@elastic/eui'; -import styled from 'styled-components'; +import { UseEuiTheme } from '@elastic/eui'; +import { css } from '@emotion/react'; -export const StyledAccordion = styled(EuiAccordion)` - padding: 14px ${({ theme }) => theme.eui.euiSize}; - border: 1px solid ${({ theme }) => theme.eui.euiBorderColor}; - border-radius: ${({ theme }) => theme.eui.euiBorderRadius}; - - .euiAccordion__button:is(:hover, :focus) { - text-decoration: none; - } - - .euiAccordion__buttonContent { - flex-grow: 1; - } -`; +export const accordionCss = ({ euiTheme }: UseEuiTheme) => + css({ + padding: `14px ${euiTheme.size.base}`, + border: `1px solid ${euiTheme.border.color}`, + borderRadius: euiTheme.border.radius.medium, + '.euiAccordion__button:is(:hover, :focus)': { + textDecoration: 'none', + }, + '.euiAccordion__buttonContent': { + flexGrow: 1, + }, + }); diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/historical_results/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/historical_results/index.tsx index 3e12768efe39d..2fcec02786dc7 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/historical_results/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/historical_results/index.tsx @@ -13,7 +13,9 @@ import { EuiSpacer, EuiSuperDatePicker, EuiTablePagination, + EuiText, } from '@elastic/eui'; +import { css } from '@emotion/react'; import React, { FC, useMemo, useReducer } from 'react'; import { useDataQualityContext } from '../../../../../data_quality_context'; import { useHistoricalResultsContext } from '../../contexts/historical_results_context'; @@ -25,7 +27,6 @@ import { fetchHistoricalResultsQueryReducer } from './reducers/fetch_historical_ import { FetchHistoricalResultsQueryState } from '../types'; import { LoadingEmptyPrompt } from '../../loading_empty_prompt'; import { ErrorEmptyPrompt } from '../../error_empty_prompt'; -import { StyledFilterGroupFlexItem, StyledText } from './styles'; import { ALL, ERROR_LOADING_HISTORICAL_RESULTS, @@ -39,9 +40,16 @@ import { useHistoricalResultsPagination } from './hooks/use_historical_results_p import { FAIL, PASS } from '../../translations'; import { useHistoricalResultsOutcomeFilter } from './hooks/use_historical_results_outcome_filter'; import { useHistoricalResultsDatePicker } from './hooks/use_historical_results_date_picker'; +import { textCss } from './styles'; const historicalResultsListId = 'historicalResultsList'; +const styles = { + filterGroupFlexItem: css({ + flexBasis: '17%', + }), +}; + export const initialFetchHistoricalResultsQueryState: FetchHistoricalResultsQueryState = { startDate: DEFAULT_HISTORICAL_RESULTS_START_DATE, endDate: DEFAULT_HISTORICAL_RESULTS_END_DATE, @@ -111,7 +119,7 @@ export const HistoricalResultsComponent: FC = ({ indexName }) => { return (
    - + = ({ indexName }) => { {FAIL} - + = ({ indexName }) => { - = ({ indexName }) => { aria-describedby={historicalResultsListId} > {totalChecksText} - +
    diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/historical_results/styles.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/historical_results/styles.tsx index 5c8baef905ec2..484d135268b8a 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/historical_results/styles.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/historical_results/styles.tsx @@ -5,13 +5,10 @@ * 2.0. */ -import { EuiFlexItem, EuiText } from '@elastic/eui'; -import styled from 'styled-components'; +import { UseEuiTheme } from '@elastic/eui'; +import { css } from '@emotion/react'; -export const StyledFilterGroupFlexItem = styled(EuiFlexItem)` - flex-basis: 17%; -`; - -export const StyledText = styled(EuiText)` - font-weight: ${({ theme }) => theme.eui.euiFontWeightSemiBold}; -`; +export const textCss = ({ euiTheme }: UseEuiTheme) => + css({ + fontWeight: euiTheme.font.weight.semiBold, + }); diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/incompatible_callout/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/incompatible_callout/index.tsx index e0a647872edfc..b500de3dce435 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/incompatible_callout/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/incompatible_callout/index.tsx @@ -17,7 +17,7 @@ import { MAPPINGS_THAT_CONFLICT_WITH_ECS, PAGES_MAY_NOT_DISPLAY_EVENTS, } from '../../../../../translations'; -import { CalloutItem } from '../styles'; +import { calloutItemCss } from '../styles'; export interface Props { incompatibleFieldCount?: number; @@ -41,15 +41,15 @@ const IncompatibleCalloutComponent: React.FC = ({ >
    {INCOMPATIBLE_CALLOUT(ecsVersion)}
    - +
    {DETECTION_ENGINE_RULES_MAY_NOT_MATCH} - - +
    +
    {PAGES_MAY_NOT_DISPLAY_EVENTS} - - +
    +
    {MAPPINGS_THAT_CONFLICT_WITH_ECS} - +
    ); }; diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/incompatible_tab/utils/get_incompatible_table_columns.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/incompatible_tab/utils/get_incompatible_table_columns.tsx index c39b29d0a6597..ae587734eda1b 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/incompatible_tab/utils/get_incompatible_table_columns.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/incompatible_tab/utils/get_incompatible_table_columns.tsx @@ -6,9 +6,9 @@ */ import React from 'react'; -import { EuiTableFieldDataColumnType } from '@elastic/eui'; +import { EuiCode, EuiTableFieldDataColumnType } from '@elastic/eui'; -import { CodeDanger, CodeSuccess } from '../../../../../../styles'; +import { codeDangerCss, codeSuccessCss } from '../../../../../../styles'; import { AllowedValue, IncompatibleFieldMetadata, @@ -77,7 +77,11 @@ export const getIncompatibleMappingsTableColumns = (): Array< { field: 'type', name: ECS_MAPPING_TYPE_EXPECTED, - render: (type: string) => {type}, + render: (type: string) => ( + + {type} + + ), sortable: true, truncateText: false, width: '25%', @@ -86,7 +90,9 @@ export const getIncompatibleMappingsTableColumns = (): Array< field: 'indexFieldType', name: INDEX_MAPPING_TYPE_ACTUAL, render: (indexFieldType: string, x) => ( - {indexFieldType} + + {indexFieldType} + ), sortable: true, truncateText: false, diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_invalid_values/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_invalid_values/index.tsx index 812e369d4039f..1989c61a1e731 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_invalid_values/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_invalid_values/index.tsx @@ -7,14 +7,14 @@ import { EuiCode, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import React from 'react'; -import styled from 'styled-components'; +import styled from '@emotion/styled'; import { EMPTY_PLACEHOLDER } from '../../../../../constants'; -import { CodeDanger } from '../../../../../styles'; +import { codeDangerCss } from '../../../../../styles'; import type { UnallowedValueCount } from '../../../../../types'; const IndexInvalidValueFlexItem = styled(EuiFlexItem)` - margin-bottom: ${({ theme }) => theme.eui.euiSizeXS}; + margin-bottom: ${({ theme }) => theme.euiTheme.size.xs}; `; interface Props { @@ -29,7 +29,7 @@ const IndexInvalidValuesComponent: React.FC = ({ indexInvalidValues }) => {indexInvalidValues.map(({ fieldName, count }, i) => (
    - {fieldName}{' '} + {fieldName}{' '} {'('} {count} diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_stats_panel/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_stats_panel/index.tsx index 7f8598839fd0c..7f67ec5a5b0b8 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_stats_panel/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_stats_panel/index.tsx @@ -5,9 +5,16 @@ * 2.0. */ -import { EuiFlexGroup, EuiFlexItem, EuiPanel, EuiSpacer } from '@elastic/eui'; +import { + EuiFlexGroup, + EuiFlexItem, + EuiPanel, + EuiSpacer, + useEuiFontSize, + useEuiTheme, +} from '@elastic/eui'; import React from 'react'; -import styled from 'styled-components'; +import { css } from '@emotion/react'; import { useDataQualityContext } from '../../../../../data_quality_context'; import { @@ -21,31 +28,40 @@ import { import { Stat } from '../../../../../stat'; import { getIlmPhaseDescription } from '../../../../../utils/get_ilm_phase_description'; -const StyledFlexItem = styled(EuiFlexItem)` - justify-content: space-between; - border-right: 1px solid ${({ theme }) => theme.eui.euiBorderColor}; - font-size: ${({ theme }) => theme.eui.euiFontSizeXS}; +const useStyles = () => { + const { euiTheme } = useEuiTheme(); + const { fontSize } = useEuiFontSize('xs'); - margin-bottom: 2px; + const baseFlexItem = css` + justify-content: space-between; + border-right: 1px solid ${euiTheme.border.color}; + font-size: ${fontSize}; - &:last-child { - border-right: none; - } + &:last-child { + border-right: none; + } - strong { - text-transform: capitalize; - } -`; + strong { + text-transform: capitalize; + } + `; -const UnpaddedStyledFlexItem = styled(StyledFlexItem)` - margin-bottom: 0; -`; + return { + flexItem: css` + ${baseFlexItem} + margin-bottom: 2px; + `, + unpaddedFlexItem: css` + ${baseFlexItem} + margin-bottom: 0; + `, + }; +}; export interface Props { docsCount: number; ilmPhase?: string; sizeInBytes?: number; - sameFamilyFieldsCount?: number; ecsCompliantFieldsCount?: number; customFieldsCount?: number; allFieldsCount?: number; @@ -55,22 +71,22 @@ export const IndexStatsPanelComponent: React.FC = ({ docsCount, ilmPhase, sizeInBytes, - sameFamilyFieldsCount, customFieldsCount, ecsCompliantFieldsCount, allFieldsCount, }) => { + const styles = useStyles(); const { formatBytes, formatNumber } = useDataQualityContext(); return ( - + {DOCS} {formatNumber(docsCount)} - + {ilmPhase && ( - + {ILM_PHASE} = ({ tooltipText={getIlmPhaseDescription(ilmPhase)} badgeProps={{ 'data-test-subj': 'ilmPhase' }} /> - + )} - + {SIZE} {formatBytes(sizeInBytes ?? 0)} - + {customFieldsCount != null && ( - + {CUSTOM_FIELDS} {formatNumber(customFieldsCount)} - + )} {ecsCompliantFieldsCount != null && ( - + {ECS_COMPLIANT_FIELDS} {formatNumber(ecsCompliantFieldsCount)} - + )} {allFieldsCount != null && ( - + {ALL_FIELDS} {formatNumber(allFieldsCount)} - + )} diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/latest_results/latest_check_fields/all_tab/utils/get_all_table_columns.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/latest_results/latest_check_fields/all_tab/utils/get_all_table_columns.tsx index 386582e5a4fe9..4d9195b557b67 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/latest_results/latest_check_fields/all_tab/utils/get_all_table_columns.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/latest_results/latest_check_fields/all_tab/utils/get_all_table_columns.tsx @@ -24,7 +24,7 @@ import { } from '../../../../../../../../translations'; import { EcsAllowedValues } from '../../../../ecs_allowed_values'; import { IndexInvalidValues } from '../../../../index_invalid_values'; -import { CodeDanger, CodeSuccess } from '../../../../../../../../styles'; +import { codeDangerCss, codeSuccessCss } from '../../../../../../../../styles'; import type { AllowedValue, EnrichedFieldMetadata, @@ -45,9 +45,9 @@ export const getAllTableColumns = (): Array ( - + {type != null ? type : EMPTY_PLACEHOLDER} - + ), sortable: true, truncateText: false, @@ -59,21 +59,31 @@ export const getAllTableColumns = (): Array { // if custom field or ecs based field with mapping match if (isCustomFieldMetadata(x) || isEcsCompliantFieldMetadata(x)) { - return {x.indexFieldType}; + return ( + + {x.indexFieldType} + + ); } // mapping mismatch due to same family if (isSameFamilyFieldMetadata(x)) { return (
    - {x.indexFieldType} + + {x.indexFieldType} +
    ); } // mapping mismatch - return {x.indexFieldType}; + return ( + + {x.indexFieldType} + + ); }, sortable: true, truncateText: false, diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/latest_results/latest_check_fields/ecs_compliant_tab/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/latest_results/latest_check_fields/ecs_compliant_tab/index.tsx index e2ad16b73c647..76a4d3c2d8eaf 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/latest_results/latest_check_fields/ecs_compliant_tab/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/latest_results/latest_check_fields/ecs_compliant_tab/index.tsx @@ -9,7 +9,7 @@ import { EcsVersion } from '@elastic/ecs'; import { EuiCallOut, EuiEmptyPrompt, EuiSpacer } from '@elastic/eui'; import React, { useMemo } from 'react'; -import styled from 'styled-components'; +import { css } from '@emotion/react'; import { CompareFieldsTable } from '../../../compare_fields_table'; import { EmptyPromptBody } from '../../../empty_prompt_body'; @@ -17,7 +17,7 @@ import { EmptyPromptTitle } from '../../../empty_prompt_title'; import type { EcsCompliantFieldMetadata } from '../../../../../../../types'; import { isTimestampFieldMissing } from '../utils/is_timestamp_field_missing'; import { getEcsCompliantTableColumns } from './utils/get_ecs_compliant_table_columns'; -import { CalloutItem } from '../../../styles'; +import { calloutItemCss } from '../../../styles'; import { CUSTOM_DETECTION_ENGINE_RULES_WORK, ECS_COMPLIANT_CALLOUT, @@ -30,9 +30,11 @@ import { PRE_BUILT_DETECTION_ENGINE_RULES_WORK, } from '../../../translations'; -const EmptyPromptContainer = styled.div` - width: 100%; -`; +const styles = { + emptyPromptContainer: css({ + width: '100%', + }), +}; interface Props { indexName: string; @@ -54,11 +56,11 @@ const EcsCompliantTabComponent: React.FC = ({ indexName, ecsCompliantFiel version: EcsVersion, })}

    - {PRE_BUILT_DETECTION_ENGINE_RULES_WORK} - {CUSTOM_DETECTION_ENGINE_RULES_WORK} - {PAGES_DISPLAY_EVENTS} - {OTHER_APP_CAPABILITIES_WORK_PROPERLY} - {ECS_COMPLIANT_MAPPINGS_ARE_FULLY_SUPPORTED} +
    {PRE_BUILT_DETECTION_ENGINE_RULES_WORK}
    +
    {CUSTOM_DETECTION_ENGINE_RULES_WORK}
    +
    {PAGES_DISPLAY_EVENTS}
    +
    {OTHER_APP_CAPABILITIES_WORK_PROPERLY}
    +
    {ECS_COMPLIANT_MAPPINGS_ARE_FULLY_SUPPORTED}
    = ({ indexName, ecsCompliantFiel /> ) : ( - +
    = ({ indexName, ecsCompliantFiel title={title} titleSize="s" /> - +
    )}
    ); diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/latest_results/latest_check_fields/ecs_compliant_tab/utils/get_ecs_compliant_table_columns.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/latest_results/latest_check_fields/ecs_compliant_tab/utils/get_ecs_compliant_table_columns.tsx index 65e81477a1b63..e43e9b87727f3 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/latest_results/latest_check_fields/ecs_compliant_tab/utils/get_ecs_compliant_table_columns.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/latest_results/latest_check_fields/ecs_compliant_tab/utils/get_ecs_compliant_table_columns.tsx @@ -6,9 +6,9 @@ */ import React from 'react'; -import { EuiTableFieldDataColumnType } from '@elastic/eui'; +import { EuiCode, EuiTableFieldDataColumnType } from '@elastic/eui'; -import { CodeSuccess } from '../../../../../../../../styles'; +import { codeSuccessCss } from '../../../../../../../../styles'; import { AllowedValue, EcsCompliantFieldMetadata } from '../../../../../../../../types'; import { FIELD } from '../../../../../../../../translations'; import { EcsAllowedValues } from '../../../../ecs_allowed_values'; @@ -28,7 +28,11 @@ export const getEcsCompliantTableColumns = (): Array< { field: 'type', name: ECS_MAPPING_TYPE, - render: (type: string) => {type}, + render: (type: string) => ( + + {type} + + ), sortable: true, truncateText: false, width: '25%', diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/latest_results/latest_check_fields/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/latest_results/latest_check_fields/index.tsx index 918d85e3b5d60..2f05ede7cbe0b 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/latest_results/latest_check_fields/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/latest_results/latest_check_fields/index.tsx @@ -7,7 +7,6 @@ import React, { useMemo } from 'react'; import { EuiButtonGroup } from '@elastic/eui'; -import styled from 'styled-components'; import { ALL_FIELDS, @@ -37,14 +36,16 @@ import { AllTab } from './all_tab'; import { getEcsCompliantBadgeColor } from './utils/get_ecs_compliant_badge_color'; import { CheckFieldsTabs } from '../../check_fields_tabs'; -const StyledButtonGroup = styled(EuiButtonGroup)` - button[data-test-subj='${INCOMPATIBLE_TAB_ID}'] { - flex-grow: 1.2; - } - button[data-test-subj='${ECS_COMPLIANT_TAB_ID}'] { - flex-grow: 1.4; - } -`; +const styles = { + buttonGroup: { + [`button[data-test-subj='${INCOMPATIBLE_TAB_ID}']`]: { + flexGrow: 1.2, + }, + [`button[data-test-subj='${ECS_COMPLIANT_TAB_ID}']`]: { + flexGrow: 1.4, + }, + }, +}; export interface Props { indexName: string; @@ -185,7 +186,9 @@ const LatestCheckFieldsComponent: React.FC = ({
    } + renderButtonGroup={(props) => ( + + )} />
    ); diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/latest_results/latest_check_fields/sticky_actions/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/latest_results/latest_check_fields/sticky_actions/index.tsx index 64d7ab337f35d..1664719fd6a4b 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/latest_results/latest_check_fields/sticky_actions/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/latest_results/latest_check_fields/sticky_actions/index.tsx @@ -6,15 +6,11 @@ */ import React, { FC } from 'react'; -import { EuiButtonEmpty } from '@elastic/eui'; -import styled from 'styled-components'; +import { useEuiTheme } from '@elastic/eui'; +import { css } from '@emotion/react'; import { Actions } from '../../../../../../../actions'; -export const CopyToClipboardButton = styled(EuiButtonEmpty)` - margin-left: ${({ theme }) => theme.eui.euiSizeXS}; -`; - interface Props { markdownComment: string; showAddToNewCaseAction?: boolean; @@ -23,15 +19,21 @@ interface Props { indexName?: string; } -const StyledStickyContainer = styled.div` - padding: ${({ theme }) => theme.eui.euiSizeL} 0; - background: ${({ theme }) => theme.eui.euiColorEmptyShade}; - position: sticky; - bottom: 0; - left: 0; - right: 0; - border-top: 1px solid ${({ theme }) => theme.eui.euiBorderColor}; -`; +const useStyles = () => { + const { euiTheme } = useEuiTheme(); + + return { + stickyContainer: css({ + padding: `${euiTheme.size.l} 0`, + background: euiTheme.colors.emptyShade, + position: 'sticky', + bottom: 0, + left: 0, + right: 0, + borderTop: `1px solid ${euiTheme.border.color}`, + }), + }; +}; const StickyActionsComponent: FC = ({ indexName, @@ -40,8 +42,10 @@ const StickyActionsComponent: FC = ({ showAddToNewCaseAction, showChatAction, }) => { + const styles = useStyles(); + return ( - +
    = ({ showCopyToClipboardAction={showCopyToClipboardAction} showAddToNewCaseAction={showAddToNewCaseAction} /> - +
    ); }; diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/same_family/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/same_family/index.tsx index afef2c045d05f..f8ffdeb8a122c 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/same_family/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/same_family/index.tsx @@ -5,21 +5,29 @@ * 2.0. */ -import { EuiBadge } from '@elastic/eui'; +import { EuiBadge, useEuiTheme } from '@elastic/eui'; import React from 'react'; -import styled from 'styled-components'; +import { css } from '@emotion/react'; import { SAME_FAMILY_BADGE_LABEL } from '../../../../../translations'; -const SameFamilyBadge = styled(EuiBadge)` - margin: ${({ theme }) => `0 ${theme.eui.euiSizeXS}`}; -`; +const useStyles = () => { + const { euiTheme } = useEuiTheme(); + return { + sameFamilyBadge: css({ + margin: `0 ${euiTheme.size.xs}`, + }), + }; +}; -const SameFamilyComponent: React.FC = () => ( - - {SAME_FAMILY_BADGE_LABEL} - -); +const SameFamilyComponent: React.FC = () => { + const styles = useStyles(); + return ( + + {SAME_FAMILY_BADGE_LABEL} + + ); +}; SameFamilyComponent.displayName = 'SameFamilyComponent'; diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/same_family_tab/utils/get_same_family_table_columns.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/same_family_tab/utils/get_same_family_table_columns.tsx index 713f55c604034..ca864e8ddd3fb 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/same_family_tab/utils/get_same_family_table_columns.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/same_family_tab/utils/get_same_family_table_columns.tsx @@ -6,7 +6,7 @@ */ import React from 'react'; -import { EuiTableFieldDataColumnType } from '@elastic/eui'; +import { EuiCode, EuiTableFieldDataColumnType } from '@elastic/eui'; import { SameFamilyFieldMetadata } from '../../../../../../types'; import { @@ -14,7 +14,7 @@ import { FIELD, INDEX_MAPPING_TYPE_ACTUAL, } from '../../../../../../translations'; -import { CodeSuccess } from '../../../../../../styles'; +import { codeSuccessCss } from '../../../../../../styles'; import { SameFamily } from '../../same_family'; import { ECS_DESCRIPTION } from '../../translations'; @@ -31,7 +31,11 @@ export const getSameFamilyTableColumns = (): Array< { field: 'type', name: ECS_MAPPING_TYPE_EXPECTED, - render: (type: string) => {type}, + render: (type: string) => ( + + {type} + + ), sortable: true, truncateText: false, width: '25%', @@ -41,7 +45,9 @@ export const getSameFamilyTableColumns = (): Array< name: INDEX_MAPPING_TYPE_ACTUAL, render: (indexFieldType: string) => (
    - {indexFieldType} + + {indexFieldType} +
    ), diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/styles.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/styles.tsx index f899d42026178..bf99eb99b9a68 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/styles.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/styles.tsx @@ -5,8 +5,10 @@ * 2.0. */ -import styled from 'styled-components'; +import { UseEuiTheme } from '@elastic/eui'; +import { css } from '@emotion/react'; -export const CalloutItem = styled.div` - margin-left: ${({ theme }) => theme.eui.euiSizeS}; -`; +export const calloutItemCss = ({ euiTheme }: UseEuiTheme) => + css({ + marginLeft: euiTheme.size.s, + }); diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_result_badge/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_result_badge/index.tsx index 979445bca8af7..420860146fc8d 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_result_badge/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_result_badge/index.tsx @@ -7,21 +7,22 @@ import { EuiBadge, EuiToolTip } from '@elastic/eui'; import React from 'react'; -import styled from 'styled-components'; +import { css } from '@emotion/react'; import { getIndexResultToolTip } from '../utils/get_index_result_tooltip'; import { getCheckTextColor } from '../utils/get_check_text_color'; import { FAIL, PASS } from '../translations'; -const StyledBadge = styled(EuiBadge)` - width: 44px; - text-align: center; - padding-inline: 0; - - .euiBadge__content { - justify-content: center; - } -`; +const styles = { + badge: css({ + width: 44, + textAlign: 'center', + paddingInline: 0, + '.euiBadge__content': { + justifyContent: 'center', + }, + }), +}; export type Props = React.ComponentProps & { incompatible: number; @@ -35,13 +36,14 @@ export const IndexResultBadgeComponent: React.FC = ({ }) => { return ( - {incompatible > 0 ? FAIL : PASS} - + ); }; diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/ilm_phase_counts/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/ilm_phase_counts/index.tsx index c1d1ead5e7891..eab5458302513 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/ilm_phase_counts/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/ilm_phase_counts/index.tsx @@ -7,14 +7,16 @@ import { EuiBadge, EuiFlexGroup, EuiFlexItem, EuiToolTip } from '@elastic/eui'; import React from 'react'; -import styled from 'styled-components'; +import { css } from '@emotion/react'; import type { IlmExplainPhaseCounts, IlmPhase } from '../../../../../../types'; import { getPatternIlmPhaseDescription } from './utils/get_pattern_ilm_phase_description'; -const PhaseCountsFlexGroup = styled(EuiFlexGroup)` - display: inline-flex; -`; +const styles = { + phaseCounts: css({ + display: 'inline-flex', + }), +}; export const phases: IlmPhase[] = ['hot', 'unmanaged', 'warm', 'cold', 'frozen']; @@ -24,7 +26,7 @@ interface Props { } const IlmPhaseCountsComponent: React.FC = ({ ilmExplainPhaseCounts, pattern }) => ( - + {phases.map((phase) => ilmExplainPhaseCounts[phase] != null && ilmExplainPhaseCounts[phase] > 0 ? ( @@ -40,7 +42,7 @@ const IlmPhaseCountsComponent: React.FC = ({ ilmExplainPhaseCounts, patte ) : null )} - + ); IlmPhaseCountsComponent.displayName = 'IlmPhaseCountsComponent'; diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/styles.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/styles.tsx index d2b2e7d1b4934..2e04f59e229cd 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/styles.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/styles.tsx @@ -5,31 +5,29 @@ * 2.0. */ -import { EuiAccordion } from '@elastic/eui'; -import styled from 'styled-components'; +import { UseEuiTheme } from '@elastic/eui'; +import { CSSObject } from '@emotion/react'; -export const PatternAccordion = styled(EuiAccordion)` - .euiAccordion__triggerWrapper { - padding: 14px ${({ theme }) => theme.eui.euiSize}; - border: 1px solid ${({ theme }) => theme.eui.euiBorderColor}; - border-radius: ${({ theme }) => theme.eui.euiBorderRadius}; - } +export const patternAccordionCss = ({ euiTheme }: UseEuiTheme): CSSObject => ({ + '.euiAccordion__triggerWrapper': { + padding: `14px ${euiTheme.size.base}`, + border: `1px solid ${euiTheme.border.color}`, + borderRadius: euiTheme.border.radius.medium, + }, + '.euiAccordion__button:is(:hover, :focus)': { + textDecoration: 'none', + }, + '.euiAccordion__buttonContent': { + flexGrow: 1, + }, +}); - .euiAccordion__button:is(:hover, :focus) { - text-decoration: none; - } - - .euiAccordion__buttonContent { - flex-grow: 1; - } -`; - -export const PatternAccordionChildren = styled.div` - padding: ${({ theme }) => theme.eui.euiSize}; - padding-bottom: 0; - border: 1px solid ${({ theme }) => theme.eui.euiBorderColor}; - border-radius: 0 0 ${({ theme }) => `${theme.eui.euiBorderRadius} ${theme.eui.euiBorderRadius}`}; - border-top: none; - width: calc(100% - ${({ theme }) => theme.eui.euiSizeS} * 2); - margin: auto; -`; +export const patternAccordionChildrenCss = ({ euiTheme }: UseEuiTheme): CSSObject => ({ + padding: euiTheme.size.s, + paddingBottom: 0, + border: `1px solid ${euiTheme.border.color}`, + borderRadius: `0 0 ${euiTheme.border.radius.medium} ${euiTheme.border.radius.medium}`, + borderTop: 'none', + width: `calc(100% - ${euiTheme.size.s} * 2)`, + margin: 'auto', +}); diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/index.tsx index 02298a5b7dd94..584417c085484 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/index.tsx @@ -6,7 +6,7 @@ */ import type { CriteriaWithPagination, EuiBasicTableColumn, Pagination } from '@elastic/eui'; -import { EuiInMemoryTable } from '@elastic/eui'; +import { EuiInMemoryTable, useEuiTheme } from '@elastic/eui'; import React, { useCallback, useMemo } from 'react'; import { defaultSort } from '../../../../constants'; @@ -23,6 +23,7 @@ export interface Props { pattern, onCheckNowAction, onViewHistoryAction, + dangerColor, }: { formatBytes: (value: number | undefined) => string; formatNumber: (value: number | undefined) => string; @@ -31,6 +32,7 @@ export interface Props { onCheckNowAction: (indexName: string) => void; onViewHistoryAction: (indexName: string) => void; firstIndexName?: string; + dangerColor: string; }) => Array>; items: IndexSummaryTableItem[]; pageIndex: number; @@ -58,6 +60,9 @@ const SummaryTableComponent: React.FC = ({ onViewHistoryAction, }) => { const { isILMAvailable, formatBytes, formatNumber } = useDataQualityContext(); + const { euiTheme } = useEuiTheme(); + const dangerColor = euiTheme.colors.danger; + const columns = useMemo( () => getTableColumns({ @@ -68,6 +73,7 @@ const SummaryTableComponent: React.FC = ({ onCheckNowAction, onViewHistoryAction, firstIndexName: items[0]?.indexName, + dangerColor, }), [ getTableColumns, @@ -78,6 +84,7 @@ const SummaryTableComponent: React.FC = ({ onCheckNowAction, onViewHistoryAction, items, + dangerColor, ] ); const getItemId = useCallback((item: IndexSummaryTableItem) => item.indexName, []); diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/utils/columns.test.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/utils/columns.test.tsx index bffd0c7fb91de..7701803c36e59 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/utils/columns.test.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/utils/columns.test.tsx @@ -36,6 +36,8 @@ const defaultNumberFormat = '0,0.[000]'; const formatNumber = (value: number | undefined) => value != null ? numeral(value).format(defaultNumberFormat) : EMPTY_STAT; +const testColor = '#123456'; + describe('helpers', () => { describe('getSummaryTableColumns', () => { const indexName = '.ds-auditbeat-8.6.1-2023.02.07-000001'; @@ -65,6 +67,7 @@ describe('helpers', () => { pattern: 'auditbeat-*', onCheckNowAction: jest.fn(), onViewHistoryAction: jest.fn(), + dangerColor: testColor, }).map((x) => omit('render', x)); expect(columns).toEqual([ @@ -126,6 +129,7 @@ describe('helpers', () => { pattern: 'auditbeat-*', onCheckNowAction: jest.fn(), onViewHistoryAction: jest.fn(), + dangerColor: testColor, }); const checkNowRender = ( (columns[0] as EuiTableActionsColumnType) @@ -151,6 +155,7 @@ describe('helpers', () => { pattern: 'auditbeat-*', onCheckNowAction, onViewHistoryAction: jest.fn(), + dangerColor: testColor, }); const checkNowRender = ( (columns[0] as EuiTableActionsColumnType) @@ -179,6 +184,7 @@ describe('helpers', () => { pattern: 'auditbeat-*', onCheckNowAction: jest.fn(), onViewHistoryAction, + dangerColor: testColor, }); const expandActionRender = ( @@ -208,6 +214,7 @@ describe('helpers', () => { onCheckNowAction: jest.fn(), onViewHistoryAction: jest.fn(), firstIndexName: indexName, + dangerColor: testColor, }); const expandActionRender = ( @@ -235,6 +242,7 @@ describe('helpers', () => { onCheckNowAction: jest.fn(), onViewHistoryAction: jest.fn(), firstIndexName: 'another-index', + dangerColor: testColor, }); const expandActionRender = ( @@ -267,6 +275,7 @@ describe('helpers', () => { pattern: 'auditbeat-*', onCheckNowAction: jest.fn(), onViewHistoryAction: jest.fn(), + dangerColor: testColor, }); const incompatibleRender = ( columns[1] as EuiTableFieldDataColumnType @@ -290,6 +299,7 @@ describe('helpers', () => { pattern: 'auditbeat-*', onCheckNowAction: jest.fn(), onViewHistoryAction: jest.fn(), + dangerColor: testColor, }); const incompatibleRender = ( columns[1] as EuiTableFieldDataColumnType @@ -317,6 +327,7 @@ describe('helpers', () => { pattern: 'auditbeat-*', onCheckNowAction: jest.fn(), onViewHistoryAction: jest.fn(), + dangerColor: testColor, }); const incompatibleRender = ( columns[1] as EuiTableFieldDataColumnType @@ -341,6 +352,7 @@ describe('helpers', () => { pattern: 'auditbeat-*', onCheckNowAction: jest.fn(), onViewHistoryAction: jest.fn(), + dangerColor: testColor, }); const indexNameRender = (columns[2] as EuiTableFieldDataColumnType) .render; @@ -365,6 +377,7 @@ describe('helpers', () => { pattern: 'auditbeat-*', onCheckNowAction: jest.fn(), onViewHistoryAction: jest.fn(), + dangerColor: testColor, }); const docsCountRender = (columns[3] as EuiTableFieldDataColumnType) .render; @@ -400,6 +413,7 @@ describe('helpers', () => { pattern: 'auditbeat-*', onCheckNowAction: jest.fn(), onViewHistoryAction: jest.fn(), + dangerColor: testColor, }); const incompatibleRender = ( columns[4] as EuiTableFieldDataColumnType @@ -422,6 +436,7 @@ describe('helpers', () => { pattern: 'auditbeat-*', onCheckNowAction: jest.fn(), onViewHistoryAction: jest.fn(), + dangerColor: testColor, }); const incompatibleRender = ( columns[4] as EuiTableFieldDataColumnType @@ -479,6 +494,7 @@ describe('helpers', () => { pattern: 'auditbeat-*', onCheckNowAction: jest.fn(), onViewHistoryAction: jest.fn(), + dangerColor: testColor, }); const ilmPhaseRender = (columns[5] as EuiTableFieldDataColumnType) .render; @@ -505,6 +521,7 @@ describe('helpers', () => { pattern: 'auditbeat-*', onCheckNowAction: jest.fn(), onViewHistoryAction: jest.fn(), + dangerColor: testColor, }); const ilmPhaseRender = (columns[5] as EuiTableFieldDataColumnType) .render; @@ -530,6 +547,7 @@ describe('helpers', () => { pattern: 'auditbeat-*', onCheckNowAction: jest.fn(), onViewHistoryAction: jest.fn(), + dangerColor: testColor, }); const ilmPhaseRender = (columns[5] as EuiTableFieldDataColumnType) .render; @@ -553,6 +571,7 @@ describe('helpers', () => { pattern: 'auditbeat-*', onCheckNowAction: jest.fn(), onViewHistoryAction: jest.fn(), + dangerColor: testColor, }); const sizeInBytesRender = (columns[6] as EuiTableFieldDataColumnType) @@ -577,6 +596,7 @@ describe('helpers', () => { pattern: 'auditbeat-*', onCheckNowAction: jest.fn(), onViewHistoryAction: jest.fn(), + dangerColor: testColor, }); const sizeInBytesRender = (columns[6] as EuiTableFieldDataColumnType) @@ -595,22 +615,22 @@ describe('helpers', () => { }); describe('getIncompatibleStatColor', () => { - test('it returns the expected color when incompatible is greater than zero', () => { + test('it returns the provided incompatible color when incompatible is greater than zero', () => { const incompatible = 123; - expect(getIncompatibleStatColor(incompatible)).toBe('#bd271e'); + expect(getIncompatibleStatColor(incompatible, testColor)).toBe(testColor); }); test('it returns undefined when incompatible is zero', () => { const incompatible = 0; - expect(getIncompatibleStatColor(incompatible)).toBeUndefined(); + expect(getIncompatibleStatColor(incompatible, testColor)).toBeUndefined(); }); test('it returns undefined when incompatible is undefined', () => { const incompatible = undefined; - expect(getIncompatibleStatColor(incompatible)).toBeUndefined(); + expect(getIncompatibleStatColor(incompatible, testColor)).toBeUndefined(); }); }); }); diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/utils/columns.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/utils/columns.tsx index 4e9bcf641ac16..3f2050e4b1c5f 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/utils/columns.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/utils/columns.tsx @@ -15,9 +15,8 @@ import { } from '@elastic/eui'; import React from 'react'; import moment from 'moment'; -import styled from 'styled-components'; +import { css } from '@emotion/react'; -import { euiThemeVars } from '@kbn/ui-theme'; import { getDocsCountPercent } from '../../../../../utils/stats'; import { IndexSummaryTableItem } from '../../../../../types'; import { EMPTY_STAT } from '../../../../../constants'; @@ -39,9 +38,11 @@ import { getIndexResultToolTip } from '../../utils/get_index_result_tooltip'; import { CHECK_NOW } from '../../translations'; import { HISTORICAL_RESULTS_TOUR_SELECTOR_KEY } from '../../constants'; -const ProgressContainer = styled.div` - width: 150px; -`; +const styles = { + progressContainer: css({ + width: '150px', + }), +}; export const getSummaryTableILMPhaseColumn = ( isILMAvailable: boolean @@ -93,8 +94,10 @@ export const getSummaryTableSizeInBytesColumn = ({ ] : []; -export const getIncompatibleStatColor = (incompatible: number | undefined): string | undefined => - incompatible != null && incompatible > 0 ? euiThemeVars.euiColorDanger : undefined; +export const getIncompatibleStatColor = ( + incompatible: number | undefined, + dangerColor: string +): string | undefined => (incompatible != null && incompatible > 0 ? dangerColor : undefined); export const getSummaryTableColumns = ({ formatBytes, @@ -104,6 +107,7 @@ export const getSummaryTableColumns = ({ onCheckNowAction, onViewHistoryAction, firstIndexName, + dangerColor, }: { formatBytes: (value: number | undefined) => string; formatNumber: (value: number | undefined) => string; @@ -112,6 +116,7 @@ export const getSummaryTableColumns = ({ onCheckNowAction: (indexName: string) => void; onViewHistoryAction: (indexName: string) => void; firstIndexName?: string; + dangerColor: string; }): Array> => [ { name: i18n.ACTIONS, @@ -186,7 +191,7 @@ export const getSummaryTableColumns = ({ field: 'docsCount', name: DOCS, render: (_, { docsCount, patternDocsCount }) => ( - +
    - +
    ), sortable: true, truncateText: false, @@ -209,7 +214,7 @@ export const getSummaryTableColumns = ({ {incompatible ?? EMPTY_STAT} diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/chart_legend_item/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/chart_legend_item/index.tsx index 3264696e59ddd..607b7fc282a19 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/chart_legend_item/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/chart_legend_item/index.tsx @@ -7,19 +7,21 @@ import { EuiFlexGroup, EuiFlexItem, EuiHealth, EuiLink, EuiText, EuiToolTip } from '@elastic/eui'; import React from 'react'; -import styled from 'styled-components'; +import { css } from '@emotion/react'; const DEFAULT_DATA_TEST_SUBJ = 'chartLegendItem'; -export const ChartLegendLink = styled(EuiLink)` - width: 100%; -`; -export const FixedWidthLegendText = styled(EuiText)<{ - $width: number | undefined; -}>` - text-align: left; - ${({ $width }) => ($width != null ? `width: ${$width}px;` : '')} -`; +const getStyles = (width?: number) => { + return { + chartLegendLink: css({ + width: '100%', + }), + fixedWidthLegendText: css({ + textAlign: 'left', + ...(width != null ? { width: `${width}px` } : {}), + }), + }; +}; interface Props { color: string | null; @@ -37,36 +39,40 @@ const ChartLegendItemComponent: React.FC = ({ onClick, text, textWidth, -}) => ( - - - - - {color != null ? ( - - +}) => { + const styles = getStyles(textWidth); + return ( + + + + + {color != null ? ( + + + {text} + + + ) : ( + {text} - - - ) : ( - - {text} - - )} - - + + )} + + - - {count} - - - -); + + {count} + + + + ); +}; ChartLegendItemComponent.displayName = 'ChartLegendItemComponent'; diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/index.test.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/index.test.tsx index 9ed31d89c37af..2210054471404 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/index.test.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/index.test.tsx @@ -66,6 +66,10 @@ jest.mock('@elastic/charts', () => { }; }); +const successColor = 'test-success-color'; +const dangerColor = 'test-danger-color'; +const primaryColor = 'test-primary-color'; + describe('StorageTreemap', () => { describe('when data is provided', () => { beforeEach(() => { @@ -85,7 +89,7 @@ describe('StorageTreemap', () => { }); test('it renders the legend with the expected overflow-y style', () => { - expect(screen.getByTestId('legend')).toHaveClass('eui-yScroll'); + expect(screen.getByTestId('legend')).toHaveClass('eui-scrollBar'); }); test('it uses a theme with the expected `minFontSize` to show more labels at various screen resolutions', () => { @@ -93,7 +97,14 @@ describe('StorageTreemap', () => { }); describe('legend items', () => { - const allLegendItems = getLegendItems({ patterns, flattenedBuckets, patternRollups }); + const allLegendItems = getLegendItems({ + patterns, + flattenedBuckets, + patternRollups, + successColor, + dangerColor, + primaryColor, + }); describe('pattern legend items', () => { const justPatterns = allLegendItems.filter((x) => x.ilmPhase == null); diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/index.tsx index 469f42b648ba2..23897dc713523 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/index.tsx @@ -18,10 +18,10 @@ import type { XYChartElementEvent, } from '@elastic/charts'; import { Chart, Partition, PartitionLayout, Settings } from '@elastic/charts'; -import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; +import { EuiFlexGroup, EuiFlexItem, useEuiTheme } from '@elastic/eui'; import React, { useCallback, useMemo } from 'react'; import { i18n } from '@kbn/i18n'; -import styled from 'styled-components'; +import { css } from '@emotion/react'; import { ChartLegendItem } from './chart_legend_item'; import { NoData } from './no_data'; @@ -32,24 +32,32 @@ import { getPathToFlattenedBucketMap } from './utils/get_path_to_flattened_bucke import { getLayersMultiDimensional } from './utils/get_layers_multi_dimensional'; import { getLegendItems } from './utils/get_legend_items'; -export const ChartFlexItem = styled(EuiFlexItem)<{ - $maxChartHeight: number | undefined; - $minChartHeight: number; -}>` - ${({ $maxChartHeight }) => ($maxChartHeight != null ? `max-height: ${$maxChartHeight}px;` : '')} - min-height: ${({ $minChartHeight }) => `${$minChartHeight}px`}; -`; - -export const LegendContainer = styled.div<{ - $height?: number; - $width?: number; -}>` - margin-left: ${({ theme }) => theme.eui.euiSizeM}; - margin-top: ${({ theme }) => theme.eui.euiSizeM}; - ${({ $height }) => ($height != null ? `height: ${$height}px;` : '')} - scrollbar-width: thin; - ${({ $width }) => ($width != null ? `width: ${$width}px;` : '')} -`; +interface StyleProps { + maxChartHeight?: number; + minChartHeight: number; + height?: number; + width?: number; +} + +const useStyles = ({ maxChartHeight, minChartHeight, height, width }: StyleProps) => { + const { euiTheme } = useEuiTheme(); + + return { + chart: css({ + ...(maxChartHeight != null && { maxHeight: `${maxChartHeight}px` }), + minHeight: `${minChartHeight}px`, + }), + + legendContainer: css({ + marginLeft: euiTheme.size.m, + marginTop: euiTheme.size.m, + overflowY: 'auto', + ...(height != null && { height: `${height}px` }), + scrollbarWidth: 'thin', + ...(width != null && { width: `${width}px` }), + }), + }; +}; export const DEFAULT_MIN_CHART_HEIGHT = 240; // px export const LEGEND_WIDTH = 220; // px @@ -107,6 +115,13 @@ const StorageTreemapComponent: React.FC = ({ patternRollups, valueFormatter, }: Props) => { + const styles = useStyles({ + maxChartHeight, + minChartHeight, + height: maxChartHeight, + width: LEGEND_WIDTH, + }); + const { euiTheme } = useEuiTheme(); const { theme, baseTheme, patterns } = useDataQualityContext(); const fillColor = useMemo( () => theme?.background?.color ?? baseTheme.background.color, @@ -146,15 +161,40 @@ const StorageTreemapComponent: React.FC = ({ valueFormatter, layer0FillColor: fillColor, pathToFlattenedBucketMap, + successColor: euiTheme.colors.success, + dangerColor: euiTheme.colors.danger, + primaryColor: euiTheme.colors.primary, }), - [fillColor, valueFormatter, pathToFlattenedBucketMap] + [ + valueFormatter, + fillColor, + pathToFlattenedBucketMap, + euiTheme.colors.success, + euiTheme.colors.danger, + euiTheme.colors.primary, + ] ); const valueAccessor = useCallback((d: Datum) => d[accessor], [accessor]); const legendItems = useMemo( - () => getLegendItems({ patterns, flattenedBuckets, patternRollups }), - [flattenedBuckets, patternRollups, patterns] + () => + getLegendItems({ + patterns, + flattenedBuckets, + patternRollups, + successColor: euiTheme.colors.success, + dangerColor: euiTheme.colors.danger, + primaryColor: euiTheme.colors.primary, + }), + [ + euiTheme.colors.danger, + euiTheme.colors.primary, + euiTheme.colors.success, + flattenedBuckets, + patternRollups, + patterns, + ] ); if (flattenedBuckets.length === 0) { @@ -163,7 +203,7 @@ const StorageTreemapComponent: React.FC = ({ return ( - + {flattenedBuckets.length === 0 ? ( ) : ( @@ -185,15 +225,10 @@ const StorageTreemapComponent: React.FC = ({ /> )} - + - +
    {legendItems.map(({ color, ilmPhase, index, pattern, sizeInBytes, docsCount }) => ( = ({ textWidth={LEGEND_TEXT_WITH} /> ))} - +
    ); diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/no_data/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/no_data/index.tsx index 4e5e8a46e62fd..3ccecba279d5c 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/no_data/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/no_data/index.tsx @@ -5,44 +5,57 @@ * 2.0. */ -import { EuiFlexGroup, EuiFlexItem, EuiSpacer, EuiText } from '@elastic/eui'; +import { EuiFlexGroup, EuiFlexItem, EuiSpacer, EuiText, useEuiTheme } from '@elastic/eui'; import React from 'react'; -import styled from 'styled-components'; +import { css } from '@emotion/react'; import * as i18n from '../translations'; -const NoDataLabel = styled(EuiText)` - text-align: center; -`; +const useStyles = () => { + const { euiTheme } = useEuiTheme(); + + return { + noDataLabel: css({ + textAlign: 'center', + }), + container: css({ + padding: `${euiTheme.size.m} 0`, + }), + }; +}; interface Props { reason?: string; } -const StyledContainer = styled.div` - padding: ${({ theme }) => theme.eui.euiSizeM} 0; -`; - -const NoDataComponent: React.FC = ({ reason }) => ( - - - - - {i18n.NO_DATA_LABEL} - - - {reason != null && ( - <> - - - {reason} - - - )} - - - -); +const NoDataComponent: React.FC = ({ reason }) => { + const styles = useStyles(); + return ( + + +
    + + {i18n.NO_DATA_LABEL} + + + {reason != null && ( + <> + + + {reason} + + + )} +
    +
    +
    + ); +}; NoDataComponent.displayName = 'NoDataComponent'; diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_fill_color.test.ts b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_fill_color.test.ts index 41ce95e50cfbd..4dd21ef089554 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_fill_color.test.ts +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_fill_color.test.ts @@ -5,27 +5,34 @@ * 2.0. */ -import { euiThemeVars } from '@kbn/ui-theme'; - import { getFillColor } from './get_fill_color'; -import { DEFAULT_INDEX_COLOR } from '../constants'; + +const successColor = 'test-success-color'; +const dangerColor = 'test-danger-color'; +const primaryColor = 'test-primary-color'; describe('getFillColor', () => { test('it returns success when `incompatible` is zero', () => { const incompatible = 0; - expect(getFillColor(incompatible)).toEqual(euiThemeVars.euiColorSuccess); + expect(getFillColor(incompatible, successColor, dangerColor, primaryColor)).toEqual( + successColor + ); }); test('it returns danger when `incompatible` is greater than 0', () => { const incompatible = 1; - expect(getFillColor(incompatible)).toEqual(euiThemeVars.euiColorDanger); + expect(getFillColor(incompatible, successColor, dangerColor, primaryColor)).toEqual( + dangerColor + ); }); test('it returns the default color when `incompatible` is undefined', () => { const incompatible = undefined; - expect(getFillColor(incompatible)).toEqual(DEFAULT_INDEX_COLOR); + expect(getFillColor(incompatible, successColor, dangerColor, primaryColor)).toEqual( + primaryColor + ); }); }); diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_fill_color.ts b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_fill_color.ts index 5c2d43a66ee15..41c0526fac90e 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_fill_color.ts +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_fill_color.ts @@ -4,15 +4,18 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { euiThemeVars } from '@kbn/ui-theme'; -import { DEFAULT_INDEX_COLOR } from '../constants'; -export const getFillColor = (incompatible: number | undefined): string => { +export const getFillColor = ( + incompatible: number | undefined, + successColor: string, + dangerColor: string, + primaryColor: string +): string => { if (incompatible === 0) { - return euiThemeVars.euiColorSuccess; + return successColor; } else if (incompatible != null && incompatible > 0) { - return euiThemeVars.euiColorDanger; + return dangerColor; } else { - return DEFAULT_INDEX_COLOR; + return primaryColor; } }; diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_layers_multi_dimensional.test.ts b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_layers_multi_dimensional.test.ts index aa6aee9fafc29..df51711542666 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_layers_multi_dimensional.test.ts +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_layers_multi_dimensional.test.ts @@ -28,6 +28,10 @@ const patternRollups: Record = { 'packetbeat-*': packetbeatNoResults, }; +const successColor = 'test-success-color'; +const dangerColor = 'test-danger-color'; +const primaryColor = 'test-primary-color'; + describe('getGroupFromPath', () => { it('returns the expected group from the path', () => { expect( @@ -76,6 +80,9 @@ describe('getLayersMultiDimensional', () => { valueFormatter: formatBytes, layer0FillColor, pathToFlattenedBucketMap, + successColor, + dangerColor, + primaryColor, }).length ).toEqual(2); }); @@ -85,6 +92,9 @@ describe('getLayersMultiDimensional', () => { valueFormatter: formatBytes, layer0FillColor, pathToFlattenedBucketMap, + successColor, + dangerColor, + primaryColor, }).forEach((x) => expect(x.fillLabel.valueFormatter(123)).toEqual('123B')); }); }); diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_layers_multi_dimensional.ts b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_layers_multi_dimensional.ts index da5947f742138..0032f1445159f 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_layers_multi_dimensional.ts +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_layers_multi_dimensional.ts @@ -25,10 +25,16 @@ export const getLayersMultiDimensional = ({ valueFormatter, layer0FillColor, pathToFlattenedBucketMap, + successColor, + dangerColor, + primaryColor, }: { valueFormatter: (value: number) => string; layer0FillColor: string; pathToFlattenedBucketMap: Record; + successColor: string; + dangerColor: string; + primaryColor: string; }) => { return [ { @@ -52,7 +58,12 @@ export const getLayersMultiDimensional = ({ const pattern = getGroupFromPath(node.path) ?? ''; const flattenedBucket = pathToFlattenedBucketMap[`${pattern}${indexName}`]; - return getFillColor(flattenedBucket?.incompatible); + return getFillColor( + flattenedBucket?.incompatible, + successColor, + dangerColor, + primaryColor + ); }, }, }, diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_legend_items.test.ts b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_legend_items.test.ts index eee30b2d974cf..6abc82fcaa513 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_legend_items.test.ts +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_legend_items.test.ts @@ -5,8 +5,6 @@ * 2.0. */ -import { euiThemeVars } from '@kbn/ui-theme'; - import { getFlattenedBuckets } from '../../utils/get_flattened_buckets'; import { alertIndexWithAllResults } from '../../../../mock/pattern_rollup/mock_alerts_pattern_rollup'; import { auditbeatWithAllResults } from '../../../../mock/pattern_rollup/mock_auditbeat_pattern_rollup'; @@ -22,6 +20,10 @@ const patternRollups: Record = { 'packetbeat-*': packetbeatNoResults, }; +const successColor = 'test-success-color'; +const dangerColor = 'test-danger-color'; +const primaryColor = 'test-primary-color'; + describe('getPatternLegendItem', () => { test('it returns the expected legend item', () => { const pattern = 'auditbeat-*'; @@ -46,9 +48,17 @@ describe('getLegendItemsForPattern', () => { patternRollups, }); - expect(getLegendItemsForPattern({ pattern, flattenedBuckets })).toEqual([ + expect( + getLegendItemsForPattern({ + pattern, + flattenedBuckets, + successColor, + dangerColor, + primaryColor, + }) + ).toEqual([ { - color: euiThemeVars.euiColorSuccess, + color: successColor, ilmPhase: 'hot', index: '.ds-auditbeat-8.6.1-2023.02.07-000001', pattern: 'auditbeat-*', @@ -56,7 +66,7 @@ describe('getLegendItemsForPattern', () => { docsCount: 19123, }, { - color: euiThemeVars.euiColorDanger, + color: dangerColor, ilmPhase: 'unmanaged', index: 'auditbeat-custom-index-1', pattern: 'auditbeat-*', @@ -64,7 +74,7 @@ describe('getLegendItemsForPattern', () => { docsCount: 4, }, { - color: euiThemeVars.euiColorDanger, + color: dangerColor, ilmPhase: 'unmanaged', index: 'auditbeat-custom-empty-index-1', pattern: 'auditbeat-*', @@ -81,9 +91,17 @@ describe('getLegendItemsForPattern', () => { isILMAvailable: false, patternRollups, }); - expect(getLegendItemsForPattern({ pattern, flattenedBuckets })).toEqual([ + expect( + getLegendItemsForPattern({ + pattern, + flattenedBuckets, + successColor, + dangerColor, + primaryColor, + }) + ).toEqual([ { - color: euiThemeVars.euiColorSuccess, + color: successColor, ilmPhase: null, index: '.ds-auditbeat-8.6.1-2023.02.07-000001', pattern: 'auditbeat-*', @@ -91,7 +109,7 @@ describe('getLegendItemsForPattern', () => { docsCount: 19123, }, { - color: euiThemeVars.euiColorDanger, + color: dangerColor, ilmPhase: null, index: 'auditbeat-custom-index-1', pattern: 'auditbeat-*', @@ -99,7 +117,7 @@ describe('getLegendItemsForPattern', () => { docsCount: 4, }, { - color: euiThemeVars.euiColorDanger, + color: dangerColor, ilmPhase: null, index: 'auditbeat-custom-empty-index-1', pattern: 'auditbeat-*', @@ -118,7 +136,16 @@ describe('getLegendItems', () => { patternRollups, }); - expect(getLegendItems({ flattenedBuckets, patterns, patternRollups })).toEqual([ + expect( + getLegendItems({ + flattenedBuckets, + patterns, + patternRollups, + successColor, + dangerColor, + primaryColor, + }) + ).toEqual([ { color: null, ilmPhase: null, @@ -128,7 +155,7 @@ describe('getLegendItems', () => { docsCount: 26093, }, { - color: euiThemeVars.euiColorSuccess, + color: successColor, ilmPhase: 'hot', index: '.internal.alerts-security.alerts-default-000001', pattern: '.alerts-security.alerts-default', @@ -144,7 +171,7 @@ describe('getLegendItems', () => { docsCount: 19127, }, { - color: euiThemeVars.euiColorSuccess, + color: successColor, ilmPhase: 'hot', index: '.ds-auditbeat-8.6.1-2023.02.07-000001', pattern: 'auditbeat-*', @@ -152,7 +179,7 @@ describe('getLegendItems', () => { docsCount: 19123, }, { - color: euiThemeVars.euiColorDanger, + color: dangerColor, ilmPhase: 'unmanaged', index: 'auditbeat-custom-index-1', pattern: 'auditbeat-*', @@ -160,7 +187,7 @@ describe('getLegendItems', () => { docsCount: 4, }, { - color: euiThemeVars.euiColorDanger, + color: dangerColor, ilmPhase: 'unmanaged', index: 'auditbeat-custom-empty-index-1', pattern: 'auditbeat-*', @@ -176,7 +203,7 @@ describe('getLegendItems', () => { docsCount: 3258632, }, { - color: euiThemeVars.euiColorPrimary, + color: primaryColor, ilmPhase: 'hot', index: '.ds-packetbeat-8.5.3-2023.02.04-000001', pattern: 'packetbeat-*', @@ -184,7 +211,7 @@ describe('getLegendItems', () => { docsCount: 1630289, }, { - color: euiThemeVars.euiColorPrimary, + color: primaryColor, ilmPhase: 'hot', index: '.ds-packetbeat-8.6.1-2023.02.04-000001', pattern: 'packetbeat-*', diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_legend_items.ts b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_legend_items.ts index 16816dcf2a3c6..0a82f473f6ea6 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_legend_items.ts +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_legend_items.ts @@ -14,9 +14,15 @@ import { getPatternDocsCount, getPatternSizeInBytes } from './stats'; export const getLegendItemsForPattern = ({ pattern, flattenedBuckets, + successColor, + dangerColor, + primaryColor, }: { pattern: string; flattenedBuckets: FlattenedBucket[]; + successColor: string; + dangerColor: string; + primaryColor: string; }): LegendItem[] => orderBy( ['sizeInBytes'], @@ -24,7 +30,7 @@ export const getLegendItemsForPattern = ({ flattenedBuckets .filter((x) => x.pattern === pattern) .map((flattenedBucket) => ({ - color: getFillColor(flattenedBucket.incompatible), + color: getFillColor(flattenedBucket.incompatible, successColor, dangerColor, primaryColor), ilmPhase: flattenedBucket.ilmPhase ?? null, index: flattenedBucket.indexName ?? null, pattern: flattenedBucket.pattern, @@ -52,16 +58,28 @@ export const getLegendItems = ({ patterns, flattenedBuckets, patternRollups, + successColor, + dangerColor, + primaryColor, }: { patterns: string[]; flattenedBuckets: FlattenedBucket[]; patternRollups: Record; + successColor: string; + dangerColor: string; + primaryColor: string; }): LegendItem[] => patterns.reduce( (acc, pattern) => [ ...acc, getPatternLegendItem({ pattern, patternRollups }), - ...getLegendItemsForPattern({ pattern, flattenedBuckets }), + ...getLegendItemsForPattern({ + pattern, + flattenedBuckets, + successColor, + dangerColor, + primaryColor, + }), ], [] ); diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/ilm_phase_filter/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/ilm_phase_filter/index.tsx index cd7148d38b3aa..085dc9fc388bb 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/ilm_phase_filter/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/ilm_phase_filter/index.tsx @@ -8,6 +8,7 @@ import { EuiComboBox, EuiComboBoxOptionOption, + EuiFormControlLayout, EuiFormLabel, EuiToolTip, useGeneratedHtmlId, @@ -22,17 +23,17 @@ import { SELECT_ONE_OR_MORE_ILM_PHASES, } from '../../translations'; import { useDataQualityContext } from '../../data_quality_context'; -import { StyledFormControlLayout, StyledOption, StyledOptionLabel } from './styles'; +import { formControlLayoutCss, optionCss, optionLabelCss } from './styles'; const renderOption = ( option: EuiComboBoxOptionOption ): React.ReactNode => ( - - {`${option.label}`} +
    + {`${option.label}`} {': '} {getIlmPhaseDescription(option.label)} - +
    ); @@ -53,7 +54,7 @@ const IlmPhaseFilterComponent: React.FC = () => { return ( - + { options={ilmPhaseOptionsStatic} onChange={handleSetSelectedOptions} /> - + ); }; diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/ilm_phase_filter/styles.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/ilm_phase_filter/styles.tsx index f2ff23d441165..141cee87c7c79 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/ilm_phase_filter/styles.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/ilm_phase_filter/styles.tsx @@ -5,24 +5,23 @@ * 2.0. */ -import { EuiFormControlLayout } from '@elastic/eui'; -import styled from 'styled-components'; +import { UseEuiTheme } from '@elastic/eui'; +import { CSSObject, css } from '@emotion/react'; -export const StyledOption = styled.div` - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - width: 100%; -`; +export const optionCss = css({ + overflow: 'hidden', + textOverflow: 'ellipsis', + whiteSpace: 'nowrap', + width: '100%', +}); -export const StyledOptionLabel = styled.span` - font-weight: ${({ theme }) => theme.eui.euiFontWeightBold}; -`; +export const optionLabelCss = ({ euiTheme }: UseEuiTheme): CSSObject => ({ + fontWeight: euiTheme.font.weight.bold, +}); -export const StyledFormControlLayout = styled(EuiFormControlLayout)` - height: 42px; - - .euiFormControlLayout__childrenWrapper { - overflow: visible; - } -`; +export const formControlLayoutCss = css({ + height: 42, + '.euiFormControlLayout__childrenWrapper': { + overflow: 'visible', + }, +}); diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/index.tsx index 09c98c1a84197..ee90d2b9e78d0 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/index.tsx @@ -5,9 +5,9 @@ * 2.0. */ -import { EuiFlexGroup, EuiFlexItem, EuiPanel } from '@elastic/eui'; +import { EuiFlexGroup, EuiFlexItem, EuiPanel, useEuiTheme } from '@elastic/eui'; import React from 'react'; -import styled from 'styled-components'; +import { css } from '@emotion/react'; import { StatsRollup } from '../stats_rollup'; import { SummaryActions } from './summary_actions'; @@ -18,53 +18,57 @@ import { useResultsRollupContext } from '../contexts/results_rollup_context'; const MAX_SUMMARY_ACTIONS_CONTAINER_WIDTH = 400; const MIN_SUMMARY_ACTIONS_CONTAINER_WIDTH = 235; -const StyledFlexGroup = styled(EuiFlexGroup)` - min-height: calc(174px - ${({ theme }) => theme.eui.euiSizeL} * 2); -`; +const useStyles = () => { + const { euiTheme } = useEuiTheme(); -const StyledFlexItem = styled(EuiFlexItem)` - gap: ${({ theme }) => theme.eui.euiSizeL}; -`; - -const SummaryActionsContainerFlexItem = styled(EuiFlexItem)` - max-width: ${MAX_SUMMARY_ACTIONS_CONTAINER_WIDTH}px; - min-width: ${MIN_SUMMARY_ACTIONS_CONTAINER_WIDTH}px; -`; - -const StyledIlmPhaseFilterContainer = styled.div` - width: 100%; - max-width: 432px; - align-self: flex-end; -`; - -const StyledRollupContainer = styled.div` - margin-top: auto; -`; + return { + flexGroup: css({ + minHeight: `calc(174px - ${euiTheme.size.l} * 2)`, + }), + flexItem: css({ + gap: euiTheme.size.l, + }), + summaryActionsContainer: css({ + maxWidth: MAX_SUMMARY_ACTIONS_CONTAINER_WIDTH, + minWidth: MIN_SUMMARY_ACTIONS_CONTAINER_WIDTH, + }), + ilmPhaseFilterContainer: css({ + width: '100%', + maxWidth: 432, + alignSelf: 'flex-end', + }), + rollupContainer: css({ + marginTop: 'auto', + }), + }; +}; const DataQualitySummaryComponent: React.FC = () => { + const styles = useStyles(); const { isILMAvailable } = useDataQualityContext(); const { totalIndices, totalDocsCount, totalIndicesChecked, totalIncompatible, totalSizeInBytes } = useResultsRollupContext(); return ( - - + - + - + {isILMAvailable && ( - +
    - +
    )} - +
    { indicesChecked={totalIndicesChecked} sizeInBytes={totalSizeInBytes} /> - - - +
    +
    +
    ); }; diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_all/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_all/index.tsx index 7f8405845714e..c7b15a9e43a0a 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_all/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_all/index.tsx @@ -7,7 +7,7 @@ import { EuiButton } from '@elastic/eui'; import React, { useCallback, useEffect, useState } from 'react'; -import styled from 'styled-components'; +import { css } from '@emotion/react'; import { v4 as uuidv4 } from 'uuid'; import { getAllIndicesToCheck } from './utils/get_all_indices_to_check'; @@ -18,9 +18,11 @@ import * as i18n from '../../../translations'; import type { IndexToCheck } from '../../../types'; import { useAbortControllerRef } from '../../../hooks/use_abort_controller_ref'; -const CheckAllButton = styled(EuiButton)` - width: 112px; -`; +const styles = { + checkAllButton: css({ + width: '112px', + }), +}; async function wait(ms: number) { const delay = () => @@ -150,7 +152,8 @@ const CheckAllComponent: React.FC = ({ const disabled = isILMAvailable && ilmPhases.length === 0; return ( - = ({ onClick={onClick} > {isRunning ? i18n.CANCEL : i18n.CHECK_ALL} - + ); }; diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_status/errors_popover/errors_viewer/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_status/errors_popover/errors_viewer/index.tsx index 363127e4f919c..5c5b49ad9ac06 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_status/errors_popover/errors_viewer/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_status/errors_popover/errors_viewer/index.tsx @@ -7,7 +7,7 @@ import { EuiInMemoryTable } from '@elastic/eui'; import React, { useMemo } from 'react'; -import styled from 'styled-components'; +import { css } from '@emotion/react'; import { ERRORS_CONTAINER_MAX_WIDTH, @@ -16,10 +16,12 @@ import { } from './helpers'; import type { ErrorSummary } from '../../../../../types'; -const ErrorsViewerContainer = styled.div` - max-width: ${ERRORS_CONTAINER_MAX_WIDTH}px; - min-width: ${ERRORS_CONTAINER_MIN_WIDTH}px; -`; +const styles = { + errorsViewerContainer: css({ + maxWidth: ERRORS_CONTAINER_MAX_WIDTH, + minWidth: ERRORS_CONTAINER_MIN_WIDTH, + }), +}; interface Props { errorSummary: ErrorSummary[]; @@ -29,7 +31,7 @@ const ErrorsViewerComponent: React.FC = ({ errorSummary }) => { const columns = useMemo(() => getErrorsViewerTableColumns(), []); return ( - +
    = ({ errorSummary }) => { sorting={false} pagination={true} /> - +
    ); }; diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_status/errors_popover/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_status/errors_popover/index.tsx index 18824bd310ac7..e3f18247e210d 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_status/errors_popover/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_status/errors_popover/index.tsx @@ -14,7 +14,7 @@ import { EuiSpacer, } from '@elastic/eui'; import React, { useCallback, useMemo, useState } from 'react'; -import styled from 'styled-components'; +import { css } from '@emotion/react'; import { COPY_TO_CLIPBOARD, @@ -35,9 +35,11 @@ import { getErrorsMarkdownTable, getErrorsMarkdownTableRows } from '../../utils/ import { ERROR, ERRORS, PATTERN } from '../../translations'; import { COPIED_ERRORS_TOAST_TITLE, VIEW_ERRORS } from './translations'; -const CallOut = styled(EuiCallOut)` - max-width: ${ERRORS_CONTAINER_MAX_WIDTH}px; -`; +const styles = { + callout: css({ + maxWidth: `${ERRORS_CONTAINER_MAX_WIDTH}px`, + }), +}; interface Props { addSuccessToast: (toast: { title: string }) => void; @@ -89,7 +91,13 @@ const ErrorsPopoverComponent: React.FC = ({ addSuccessToast, errorSummary isOpen={isPopoverOpen} panelPaddingSize="s" > - +

    {ERRORS_CALLOUT_SUMMARY}

    {ERRORS_MAY_OCCUR}

    @@ -116,7 +124,7 @@ const ErrorsPopoverComponent: React.FC = ({ addSuccessToast, errorSummary > {COPY_TO_CLIPBOARD} -
    + diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/index.tsx index e155bfadea07d..9f7bc94eadcd7 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/index.tsx @@ -8,7 +8,7 @@ import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { sortBy } from 'lodash/fp'; import React, { useCallback, useMemo, useState } from 'react'; -import styled from 'styled-components'; +import { css } from '@emotion/react'; import { CheckAll } from './check_all'; import { CheckStatus } from './check_status'; @@ -30,10 +30,12 @@ import { getSummaryTableMarkdownHeader, getSummaryTableMarkdownRow } from '../.. import { ERROR, ERRORS, PATTERN } from './translations'; import { INDEX } from '../../translations'; -const StyledActionsContainerFlexItem = styled(EuiFlexItem)` - margin-top: auto; - padding-bottom: 3px; -`; +const styles = { + actionsContainer: css({ + marginTop: 'auto', + paddingBottom: '3px', + }), +}; export const getResultsSortedByDocsCount = ( results: Record | undefined @@ -218,13 +220,13 @@ const SummaryActionsComponent: React.FC = () => { /> - + - + ); diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/mock/test_providers/test_providers.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/mock/test_providers/test_providers.tsx index e0220d26e8690..cc769b011a52c 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/mock/test_providers/test_providers.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/mock/test_providers/test_providers.tsx @@ -9,14 +9,15 @@ import { actionTypeRegistryMock } from '@kbn/triggers-actions-ui-plugin/public/a import { httpServiceMock } from '@kbn/core-http-browser-mocks'; import { notificationServiceMock } from '@kbn/core-notifications-browser-mocks'; import { AssistantAvailability, AssistantProvider } from '@kbn/elastic-assistant'; -import { I18nProvider } from '@kbn/i18n-react'; -import { euiDarkVars } from '@kbn/ui-theme'; import React from 'react'; -import { ThemeProvider } from 'styled-components'; +import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { Theme } from '@elastic/charts'; - +import { coreMock } from '@kbn/core/public/mocks'; import { UserProfileService } from '@kbn/core/public'; +import { I18nProvider } from '@kbn/i18n-react'; +import { EuiThemeProvider } from '@elastic/eui'; + import { DataQualityProvider, DataQualityProviderProps } from '../../data_quality_context'; import { ResultsRollupContext } from '../../contexts/results_rollup_context'; import { IndicesCheckContext } from '../../contexts/indices_check_context'; @@ -66,30 +67,32 @@ const TestExternalProvidersComponent: React.FC = ({ }); return ( - - ({ eui: euiDarkVars, darkMode: true })}> - - - {children} - - - - + + + + + + {children} + + + + + ); }; diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/stat/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/stat/index.tsx index a7d9286561a5b..be0f713872e7d 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/stat/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/stat/index.tsx @@ -6,17 +6,22 @@ */ import React from 'react'; -import { EuiBadge, EuiText, EuiToolTip } from '@elastic/eui'; -import styled from 'styled-components'; +import { EuiBadge, EuiText, EuiToolTip, useEuiTheme } from '@elastic/eui'; +import { css } from '@emotion/react'; -const StyledText = styled(EuiText)` - white-space: nowrap; -`; +const useStyles = () => { + const { euiTheme } = useEuiTheme(); -const StyledDescription = styled.span` - margin-right: ${({ theme }) => theme.eui.euiSizeS}; - vertical-align: baseline; -`; + return { + text: css({ + whiteSpace: 'nowrap', + }), + description: css({ + marginRight: euiTheme.size.s, + verticalAlign: 'baseline', + }), + }; +}; export interface Props { badgeText: string; @@ -33,14 +38,15 @@ const StatComponent: React.FC = ({ children, badgeProps, }) => { + const styles = useStyles(); return ( - - {children && {children}} + + {children && {children}} {badgeText} - + ); }; diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/stats_rollup/index.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/stats_rollup/index.tsx index 7a0fb2deaf5bb..95b2836981558 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/stats_rollup/index.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/stats_rollup/index.tsx @@ -5,9 +5,9 @@ * 2.0. */ -import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; +import { EuiFlexGroup, EuiFlexItem, useEuiTheme } from '@elastic/eui'; import React from 'react'; -import styled from 'styled-components'; +import { css } from '@emotion/react'; import { EMPTY_STAT } from '../constants'; import { useDataQualityContext } from '../data_quality_context'; @@ -15,19 +15,25 @@ import * as i18n from '../stat_label/translations'; import { Stat } from '../stat'; import { getIncompatibleStatBadgeColor } from '../utils/get_incompatible_stat_badge_color'; -const StyledStatWrapperFlexItem = styled(EuiFlexItem)` - padding: 0 ${({ theme }) => theme.eui.euiSize}; - border-right: ${({ theme }) => theme.eui.euiBorderThin}; - border-color: ${({ theme }) => theme.eui.euiBorderColor}; +const useStyles = () => { + const { euiTheme } = useEuiTheme(); - &:last-child { - padding-right: 0; - border-right: none; - } - &:first-child { - padding-left: 0; - } -`; + return { + statWrapper: css({ + padding: `0 ${euiTheme.size.base}`, + borderRight: euiTheme.border.thin, + borderColor: euiTheme.border.color, + + '&:last-child': { + paddingRight: 0, + borderRight: 'none', + }, + '&:first-child': { + paddingLeft: 0, + }, + }), + }; +}; interface Props { docsCount?: number; @@ -46,6 +52,7 @@ const StatsRollupComponent: React.FC = ({ pattern, sizeInBytes, }) => { + const styles = useStyles(); const { formatNumber, formatBytes } = useDataQualityContext(); return ( @@ -55,7 +62,7 @@ const StatsRollupComponent: React.FC = ({ gutterSize="none" justifyContent="flexEnd" > - + = ({ > {i18n.INCOMPATIBLE_FIELDS} - + - + = ({ > {i18n.INDICES_CHECKED} - + - + = ({ > {i18n.INDICES} - + {sizeInBytes != null && ( - + = ({ > {i18n.SIZE} - + )} - + = ({ > {i18n.DOCS} - + ); }; diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/styles.tsx b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/styles.tsx index d54ea9d6316e2..899f1060ac8cc 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/styles.tsx +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/impl/data_quality_panel/styles.tsx @@ -5,19 +5,14 @@ * 2.0. */ -import { EuiCode } from '@elastic/eui'; -import { euiThemeVars } from '@kbn/ui-theme'; +import { UseEuiTheme } from '@elastic/eui'; -import styled from 'styled-components'; +import { CSSObject } from '@emotion/react'; -export const CodeDanger = styled(EuiCode)` - color: ${euiThemeVars.euiColorDanger}; -`; +export const codeDangerCss = ({ euiTheme }: UseEuiTheme): CSSObject => ({ + color: euiTheme.colors.danger, +}); -export const CodeSuccess = styled(EuiCode)` - color: ${euiThemeVars.euiColorSuccess}; -`; - -export const CodeWarning = styled(EuiCode)` - color: ${euiThemeVars.euiColorWarning}; -`; +export const codeSuccessCss = ({ euiTheme }: UseEuiTheme): CSSObject => ({ + color: euiTheme.colors.success, +}); diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/jest.config.js b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/jest.config.js index 773d813a166b9..26f3235f7f4b2 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/jest.config.js +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/jest.config.js @@ -5,6 +5,9 @@ * 2.0. */ +// eslint-disable-next-line import/no-extraneous-dependencies +const rootConfig = require('@kbn/test/jest-preset'); + module.exports = { coverageDirectory: '/target/kibana-coverage/jest/x-pack/solutions/security/packages/ecs_data_quality_dashboard_impl', @@ -23,4 +26,9 @@ module.exports = { setupFilesAfterEnv: [ '/x-pack/solutions/security/packages/ecs_data_quality_dashboard/setup_tests.ts', ], + transform: { + ...rootConfig.transform, + '^.+\\.(js|tsx?)$': + '/x-pack/solutions/security/packages/ecs_data_quality_dashboard/jest/babel-transformer.js', + }, }; diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/jest/babel-transformer.js b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/jest/babel-transformer.js new file mode 100644 index 0000000000000..d72b0ff2f1521 --- /dev/null +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/jest/babel-transformer.js @@ -0,0 +1,25 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +// eslint-disable-next-line import/no-extraneous-dependencies +const babelJest = require('babel-jest'); + +// eslint-disable-next-line import/no-extraneous-dependencies +const rootTransformerConfig = require('@kbn/test/src/jest/transforms/babel/transformer_config'); + +module.exports = babelJest.default.createTransformer({ + ...rootTransformerConfig, + presets: [ + ...rootTransformerConfig.presets, + [ + require.resolve('@emotion/babel-preset-css-prop'), + { + labelFormat: '[filename]--[local]', + }, + ], + ], +}); diff --git a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/tsconfig.json b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/tsconfig.json index 95cb9be72b6ce..56115ca102a5d 100644 --- a/x-pack/solutions/security/packages/ecs_data_quality_dashboard/tsconfig.json +++ b/x-pack/solutions/security/packages/ecs_data_quality_dashboard/tsconfig.json @@ -5,20 +5,16 @@ "types": [ "jest", "node", - "react" + "react", + "@emotion/react/types/css-prop", + "../../../../../typings/emotion.d.ts" ] }, - "include": [ - "**/*.ts", - "**/*.tsx", - ], - "exclude": [ - "target/**/*" - ], + "include": ["**/*.ts", "**/*.tsx"], + "exclude": ["target/**/*"], "kbn_references": [ "@kbn/i18n", "@kbn/i18n-react", - "@kbn/ui-theme", "@kbn/core-http-browser", "@kbn/core-http-browser-mocks", "@kbn/elastic-assistant", @@ -27,5 +23,6 @@ "@kbn/core-notifications-browser", "@kbn/core-notifications-browser-mocks", "@kbn/ai-assistant-icon", + "@kbn/react-kibana-context-render" ] } diff --git a/x-pack/solutions/security/packages/features/src/product_features_keys.ts b/x-pack/solutions/security/packages/features/src/product_features_keys.ts index 42a190b189234..bbc92ae0d978e 100644 --- a/x-pack/solutions/security/packages/features/src/product_features_keys.ts +++ b/x-pack/solutions/security/packages/features/src/product_features_keys.ts @@ -88,6 +88,9 @@ export enum ProductFeatureSecurityKey { * enables the integration assistant */ integrationAssistant = 'integration_assistant', + + /** Enables Endpoint Workflow Insights */ + securityWorkflowInsights = 'security_workflow_insights', } export enum ProductFeatureCasesKey { @@ -137,6 +140,7 @@ export enum SecuritySubFeatureId { eventFilters = 'eventFiltersSubFeature', policyManagement = 'policyManagementSubFeature', responseActionsHistory = 'responseActionsHistorySubFeature', + workflowInsights = 'workflowInsightsSubFeature', hostIsolation = 'hostIsolationSubFeature', processOperations = 'processOperationsSubFeature', fileOperations = 'fileOperationsSubFeature', diff --git a/x-pack/solutions/security/packages/features/src/security/kibana_sub_features.ts b/x-pack/solutions/security/packages/features/src/security/kibana_sub_features.ts index 00d7748d7cf98..51e15f67433dd 100644 --- a/x-pack/solutions/security/packages/features/src/security/kibana_sub_features.ts +++ b/x-pack/solutions/security/packages/features/src/security/kibana_sub_features.ts @@ -596,6 +596,58 @@ const scanActionSubFeature = (): SubFeatureConfig => ({ ], }); +const workflowInsightsSubFeature = (): SubFeatureConfig => ({ + requireAllSpaces: true, + privilegesTooltip: i18n.translate( + 'securitySolutionPackages.features.featureRegistry.subFeatures.workflowInsights.privilegesTooltip', + { + defaultMessage: 'All Spaces is required for Endpoint Insights access.', + } + ), + name: i18n.translate( + 'securitySolutionPackages.features.featureRegistry.subFeatures.workflowInsights', + { + defaultMessage: 'Endpoint Insights', + } + ), + description: i18n.translate( + 'securitySolutionPackages.features.featureRegistry.subFeatures.workflowInsights.description', + { + defaultMessage: 'Access the endpoint insights.', + } + ), + + privilegeGroups: [ + { + groupType: 'mutually_exclusive', + privileges: [ + { + api: [`${APP_ID}-writeWorkflowInsights`, `${APP_ID}-readWorkflowInsights`], + id: 'workflow_insights_all', + includeIn: 'none', + name: 'All', + savedObject: { + all: [], + read: [], + }, + ui: ['writeWorkflowInsights', 'readWorkflowInsights'], + }, + { + api: [`${APP_ID}-readWorkflowInsights`], + id: 'workflow_insights_read', + includeIn: 'none', + name: 'Read', + savedObject: { + all: [], + read: [], + }, + ui: ['readWorkflowInsights'], + }, + ], + }, + ], +}); + const endpointExceptionsSubFeature = (): SubFeatureConfig => ({ requireAllSpaces: true, privilegesTooltip: i18n.translate( @@ -709,6 +761,14 @@ export const getSecuritySubFeaturesMap = ({ // securitySubFeaturesList.push([SecuritySubFeatureId.featureId, featureSubFeature]); // } + if (experimentalFeatures.defendInsights) { + // place with other All/Read/None options + securitySubFeaturesList.splice(1, 0, [ + SecuritySubFeatureId.workflowInsights, + enableSpaceAwarenessIfNeeded(workflowInsightsSubFeature()), + ]); + } + const securitySubFeaturesMap = new Map( securitySubFeaturesList ); diff --git a/x-pack/solutions/security/packages/features/src/security/product_feature_config.ts b/x-pack/solutions/security/packages/features/src/security/product_feature_config.ts index d9157b9bb5174..be72dcdbf9df8 100644 --- a/x-pack/solutions/security/packages/features/src/security/product_feature_config.ts +++ b/x-pack/solutions/security/packages/features/src/security/product_feature_config.ts @@ -121,6 +121,9 @@ export const securityDefaultProductFeaturesConfig: DefaultSecurityProductFeature ], }, + [ProductFeatureSecurityKey.securityWorkflowInsights]: { + subFeatureIds: [SecuritySubFeatureId.workflowInsights], + }, // Product features without RBAC // Endpoint/Osquery PLIs [ProductFeatureSecurityKey.osqueryAutomatedResponseActions]: {}, diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/.storybook/README.mdx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/.storybook/README.mdx deleted file mode 100644 index ab9ce5263ec69..0000000000000 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/.storybook/README.mdx +++ /dev/null @@ -1,3 +0,0 @@ -# @kbn/cloud-security-posture-storybook-config - -Storybook configuration used by `yarn storybook`. Refer to `@kbn/storybook` for more information. diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/.storybook/package.json b/x-pack/solutions/security/packages/kbn-cloud-security-posture/.storybook/package.json deleted file mode 100644 index 4ba8c8fd3d57f..0000000000000 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/.storybook/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "@kbn/cloud-security-posture-storybook-config", - "private": true, - "version": "1.0.0", - "license": "Elastic License 2.0" -} diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/.storybook/tsconfig.json b/x-pack/solutions/security/packages/kbn-cloud-security-posture/.storybook/tsconfig.json deleted file mode 100644 index 6126ec1825c9e..0000000000000 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/.storybook/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "../../../../../../tsconfig.base.json", - "compilerOptions": { - "outDir": "target/types", - "types": ["jest", "node", "@kbn/ambient-storybook-types"] - }, - "include": ["**/*.ts"], - "kbn_references": ["@kbn/storybook"], - "exclude": ["target/**/*"] -} diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/.storybook/babel_with_emotion.ts b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/.storybook/babel_with_emotion.ts similarity index 100% rename from x-pack/solutions/security/packages/kbn-cloud-security-posture/.storybook/babel_with_emotion.ts rename to x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/.storybook/babel_with_emotion.ts diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/.storybook/constants.ts b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/.storybook/constants.ts similarity index 100% rename from x-pack/solutions/security/packages/kbn-cloud-security-posture/.storybook/constants.ts rename to x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/.storybook/constants.ts diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/.storybook/main.ts b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/.storybook/decorators/index.ts similarity index 58% rename from x-pack/solutions/security/packages/kbn-cloud-security-posture/.storybook/main.ts rename to x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/.storybook/decorators/index.ts index 2d455283571a3..23cfd1b7b5c53 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/.storybook/main.ts +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/.storybook/decorators/index.ts @@ -5,12 +5,5 @@ * 2.0. */ -import { defaultConfig } from '@kbn/storybook'; - -module.exports = { - ...defaultConfig, - stories: ['../**/*.stories.+(tsx|mdx)'], - reactOptions: { - strictMode: true, - }, -}; +export { KibanaReactStorybookDecorator } from './kibana_react_decorator'; +export { ReactQueryStorybookDecorator } from './react_query_decorator'; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/.storybook/decorators/kibana_react_decorator.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/.storybook/decorators/kibana_react_decorator.tsx new file mode 100644 index 0000000000000..621e565eb67b6 --- /dev/null +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/.storybook/decorators/kibana_react_decorator.tsx @@ -0,0 +1,150 @@ +/* + * 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, { ComponentType } from 'react'; +import { action } from '@storybook/addon-actions'; +import { createKibanaReactContext, type KibanaServices } from '@kbn/kibana-react-plugin/public'; +import { UI_SETTINGS } from '@kbn/data-plugin/common'; +import { of } from 'rxjs'; + +const createMockWebStorage = () => ({ + clear: action('clear'), + getItem: action('getItem'), + key: action('key'), + removeItem: action('removeItem'), + setItem: action('setItem'), + length: 0, +}); + +const createMockStorage = () => ({ + storage: createMockWebStorage(), + set: action('set'), + remove: action('remove'), + clear: action('clear'), + get: () => true, +}); + +const uiSettings: Record = { + [UI_SETTINGS.TIMEPICKER_TIME_DEFAULTS]: { + from: 'now-15m', + to: 'now', + }, + [UI_SETTINGS.TIMEPICKER_REFRESH_INTERVAL_DEFAULTS]: { + pause: true, + value: 1000, + }, + [UI_SETTINGS.TIMEPICKER_QUICK_RANGES]: [ + { + from: 'now/d', + to: 'now/d', + display: 'Today', + }, + { + from: 'now/w', + to: 'now/w', + display: 'This week', + }, + { + from: 'now-15m', + to: 'now', + display: 'Last 15 minutes', + }, + { + from: 'now-30m', + to: 'now', + display: 'Last 30 minutes', + }, + { + from: 'now-1h', + to: 'now', + display: 'Last 1 hour', + }, + { + from: 'now-24h', + to: 'now', + display: 'Last 24 hours', + }, + { + from: 'now-7d', + to: 'now', + display: 'Last 7 days', + }, + { + from: 'now-30d', + to: 'now', + display: 'Last 30 days', + }, + { + from: 'now-90d', + to: 'now', + display: 'Last 90 days', + }, + { + from: 'now-1y', + to: 'now', + display: 'Last 1 year', + }, + ], +}; + +const services: Partial = { + uiSettings: { + // @ts-ignore + get: (key: string) => uiSettings[key], + // @ts-ignore + get$: (key: string) => of(services.uiSettings.get(key)), + }, + // @ts-ignore + settings: { client: { get: () => {} } }, + notifications: { + toasts: { + show: action('notifications:show'), + success: action('notifications:success'), + warning: action('notifications:warning'), + danger: action('notifications:danger'), + // @ts-ignore + addError: action('notifications:addError'), + // @ts-ignore + addSuccess: action('notifications:addSuccess'), + // @ts-ignore + addWarning: action('notifications:addWarning'), + remove: action('notifications:remove'), + }, + }, + storage: createMockStorage(), + data: { + query: { + savedQueries: { + findSavedQueries: () => + Promise.resolve({ + queries: [], + }), + }, + }, + autocomplete: { + hasQuerySuggestions: () => Promise.resolve(false), + getQuerySuggestions: () => [], + }, + dataViews: { + getIdsWithTitle: () => [], + }, + }, + dataViewEditor: { + userPermissions: { + editDataView: action('editDataView'), + }, + }, +}; + +export const KibanaReactStorybookDecorator = (Story: ComponentType) => { + const KibanaReactContext = createKibanaReactContext(services); + + return ( + + + + ); +}; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/.storybook/decorators/react_query_decorator.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/.storybook/decorators/react_query_decorator.tsx new file mode 100644 index 0000000000000..f4a287c907a35 --- /dev/null +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/.storybook/decorators/react_query_decorator.tsx @@ -0,0 +1,24 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { ComponentType } from 'react'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; + +export const ReactQueryStorybookDecorator = (Story: ComponentType) => { + const mockQueryClient = new QueryClient({ + defaultOptions: { + queries: { retry: false, cacheTime: 0 }, + mutations: { retry: false }, + }, + }); + + return ( + + + + ); +}; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/.storybook/index.ts b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/.storybook/index.ts similarity index 100% rename from x-pack/solutions/security/packages/kbn-cloud-security-posture/.storybook/index.ts rename to x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/.storybook/index.ts diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/.storybook/main.ts b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/.storybook/main.ts new file mode 100644 index 0000000000000..b5e6c436a29b6 --- /dev/null +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/.storybook/main.ts @@ -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 { defaultConfig, mergeWebpackFinal } from '@kbn/storybook'; +import type { Configuration } from 'webpack'; +// eslint-disable-next-line import/no-nodejs-modules +import { resolve } from 'path'; + +const graphWebpack: Configuration = { + resolve: { + alias: { + '../../hooks/use_fetch_graph_data': resolve( + __dirname, + '../src/components/mock/use_fetch_graph_data.mock.ts' + ), + }, + }, + node: { + fs: 'empty', + stream: false, + os: false, + }, +}; + +module.exports = { + ...defaultConfig, + stories: ['../**/*.stories.+(tsx|mdx)'], + reactOptions: { + strictMode: true, + }, + ...mergeWebpackFinal(graphWebpack), +}; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/.storybook/manager.ts b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/.storybook/manager.ts similarity index 100% rename from x-pack/solutions/security/packages/kbn-cloud-security-posture/.storybook/manager.ts rename to x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/.storybook/manager.ts diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/.storybook/preview.ts b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/.storybook/preview.ts similarity index 100% rename from x-pack/solutions/security/packages/kbn-cloud-security-posture/.storybook/preview.ts rename to x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/.storybook/preview.ts diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/.storybook/styles.css b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/.storybook/styles.css similarity index 100% rename from x-pack/solutions/security/packages/kbn-cloud-security-posture/.storybook/styles.css rename to x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/.storybook/styles.css diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/README.md b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/README.md index bde99acb4e7a6..32bf6c65a04fb 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/README.md +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/README.md @@ -113,6 +113,6 @@ Be sure to check out provided helpers ## Storybook General look of the component can be checked visually running the following storybook: -`yarn storybook cloud_security_posture_packages` +`yarn storybook cloud_security_posture_graph` Note that all the interactions are mocked. \ No newline at end of file diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/jest.config.js b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/jest.config.js index 3933698808c14..629574daa2f07 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/jest.config.js +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/jest.config.js @@ -11,7 +11,7 @@ module.exports = { rootDir: '../../../../../..', transform: { '^.+\\.(js|tsx?)$': - '/x-pack/solutions/security/packages/kbn-cloud-security-posture/.storybook/babel_with_emotion.ts', + '/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/.storybook/babel_with_emotion.ts', }, setupFiles: ['jest-canvas-mock'], setupFilesAfterEnv: [ diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/controls/actions.stories.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/controls/actions.stories.tsx new file mode 100644 index 0000000000000..6c53cb7a61bca --- /dev/null +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/controls/actions.stories.tsx @@ -0,0 +1,41 @@ +/* + * 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 { Story } from '@storybook/react'; +import { ThemeProvider, css } from '@emotion/react'; +import { action } from '@storybook/addon-actions'; +import { Actions as ActionsComponent, type ActionsProps } from './actions'; + +export default { + title: 'Components/Graph Components/Additional Components', + description: 'CDR - Graph visualization', + argTypes: {}, +}; + +const Template: Story = (props) => { + return ( + + + + ); +}; + +export const Actions = Template.bind({}); + +Actions.args = { + showToggleSearch: true, + searchFilterCounter: 0, + showInvestigateInTimeline: true, +}; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/controls/actions.test.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/controls/actions.test.tsx new file mode 100644 index 0000000000000..593dca424c600 --- /dev/null +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/controls/actions.test.tsx @@ -0,0 +1,101 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { render, fireEvent } from '@testing-library/react'; +import { Actions, ActionsProps } from './actions'; +import { EuiThemeProvider } from '@elastic/eui'; +import { + GRAPH_ACTIONS_INVESTIGATE_IN_TIMELINE_ID, + GRAPH_ACTIONS_TOGGLE_SEARCH_ID, +} from '../test_ids'; + +const defaultProps: ActionsProps = { + showToggleSearch: true, + showInvestigateInTimeline: true, + onSearchToggle: jest.fn(), + onInvestigateInTimeline: jest.fn(), + searchFilterCounter: 0, +}; + +const renderWithProviders = (props: ActionsProps = defaultProps) => { + return render( + + + + ); +}; + +describe('Actions component', () => { + it('renders toggle search button', () => { + const { getByTestId, getByLabelText } = renderWithProviders(); + + expect(getByTestId(GRAPH_ACTIONS_TOGGLE_SEARCH_ID)).toBeInTheDocument(); + expect(getByLabelText('Toggle search bar')).toBeInTheDocument(); + }); + + it('renders investigate in timeline button', () => { + const { getByTestId, getByLabelText } = renderWithProviders(); + + expect(getByTestId(GRAPH_ACTIONS_TOGGLE_SEARCH_ID)).toBeInTheDocument(); + expect(getByLabelText('Investigate in timeline')).toBeInTheDocument(); + }); + + it('calls onSearchToggle when toggle search button is clicked', () => { + const { getByTestId } = renderWithProviders(); + + fireEvent.click(getByTestId(GRAPH_ACTIONS_TOGGLE_SEARCH_ID)); + + expect(defaultProps.onSearchToggle).toHaveBeenCalledWith(true); + }); + + it('calls onInvestigateInTimeline when investigate in timeline button is clicked', () => { + const { getByTestId } = renderWithProviders(); + + fireEvent.click(getByTestId(GRAPH_ACTIONS_INVESTIGATE_IN_TIMELINE_ID)); + + expect(defaultProps.onInvestigateInTimeline).toHaveBeenCalled(); + }); + + it('does not render toggle search button when showToggleSearch is false', () => { + const { queryByTestId, queryByLabelText } = renderWithProviders({ + ...defaultProps, + showToggleSearch: false, + }); + expect(queryByTestId(GRAPH_ACTIONS_TOGGLE_SEARCH_ID)).not.toBeInTheDocument(); + expect(queryByLabelText('Toggle search bar')).not.toBeInTheDocument(); + }); + + it('does not render investigate in timeline button when showInvestigateInTimeline is false', () => { + const { queryByTestId, queryByLabelText } = renderWithProviders({ + ...defaultProps, + showInvestigateInTimeline: false, + }); + expect(queryByTestId(GRAPH_ACTIONS_INVESTIGATE_IN_TIMELINE_ID)).not.toBeInTheDocument(); + expect(queryByLabelText('Investigate in timeline')).not.toBeInTheDocument(); + }); + + it('does not render search filter counter badge when searchFilterCounter is equal to 0', () => { + const { queryByText } = renderWithProviders({ ...defaultProps, searchFilterCounter: 0 }); + expect(queryByText('0')).not.toBeInTheDocument(); + }); + + it('renders search filter counter badge when searchFilterCounter is greater than 0', () => { + const { getByText } = renderWithProviders({ ...defaultProps, searchFilterCounter: 5 }); + expect(getByText('5')).toBeInTheDocument(); + }); + + it('renders "9" in search filter counter badge when searchFilterCounter is equal to 9', () => { + const { getByText } = renderWithProviders({ ...defaultProps, searchFilterCounter: 9 }); + expect(getByText('9')).toBeInTheDocument(); + }); + + it('renders "9+" in search filter counter badge when searchFilterCounter is greater than 9', () => { + const { getByText } = renderWithProviders({ ...defaultProps, searchFilterCounter: 10 }); + expect(getByText('9+')).toBeInTheDocument(); + }); +}); diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/controls/actions.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/controls/actions.tsx new file mode 100644 index 0000000000000..13124beb5a161 --- /dev/null +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/controls/actions.tsx @@ -0,0 +1,147 @@ +/* + * 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, { useState } from 'react'; +import { + type CommonProps, + EuiButtonIcon, + EuiFlexGroup, + EuiFlexItem, + EuiHorizontalRule, + EuiToolTip, + useEuiTheme, + EuiNotificationBadge, + EuiButton, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { css } from '@emotion/react'; +import { + GRAPH_ACTIONS_INVESTIGATE_IN_TIMELINE_ID, + GRAPH_ACTIONS_TOGGLE_SEARCH_ID, +} from '../test_ids'; + +const toggleSearchBarTooltip = i18n.translate( + 'securitySolutionPackages.csp.graph.controls.toggleSearchBar', + { + defaultMessage: 'Toggle search bar', + } +); + +const investigateInTimelineTooltip = i18n.translate( + 'securitySolutionPackages.csp.graph.controls.investigate', + { + defaultMessage: 'Investigate in timeline', + } +); + +export interface ActionsProps extends CommonProps { + /** + * Whether to show toggle search action button. Defaults value is false. + */ + showToggleSearch?: boolean; + + /** + * Callback when search toggle button is clicked. + */ + onSearchToggle?: (isSearchToggled: boolean) => void; + + /** + * Number of search filters applied, used to show badge on search toggle button. + */ + searchFilterCounter?: number; + + /** + * Whether to show investigate in timeline action button. Defaults value is false. + */ + showInvestigateInTimeline?: boolean; + + /** + * Callback when investigate in timeline action button is clicked, ignored if investigateInTimelineComponent is provided. + */ + onInvestigateInTimeline?: () => void; +} + +export const Actions = ({ + showToggleSearch = true, + showInvestigateInTimeline = true, + onInvestigateInTimeline, + onSearchToggle, + searchFilterCounter = 0, + ...props +}: ActionsProps) => { + const { euiTheme } = useEuiTheme(); + const [searchToggled, setSearchToggled] = useState(false); + + return ( + + {showToggleSearch && ( + + + { + setSearchToggled((prev) => { + onSearchToggle?.(!prev); + return !prev; + }); + }} + > + {searchFilterCounter > 0 && ( + + {searchFilterCounter > 9 ? '9+' : searchFilterCounter} + + )} + + + + )} + {showToggleSearch && showInvestigateInTimeline && } + {showInvestigateInTimeline && ( + + + { + onInvestigateInTimeline?.(); + }} + /> + + + )} + + ); +}; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/controls/controls.stories.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/controls/controls.stories.tsx new file mode 100644 index 0000000000000..dbe33c2321fde --- /dev/null +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/controls/controls.stories.tsx @@ -0,0 +1,56 @@ +/* + * 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 { Story, type Meta } from '@storybook/react'; +import { ThemeProvider, css } from '@emotion/react'; +import { ReactFlowProvider } from '@xyflow/react'; +import { action } from '@storybook/addon-actions'; +import { Controls as ControlsComponent, type ControlsProps } from './controls'; + +export default { + title: 'Components/Graph Components/Additional Components', + description: 'CDR - Graph visualization', + argTypes: { + showZoom: { + control: { type: 'boolean' }, + }, + showFitView: { + control: { type: 'boolean' }, + }, + showCenter: { + control: { type: 'boolean' }, + }, + }, +} as Meta; + +const Template: Story = (props) => { + return ( + + + + + + ); +}; + +export const Controls = Template.bind({}); + +Controls.args = { + showZoom: true, + showFitView: true, + showCenter: true, +}; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/controls/controls.test.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/controls/controls.test.tsx new file mode 100644 index 0000000000000..3d8fe4fadaf12 --- /dev/null +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/controls/controls.test.tsx @@ -0,0 +1,119 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { render, fireEvent } from '@testing-library/react'; +import { Controls, ControlsProps } from './controls'; +import { EuiThemeProvider } from '@elastic/eui'; +import { useStore, useReactFlow } from '@xyflow/react'; + +const defaultProps: ControlsProps = { + showZoom: true, + showFitView: true, + showCenter: true, +}; + +jest.mock('@xyflow/react', () => ({ + useStore: jest.fn(), + useReactFlow: jest.fn(), +})); + +const useReactFlowMock = useReactFlow as jest.Mock; +const useStoreMock = useStore as jest.Mock; + +const renderWithProviders = (props: ControlsProps = defaultProps) => { + return render( + + + + ); +}; + +describe('Controls', () => { + beforeEach(() => { + useReactFlowMock.mockReturnValue({ + zoomIn: jest.fn(), + zoomOut: jest.fn(), + fitView: jest.fn(), + }); + + useStoreMock.mockReturnValue({ minZoomReached: false, maxZoomReached: false }); + }); + + it('renders zoom in and zoom out buttons', () => { + const { getByLabelText } = renderWithProviders(); + expect(getByLabelText('Zoom in')).toBeInTheDocument(); + expect(getByLabelText('Zoom out')).toBeInTheDocument(); + }); + + it('renders fit view button', () => { + const { getByLabelText } = renderWithProviders(); + expect(getByLabelText('Fit view')).toBeInTheDocument(); + }); + + it('renders center button', () => { + const { getByLabelText } = renderWithProviders(); + expect(getByLabelText('Center')).toBeInTheDocument(); + }); + + it('calls onZoomIn when zoom in button is clicked', () => { + const onZoomIn = jest.fn(); + const { getByLabelText } = renderWithProviders({ ...defaultProps, onZoomIn }); + + fireEvent.click(getByLabelText('Zoom in')); + + expect(useReactFlowMock().zoomIn).toHaveBeenCalled(); + expect(onZoomIn).toHaveBeenCalled(); + }); + + it('calls onZoomOut when zoom out button is clicked', () => { + const onZoomOut = jest.fn(); + const { getByLabelText } = renderWithProviders({ ...defaultProps, onZoomOut }); + + fireEvent.click(getByLabelText('Zoom out')); + + expect(useReactFlowMock().zoomOut).toHaveBeenCalled(); + expect(onZoomOut).toHaveBeenCalled(); + }); + + it('calls onFitView when fit view button is clicked', () => { + const onFitView = jest.fn(); + const { getByLabelText } = renderWithProviders({ ...defaultProps, onFitView }); + + fireEvent.click(getByLabelText('Fit view')); + + expect(useReactFlowMock().fitView).toHaveBeenCalled(); + expect(onFitView).toHaveBeenCalled(); + }); + + it('calls onCenter when center button is clicked', () => { + const onCenter = jest.fn(); + const { getByLabelText } = renderWithProviders({ ...defaultProps, onCenter }); + + fireEvent.click(getByLabelText('Center')); + + expect(onCenter).toHaveBeenCalled(); + }); + + it('disables zoom in button when max zoom is reached', () => { + useStoreMock.mockReturnValue({ minZoomReached: false, maxZoomReached: true }); + + const { getByLabelText } = renderWithProviders(); + + const zoomInButton = getByLabelText('Zoom in'); + expect(zoomInButton).toBeDisabled(); + }); + + it('disables zoom out button when min zoom is reached', () => { + useStoreMock.mockReturnValue({ minZoomReached: true, maxZoomReached: false }); + + const { getByLabelText } = renderWithProviders(); + + const zoomOutButton = getByLabelText('Zoom out'); + expect(zoomOutButton).toBeDisabled(); + }); +}); diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/controls/controls.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/controls/controls.tsx new file mode 100644 index 0000000000000..37164a8581c2b --- /dev/null +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/controls/controls.tsx @@ -0,0 +1,153 @@ +/* + * 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 { + EuiButtonIcon, + EuiFlexGroup, + EuiFlexItem, + EuiSpacer, + useEuiTheme, + type CommonProps, +} from '@elastic/eui'; +import { css } from '@emotion/react'; +import { i18n } from '@kbn/i18n'; +import { type ReactFlowState, useStore, useReactFlow, type FitViewOptions } from '@xyflow/react'; +import { + GRAPH_CONTROLS_FIT_VIEW_ID, + GRAPH_CONTROLS_CENTER_ID, + GRAPH_CONTROLS_ZOOM_IN_ID, + GRAPH_CONTROLS_ZOOM_OUT_ID, +} from '../test_ids'; + +const selector = (s: ReactFlowState) => ({ + minZoomReached: s.transform[2] <= s.minZoom, + maxZoomReached: s.transform[2] >= s.maxZoom, +}); + +export interface ControlsProps extends CommonProps { + showZoom?: boolean; + showFitView?: boolean; + showCenter?: boolean; + fitViewOptions?: FitViewOptions; + /** Callback when zoom in button is clicked */ + onZoomIn?: () => void; + /** Callback when zoom out button is clicked */ + onZoomOut?: () => void; + /** Callback when fit view button is clicked */ + onFitView?: () => void; + /** Callback when center button is clicked */ + onCenter?: () => void; +} + +const ZoomInLabel = i18n.translate('securitySolutionPackages.csp.graph.controls.zoomIn', { + defaultMessage: 'Zoom in', +}); +const ZoomOutLabel = i18n.translate('securitySolutionPackages.csp.graph.controls.zoomOut', { + defaultMessage: 'Zoom out', +}); +const FitViewLabel = i18n.translate('securitySolutionPackages.csp.graph.controls.fitView', { + defaultMessage: 'Fit view', +}); +const CenterLabel = i18n.translate('securitySolutionPackages.csp.graph.controls.center', { + defaultMessage: 'Center', +}); + +export const Controls = ({ + showZoom = true, + showFitView = true, + showCenter = true, + fitViewOptions, + onZoomIn, + onZoomOut, + onCenter, + onFitView, + ...props +}: ControlsProps) => { + const { euiTheme } = useEuiTheme(); + const { zoomIn, zoomOut, fitView } = useReactFlow(); + const { maxZoomReached, minZoomReached } = useStore(selector); + + const onZoomInHandler = () => { + zoomIn(); + onZoomIn?.(); + }; + + const onZoomOutHandler = () => { + zoomOut(); + onZoomOut?.(); + }; + + const onFitViewHandler = () => { + fitView(fitViewOptions); + onFitView?.(); + }; + + const btnCss = css` + border: ${euiTheme.border.thin}; + border-radius: ${euiTheme.border.radius.medium}; + background-color: ${euiTheme.colors.backgroundBasePlain}; + box-sizing: content-box; + `; + + if (!showZoom && !showCenter && !showFitView) { + return <>; + } + + return ( + + {showZoom && ( + + + + + )} + {showZoom && showCenter && } + {showCenter && ( + onCenter?.()} + /> + )} + {(showZoom || showCenter) && showFitView && } + {showFitView && ( + + + + )} + + ); +}; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/edge/deafult_edge.stories.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/edge/deafult_edge.stories.tsx index 8b3b36237a7a2..9949e0fdfea45 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/edge/deafult_edge.stories.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/edge/deafult_edge.stories.tsx @@ -31,7 +31,7 @@ import '@xyflow/react/dist/style.css'; import { HandleStyleOverride } from '../node/styles'; export default { - title: 'Components/Graph Components/Default Edge', + title: 'Components/Graph Components', description: 'CDR - Graph visualization', argTypes: { color: { diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph/graph.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph/graph.tsx index 56cf49640b0fa..1e9a5dee01690 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph/graph.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph/graph.tsx @@ -9,7 +9,7 @@ import React, { useState, useCallback, useEffect, useRef, memo } from 'react'; import { size, isEmpty, isEqual, xorWith } from 'lodash'; import { Background, - Controls, + Panel, Position, ReactFlow, useEdgesState, @@ -34,6 +34,7 @@ import type { EdgeViewModel, NodeViewModel } from '../types'; import { ONLY_RENDER_VISIBLE_ELEMENTS } from './constants'; import '@xyflow/react/dist/style.css'; +import { Controls } from '../controls/controls'; export interface GraphProps extends CommonProps { /** @@ -53,6 +54,10 @@ export interface GraphProps extends CommonProps { * Determines whether the graph is locked. Nodes and edges are still interactive, but the graph itself is not. */ isLocked?: boolean; + /** + * Additional children to be rendered inside the graph component. + */ + children?: React.ReactNode; } const nodeTypes = { @@ -84,14 +89,14 @@ const edgeTypes = { * @returns {JSX.Element} The rendered Graph component. */ export const Graph = memo( - ({ nodes, edges, interactive, isLocked = false, ...rest }: GraphProps) => { + ({ nodes, edges, interactive, isLocked = false, children, ...rest }: GraphProps) => { const backgroundId = useGeneratedHtmlId(); const fitViewRef = useRef< ((fitViewOptions?: FitViewOptions | undefined) => Promise) | null >(null); const currNodesRef = useRef([]); const currEdgesRef = useRef([]); - const [isGraphInteractive, setIsGraphInteractive] = useState(interactive); + const [isGraphInteractive, _setIsGraphInteractive] = useState(interactive); const [nodesState, setNodes, onNodesChange] = useNodesState>([]); const [edgesState, setEdges, onEdgesChange] = useEdgesState>([]); @@ -114,22 +119,6 @@ export const Graph = memo( } }, [nodes, edges, setNodes, setEdges, isGraphInteractive]); - const onInteractiveStateChange = useCallback( - (interactiveStatus: boolean): void => { - setIsGraphInteractive(interactiveStatus); - setNodes((currNodes) => - currNodes.map((node) => ({ - ...node, - data: { - ...node.data, - interactive: interactiveStatus, - }, - })) - ); - }, - [setNodes] - ); - const onInitCallback = useCallback( (xyflow: ReactFlowInstance, Edge>) => { window.requestAnimationFrame(() => xyflow.fitView()); @@ -174,7 +163,12 @@ export const Graph = memo( maxZoom={1.3} minZoom={0.1} > - {interactive && } + {interactive && ( + + + + )} + {children}
    diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph/graph_perf_monitor.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph/graph_perf_monitor.tsx index 4685459e14001..13036f55e0518 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph/graph_perf_monitor.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph/graph_perf_monitor.tsx @@ -5,11 +5,23 @@ * 2.0. */ -import React from 'react'; +import React, { useEffect, useState } from 'react'; import { css } from '@emotion/react'; import { FpsTrendline } from './fps_trendline'; export const GraphPerfMonitor: React.FC = () => { + const [nodeCount, setNodeCount] = useState(0); + const [edgeCount, setEdgeCount] = useState(0); + const updateCounts = () => { + setNodeCount(document.getElementsByClassName('react-flow__node').length); + setEdgeCount(document.getElementsByClassName('react-flow__edge').length); + }; + + useEffect(() => { + const intervalId = setInterval(updateCounts, 300); + return () => clearInterval(intervalId); + }, []); + return (
    { position: 'fixed', }} > - {'Nodes:'} {document.getElementsByClassName('react-flow__node').length}{' '} - {'Edges:'} {document.getElementsByClassName('react-flow__edge').length} + {'Nodes:'} {nodeCount} {'Edges:'} {edgeCount} { + return require('../mock/use_fetch_graph_data.mock'); +}); + +const renderStory = (args: Partial = {}) => { + return render( + + + + ); +}; + +// Turn off the optimization that hides elements that are not visible in the viewport +jest.mock('../graph/constants', () => ({ + ONLY_RENDER_VISIBLE_ELEMENTS: false, +})); + +describe('GraphInvestigation Component', () => { + it('renders without crashing', () => { + const { getByTestId } = renderStory(); + + expect(getByTestId(GRAPH_INVESTIGATION_TEST_ID)).toBeInTheDocument(); + }); + + it('renders with initial state', () => { + const { container, getAllByText } = renderStory(); + + const nodes = container.querySelectorAll('.react-flow__nodes .react-flow__node'); + expect(nodes).toHaveLength(3); + expect(getAllByText('~ an hour ago')).toHaveLength(2); + }); + + it('calls onInvestigateInTimeline action', () => { + const onInvestigateInTimeline = jest.fn(); + const { getByTestId } = renderStory({ + onInvestigateInTimeline, + showInvestigateInTimeline: true, + }); + + getByTestId(GRAPH_ACTIONS_INVESTIGATE_IN_TIMELINE_ID).click(); + + expect(onInvestigateInTimeline).toHaveBeenCalled(); + }); +}); diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_investigation.stories.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_investigation.stories.tsx new file mode 100644 index 0000000000000..e8af287ef843f --- /dev/null +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_investigation.stories.tsx @@ -0,0 +1,61 @@ +/* + * 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 { Story } from '@storybook/react'; +import { action } from '@storybook/addon-actions'; +import { GraphInvestigation, type GraphInvestigationProps } from './graph_investigation'; +import { + KibanaReactStorybookDecorator, + ReactQueryStorybookDecorator, +} from '../../../.storybook/decorators'; +import { mockDataView } from '../mock/data_view.mock'; + +export default { + title: 'Components/Graph Components/Investigation', + description: 'CDR - Graph visualization', + argTypes: { + showToggleSearch: { + control: { type: 'boolean' }, + }, + showInvestigateInTimeline: { + control: { type: 'boolean' }, + }, + }, + decorators: [ReactQueryStorybookDecorator, KibanaReactStorybookDecorator], +}; + +const hourAgo = new Date(new Date().getTime() - 60 * 60 * 1000); +const defaultProps: GraphInvestigationProps = { + initialState: { + dataView: mockDataView, + originEventIds: [ + { + id: '1', + isAlert: false, + }, + ], + timeRange: { + from: `${hourAgo.toISOString()}||-15m`, + to: `${hourAgo.toISOString()}||+15m`, + }, + }, + onInvestigateInTimeline: action('onInvestigateInTimeline'), + showToggleSearch: false, + showInvestigateInTimeline: false, +}; + +const Template: Story> = (props) => { + return ; +}; + +export const Investigation = Template.bind({}); + +Investigation.args = { + showToggleSearch: false, + showInvestigateInTimeline: false, +}; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_investigation.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_investigation.tsx index 9e63541b29d1f..e3915fefd06f5 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_investigation.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/graph_investigation/graph_investigation.tsx @@ -19,6 +19,7 @@ import { } from '@kbn/es-query'; import type { Filter, Query, TimeRange, PhraseFilter } from '@kbn/es-query'; import { css } from '@emotion/react'; +import { Panel } from '@xyflow/react'; import { getEsQueryConfig } from '@kbn/data-service'; import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { Graph, isEntityNode } from '../../..'; @@ -32,6 +33,7 @@ import { RELATED_ENTITY, TARGET_ENTITY_ID, } from '../../common/constants'; +import { Actions, type ActionsProps } from '../controls/actions'; const CONTROLLED_BY_GRAPH_INVESTIGATION_FILTER = 'graph-investigation'; @@ -137,7 +139,7 @@ const useGraphPopovers = ( return { nodeExpandPopover, labelExpandPopover, openPopoverCallback }; }; -interface GraphInvestigationProps { +export interface GraphInvestigationProps { /** * The initial state to use for the graph investigation view. */ @@ -167,6 +169,21 @@ interface GraphInvestigationProps { */ timeRange: TimeRange; }; + + /** + * Whether to show investigate in timeline action button. Defaults value is false. + */ + showInvestigateInTimeline?: boolean; + + /** + * Callback when investigate in timeline action button is clicked, ignored if investigateInTimelineComponent is provided. + */ + onInvestigateInTimeline?: (filters: Filter[], timeRange: TimeRange) => void; + + /** + * Whether to show toggle search action button. Defaults value is false. + */ + showToggleSearch?: boolean; } /** @@ -175,10 +192,29 @@ interface GraphInvestigationProps { export const GraphInvestigation = memo( ({ initialState: { dataView, originEventIds, timeRange: initialTimeRange }, + showInvestigateInTimeline = false, + showToggleSearch = false, + onInvestigateInTimeline, }: GraphInvestigationProps) => { const [searchFilters, setSearchFilters] = useState(() => []); const [timeRange, setTimeRange] = useState(initialTimeRange); + const onInvestigateInTimelineCallback = useCallback(() => { + const filters = originEventIds.reduce((acc, { id }) => { + return addFilter(dataView?.id ?? '', acc, 'event.id', id); + }, searchFilters); + onInvestigateInTimeline?.(filters, timeRange); + }, [dataView?.id, onInvestigateInTimeline, originEventIds, searchFilters, timeRange]); + + const actionsProps: ActionsProps = useMemo( + () => ({ + showInvestigateInTimeline, + showToggleSearch, + onInvestigateInTimeline: onInvestigateInTimelineCallback, + }), + [onInvestigateInTimelineCallback, showInvestigateInTimeline, showToggleSearch] + ); + const { services: { uiSettings }, } = useKibana(); @@ -293,7 +329,11 @@ export const GraphInvestigation = memo( edges={data?.edges ?? []} interactive={true} isLocked={isPopoverOpen} - /> + > + + + + diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/mock/data_view.mock.ts b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/mock/data_view.mock.ts new file mode 100644 index 0000000000000..eacd58703756e --- /dev/null +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/mock/data_view.mock.ts @@ -0,0 +1,48 @@ +/* + * 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 { DataView } from '@kbn/data-views-plugin/common'; + +export const mockDataView = { + id: '1235', + title: 'test-*', + fields: [ + { + name: 'actor.entity.id', + type: 'string', + esTypes: ['keyword'], + aggregatable: true, + filterable: true, + searchable: true, + }, + { + name: 'target.entity.id', + type: 'string', + esTypes: ['keyword'], + aggregatable: true, + filterable: true, + searchable: true, + }, + { + name: 'related.entity', + type: 'string', + esTypes: ['keyword'], + aggregatable: true, + filterable: true, + searchable: true, + }, + { + name: 'event.action', + type: 'string', + esTypes: ['keyword'], + aggregatable: true, + filterable: true, + searchable: true, + }, + ], + getName: () => 'test-*', +} as DataView; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/mock/use_fetch_graph_data.mock.ts b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/mock/use_fetch_graph_data.mock.ts new file mode 100644 index 0000000000000..d9b8f7ba6d875 --- /dev/null +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/mock/use_fetch_graph_data.mock.ts @@ -0,0 +1,66 @@ +/* + * 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 { action } from '@storybook/addon-actions'; + +export const useFetchGraphData = () => + useMemo( + () => ({ + isLoading: false, + isFetching: false, + isError: false, + data: { + nodes: [ + { + id: 'admin@example.com', + label: 'admin@example.com', + color: 'primary', + shape: 'ellipse', + icon: 'user', + }, + { + id: 'projects/your-project-id/roles/customRole', + label: 'projects/your-project-id/roles/customRole', + color: 'primary', + shape: 'hexagon', + icon: 'questionInCircle', + }, + { + id: 'a(admin@example.com)-b(projects/your-project-id/roles/customRole)label(google.iam.admin.v1.CreateRole)', + label: 'google.iam.admin.v1.CreateRole', + source: 'admin@example.com', + target: 'projects/your-project-id/roles/customRole', + color: 'primary', + shape: 'label', + }, + ], + edges: [ + { + id: 'a(admin@example.com)-b(a(admin@example.com)-b(projects/your-project-id/roles/customRole)label(google.iam.admin.v1.CreateRole))', + source: 'admin@example.com', + sourceShape: 'ellipse', + target: + 'a(admin@example.com)-b(projects/your-project-id/roles/customRole)label(google.iam.admin.v1.CreateRole)', + targetShape: 'label', + color: 'primary', + }, + { + id: 'a(a(admin@example.com)-b(projects/your-project-id/roles/customRole)label(google.iam.admin.v1.CreateRole))-b(projects/your-project-id/roles/customRole)', + source: + 'a(admin@example.com)-b(projects/your-project-id/roles/customRole)label(google.iam.admin.v1.CreateRole)', + sourceShape: 'label', + target: 'projects/your-project-id/roles/customRole', + targetShape: 'hexagon', + color: 'primary', + }, + ], + }, + refresh: action('refresh'), + }), + [] + ); diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/label.stories.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/label.stories.tsx index 97a55f9b88f64..b5b385398cff3 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/label.stories.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/label.stories.tsx @@ -16,7 +16,7 @@ import { HexagonNode, PentagonNode, EllipseNode, RectangleNode, DiamondNode, Lab import '@xyflow/react/dist/style.css'; export default { - title: 'Components/Graph Components/Labels', + title: 'Components/Graph Components/Additional Components/Labels', description: 'CDR - Graph visualization', argTypes: { color: { diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/button.stories.tsx b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/node_expand_button.stories.tsx similarity index 57% rename from x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/button.stories.tsx rename to x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/node_expand_button.stories.tsx index bea6f851bab17..665dc42d3b66c 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/button.stories.tsx +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/node/node_expand_button.stories.tsx @@ -10,24 +10,29 @@ import React from 'react'; import { ThemeProvider } from '@emotion/react'; import { Story } from '@storybook/react'; -import { type NodeButtonProps, NodeShapeContainer } from './styles'; -import { NodeExpandButton } from './node_expand_button'; +import { NodeShapeContainer } from './styles'; +import { NodeExpandButton, type NodeExpandButtonProps } from './node_expand_button'; export default { - title: 'Components/Graph Components', + title: 'Components/Graph Components/Additional Components', description: 'CDR - Graph visualization', argTypes: { onClick: { action: 'onClick' }, + color: { + options: ['primary', 'danger', 'warning'], + control: { type: 'radio' }, + defaultValue: 'primary', + }, }, }; -const Template: Story = (args) => ( +const Template: Story = (args) => ( Hover me - + ); -export const Button = Template.bind({}); +export const ExpandButton = Template.bind({}); diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/test_ids.ts b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/test_ids.ts index d507563c3fd73..ec711d4acc819 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/test_ids.ts +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/src/components/test_ids.ts @@ -21,3 +21,12 @@ export const GRAPH_LABEL_EXPAND_POPOVER_TEST_ID = `${GRAPH_INVESTIGATION_TEST_ID}GraphLabelExpandPopover` as const; export const GRAPH_LABEL_EXPAND_POPOVER_SHOW_EVENTS_WITH_THIS_ACTION_ITEM_ID = `${GRAPH_INVESTIGATION_TEST_ID}ShowEventsWithThisAction` as const; + +export const GRAPH_ACTIONS_TOGGLE_SEARCH_ID = `${GRAPH_INVESTIGATION_TEST_ID}ToggleSearch` as const; +export const GRAPH_ACTIONS_INVESTIGATE_IN_TIMELINE_ID = + `${GRAPH_INVESTIGATION_TEST_ID}InvestigateInTimeline` as const; + +export const GRAPH_CONTROLS_ZOOM_IN_ID = `${GRAPH_INVESTIGATION_TEST_ID}ZoomIn` as const; +export const GRAPH_CONTROLS_ZOOM_OUT_ID = `${GRAPH_INVESTIGATION_TEST_ID}ZoomOut` as const; +export const GRAPH_CONTROLS_CENTER_ID = `${GRAPH_INVESTIGATION_TEST_ID}Center` as const; +export const GRAPH_CONTROLS_FIT_VIEW_ID = `${GRAPH_INVESTIGATION_TEST_ID}FitView` as const; diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/tsconfig.json b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/tsconfig.json index 729b081401ead..339a6ec7e7f25 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/tsconfig.json +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/tsconfig.json @@ -3,14 +3,8 @@ "compilerOptions": { "outDir": "target/types" }, - "include": [ - "**/*.ts", - "**/*.tsx", - "**/mock/*.json", - ], - "exclude": [ - "target/**/*" - ], + "include": ["**/*.ts", "**/*.tsx", "**/mock/*.json", ".storybook/**/*.ts", ".storybook/**/*.tsx"], + "exclude": ["target/**/*"], "kbn_references": [ "@kbn/cloud-security-posture-common", "@kbn/data-views-plugin", @@ -21,5 +15,8 @@ "@kbn/es-query", "@kbn/data-service", "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/storybook", + "@kbn/data-plugin" ] } diff --git a/x-pack/solutions/security/plugins/elastic_assistant/server/routes/defend_insights/get_defend_insight.test.ts b/x-pack/solutions/security/plugins/elastic_assistant/server/routes/defend_insights/get_defend_insight.test.ts index fa3ff15027e23..1f0721daeb35e 100644 --- a/x-pack/solutions/security/plugins/elastic_assistant/server/routes/defend_insights/get_defend_insight.test.ts +++ b/x-pack/solutions/security/plugins/elastic_assistant/server/routes/defend_insights/get_defend_insight.test.ts @@ -23,6 +23,7 @@ import { import { serverMock } from '../../__mocks__/server'; import { isDefendInsightsEnabled, updateDefendInsightLastViewedAt } from './helpers'; import { getDefendInsightRoute } from './get_defend_insight'; +import { licensingMock } from '@kbn/licensing-plugin/public/mocks'; jest.mock('./helpers'); @@ -73,6 +74,20 @@ describe('getDefendInsightRoute', () => { jest.clearAllMocks(); }); + it('Insufficient license', async () => { + const insufficientLicense = licensingMock.createLicense({ license: { type: 'basic' } }); + const tools = requestContextMock.createTools(); + tools.context.licensing.license = insufficientLicense; + jest.spyOn(insufficientLicense, 'hasAtLeast').mockReturnValue(false); + + await expect( + server.inject( + getDefendInsightRequest('insight-id1'), + requestContextMock.convertContext(tools.context) + ) + ).rejects.toThrowError('Encountered unexpected call to response.forbidden'); + }); + it('should handle successful request', async () => { const response = await server.inject( getDefendInsightRequest('insight-id1'), diff --git a/x-pack/solutions/security/plugins/elastic_assistant/server/routes/defend_insights/get_defend_insight.ts b/x-pack/solutions/security/plugins/elastic_assistant/server/routes/defend_insights/get_defend_insight.ts index eda6e1bf18905..2b7a7cdb30d26 100644 --- a/x-pack/solutions/security/plugins/elastic_assistant/server/routes/defend_insights/get_defend_insight.ts +++ b/x-pack/solutions/security/plugins/elastic_assistant/server/routes/defend_insights/get_defend_insight.ts @@ -28,7 +28,7 @@ export const getDefendInsightRoute = (router: IRouter> => { const resp = buildResponse(response); - const assistantContext = await context.elasticAssistant; + const ctx = await context.resolve(['licensing', 'elasticAssistant']); + + const assistantContext = ctx.elasticAssistant; const logger: Logger = assistantContext.logger; try { const isEnabled = isDefendInsightsEnabled({ @@ -60,6 +62,15 @@ export const getDefendInsightRoute = (router: IRouter { jest.clearAllMocks(); }); + it('Insufficient license', async () => { + const insufficientLicense = licensingMock.createLicense({ license: { type: 'basic' } }); + const tools = requestContextMock.createTools(); + tools.context.licensing.license = insufficientLicense; + jest.spyOn(insufficientLicense, 'hasAtLeast').mockReturnValue(false); + + await expect( + server.inject( + getDefendInsightsRequest({ connector_id: 'connector-id1' }), + requestContextMock.convertContext(tools.context) + ) + ).rejects.toThrowError('Encountered unexpected call to response.forbidden'); + }); + it('should handle successful request', async () => { const response = await server.inject( getDefendInsightsRequest({ connector_id: 'connector-id1' }), diff --git a/x-pack/solutions/security/plugins/elastic_assistant/server/routes/defend_insights/get_defend_insights.ts b/x-pack/solutions/security/plugins/elastic_assistant/server/routes/defend_insights/get_defend_insights.ts index 0f72d2eeef39e..28a64262c3c24 100644 --- a/x-pack/solutions/security/plugins/elastic_assistant/server/routes/defend_insights/get_defend_insights.ts +++ b/x-pack/solutions/security/plugins/elastic_assistant/server/routes/defend_insights/get_defend_insights.ts @@ -28,7 +28,7 @@ export const getDefendInsightsRoute = (router: IRouter> => { const resp = buildResponse(response); - const assistantContext = await context.elasticAssistant; + + const ctx = await context.resolve(['licensing', 'elasticAssistant']); + + const assistantContext = ctx.elasticAssistant; const logger: Logger = assistantContext.logger; + try { const isEnabled = isDefendInsightsEnabled({ request, @@ -60,6 +64,15 @@ export const getDefendInsightsRoute = (router: IRouter { jest.clearAllMocks(); }); + it('Insufficient license', async () => { + const insufficientLicense = licensingMock.createLicense({ license: { type: 'basic' } }); + const tools = requestContextMock.createTools(); + tools.context.licensing.license = insufficientLicense; + jest.spyOn(insufficientLicense, 'hasAtLeast').mockReturnValue(false); + + await expect( + server.inject( + postDefendInsightsRequest(mockRequestBody), + requestContextMock.convertContext(tools.context) + ) + ).rejects.toThrowError('Encountered unexpected call to response.forbidden'); + }); + it('should handle successful request', async () => { const response = await server.inject( postDefendInsightsRequest(mockRequestBody), diff --git a/x-pack/solutions/security/plugins/elastic_assistant/server/routes/defend_insights/post_defend_insights.ts b/x-pack/solutions/security/plugins/elastic_assistant/server/routes/defend_insights/post_defend_insights.ts index 4516efc5e5d1a..b309ec44f9fd7 100644 --- a/x-pack/solutions/security/plugins/elastic_assistant/server/routes/defend_insights/post_defend_insights.ts +++ b/x-pack/solutions/security/plugins/elastic_assistant/server/routes/defend_insights/post_defend_insights.ts @@ -48,7 +48,7 @@ export const postDefendInsightsRoute = (router: IRouter> => { const startTime = moment(); // start timing the generation const resp = buildResponse(response); - const assistantContext = await context.elasticAssistant; + + const ctx = await context.resolve(['licensing', 'elasticAssistant']); + + const assistantContext = ctx.elasticAssistant; + const logger: Logger = assistantContext.logger; const telemetry = assistantContext.telemetry; @@ -83,6 +87,15 @@ export const postDefendInsightsRoute = (router: IRouter { ['canReadBlocklist', 'readBlocklist'], ['canWriteEventFilters', 'writeEventFilters'], ['canReadEventFilters', 'readEventFilters'], + ['canReadWorkflowInsights', 'readWorkflowInsights'], + ['canWriteWorkflowInsights', 'writeWorkflowInsights'], ])('%s should be true if `packagePrivilege.%s` is `true`', (auth) => { const authz = calculateEndpointAuthz(licenseService, fleetAuthz, userRoles); expect(authz[auth]).toBe(true); @@ -216,6 +218,8 @@ describe('Endpoint Authz service', () => { ['canReadBlocklist', ['readBlocklist']], ['canWriteEventFilters', ['writeEventFilters']], ['canReadEventFilters', ['readEventFilters']], + ['canWriteWorkflowInsights', ['writeWorkflowInsights']], + ['canReadWorkflowInsights', ['readWorkflowInsights']], // all dependent privileges are false and so it should be false ['canAccessResponseConsole', responseConsolePrivileges], ])('%s should be false if `packagePrivilege.%s` is `false`', (auth, privileges) => { @@ -265,6 +269,8 @@ describe('Endpoint Authz service', () => { ['canReadBlocklist', ['readBlocklist']], ['canWriteEventFilters', ['writeEventFilters']], ['canReadEventFilters', ['readEventFilters']], + ['canWriteWorkflowInsights', ['writeWorkflowInsights']], + ['canReadWorkflowInsights', ['readWorkflowInsights']], // all dependent privileges are false and so it should be false ['canAccessResponseConsole', responseConsolePrivileges], ])( @@ -334,7 +340,9 @@ describe('Endpoint Authz service', () => { canWriteScanOperations: false, canWriteFileOperations: false, canWriteTrustedApplications: false, + canWriteWorkflowInsights: false, canReadTrustedApplications: false, + canReadWorkflowInsights: false, canWriteHostIsolationExceptions: false, canAccessHostIsolationExceptions: false, canReadHostIsolationExceptions: false, diff --git a/x-pack/solutions/security/plugins/security_solution/common/endpoint/service/authz/authz.ts b/x-pack/solutions/security/plugins/security_solution/common/endpoint/service/authz/authz.ts index f5af3f6c1ef24..518e5bf1596f4 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/endpoint/service/authz/authz.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/endpoint/service/authz/authz.ts @@ -97,6 +97,9 @@ export const calculateEndpointAuthz = ( const canReadEndpointExceptions = hasAuth('showEndpointExceptions'); const canWriteEndpointExceptions = hasAuth('crudEndpointExceptions'); + const canReadWorkflowInsights = hasAuth('readWorkflowInsights'); + const canWriteWorkflowInsights = hasAuth('writeWorkflowInsights'); + const authz: EndpointAuthz = { canWriteSecuritySolution, canReadSecuritySolution, @@ -122,6 +125,8 @@ export const calculateEndpointAuthz = ( canWriteActionsLogManagement, canReadActionsLogManagement: canReadActionsLogManagement && isEnterpriseLicense, canAccessEndpointActionsLogManagement: canReadActionsLogManagement && isPlatinumPlusLicense, + canReadWorkflowInsights: canReadWorkflowInsights && isEnterpriseLicense, + canWriteWorkflowInsights: canWriteWorkflowInsights && isEnterpriseLicense, // --------------------------------------------------------- // Response Actions @@ -207,6 +212,8 @@ export const getEndpointAuthzInitialState = (): EndpointAuthz => { canReadEventFilters: false, canReadEndpointExceptions: false, canWriteEndpointExceptions: false, + canReadWorkflowInsights: false, + canWriteWorkflowInsights: false, }; }; diff --git a/x-pack/solutions/security/plugins/security_solution/common/endpoint/types/authz.ts b/x-pack/solutions/security/plugins/security_solution/common/endpoint/types/authz.ts index 45fc9595405b7..ff34074b5e6ee 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/endpoint/types/authz.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/endpoint/types/authz.ts @@ -93,6 +93,10 @@ export interface EndpointAuthz { canReadEndpointExceptions: boolean; /** if the user has read permissions for endpoint exceptions */ canWriteEndpointExceptions: boolean; + /** if the user has write permissions for workflow insights */ + canWriteWorkflowInsights: boolean; + /** if the user has read permissions for workflow insights */ + canReadWorkflowInsights: boolean; } export type EndpointAuthzKeyList = Array; diff --git a/x-pack/solutions/security/plugins/security_solution/common/types/timeline/store.ts b/x-pack/solutions/security/plugins/security_solution/common/types/timeline/store.ts index 834949d2ed591..d2575b86344d0 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/types/timeline/store.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/types/timeline/store.ts @@ -72,8 +72,8 @@ export type OnColumnRemoved = (columnId: ColumnId) => void; export type OnColumnResized = ({ columnId, delta }: { columnId: ColumnId; delta: number }) => void; -/** Invoked when a user clicks to load more item */ -export type OnFetchMoreRecords = (nextPage: number) => void; +/** Invoked when a user clicks to load next batch */ +export type OnFetchMoreRecords = VoidFunction; /** Invoked when a user checks/un-checks a row */ export type OnRowSelected = ({ diff --git a/x-pack/solutions/security/plugins/security_solution/jest/babel-transformer.js b/x-pack/solutions/security/plugins/security_solution/jest/babel-transformer.js new file mode 100644 index 0000000000000..d72b0ff2f1521 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/jest/babel-transformer.js @@ -0,0 +1,25 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +// eslint-disable-next-line import/no-extraneous-dependencies +const babelJest = require('babel-jest'); + +// eslint-disable-next-line import/no-extraneous-dependencies +const rootTransformerConfig = require('@kbn/test/src/jest/transforms/babel/transformer_config'); + +module.exports = babelJest.default.createTransformer({ + ...rootTransformerConfig, + presets: [ + ...rootTransformerConfig.presets, + [ + require.resolve('@emotion/babel-preset-css-prop'), + { + labelFormat: '[filename]--[local]', + }, + ], + ], +}); diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/event_details/investigate_in_timeline_button.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/components/event_details/investigate_in_timeline_button.tsx index e1e3bac6d9c18..506b6c768494f 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/event_details/investigate_in_timeline_button.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/event_details/investigate_in_timeline_button.tsx @@ -10,26 +10,28 @@ import React, { useCallback } from 'react'; import { EuiButton, EuiButtonEmpty } from '@elastic/eui'; import type { IconType, EuiButtonEmptyProps } from '@elastic/eui'; import type { Filter } from '@kbn/es-query'; -import { useDispatch, useSelector } from 'react-redux'; - -import { sourcererSelectors } from '../../store'; -import { InputsModelId } from '../../store/inputs/constants'; import type { TimeRange } from '../../store/inputs/model'; -import { inputsActions } from '../../store/inputs'; -import { updateProviders, setFilters } from '../../../timelines/store/actions'; -import { sourcererActions } from '../../store/actions'; -import { SourcererScopeName } from '../../../sourcerer/store/model'; import type { DataProvider } from '../../../../common/types'; -import { TimelineId } from '../../../../common/types/timeline'; -import { TimelineTypeEnum } from '../../../../common/api/timeline'; -import { useCreateTimeline } from '../../../timelines/hooks/use_create_timeline'; import { ACTION_INVESTIGATE_IN_TIMELINE } from '../../../detections/components/alerts_table/translations'; +import { useInvestigateInTimeline } from '../../hooks/timeline/use_investigate_in_timeline'; export interface InvestigateInTimelineButtonProps { asEmptyButton: boolean; + /** + * The data providers to apply to the timeline. + */ dataProviders: DataProvider[] | null; + /** + * The filters to apply to the timeline. + */ filters?: Filter[] | null; + /** + * The time range to apply to the timeline, defaults to global time range. + */ timeRange?: TimeRange; + /** + * Whether to keep the current data view or reset it to the default. + */ keepDataView?: boolean; isDisabled?: boolean; iconType?: IconType; @@ -37,6 +39,10 @@ export interface InvestigateInTimelineButtonProps { flush?: EuiButtonEmptyProps['flush']; } +/** + * Component that renders a EuiEmptyButton or a normal EuiButton to wrap some content and attaches a + * investigate in timeline callback to the click event. + */ export const InvestigateInTimelineButton: FC< PropsWithChildren > = ({ @@ -50,76 +56,20 @@ export const InvestigateInTimelineButton: FC< flush, ...rest }) => { - const dispatch = useDispatch(); - - const signalIndexName = useSelector(sourcererSelectors.signalIndexName); - const defaultDataView = useSelector(sourcererSelectors.defaultDataView); - - const hasTemplateProviders = - dataProviders && dataProviders.find((provider) => provider.type === 'template'); - - const clearTimeline = useCreateTimeline({ - timelineId: TimelineId.active, - timelineType: hasTemplateProviders ? TimelineTypeEnum.template : TimelineTypeEnum.default, - }); - - const configureAndOpenTimeline = useCallback(async () => { - if (dataProviders || filters) { - // Reset the current timeline - if (timeRange) { - await clearTimeline({ - timeRange, - }); - } else { - await clearTimeline(); - } - if (dataProviders) { - // Update the timeline's providers to match the current prevalence field query - dispatch( - updateProviders({ - id: TimelineId.active, - providers: dataProviders, - }) - ); - } - // Use filters if more than a certain amount of ids for dom performance. - if (filters) { - dispatch( - setFilters({ - id: TimelineId.active, - filters, - }) - ); - } - // Only show detection alerts - // (This is required so the timeline event count matches the prevalence count) - if (!keepDataView) { - dispatch( - sourcererActions.setSelectedDataView({ - id: SourcererScopeName.timeline, - selectedDataViewId: defaultDataView.id, - selectedPatterns: [signalIndexName || ''], - }) - ); - } - // Unlock the time range from the global time range - dispatch(inputsActions.removeLinkTo([InputsModelId.timeline, InputsModelId.global])); - } - }, [ - dataProviders, - clearTimeline, - dispatch, - defaultDataView.id, - signalIndexName, - filters, - timeRange, - keepDataView, - ]); + const { investigateInTimeline } = useInvestigateInTimeline(); + const openTimelineCallback = useCallback(() => { + investigateInTimeline({ + dataProviders, + filters, + timeRange, + keepDataView, + }); + }, [dataProviders, filters, timeRange, keepDataView, investigateInTimeline]); return asEmptyButton ? ( ) : ( - + {children} ); diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/split_accordion/split_accordion.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/components/split_accordion/split_accordion.tsx index 668473919b97b..2bc77fe4c7f6a 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/split_accordion/split_accordion.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/split_accordion/split_accordion.tsx @@ -30,7 +30,7 @@ export const SplitAccordion = ({ ({ v4: jest.fn().mockReturnValue('123'), @@ -51,67 +48,123 @@ describe('Helpers', () => { }); describe('#getFormattedEntry', () => { - test('it returns entry with a value when "item.field" is of type "text" and matching keyword field exists', () => { - const payloadIndexPattern: DataViewBase = { - ...getMockIndexPattern(), + test('returns fields found in dataViews', () => { + const dataView: DataViewBase = { + title: 'test1-*', fields: [ - ...fields, { - name: 'machine.os.raw.text', + name: 'fieldA.name', type: 'string', esTypes: ['text'], - count: 0, - scripted: false, - searchable: false, - aggregatable: false, - readFromDocValues: true, }, ], - } as DataViewBase; + }; + const threatMatchDataView: DataViewBase = { + title: 'test2-*', + fields: [ + { + name: 'fieldB.name', + type: 'string', + esTypes: ['text'], + }, + ], + }; + const payloadItem: Entry = { - field: 'machine.os.raw.text', + field: 'fieldA.name', type: 'mapping', - value: 'some os', + value: 'fieldB.name', }; - const output = getFormattedEntry(payloadIndexPattern, payloadIndexPattern, payloadItem, 0); - const expected: FormattedEntry = { - entryIndex: 0, - id: '123', + + expect(getFormattedEntry(dataView, threatMatchDataView, payloadItem, 0)).toMatchObject({ field: { - name: 'machine.os.raw.text', + name: 'fieldA.name', type: 'string', esTypes: ['text'], - count: 0, - scripted: false, - searchable: false, - aggregatable: false, - readFromDocValues: true, - } as FieldSpec, + }, + value: { + name: 'fieldB.name', + type: 'string', + esTypes: ['text'], + }, + }); + }); + + test('returns fallback values when fields not found in dataViews', () => { + const dataView: DataViewBase = { + title: 'test1-*', + fields: [], + }; + const threatMatchDataView: DataViewBase = { + title: 'test2-*', + fields: [], + }; + + const payloadItem: Entry = { + field: 'fieldA.name', type: 'mapping', - value: undefined, + value: 'fieldB.name', }; - expect(output).toEqual(expected); + + expect(getFormattedEntry(dataView, threatMatchDataView, payloadItem, 0)).toMatchObject({ + field: { + name: 'fieldA.name', + type: 'string', + }, + value: { + name: 'fieldB.name', + type: 'string', + }, + }); + }); + + test('returns entry parameters', () => { + const dataView: DataViewBase = { + title: 'test1-*', + fields: [], + }; + const threatMatchDataView: DataViewBase = { + title: 'test2-*', + fields: [], + }; + + const payloadItem: Entry = { + field: 'unknown', + type: 'mapping', + value: 'unknown', + }; + + expect(getFormattedEntry(dataView, threatMatchDataView, payloadItem, 3)).toMatchObject({ + entryIndex: 3, + type: 'mapping', + }); }); }); describe('#getFormattedEntries', () => { - test('it returns formatted entry with field and value undefined if it unable to find a matching index pattern field', () => { + test('returns formatted entry with fallback field and value if it unable to find a matching index pattern field', () => { const payloadIndexPattern = getMockIndexPattern(); - const payloadItems: Entry[] = [{ field: 'field.one', type: 'mapping', value: 'field.one' }]; + const payloadItems: Entry[] = [{ field: 'field.one', type: 'mapping', value: 'field.two' }]; const output = getFormattedEntries(payloadIndexPattern, payloadIndexPattern, payloadItems); const expected: FormattedEntry[] = [ { id: '123', entryIndex: 0, - field: undefined, - value: undefined, + field: { + name: 'field.one', + type: 'string', + }, + value: { + name: 'field.two', + type: 'string', + }, type: 'mapping', }, ]; expect(output).toEqual(expected); }); - test('it returns "undefined" value if cannot match a pattern field', () => { + test('it returns a fallback value if cannot match a pattern field', () => { const payloadIndexPattern = getMockIndexPattern(); const payloadItems: Entry[] = [{ field: 'machine.os', type: 'mapping', value: 'yolo' }]; const output = getFormattedEntries(payloadIndexPattern, payloadIndexPattern, payloadItems); @@ -129,7 +182,10 @@ describe('Helpers', () => { aggregatable: true, readFromDocValues: false, } as FieldSpec, - value: undefined, + value: { + name: 'yolo', + type: 'string', + }, type: 'mapping', }, ]; @@ -273,39 +329,4 @@ describe('Helpers', () => { expect(output).toEqual(expected); }); }); - - describe('#filterItems', () => { - test('it removes entry items with "value" of "undefined"', () => { - const entry: ThreatMapEntry = { field: 'host.name', type: 'mapping', value: 'host.name' }; - const mockEmpty: EmptyEntry = { - field: 'host.name', - type: 'mapping', - value: undefined, - }; - const items = filterItems([ - { - entries: [entry], - }, - { - entries: [mockEmpty], - }, - ]); - expect(items).toEqual([{ entries: [entry] }]); - }); - }); - - describe('customValidators.forbiddenField', () => { - const FORBIDDEN = '*'; - - test('it returns expected value when a forbidden value is passed in', () => { - expect(customValidators.forbiddenField('*', FORBIDDEN)).toEqual({ - code: 'ERR_FIELD_FORMAT', - message: 'The index pattern cannot be *. Please choose a more specific index pattern.', - }); - }); - - test('it returns undefined when a non-forbidden value is passed in', () => { - expect(customValidators.forbiddenField('.test-index', FORBIDDEN)).not.toBeDefined(); - }); - }); }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/threat_match/helpers.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/components/threat_match/helpers.tsx index 693dad3da4255..3292951ca4f86 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/threat_match/helpers.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/threat_match/helpers.tsx @@ -6,32 +6,24 @@ */ import { v4 as uuidv4 } from 'uuid'; -import { i18n } from '@kbn/i18n'; import { addIdToItem } from '@kbn/securitysolution-utils'; -import type { ThreatMap, ThreatMapping } from '@kbn/securitysolution-io-ts-alerting-types'; -import { threatMap } from '@kbn/securitysolution-io-ts-alerting-types'; +import type { ThreatMap } from '@kbn/securitysolution-io-ts-alerting-types'; import type { DataViewBase, DataViewFieldBase } from '@kbn/es-query'; -import type { ValidationFunc } from '@kbn/es-ui-shared-plugin/static/forms/hook_form_lib'; -import type { ERROR_CODE } from '@kbn/es-ui-shared-plugin/static/forms/helpers/field_validators/types'; import type { Entry, FormattedEntry, ThreatMapEntries, EmptyEntry } from './types'; /** * Formats the entry into one that is easily usable for the UI. - * - * @param patterns DataViewBase containing available fields on rule index - * @param item item entry - * @param itemIndex entry index */ export const getFormattedEntry = ( - indexPattern: DataViewBase, - threatIndexPatterns: DataViewBase, + dataView: DataViewBase, + threatDataView: DataViewBase, item: Entry, itemIndex: number, uuidGen: () => string = uuidv4 ): FormattedEntry => { - const { fields } = indexPattern; - const { fields: threatFields } = threatIndexPatterns; + const { fields } = dataView; + const { fields: threatFields } = threatDataView; const field = item.field; const threatField = item.value; const [foundField] = fields.filter(({ name }) => field != null && field === name); @@ -39,11 +31,20 @@ export const getFormattedEntry = ( ({ name }) => threatField != null && threatField === name ); const maybeId: typeof item & { id?: string } = item; + + // Fallback to a string field when field isn't found in known fields. + // It's required for showing field's value when appropriate data is missing in ES. return { id: maybeId.id ?? uuidGen(), - field: foundField, + field: foundField ?? { + name: field, + type: 'string', + }, type: 'mapping', - value: threatFoundField, + value: threatFoundField ?? { + name: threatField, + type: 'string', + }, entryIndex: itemIndex, }; }; @@ -128,7 +129,7 @@ export const getEntryOnThreatFieldChange = ( }; }; -export const getDefaultEmptyEntry = (): EmptyEntry => { +export const createAndNewEntryItem = (): EmptyEntry => { return addIdToItem({ field: '', type: 'mapping', @@ -136,7 +137,7 @@ export const getDefaultEmptyEntry = (): EmptyEntry => { }); }; -export const getNewItem = (): ThreatMap => { +export const createOrNewEntryItem = (): ThreatMap => { return addIdToItem({ entries: [ addIdToItem({ @@ -148,17 +149,6 @@ export const getNewItem = (): ThreatMap => { }); }; -export const filterItems = (items: ThreatMapEntries[]): ThreatMapping => { - return items.reduce((acc, item) => { - const newItem = { ...item, entries: item.entries }; - if (threatMap.is(newItem)) { - return [...acc, newItem]; - } else { - return acc; - } - }, []); -}; - /** * Given a list of items checks each one to see if any of them have an empty field * or an empty value. @@ -182,36 +172,3 @@ export const singleEntryThreat = (items: ThreatMapEntries[]): boolean => { items[0].entries[0].value === '' ); }; - -export const customValidators = { - forbiddenField: ( - value: unknown, - forbiddenString: string - ): ReturnType> => { - let match: boolean; - - if (typeof value === 'string') { - match = value === forbiddenString; - } else if (Array.isArray(value)) { - match = !!value.find((item) => item === forbiddenString); - } else { - match = false; - } - - if (match) { - return { - code: 'ERR_FIELD_FORMAT', - message: i18n.translate( - 'xpack.securitySolution.detectionEngine.createRule.stepDefineRule.threatMatchIndexForbiddenError', - { - defaultMessage: - 'The index pattern cannot be { forbiddenString }. Please choose a more specific index pattern.', - values: { - forbiddenString, - }, - } - ), - }; - } - }, -}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/threat_match/index.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/components/threat_match/index.test.tsx index f2365cd064a02..67472d89806af 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/threat_match/index.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/threat_match/index.test.tsx @@ -8,7 +8,7 @@ import React from 'react'; import { ThemeProvider } from 'styled-components'; import { mount } from 'enzyme'; -import { waitFor } from '@testing-library/react'; +import { render, screen } from '@testing-library/react'; import { fields } from '@kbn/data-plugin/common/mocks'; @@ -18,6 +18,7 @@ import { ThreatMatchComponent } from '.'; import type { ThreatMapEntries } from './types'; import type { DataViewBase } from '@kbn/es-query'; import { getMockTheme } from '../../lib/kibana/kibana_react.mock'; +import { createOrNewEntryItem } from './helpers'; const mockTheme = getMockTheme({ eui: { @@ -27,10 +28,6 @@ const mockTheme = getMockTheme({ jest.mock('../../lib/kibana'); -const getPayLoad = (): ThreatMapEntries[] => [ - { entries: [{ field: 'host.name', type: 'mapping', value: 'host.name' }] }, -]; - const getDoublePayLoad = (): ThreatMapEntries[] => [ { entries: [{ field: 'host.name', type: 'mapping', value: 'host.name' }] }, { entries: [{ field: 'host.name', type: 'mapping', value: 'host.name' }] }, @@ -59,7 +56,7 @@ describe('ThreatMatchComponent', () => { const wrapper = mount( { fields, } as DataViewBase } - onChange={jest.fn()} + onMappingEntriesChange={jest.fn()} /> ); @@ -88,11 +85,46 @@ describe('ThreatMatchComponent', () => { ); }); - test('it displays "Search" for "listItems" that are passed in', async () => { + test('it displays field values for "listItems" that are passed in', async () => { + const mapping: ThreatMapEntries[] = [ + { entries: [{ field: 'host.name', type: 'mapping', value: 'host.name' }] }, + ]; + + render( + + ); + + expect(screen.getAllByTestId('itemEntryContainer')).toHaveLength(1); + + const comboboxes = screen.getAllByRole('combobox'); + + expect(comboboxes).toHaveLength(2); + expect(comboboxes[0]).toHaveValue('host.name'); + expect(comboboxes[1]).toHaveValue('host.name'); + }); + + test('it displays "or", "and" enabled', () => { const wrapper = mount( { fields, } as DataViewBase } - onChange={jest.fn()} + onMappingEntriesChange={jest.fn()} /> ); - expect(wrapper.find('EuiFlexGroup[data-test-subj="itemEntryContainer"]')).toHaveLength(1); - expect(wrapper.find('[data-test-subj="entryField"] input').at(0).props().placeholder).toEqual( - 'Search' - ); - wrapper.unmount(); + expect(wrapper.find('[data-test-subj="andButton"] button').prop('disabled')).toBeFalsy(); + expect(wrapper.find('[data-test-subj="orButton"] button').prop('disabled')).toBeFalsy(); }); - test('it displays "or", "and" enabled', () => { + test('it adds an entry when "and" clicked', async () => { + const handleMappingEntriesChangeMock = jest.fn(); + const wrapper = mount( { fields, } as DataViewBase } - onChange={jest.fn()} + onMappingEntriesChange={handleMappingEntriesChangeMock} /> ); - expect(wrapper.find('[data-test-subj="andButton"] button').prop('disabled')).toBeFalsy(); - expect(wrapper.find('[data-test-subj="orButton"] button').prop('disabled')).toBeFalsy(); + expect(wrapper.find('EuiFlexGroup[data-test-subj="itemEntryContainer"]')).toHaveLength(1); + + wrapper.find('[data-test-subj="andButton"] button').simulate('click'); + + expect(handleMappingEntriesChangeMock).toHaveBeenCalledWith([ + expect.objectContaining({ + entries: [ + expect.objectContaining({ + field: '', + type: 'mapping', + value: '', + }), + expect.objectContaining({ + field: '', + type: 'mapping', + value: '', + }), + ], + }), + ]); }); - test('it adds an entry when "and" clicked', async () => { + test('it shows two AND entries', () => { + const mappingEntries: ThreatMapEntries[] = [ + { + entries: [ + { + field: '', + type: 'mapping', + value: '', + }, + { + field: '', + type: 'mapping', + value: '', + }, + ], + }, + ]; + const wrapper = mount( { fields, } as DataViewBase } - onChange={jest.fn()} + onMappingEntriesChange={jest.fn()} /> ); - expect(wrapper.find('EuiFlexGroup[data-test-subj="itemEntryContainer"]')).toHaveLength(1); - - wrapper.find('[data-test-subj="andButton"] button').simulate('click'); - - await waitFor(() => { - expect(wrapper.find('EuiFlexGroup[data-test-subj="itemEntryContainer"]')).toHaveLength(2); - expect(wrapper.find('[data-test-subj="entryField"] input').at(0).props().placeholder).toEqual( - 'Search' - ); - expect( - wrapper.find('[data-test-subj="threatEntryField"] input').at(0).props().placeholder - ).toEqual('Search'); - expect(wrapper.find('[data-test-subj="entryField"] input').at(1).props().placeholder).toEqual( - 'Search' - ); - expect( - wrapper.find('[data-test-subj="threatEntryField"] input').at(1).props().placeholder - ).toEqual('Search'); - }); + expect(wrapper.find('EuiFlexGroup[data-test-subj="itemEntryContainer"]')).toHaveLength(2); + expect(wrapper.find('[data-test-subj="entryField"] input').at(0).props().placeholder).toEqual( + 'Search' + ); + expect( + wrapper.find('[data-test-subj="threatEntryField"] input').at(0).props().placeholder + ).toEqual('Search'); + expect(wrapper.find('[data-test-subj="entryField"] input').at(1).props().placeholder).toEqual( + 'Search' + ); + expect( + wrapper.find('[data-test-subj="threatEntryField"] input').at(1).props().placeholder + ).toEqual('Search'); }); test('it adds an item when "or" clicked', async () => { + const handleMappingEntriesChangeMock = jest.fn(); + const wrapper = mount( { fields, } as DataViewBase } - onChange={jest.fn()} + onMappingEntriesChange={handleMappingEntriesChangeMock} /> ); @@ -220,28 +282,96 @@ describe('ThreatMatchComponent', () => { wrapper.find('[data-test-subj="orButton"] button').simulate('click'); - await waitFor(() => { - expect(wrapper.find('EuiFlexGroup[data-test-subj="entriesContainer"]')).toHaveLength(2); - expect(wrapper.find('[data-test-subj="entryField"] input').at(0).props().placeholder).toEqual( - 'Search' - ); - expect( - wrapper.find('[data-test-subj="threatEntryField"] input').at(0).props().placeholder - ).toEqual('Search'); - expect(wrapper.find('[data-test-subj="entryField"] input').at(1).props().placeholder).toEqual( - 'Search' - ); - expect( - wrapper.find('[data-test-subj="threatEntryField"] input').at(1).props().placeholder - ).toEqual('Search'); - }); + expect(handleMappingEntriesChangeMock).toHaveBeenCalledWith([ + expect.objectContaining({ + entries: [ + expect.objectContaining({ + field: '', + type: 'mapping', + value: '', + }), + ], + }), + expect.objectContaining({ + entries: [ + expect.objectContaining({ + field: '', + type: 'mapping', + value: '', + }), + ], + }), + ]); + }); + + test('it shows two OR entries', () => { + const mappingEntries: ThreatMapEntries[] = [ + { + entries: [ + { + field: '', + type: 'mapping', + value: '', + }, + ], + }, + { + entries: [ + { + field: '', + type: 'mapping', + value: '', + }, + ], + }, + ]; + + const wrapper = mount( + + + + ); + + expect(wrapper.find('EuiFlexGroup[data-test-subj="entriesContainer"]')).toHaveLength(2); + expect(wrapper.find('[data-test-subj="entryField"] input').at(0).props().placeholder).toEqual( + 'Search' + ); + expect( + wrapper.find('[data-test-subj="threatEntryField"] input').at(0).props().placeholder + ).toEqual('Search'); + expect(wrapper.find('[data-test-subj="entryField"] input').at(1).props().placeholder).toEqual( + 'Search' + ); + expect( + wrapper.find('[data-test-subj="threatEntryField"] input').at(1).props().placeholder + ).toEqual('Search'); }); test('it removes one row if user deletes a row', () => { + const mappingEntries = getDoublePayLoad(); + const handleMappingEntriesChangeMock = jest.fn(); + const wrapper = mount( { fields, } as DataViewBase } - onChange={jest.fn()} + onMappingEntriesChange={handleMappingEntriesChangeMock} /> ); expect(wrapper.find('div[data-test-subj="entriesContainer"]').length).toEqual(2); wrapper.find('[data-test-subj="firstRowDeleteButton"] button').simulate('click'); - expect(wrapper.find('div[data-test-subj="entriesContainer"]').length).toEqual(1); - wrapper.unmount(); + + expect(handleMappingEntriesChangeMock).toHaveBeenCalledWith([mappingEntries[1]]); }); test('it displays "and" badge if at least one item includes more than one entry', () => { + const mappingEntries: ThreatMapEntries[] = [ + { + entries: [ + { + field: '', + type: 'mapping', + value: '', + }, + { + field: '', + type: 'mapping', + value: '', + }, + ], + }, + ]; + const wrapper = mount( { fields, } as DataViewBase } - onChange={jest.fn()} + onMappingEntriesChange={jest.fn()} /> ); - expect(wrapper.find('[data-test-subj="entryItemEntryFirstRowAndBadge"]').exists()).toBeFalsy(); - - wrapper.find('[data-test-subj="andButton"] button').simulate('click'); - expect(wrapper.find('[data-test-subj="entryItemEntryFirstRowAndBadge"]').exists()).toBeTruthy(); }); @@ -302,7 +445,7 @@ describe('ThreatMatchComponent', () => { const wrapper = mount( { fields, } as DataViewBase } - onChange={jest.fn()} + onMappingEntriesChange={jest.fn()} /> ); diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/threat_match/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/components/threat_match/index.tsx index 425977aa175c6..25b78d9024d6d 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/threat_match/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/threat_match/index.tsx @@ -5,18 +5,15 @@ * 2.0. */ -import React, { useCallback, useEffect, useReducer } from 'react'; +import React, { useCallback, useMemo } from 'react'; import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import styled from 'styled-components'; import type { DataViewBase } from '@kbn/es-query'; -import type { ThreatMapping } from '@kbn/securitysolution-io-ts-alerting-types'; import { ListItemComponent } from './list_item'; import { AndOrBadge } from '../and_or_badge'; import { LogicButtons } from './logic_buttons'; import type { ThreatMapEntries } from './types'; -import type { State } from './reducer'; -import { reducer } from './reducer'; -import { getDefaultEmptyEntry, getNewItem, filterItems } from './helpers'; +import { createAndNewEntryItem, createOrNewEntryItem } from './helpers'; const MyInvisibleAndBadge = styled(EuiFlexItem)` visibility: hidden; @@ -32,135 +29,81 @@ const MyButtonsContainer = styled(EuiFlexItem)` margin: 16px 0; `; -const initialState: State = { - andLogicIncluded: false, - entries: [], - entriesToDelete: [], -}; - -interface OnChangeProps { - entryItems: ThreatMapping; - entriesToDelete: ThreatMapEntries[]; -} - interface ThreatMatchComponentProps { - listItems: ThreatMapEntries[]; + mappingEntries: ThreatMapEntries[]; indexPatterns: DataViewBase; threatIndexPatterns: DataViewBase; - onChange: (arg: OnChangeProps) => void; + 'id-aria'?: string; + 'data-test-subj'?: string; + onMappingEntriesChange: (newValue: ThreatMapEntries[]) => void; } export const ThreatMatchComponent = ({ - listItems, + mappingEntries, indexPatterns, threatIndexPatterns, - onChange, + 'id-aria': idAria, + 'data-test-subj': dataTestSubj, + onMappingEntriesChange, }: ThreatMatchComponentProps) => { - const [{ entries, entriesToDelete, andLogicIncluded }, dispatch] = useReducer(reducer(), { - ...initialState, - }); - - const setUpdateEntries = useCallback( - (items: ThreatMapEntries[]): void => { - dispatch({ - type: 'setEntries', - entries: items, - }); - }, - [dispatch] - ); - - const setDefaultEntries = useCallback( - (item: ThreatMapEntries): void => { - dispatch({ - type: 'setDefault', - initialState, - lastEntry: item, - }); - }, - [dispatch] - ); - const handleEntryItemChange = useCallback( (item: ThreatMapEntries, index: number): void => { - const updatedEntries = [ - ...entries.slice(0, index), - { - ...item, - }, - ...entries.slice(index + 1), - ]; - - setUpdateEntries(updatedEntries); + const updatedEntries = mappingEntries.slice(); + + updatedEntries.splice(index, 1, item); + + onMappingEntriesChange(updatedEntries); }, - [setUpdateEntries, entries] + [mappingEntries, onMappingEntriesChange] ); const handleDeleteEntryItem = useCallback( - (item: ThreatMapEntries, itemIndex: number): void => { + (item: ThreatMapEntries, index: number): void => { if (item.entries.length === 0) { - const updatedEntries = [...entries.slice(0, itemIndex), ...entries.slice(itemIndex + 1)]; - // if it's the only item left, don't delete it just add a default entry to it - if (updatedEntries.length === 0) { - setDefaultEntries(item); - } else { - setUpdateEntries([...entries.slice(0, itemIndex), ...entries.slice(itemIndex + 1)]); - } + const updatedEntries = mappingEntries.slice(); + + updatedEntries.splice(index, 1); + + onMappingEntriesChange(updatedEntries); } else { - handleEntryItemChange(item, itemIndex); + handleEntryItemChange(item, index); } }, - [handleEntryItemChange, setUpdateEntries, entries, setDefaultEntries] + [mappingEntries, onMappingEntriesChange, handleEntryItemChange] ); - const handleAddNewEntryItemEntry = useCallback((): void => { - const lastEntry = entries[entries.length - 1]; - const { entries: innerEntries } = lastEntry; + const handleOrClick = useCallback((): void => { + // There is a case where there are numerous list items, all with + // empty `entries` array. + + onMappingEntriesChange([...mappingEntries, createOrNewEntryItem()]); + }, [mappingEntries, onMappingEntriesChange]); + + const handleAndClick = useCallback((): void => { + const lastEntry = mappingEntries.at(-1); + + if (!lastEntry) { + onMappingEntriesChange([createOrNewEntryItem()]); + return; + } + const { entries: innerEntries } = lastEntry; const updatedEntry: ThreatMapEntries = { ...lastEntry, - entries: [...innerEntries, getDefaultEmptyEntry()], + entries: [...innerEntries, createAndNewEntryItem()], }; - setUpdateEntries([...entries.slice(0, entries.length - 1), { ...updatedEntry }]); - }, [setUpdateEntries, entries]); + onMappingEntriesChange([...mappingEntries.slice(0, -1), updatedEntry]); + }, [mappingEntries, onMappingEntriesChange]); - const handleAddNewEntryItem = useCallback((): void => { - // There is a case where there are numerous list items, all with - // empty `entries` array. - const newItem = getNewItem(); - setUpdateEntries([...entries, { ...newItem }]); - }, [setUpdateEntries, entries]); - - const handleAddClick = useCallback((): void => { - handleAddNewEntryItemEntry(); - }, [handleAddNewEntryItemEntry]); - - // Bubble up changes to parent - useEffect(() => { - onChange({ entryItems: filterItems(entries), entriesToDelete }); - }, [onChange, entriesToDelete, entries]); - - // Defaults to never be sans entry, instead - // always falls back to an empty entry if user deletes all - useEffect(() => { - if ( - entries.length === 0 || - (entries.length === 1 && entries[0].entries != null && entries[0].entries.length === 0) - ) { - handleAddNewEntryItem(); - } - }, [entries, handleAddNewEntryItem]); + const andLogicIncluded = useMemo( + () => mappingEntries.some(({ entries }) => entries.length > 1), + [mappingEntries] + ); - useEffect(() => { - if (listItems.length > 0) { - setUpdateEntries(listItems); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); return ( - - {entries.map((entryListItem, index) => { + + {mappingEntries.map((entryListItem, index) => { const key = (entryListItem as typeof entryListItem & { id?: string }).id ?? `${index}`; return ( @@ -190,7 +133,7 @@ export const ThreatMatchComponent = ({ threatIndexPatterns={threatIndexPatterns} listItemIndex={index} andLogicIncluded={andLogicIncluded} - isOnlyItem={entries.length === 1} + isOnlyItem={mappingEntries.length === 1} onDeleteEntryItem={handleDeleteEntryItem} onChangeEntryItem={handleEntryItemChange} /> @@ -200,7 +143,7 @@ export const ThreatMatchComponent = ({ ); })} - + {andLogicIncluded && ( @@ -211,8 +154,8 @@ export const ThreatMatchComponent = ({ diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/threat_match/reducer.test.ts b/x-pack/solutions/security/plugins/security_solution/public/common/components/threat_match/reducer.test.ts deleted file mode 100644 index 3cd980bd9ae95..0000000000000 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/threat_match/reducer.test.ts +++ /dev/null @@ -1,111 +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 { ThreatMapEntries } from './types'; -import type { State } from './reducer'; -import { reducer } from './reducer'; -import { getDefaultEmptyEntry } from './helpers'; -import type { ThreatMapEntry } from '@kbn/securitysolution-io-ts-alerting-types'; - -jest.mock('uuid', () => ({ - v4: jest.fn().mockReturnValue('123'), -})); - -const initialState: State = { - andLogicIncluded: false, - entries: [], - entriesToDelete: [], -}; - -const getEntry = (): ThreatMapEntry => ({ - field: 'host.name', - type: 'mapping', - value: 'host.name', -}); - -describe('reducer', () => { - afterEach(() => { - jest.clearAllMocks(); - }); - - describe('#setEntries', () => { - test('should return "andLogicIncluded" ', () => { - const update = reducer()(initialState, { - type: 'setEntries', - entries: [], - }); - const expected: State = { - andLogicIncluded: false, - entries: [], - entriesToDelete: [], - }; - expect(update).toEqual(expected); - }); - - test('should set "andLogicIncluded" to true if any of the entries include entries with length greater than 1 ', () => { - const entries: ThreatMapEntries[] = [ - { - entries: [getEntry(), getEntry()], - }, - ]; - const { andLogicIncluded } = reducer()(initialState, { - type: 'setEntries', - entries, - }); - - expect(andLogicIncluded).toBeTruthy(); - }); - - test('should set "andLogicIncluded" to false if any of the entries include entries with length greater than 1 ', () => { - const entries: ThreatMapEntries[] = [ - { - entries: [getEntry()], - }, - ]; - const { andLogicIncluded } = reducer()(initialState, { - type: 'setEntries', - entries, - }); - - expect(andLogicIncluded).toBeFalsy(); - }); - }); - - describe('#setDefault', () => { - test('should restore initial state and add default empty entry to item" ', () => { - const entries: ThreatMapEntries[] = [ - { - entries: [getEntry()], - }, - ]; - - const update = reducer()( - { - andLogicIncluded: true, - entries, - entriesToDelete: [], - }, - { - type: 'setDefault', - initialState, - lastEntry: { - entries: [], - }, - } - ); - - expect(update).toEqual({ - ...initialState, - entries: [ - { - entries: [getDefaultEmptyEntry()], - }, - ], - }); - }); - }); -}); diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/threat_match/reducer.ts b/x-pack/solutions/security/plugins/security_solution/public/common/components/threat_match/reducer.ts deleted file mode 100644 index 3371cfe0e3317..0000000000000 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/threat_match/reducer.ts +++ /dev/null @@ -1,53 +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 { ThreatMapEntries } from './types'; -import { getDefaultEmptyEntry } from './helpers'; - -export interface State { - andLogicIncluded: boolean; - entries: ThreatMapEntries[]; - entriesToDelete: ThreatMapEntries[]; -} - -export type Action = - | { - type: 'setEntries'; - entries: ThreatMapEntries[]; - } - | { - type: 'setDefault'; - initialState: State; - lastEntry: ThreatMapEntries; - }; - -export const reducer = - () => - (state: State, action: Action): State => { - switch (action.type) { - case 'setEntries': { - const isAndLogicIncluded = - action.entries.filter(({ entries }) => entries.length > 1).length > 0; - - const returnState = { - ...state, - andLogicIncluded: isAndLogicIncluded, - entries: action.entries, - }; - return returnState; - } - case 'setDefault': { - return { - ...state, - ...action.initialState, - entries: [{ ...action.lastEntry, entries: [getDefaultEmptyEntry()] }], - }; - } - default: - return state; - } - }; diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/hooks/timeline/use_investigate_in_timeline.ts b/x-pack/solutions/security/plugins/security_solution/public/common/hooks/timeline/use_investigate_in_timeline.ts new file mode 100644 index 0000000000000..f321ac8a8b2fb --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/common/hooks/timeline/use_investigate_in_timeline.ts @@ -0,0 +1,118 @@ +/* + * 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 { useCallback } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import type { Filter } from '@kbn/es-query'; +import { useCreateTimeline } from '../../../timelines/hooks/use_create_timeline'; +import { updateProviders, setFilters } from '../../../timelines/store/actions'; +import { SourcererScopeName } from '../../../sourcerer/store/model'; +import type { DataProvider } from '../../../../common/types'; +import { sourcererSelectors } from '../../store'; +import { sourcererActions } from '../../store/actions'; +import { inputsActions } from '../../store/inputs'; +import { InputsModelId } from '../../store/inputs/constants'; +import type { TimeRange } from '../../store/inputs/model'; +import { TimelineId } from '../../../../common/types/timeline'; +import { TimelineTypeEnum } from '../../../../common/api/timeline'; + +interface InvestigateInTimelineArgs { + /** + * The data providers to apply to the timeline. + */ + dataProviders?: DataProvider[] | null; + + /** + * The filters to apply to the timeline. + */ + filters?: Filter[] | null; + + /** + * The time range to apply to the timeline, defaults to global time range. + */ + timeRange?: TimeRange; + + /** + * Whether to keep the current data view or reset it to the default. + */ + keepDataView?: boolean; +} + +/** + * This hook returns a callback that, when called, opens the timeline modal. + * It clears the current timeline or timeline template. + * Parameters can be passed to configure the timeline as it opens + */ +export const useInvestigateInTimeline = () => { + const dispatch = useDispatch(); + + const signalIndexName = useSelector(sourcererSelectors.signalIndexName); + const defaultDataView = useSelector(sourcererSelectors.defaultDataView); + + const clearTimelineTemplate = useCreateTimeline({ + timelineId: TimelineId.active, + timelineType: TimelineTypeEnum.template, + }); + + const clearTimelineDefault = useCreateTimeline({ + timelineId: TimelineId.active, + timelineType: TimelineTypeEnum.default, + }); + + const investigateInTimeline = useCallback( + async ({ dataProviders, filters, timeRange, keepDataView }: InvestigateInTimelineArgs) => { + const hasTemplateProviders = + dataProviders && dataProviders.find((provider) => provider.type === 'template'); + const clearTimeline = hasTemplateProviders ? clearTimelineTemplate : clearTimelineDefault; + + if (dataProviders || filters) { + // Reset the current timeline + if (timeRange) { + await clearTimeline({ + timeRange, + }); + } else { + await clearTimeline(); + } + if (dataProviders) { + // Update the timeline's providers to match the current prevalence field query + dispatch( + updateProviders({ + id: TimelineId.active, + providers: dataProviders, + }) + ); + } + // Use filters if more than a certain amount of ids for dom performance. + if (filters) { + dispatch( + setFilters({ + id: TimelineId.active, + filters, + }) + ); + } + // Only show detection alerts + // (This is required so the timeline event count matches the prevalence count) + if (!keepDataView) { + dispatch( + sourcererActions.setSelectedDataView({ + id: SourcererScopeName.timeline, + selectedDataViewId: defaultDataView.id, + selectedPatterns: [signalIndexName || ''], + }) + ); + } + // Unlock the time range from the global time range + dispatch(inputsActions.removeLinkTo([InputsModelId.timeline, InputsModelId.global])); + } + }, + [clearTimelineTemplate, clearTimelineDefault, dispatch, defaultDataView.id, signalIndexName] + ); + + return { investigateInTimeline }; +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/mock/mock_timeline_search_service.ts b/x-pack/solutions/security/plugins/security_solution/public/common/mock/mock_timeline_search_service.ts new file mode 100644 index 0000000000000..c38f49d3eb635 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/common/mock/mock_timeline_search_service.ts @@ -0,0 +1,51 @@ +/* + * 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 { mockTimelineData } from './mock_timeline_data'; + +const mockEvents = structuredClone(mockTimelineData); + +/* + * This helps to mock `data.search.search` method to mock the timeline data + * */ +export const getMockTimelineSearchSubscription = () => { + const mockSearchWithArgs = jest.fn(); + + const mockTimelineSearchSubscription = jest.fn().mockImplementation((args) => { + mockSearchWithArgs(args); + return { + subscribe: jest.fn().mockImplementation(({ next }) => { + const start = args.pagination.activePage * args.pagination.querySize; + const end = start + args.pagination.querySize; + const timelineOut = setTimeout(() => { + next({ + isRunning: false, + isPartial: false, + inspect: { + dsl: [], + response: [], + }, + edges: mockEvents.map((item) => ({ node: item })).slice(start, end), + pageInfo: { + activePage: args.pagination.activePage, + querySize: args.pagination.querySize, + }, + rawResponse: {}, + totalCount: mockEvents.length, + }); + }, 50); + return { + unsubscribe: jest.fn(() => { + clearTimeout(timelineOut); + }), + }; + }), + }; + }); + + return { mockTimelineSearchSubscription, mockSearchWithArgs }; +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/mock/test_providers.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/mock/test_providers.tsx index c4525faf3b316..94afe2cf2345c 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/mock/test_providers.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/common/mock/test_providers.tsx @@ -74,8 +74,8 @@ export const TestProvidersComponent = ({ }); return ( - - + + ({ eui: euiDarkVars, darkMode: true })}> @@ -97,8 +97,8 @@ export const TestProvidersComponent = ({ - - + + ); }; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/ml_job_select/ml_job_select.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/ml_job_select/ml_job_select.test.tsx index ddbb6c8b70708..1580cc961c7c5 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/ml_job_select/ml_job_select.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/ml_job_select/ml_job_select.test.tsx @@ -21,7 +21,7 @@ describe('MlJobSelect', () => { it('renders correctly', () => { const Component = () => { - const field = useFormFieldMock(); + const field = useFormFieldMock({ value: [] }); return ; }; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/ml_job_select/ml_job_select.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/ml_job_select/ml_job_select.tsx index 160178a5b782d..8e715b6fe0e7e 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/ml_job_select/ml_job_select.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/ml_job_select/ml_job_select.tsx @@ -57,6 +57,21 @@ export const MlJobSelect: React.FC = ({ label: `${job.customSettings?.security_app_display_name} ${job.id}`, })); + // If rule's ML job is no longer available or has not yet become available, we still want it to appear in the dropdown. + selectedJobIds.forEach((selectedJobId) => { + const isSelectedJobAvailable = jobOptions.some((job) => job.value.id === selectedJobId); + if (!isSelectedJobAvailable) { + jobOptions.push({ + value: { + id: selectedJobId, + description: '', + name: selectedJobId, + }, + label: selectedJobId, + }); + } + }); + const selectedJobOptions = jobOptions .filter((option) => selectedJobIds.includes(option.value.id)) // 'label' defines what is rendered inside the selected ComboBoxPill diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/ml_jobs_description/ml_job_item.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/ml_jobs_description/ml_job_item.tsx index b706ed4135f49..e32b8cb98270c 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/ml_jobs_description/ml_job_item.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/ml_jobs_description/ml_job_item.tsx @@ -9,6 +9,7 @@ import type { FC, ReactNode } from 'react'; import React, { memo } from 'react'; import styled from 'styled-components'; import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; +import { euiThemeVars } from '@kbn/ui-theme'; import type { MlSummaryJob } from '@kbn/ml-plugin/public'; import * as i18n from './translations'; @@ -21,6 +22,7 @@ import { MlJobStatusBadge } from '../ml_job_status_badge'; const Wrapper = styled.div` overflow: hidden; + margin-bottom: ${euiThemeVars.euiSizeS}; `; const MlJobItemComponent: FC<{ diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/optional_field_label/index.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/optional_field_label/index.test.tsx similarity index 100% rename from x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/optional_field_label/index.test.tsx rename to x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/optional_field_label/index.test.tsx diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/optional_field_label/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/optional_field_label/index.tsx similarity index 100% rename from x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/optional_field_label/index.tsx rename to x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/optional_field_label/index.tsx diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/related_integrations/related_integrations.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/related_integrations/related_integrations.tsx index a57ce5fe8cd7b..8b24429407719 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/related_integrations/related_integrations.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/related_integrations/related_integrations.tsx @@ -6,18 +6,12 @@ */ import React from 'react'; -import { - EuiButtonEmpty, - EuiFlexGroup, - EuiFlexItem, - EuiFormRow, - EuiSpacer, - EuiText, -} from '@elastic/eui'; +import { EuiButtonEmpty, EuiFlexGroup, EuiFlexItem, EuiFormRow, EuiSpacer } from '@elastic/eui'; import { UseArray, useFormData } from '../../../../shared_imports'; import { RelatedIntegrationsHelpInfo } from './related_integrations_help_info'; import { RelatedIntegrationFieldRow } from './related_integration_field_row'; import * as i18n from './translations'; +import { OptionalFieldLabel } from '../optional_field_label'; interface RelatedIntegrationsProps { path: string; @@ -38,11 +32,7 @@ export function RelatedIntegrations({ path, dataTestSubj }: RelatedIntegrationsP {({ items, addItem, removeItem }) => ( - {i18n.OPTIONAL} - - } + labelAppend={OptionalFieldLabel} labelType="legend" fullWidth data-test-subj={dataTestSubj} diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/related_integrations/translations.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/related_integrations/translations.ts index 2645298783f5c..de8b1a599fcad 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/related_integrations/translations.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/related_integrations/translations.ts @@ -14,13 +14,6 @@ export const RELATED_INTEGRATIONS_LABEL = i18n.translate( } ); -export const OPTIONAL = i18n.translate( - 'xpack.securitySolution.detectionEngine.ruleDescription.relatedIntegrations.optionalText', - { - defaultMessage: 'Optional', - } -); - export const RELATED_INTEGRATION_FIELDS_HELP_TEXT = i18n.translate( 'xpack.securitySolution.detectionEngine.ruleDescription.relatedIntegrations.helpText', { diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/required_fields/required_fields.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/required_fields/required_fields.tsx index f2f4c08a35813..27387909d3307 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/required_fields/required_fields.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/required_fields/required_fields.tsx @@ -13,10 +13,11 @@ import type { RequiredFieldInput } from '../../../../../common/api/detection_eng import { UseArray, useFormData } from '../../../../shared_imports'; import type { FormHook, ArrayItem } from '../../../../shared_imports'; import { RequiredFieldsHelpInfo } from './required_fields_help_info'; -import { RequiredFieldRow } from './required_fields_row'; import * as defineRuleI18n from '../../../rule_creation_ui/components/step_define_rule/translations'; -import * as i18n from './translations'; +import { OptionalFieldLabel } from '../optional_field_label'; +import { RequiredFieldRow } from './required_fields_row'; import { getFlattenedArrayFieldNames } from './utils'; +import * as i18n from './translations'; interface RequiredFieldsComponentProps { path: string; @@ -173,7 +174,7 @@ const RequiredFieldsList = ({ } labelAppend={ - {i18n.OPTIONAL} + {OptionalFieldLabel} } hasChildLabel={false} diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/required_fields/translations.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/required_fields/translations.ts index bed9a4ea0024c..dacc7dfb9ff6f 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/required_fields/translations.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/required_fields/translations.ts @@ -42,13 +42,6 @@ export const REQUIRED_FIELDS_GENERAL_WARNING_TITLE = i18n.translate( } ); -export const OPTIONAL = i18n.translate( - 'xpack.securitySolution.detectionEngine.ruleDescription.requiredFields.optionalText', - { - defaultMessage: 'Optional', - } -); - export const REMOVE_REQUIRED_FIELD_BUTTON_ARIA_LABEL = i18n.translate( 'xpack.securitySolution.detectionEngine.ruleDescription.requiredFields.removeRequiredFieldButtonAriaLabel', { diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_index_edit/index.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_index_edit/index.ts new file mode 100644 index 0000000000000..3c192f575fdd8 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_index_edit/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './threat_match_index_edit'; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_index_edit/threat_match_index_edit.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_index_edit/threat_match_index_edit.tsx new file mode 100644 index 0000000000000..277721f7bd975 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_index_edit/threat_match_index_edit.tsx @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { FieldConfig } from '../../../../shared_imports'; +import { UseField } from '../../../../shared_imports'; +import { ThreatMatchIndexSelectorField } from './threat_match_index_selector_field'; +import { threatIndexPatternsRequiredValidator } from './validators/threat_index_patterns_required_validator'; +import { forbiddenIndexPatternValidator } from './validators/forbidden_index_pattern_validator'; + +interface ThreatMatchIndexEditProps { + path: string; +} + +export function ThreatMatchIndexEdit({ path }: ThreatMatchIndexEditProps): JSX.Element { + return ( + + ); +} + +const THREAT_MATCH_INDEX_FIELD_CONFIG: FieldConfig = { + validations: [ + { + validator: threatIndexPatternsRequiredValidator, + }, + { + validator: forbiddenIndexPatternValidator, + }, + ], +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_index_edit/threat_match_index_selector_field.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_index_edit/threat_match_index_selector_field.tsx new file mode 100644 index 0000000000000..ad694b106248d --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_index_edit/threat_match_index_selector_field.tsx @@ -0,0 +1,65 @@ +/* + * 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, { memo, useCallback } from 'react'; +import { isEqual } from 'lodash'; +import { css } from '@emotion/css'; +import { EuiText, EuiButtonEmpty, useEuiTheme } from '@elastic/eui'; +import { ComboBoxField } from '@kbn/es-ui-shared-plugin/static/forms/components'; +import { DEFAULT_THREAT_INDEX_KEY } from '../../../../../common/constants'; +import { useUiSetting$ } from '../../../../common/lib/kibana'; +import type { FieldHook } from '../../../../shared_imports'; +import * as i18n from './translations'; + +interface ThreatMatchIndexSelectorFieldProps { + field: FieldHook; +} + +export const ThreatMatchIndexSelectorField = memo(function ThreatIndexField({ + field, +}: ThreatMatchIndexSelectorFieldProps): JSX.Element { + const { euiTheme } = useEuiTheme(); + const [defaultThreatIndices] = useUiSetting$(DEFAULT_THREAT_INDEX_KEY); + const isIndexModified = !isEqual(field.value, defaultThreatIndices); + + const handleResetIndices = useCallback( + () => field.setValue(defaultThreatIndices), + [field, defaultThreatIndices] + ); + + return ( + } + idAria="ruleThreatMatchIndicesField" + data-test-subj="ruleThreatMatchIndicesField" + euiFieldProps={EUI_COMBOBOX_PROPS} + label={i18n.THREAT_MATCH_INDEX_FIELD_LABEL} + labelAppend={ + isIndexModified ? ( + + {i18n.RESET_TO_DEFAULT_THREAT_MATCH_INDEX} + + ) : undefined + } + helpText={helpText} + /> + ); +}); + +const EUI_COMBOBOX_PROPS = { + fullWidth: true, + placeholder: '', +}; + +const helpText = {i18n.THREAT_MATCH_INDEX_FIELD_HELP_TEXT}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_index_edit/translations.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_index_edit/translations.tsx new file mode 100644 index 0000000000000..f4ae40c6ffdc1 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_index_edit/translations.tsx @@ -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 { i18n } from '@kbn/i18n'; + +export const THREAT_MATCH_INDEX_FIELD_LABEL = i18n.translate( + 'xpack.securitySolution.ruleManagement.ruleFields.threatMatchIndex.label', + { + defaultMessage: 'Indicator index patterns', + } +); + +export const THREAT_MATCH_INDEX_FIELD_HELP_TEXT = i18n.translate( + 'xpack.securitySolution.ruleManagement.ruleFields.threatMatchIndex.helpText', + { + defaultMessage: 'Select threat indices', + } +); + +export const RESET_TO_DEFAULT_THREAT_MATCH_INDEX = i18n.translate( + 'xpack.securitySolution.ruleManagement.ruleFields.threatMatchIndex.resetToDefaultIndices', + { + defaultMessage: 'Reset to default index patterns', + } +); diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_index_edit/validators/forbidden_index_pattern_validator.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_index_edit/validators/forbidden_index_pattern_validator.ts new file mode 100644 index 0000000000000..115858b863a4e --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_index_edit/validators/forbidden_index_pattern_validator.ts @@ -0,0 +1,23 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { type FormData, type ValidationFunc } from '../../../../../shared_imports'; +import * as i18n from './translations'; + +export const forbiddenIndexPatternValidator: ValidationFunc = ( + ...args +) => { + const [{ value, path }] = args; + + if (Array.isArray(value) && value.includes('*')) { + return { + code: 'ERR_FIELD_FORMAT', + path, + message: i18n.THREAT_MATCH_INDEX_FIELD_VALIDATION_FORBIDDEN_PATTERN_ERROR, + }; + } +}; diff --git a/x-pack/platform/plugins/shared/actions/server/lib/bidirectional_connectors.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_index_edit/validators/threat_index_patterns_required_validator.ts similarity index 50% rename from x-pack/platform/plugins/shared/actions/server/lib/bidirectional_connectors.ts rename to x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_index_edit/validators/threat_index_patterns_required_validator.ts index 49d33f9d016c3..fbbc777413208 100644 --- a/x-pack/platform/plugins/shared/actions/server/lib/bidirectional_connectors.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_index_edit/validators/threat_index_patterns_required_validator.ts @@ -5,11 +5,9 @@ * 2.0. */ -const BIDIRECTIONAL_CONNECTOR_TYPES = ['.sentinelone', '.crowdstrike']; -export const isBidirectionalConnectorType = (type: string | undefined) => { - if (!type) { - return false; - } +import { fieldValidators } from '../../../../../shared_imports'; +import * as i18n from './translations'; - return BIDIRECTIONAL_CONNECTOR_TYPES.includes(type); -}; +export const threatIndexPatternsRequiredValidator = fieldValidators.emptyField( + i18n.THREAT_MATCH_INDEX_FIELD_VALIDATION_REQUIRED_ERROR +); diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_index_edit/validators/translations.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_index_edit/validators/translations.ts new file mode 100644 index 0000000000000..0b4b153d26501 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_index_edit/validators/translations.ts @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const THREAT_MATCH_INDEX_FIELD_VALIDATION_REQUIRED_ERROR = i18n.translate( + 'xpack.securitySolution.detectionEngine.ruleManagement.ruleFields.threatMatchIndex.validation.requiredError', + { + defaultMessage: 'A minimum of one index pattern is required.', + } +); + +export const THREAT_MATCH_INDEX_FIELD_VALIDATION_FORBIDDEN_PATTERN_ERROR = i18n.translate( + 'xpack.securitySolution.detectionEngine.ruleManagement.ruleFields.threatMatchIndexForbiddenError', + { + defaultMessage: 'The index pattern cannot be "*". Please choose a more specific index pattern.', + } +); diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_indicator_path_edit/index.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_indicator_path_edit/index.ts new file mode 100644 index 0000000000000..a018c50647303 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_indicator_path_edit/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './threat_match_indicator_path_edit'; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_indicator_path_edit/threat_match_indicator_path_edit.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_indicator_path_edit/threat_match_indicator_path_edit.tsx new file mode 100644 index 0000000000000..02c1aa95cb255 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_indicator_path_edit/threat_match_indicator_path_edit.tsx @@ -0,0 +1,55 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { memo } from 'react'; +import { TextField } from '@kbn/es-ui-shared-plugin/static/forms/components'; +import type { FieldConfig } from '../../../../shared_imports'; +import { fieldValidators, UseField, VALIDATION_TYPES } from '../../../../shared_imports'; +import { DEFAULT_INDICATOR_SOURCE_PATH } from '../../../../../common/constants'; +import { OptionalFieldLabel } from '../optional_field_label'; +import * as i18n from './translations'; + +interface ThreatMatchIndicatorPathEditProps { + path: string; + disabled?: boolean; +} + +export const ThreatMatchIndicatorPathEdit = memo(function ThreatMatchIndicatorPathEdit({ + path, + disabled, +}: ThreatMatchIndicatorPathEditProps): JSX.Element { + return ( + + ); +}); + +const THREAT_MATCH_INDICATOR_PATH_FIELD_CONFIG: FieldConfig = { + label: i18n.THREAT_MATCH_INDICATOR_PATH_FIELD_LABEL, + helpText: i18n.THREAT_MATCH_INDICATOR_PATH_FIELD_HELP_TEXT, + labelAppend: OptionalFieldLabel, + validations: [ + { + validator: fieldValidators.emptyField( + i18n.THREAT_MATCH_INDICATOR_PATH_FIELD_VALIDATION_REQUIRED_ERROR + ), + type: VALIDATION_TYPES.FIELD, + }, + ], +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_indicator_path_edit/translations.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_indicator_path_edit/translations.tsx new file mode 100644 index 0000000000000..c39ca7456a53f --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_indicator_path_edit/translations.tsx @@ -0,0 +1,30 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const THREAT_MATCH_INDICATOR_PATH_FIELD_LABEL = i18n.translate( + 'xpack.securitySolution.ruleManagement.ruleFields.threatMatchIndicatorPath.label', + { + defaultMessage: 'Indicator prefix override', + } +); + +export const THREAT_MATCH_INDICATOR_PATH_FIELD_HELP_TEXT = i18n.translate( + 'xpack.securitySolution.ruleManagement.ruleFields.threatMatchIndicatorPath.helpText', + { + defaultMessage: + 'Specify the document prefix containing your indicator fields. Used for enrichment of indicator match alerts.', + } +); + +export const THREAT_MATCH_INDICATOR_PATH_FIELD_VALIDATION_REQUIRED_ERROR = i18n.translate( + 'xpack.securitySolution.ruleManagement.ruleFields.threatMatchIndicatorPath.validator.requiredError', + { + defaultMessage: 'Indicator prefix override must not be empty', + } +); diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_mapping_edit/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_mapping_edit/index.tsx new file mode 100644 index 0000000000000..3f54b9798e73b --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_mapping_edit/index.tsx @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './threat_match_mapping_edit'; +export { DEFAULT_THREAT_MAPPING_VALUE } from './threat_match_mapping_field'; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_mapping_edit/threat_match_mapping_edit.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_mapping_edit/threat_match_mapping_edit.tsx new file mode 100644 index 0000000000000..3e4bb5d686419 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_mapping_edit/threat_match_mapping_edit.tsx @@ -0,0 +1,54 @@ +/* + * 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, { memo, useMemo } from 'react'; +import type { DataViewBase } from '@kbn/es-query'; +import type { ThreatMapEntries } from '../../../../common/components/threat_match/types'; +import type { FieldConfig } from '../../../../shared_imports'; +import { UseField } from '../../../../shared_imports'; +import { threatMatchMappingValidatorFactory } from './validators/threat_match_mapping_validator_factory'; +import { ThreatMatchMappingField } from './threat_match_mapping_field'; +import * as i18n from './translations'; + +interface ThreatMatchMappingEditProps { + path: string; + threatIndexPatterns: DataViewBase; + indexPatterns: DataViewBase; +} + +export const ThreatMatchMappingEdit = memo(function ThreatMatchMappingEdit({ + path, + indexPatterns, + threatIndexPatterns, +}: ThreatMatchMappingEditProps): JSX.Element { + const fieldConfig: FieldConfig = useMemo( + () => ({ + label: i18n.THREAT_MATCH_MAPPING_FIELD_LABEL, + validations: [ + { + validator: threatMatchMappingValidatorFactory({ + indexPatterns, + threatIndexPatterns, + }), + }, + ], + }), + [indexPatterns, threatIndexPatterns] + ); + + return ( + + ); +}); diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_mapping_edit/threat_match_mapping_field.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_mapping_edit/threat_match_mapping_field.tsx new file mode 100644 index 0000000000000..7495e202ee452 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_mapping_edit/threat_match_mapping_field.tsx @@ -0,0 +1,83 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useCallback, useEffect } from 'react'; +import { EuiFormRow } from '@elastic/eui'; +import type { DataViewBase } from '@kbn/es-query'; +import usePrevious from 'react-use/lib/usePrevious'; +import { createOrNewEntryItem } from '../../../../common/components/threat_match/helpers'; +import type { ThreatMapEntries } from '../../../../common/components/threat_match/types'; +import { ThreatMatchComponent } from '../../../../common/components/threat_match'; +import type { FieldHook } from '../../../../shared_imports'; +import { getFieldValidityAndErrorMessage } from '../../../../shared_imports'; + +export const DEFAULT_THREAT_MAPPING_VALUE = [createOrNewEntryItem()]; + +interface ThreatMatchMappingFieldProps { + field: FieldHook; + indexPatterns: DataViewBase; + threatIndexPatterns: DataViewBase; +} + +export function ThreatMatchMappingField({ + field, + indexPatterns, + threatIndexPatterns, +}: ThreatMatchMappingFieldProps): JSX.Element { + const { isInvalid, errorMessage } = getFieldValidityAndErrorMessage(field); + const { setValue, validate } = field; + const prevIndexTitle = usePrevious(indexPatterns.title); + const prevThreatTitle = usePrevious(threatIndexPatterns.title); + + // We have to make sure validation runs against the latest source events index patterns + // and threat match index patterns. + // Form lib's `fieldsToValidateOnChange` on the corresponding index patterns edit fields + // doesn't help here. It leads to running threat match mapping validation before render + // of this component happens. In the end validation runs against previous index patterns + // producing invalid validation results. + // + // Validating the field imperatively here fixes this issue. + useEffect(() => { + if (indexPatterns.title === prevIndexTitle && threatIndexPatterns.title === prevThreatTitle) { + return; + } + + validate(); + }, [indexPatterns.title, threatIndexPatterns.title, prevIndexTitle, prevThreatTitle, validate]); + + const handleMappingChange = useCallback( + (entryItems: ThreatMapEntries[]): void => { + if (entryItems.length === 0) { + setValue(DEFAULT_THREAT_MAPPING_VALUE); + return; + } + + setValue(entryItems); + }, + [setValue] + ); + + return ( + + + + ); +} diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_mapping_edit/translations.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_mapping_edit/translations.tsx new file mode 100644 index 0000000000000..47b016680b6ca --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_mapping_edit/translations.tsx @@ -0,0 +1,15 @@ +/* + * 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'; + +export const THREAT_MATCH_MAPPING_FIELD_LABEL = i18n.translate( + 'xpack.securitySolution.ruleManagement.ruleFields.threatMatchMapping.label', + { + defaultMessage: 'Indicator mapping', + } +); diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_mapping_edit/validators/error_codes.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_mapping_edit/validators/error_codes.ts new file mode 100644 index 0000000000000..24a4096107be1 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_mapping_edit/validators/error_codes.ts @@ -0,0 +1,11 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export enum THREAT_MATCH_MAPPING_ERROR_CODES { + ERR_FIELD_MISSING = 'ERR_FIELD_MISSING', + ERR_FIELDS_UNKNOWN = 'ERR_FIELDS_UNKNOWN', +} diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_mapping_edit/validators/get_unknown_threat_match_mapping_field_names.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_mapping_edit/validators/get_unknown_threat_match_mapping_field_names.ts new file mode 100644 index 0000000000000..eceae001bbd16 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_mapping_edit/validators/get_unknown_threat_match_mapping_field_names.ts @@ -0,0 +1,51 @@ +/* + * 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 { DataViewBase } from '@kbn/es-query'; +import type { ThreatMapEntries } from '../../../../../common/components/threat_match/types'; + +interface GetUnknownThreatMatchMappingFieldNamesParams { + entries: ThreatMapEntries[]; + indexPatterns: DataViewBase; + threatIndexPatterns: DataViewBase; +} + +interface GetUnknownThreatMatchMappingFieldNamesResult { + unknownSourceIndicesFields: string[]; + unknownThreatMatchIndicesFields: string[]; +} + +export function getUnknownThreatMatchMappingFieldNames({ + entries, + indexPatterns, + threatIndexPatterns, +}: GetUnknownThreatMatchMappingFieldNamesParams): GetUnknownThreatMatchMappingFieldNamesResult { + const knownIndexPatternsFields = new Set(indexPatterns.fields.map(({ name }) => name)); + const knownThreatMatchIndexPatternsFields = new Set( + threatIndexPatterns.fields.map(({ name }) => name) + ); + + const unknownSourceIndicesFields: string[] = []; + const unknownThreatMatchIndicesFields: string[] = []; + + for (const { entries: subEntries } of entries) { + for (const subEntry of subEntries) { + if (subEntry.field && !knownIndexPatternsFields.has(subEntry.field)) { + unknownSourceIndicesFields.push(subEntry.field); + } + + if (subEntry.value && !knownThreatMatchIndexPatternsFields.has(subEntry.value)) { + unknownThreatMatchIndicesFields.push(subEntry.value); + } + } + } + + return { + unknownSourceIndicesFields, + unknownThreatMatchIndicesFields, + }; +} diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_mapping_edit/validators/threat_match_mapping_validator_factory.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_mapping_edit/validators/threat_match_mapping_validator_factory.ts new file mode 100644 index 0000000000000..591f727f9f2f6 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_mapping_edit/validators/threat_match_mapping_validator_factory.ts @@ -0,0 +1,116 @@ +/* + * 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 type { DataViewBase } from '@kbn/es-query'; +import { + containsInvalidItems, + singleEntryThreat, +} from '../../../../../common/components/threat_match/helpers'; +import type { FormData, ValidationFunc } from '../../../../../shared_imports'; +import type { ThreatMapEntries } from '../../../../../common/components/threat_match/types'; +import { THREAT_MATCH_MAPPING_ERROR_CODES } from './error_codes'; +import { getUnknownThreatMatchMappingFieldNames } from './get_unknown_threat_match_mapping_field_names'; + +interface ThreatMatchMappingValidatorFactoryParams { + indexPatterns: DataViewBase; + threatIndexPatterns: DataViewBase; +} + +export function threatMatchMappingValidatorFactory({ + indexPatterns, + threatIndexPatterns, +}: ThreatMatchMappingValidatorFactoryParams): ValidationFunc { + return (...args) => { + const [{ path, value }] = args; + + if (singleEntryThreat(value)) { + return { + code: THREAT_MATCH_MAPPING_ERROR_CODES.ERR_FIELD_MISSING, + path, + message: i18n.translate( + 'xpack.securitySolution.detectionEngine.ruleManagement.createRule.threatMappingField.requiredError', + { + defaultMessage: 'At least one indicator match is required.', + } + ), + }; + } + + if (containsInvalidItems(value)) { + return { + code: THREAT_MATCH_MAPPING_ERROR_CODES.ERR_FIELD_MISSING, + path, + message: i18n.translate( + 'xpack.securitySolution.detectionEngine.ruleManagement.threatMappingField.bothFieldNamesRequiredError', + { + defaultMessage: 'All matches require both a field and threat index field.', + } + ), + }; + } + + const { unknownSourceIndicesFields, unknownThreatMatchIndicesFields } = + getUnknownThreatMatchMappingFieldNames({ + entries: value, + indexPatterns, + threatIndexPatterns, + }); + + if (unknownSourceIndicesFields.length > 0 && unknownThreatMatchIndicesFields.length > 0) { + return { + code: THREAT_MATCH_MAPPING_ERROR_CODES.ERR_FIELDS_UNKNOWN, + path, + message: i18n.translate( + 'xpack.securitySolution.detectionEngine.ruleManagement.threatMappingField.unknownFields', + { + defaultMessage: + 'Indicator mapping has unknown fields. {unknownSourceIndicesFields} fields not found in the source events indices and {unknownThreatMatchIndicesFields} fields not found in the indicator indices.', + values: { + unknownSourceIndicesFields: `"${unknownSourceIndicesFields.join('", "')}"`, + unknownThreatMatchIndicesFields: `"${unknownThreatMatchIndicesFields.join('", "')}"`, + }, + } + ), + }; + } + + if (unknownSourceIndicesFields.length > 0) { + return { + code: THREAT_MATCH_MAPPING_ERROR_CODES.ERR_FIELDS_UNKNOWN, + path, + message: i18n.translate( + 'xpack.securitySolution.detectionEngine.ruleManagement.threatMappingField.unknownSourceIndicesFields', + { + defaultMessage: + 'Indicator mapping has unknown fields. {unknownSourceIndicesFields} fields not found in the source events indices.', + values: { + unknownSourceIndicesFields: `"${unknownSourceIndicesFields.join('", "')}"`, + }, + } + ), + }; + } + + if (unknownThreatMatchIndicesFields.length > 0) { + return { + code: THREAT_MATCH_MAPPING_ERROR_CODES.ERR_FIELDS_UNKNOWN, + path, + message: i18n.translate( + 'xpack.securitySolution.detectionEngine.ruleManagement.threatMappingField.unknownIndicatorIndicesFields', + { + defaultMessage: + 'Indicator mapping has unknown fields. {unknownThreatMatchIndicesFields} fields not found in the indicator indices.', + values: { + unknownThreatMatchIndicesFields: `"${unknownThreatMatchIndicesFields.join('", "')}"`, + }, + } + ), + }; + } + }; +} diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_query_edit/index.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_query_edit/index.ts new file mode 100644 index 0000000000000..9656660986222 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_query_edit/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './threat_match_query_edit'; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_query_edit/threat_match_query_edit.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_query_edit/threat_match_query_edit.tsx new file mode 100644 index 0000000000000..8d2cea12de2f0 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_query_edit/threat_match_query_edit.tsx @@ -0,0 +1,56 @@ +/* + * 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, { memo } from 'react'; +import type { DataViewBase } from '@kbn/es-query'; +import type { FieldConfig } from '../../../../shared_imports'; +import { UseField } from '../../../../shared_imports'; +import type { FieldValueQueryBar } from '../../../rule_creation_ui/components/query_bar_field'; +import { QueryBarField } from '../../../rule_creation_ui/components/query_bar_field'; +import { threatMatchQueryRequiredValidator } from './validators/threat_match_query_required_validator'; +import { kueryValidatorFactory } from '../../../rule_creation_ui/validators/kuery_validator_factory'; +import * as i18n from './translations'; + +interface ThreatMatchQueryEditProps { + path: string; + threatIndexPatterns: DataViewBase; + loading?: boolean; +} + +export const ThreatMatchQueryEdit = memo(function ThreatMatchQueryEdit({ + path, + threatIndexPatterns, + loading, +}: ThreatMatchQueryEditProps): JSX.Element { + return ( + + ); +}); + +const THREAT_MATCH_QUERY_FIELD_CONFIG: FieldConfig = { + label: i18n.THREAT_MATCH_QUERY_FIELD_LABEL, + validations: [ + { + validator: threatMatchQueryRequiredValidator, + }, + { + validator: kueryValidatorFactory(), + }, + ], +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_query_edit/translations.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_query_edit/translations.tsx new file mode 100644 index 0000000000000..114f24a0298eb --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_query_edit/translations.tsx @@ -0,0 +1,15 @@ +/* + * 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'; + +export const THREAT_MATCH_QUERY_FIELD_LABEL = i18n.translate( + 'xpack.securitySolution.ruleManagement.ruleFields.threatQuery.label', + { + defaultMessage: 'Indicator index query', + } +); diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_query_edit/validators/threat_match_query_required_validator.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_query_edit/validators/threat_match_query_required_validator.ts new file mode 100644 index 0000000000000..f45d7926fc6e0 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_query_edit/validators/threat_match_query_required_validator.ts @@ -0,0 +1,27 @@ +/* + * 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 { isEmpty } from 'lodash'; +import type { FieldValueQueryBar } from '../../../../rule_creation_ui/components/query_bar_field'; +import type { FormData, ValidationFunc } from '../../../../../shared_imports'; +import * as i18n from './translations'; + +export const threatMatchQueryRequiredValidator: ValidationFunc< + FormData, + string, + FieldValueQueryBar +> = (...args) => { + const [{ path, value }] = args; + + if (isEmpty(value.query.query as string) && isEmpty(value.filters)) { + return { + code: 'ERR_FIELD_MISSING', + path, + message: i18n.THREAT_MATCH_QUERY_REQUIRED_ERROR, + }; + } +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_query_edit/validators/translations.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_query_edit/validators/translations.ts new file mode 100644 index 0000000000000..f13ddbe5f0d15 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/components/threat_match_query_edit/validators/translations.ts @@ -0,0 +1,15 @@ +/* + * 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'; + +export const THREAT_MATCH_QUERY_REQUIRED_ERROR = i18n.translate( + 'xpack.securitySolution.detectionEngine.createRule.stepDefineRule.threatMatchQueryBar.requiredError', + { + defaultMessage: 'An indicator index query is required.', + } +); diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/constants/validation_warning_codes.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/constants/validation_warning_codes.ts index 9593324a9c224..7990007fae580 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/constants/validation_warning_codes.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation/constants/validation_warning_codes.ts @@ -8,6 +8,7 @@ import { i18n } from '@kbn/i18n'; import { EQL_ERROR_CODES } from '../../../common/hooks/eql/api'; import { ESQL_ERROR_CODES } from '../components/esql_query_edit'; +import { THREAT_MATCH_MAPPING_ERROR_CODES } from '../components/threat_match_mapping_edit/validators/error_codes'; const ESQL_FIELD_NAME = i18n.translate( 'xpack.securitySolution.detectionEngine.createRule.nonBlockingErrorCodes.esqlFieldName', @@ -23,11 +24,19 @@ const EQL_FIELD_NAME = i18n.translate( } ); +const THREAT_MATCH_MAPPING_FIELD_NAME = i18n.translate( + 'xpack.securitySolution.detectionEngine.createRule.nonBlockingErrorCodes.threatMatchMapping', + { + defaultMessage: 'Indicator mapping', + } +); + export const VALIDATION_WARNING_CODES = [ ESQL_ERROR_CODES.INVALID_ESQL, EQL_ERROR_CODES.FAILED_REQUEST, EQL_ERROR_CODES.INVALID_EQL, EQL_ERROR_CODES.MISSING_DATA_SOURCE, + THREAT_MATCH_MAPPING_ERROR_CODES.ERR_FIELDS_UNKNOWN, ] as const; export const VALIDATION_WARNING_CODE_FIELD_NAME_MAP: Readonly> = { @@ -35,4 +44,5 @@ export const VALIDATION_WARNING_CODE_FIELD_NAME_MAP: Readonly { - let items: ListItems[] = []; + const items: ListItems[] = []; const isLoadedFromSavedQuery = !isEmpty(savedId) && !isEmpty(savedQueryName); + if (isLoadedFromSavedQuery) { - items = [ - ...items, - { - title: <>{i18n.SAVED_QUERY_NAME_LABEL} , - description: <>{savedQueryName} , - }, - ]; + items.push({ + title: <>{i18n.SAVED_QUERY_NAME_LABEL} , + description: <>{savedQueryName} , + }); } if (!isEmpty(filters)) { filterManager.setFilters(filters); - items = [ - ...items, - { - title: <>{isLoadedFromSavedQuery ? i18n.SAVED_QUERY_FILTERS_LABEL : i18n.FILTERS_LABEL} , - description: ( - - {filterManager.getFilters().map((filter, index) => ( - - - {indexPatterns != null ? ( - - ) : ( - - )} - - - ))} - - ), - }, - ]; + items.push({ + title: <>{isLoadedFromSavedQuery ? i18n.SAVED_QUERY_FILTERS_LABEL : i18n.FILTERS_LABEL} , + description: ( + + {filterManager.getFilters().map((filter, index) => ( + + + {indexPatterns != null ? ( + + ) : ( + + )} + + + ))} + + ), + }); } if (!isEmpty(query)) { - items = [ - ...items, - { - title: ( - <>{isLoadedFromSavedQuery ? i18n.SAVED_QUERY_LABEL : queryLabel ?? i18n.QUERY_LABEL} - ), - description: {query}, - }, - ]; + items.push({ + title: ( + <>{isLoadedFromSavedQuery ? i18n.SAVED_QUERY_LABEL : queryLabel ?? i18n.QUERY_LABEL} + ), + description: {query}, + }); + } + + if (queryLanguage) { + items.push({ + title: THREAT_QUERY_LANGUAGE_LABEL, + description: getQueryLanguageLabel(queryLanguage), + }); } return items; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/description_step/index.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/description_step/index.test.tsx index 90afe8d95fa37..bfcd8368d9675 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/description_step/index.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/description_step/index.test.tsx @@ -7,6 +7,7 @@ import React from 'react'; import { shallow, mount } from 'enzyme'; +import { render } from '@testing-library/react'; import { StepRuleDescription, @@ -271,7 +272,7 @@ describe('description_step', () => { mockLicenseService ); - expect(result.length).toEqual(14); + expect(result.length).toEqual(15); }); }); @@ -838,5 +839,54 @@ describe('description_step', () => { }); }); }); + + describe('threatIndex', () => { + test('returns no data when there are no index patterns selected', () => { + const result: ListItems[] = getDescriptionItem( + 'threatIndex', + 'Threat index patterns', + { + threatIndex: [], + }, + mockFilterManager, + mockLicenseService + ); + + expect(result).toHaveLength(0); + }); + + test('returns the correct title', () => { + const result: ListItems[] = getDescriptionItem( + 'threatIndex', + 'Threat index patterns', + { + threatIndex: ['test-*'], + }, + mockFilterManager, + mockLicenseService + ); + + expect(result).toHaveLength(1); + expect(result[0].title).toBe('Indicator index patterns'); + }); + + test('returns the correct description', () => { + const result: ListItems[] = getDescriptionItem( + 'threatIndex', + 'Threat index patterns', + { + threatIndex: ['test1-*', 'test2-*'], + }, + mockFilterManager, + mockLicenseService + ); + + expect(result).toHaveLength(1); + + const { container } = render(result[0].description); + + expect(container).toHaveTextContent('test1-*test2-*'); + }); + }); }); }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/description_step/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/description_step/index.tsx index 46ed1f18f70ac..3d72aaf109ec7 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/description_step/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/description_step/index.tsx @@ -55,7 +55,6 @@ import * as i18n from './translations'; import { buildMlJobsDescription } from './build_ml_jobs_description'; import { buildActionsDescription } from './actions_description'; import { buildThrottleDescription } from './throttle_description'; -import { THREAT_QUERY_LABEL } from './translations'; import { filterEmptyThreats } from '../../pages/rule_creation/helpers'; import { useLicense } from '../../../../common/hooks/use_license'; import type { LicenseService } from '../../../../../common/license'; @@ -77,6 +76,10 @@ import { NEW_TERMS_FIELDS_LABEL } from '../../../rule_creation/components/new_te import { HISTORY_WINDOW_START_LABEL } from '../../../rule_creation/components/history_window_start_edit/translations'; import { MACHINE_LEARNING_JOB_ID_LABEL } from '../../../rule_creation/components/machine_learning_job_id_edit/translations'; import { ANOMALY_THRESHOLD_LABEL } from '../../../rule_creation/components/anomaly_threshold_edit/translations'; +import { THREAT_MATCH_MAPPING_FIELD_LABEL } from '../../../rule_creation/components/threat_match_mapping_edit/translations'; +import { THREAT_MATCH_QUERY_FIELD_LABEL } from '../../../rule_creation/components/threat_match_query_edit/translations'; +import { THREAT_MATCH_INDEX_FIELD_LABEL } from '../../../rule_creation/components/threat_match_index_edit/translations'; +import { THREAT_MATCH_INDICATOR_PATH_FIELD_LABEL } from '../../../rule_creation/components/threat_match_indicator_path_edit/translations'; import type { FieldValueQueryBar } from '../query_bar_field'; const DescriptionListContainer = styled(EuiDescriptionList)` @@ -327,22 +330,32 @@ export const getDescriptionItem = ( return buildRuleTypeDescription(label, ruleType); } else if (field === 'kibanaSiemAppUrl') { return []; + } else if (field === 'threatIndex') { + const values: string[] = get(field, data); + return buildStringArrayDescription(THREAT_MATCH_INDEX_FIELD_LABEL, field, values); } else if (field === 'threatQueryBar') { - const filters = addFilterStateIfNotThere(get('threatQueryBar.filters', data) ?? []); - const query = get('threatQueryBar.query.query', data); - const savedId = get('threatQueryBar.saved_id', data); + const threatQueryBar = get('threatQueryBar', data) as FieldValueQueryBar; + return buildQueryBarDescription({ field, - filters, + filters: addFilterStateIfNotThere(threatQueryBar.filters ?? []), filterManager, - query, - savedId, + query: threatQueryBar.query.query as string, + queryLanguage: threatQueryBar.query.language, + savedId: threatQueryBar.saved_id ?? '', indexPatterns, - queryLabel: THREAT_QUERY_LABEL, + queryLabel: THREAT_MATCH_QUERY_FIELD_LABEL, }); } else if (field === 'threatMapping') { const threatMap: ThreatMapping = get(field, data); - return buildThreatMappingDescription(label, threatMap); + return buildThreatMappingDescription(THREAT_MATCH_MAPPING_FIELD_LABEL, threatMap); + } else if (field === 'threatIndicatorPath') { + return [ + { + title: THREAT_MATCH_INDICATOR_PATH_FIELD_LABEL, + description: get(field, data), + }, + ]; } else if (field === 'newTermsFields') { const values: string[] = get(field, data); return buildStringArrayDescription(NEW_TERMS_FIELDS_LABEL, field, values); diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/description_step/types.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/description_step/types.ts index 8fdb8288a9392..39a8c61cc7564 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/description_step/types.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/description_step/types.ts @@ -20,6 +20,7 @@ export interface BuildQueryBarDescription { filters: Filter[]; filterManager: FilterManager; query: string; + queryLanguage?: string; savedId: string; indexPatterns?: DataViewBase; queryLabel?: string; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_about_rule/index.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_about_rule/index.test.tsx index cc303731b26e3..94e230c59569c 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_about_rule/index.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_about_rule/index.test.tsx @@ -191,7 +191,7 @@ describe('StepAboutRuleComponent', () => { await act(async () => { wrapper - .find('[data-test-subj="detectionEngineStepAboutThreatIndicatorPath"] input') + .find('[data-test-subj="ruleThreatMatchIndicatorPath"] input') .first() .simulate('change', { target: { value: '' } }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_about_rule/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_about_rule/index.tsx index 6e20138256d7f..64b666781ce3c 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_about_rule/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_about_rule/index.tsx @@ -35,16 +35,14 @@ import { SeverityField } from '../severity_mapping'; import { RiskScoreField } from '../risk_score_mapping'; import { EsFieldSelectorField } from '../es_field_selector_field'; import { useFetchIndex } from '../../../../common/containers/source'; -import { - DEFAULT_INDICATOR_SOURCE_PATH, - DEFAULT_MAX_SIGNALS, -} from '../../../../../common/constants'; +import { DEFAULT_MAX_SIGNALS } from '../../../../../common/constants'; import { useKibana } from '../../../../common/lib/kibana'; import { useRuleIndices } from '../../../rule_management/logic/use_rule_indices'; import { EsqlAutocomplete } from '../esql_autocomplete'; import { MultiSelectFieldsAutocomplete } from '../multi_select_fields'; import { useAllEsqlRuleFields } from '../../hooks'; import { MaxSignals } from '../max_signals'; +import { ThreatMatchIndicatorPathEdit } from '../../../rule_creation/components/threat_match_indicator_path_edit'; const CommonUseField = getUseField({ component: Field }); @@ -367,20 +365,7 @@ const StepAboutRuleComponent: FC = ({ /> {isThreatMatchRuleValue && ( - <> - - + )} {isEsqlRuleValue ? ( diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_about_rule/schema.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_about_rule/schema.tsx index 66c599d0dc721..a748782e2fe3c 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_about_rule/schema.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_about_rule/schema.tsx @@ -18,11 +18,11 @@ import type { AboutStepRiskScore, AboutStepRule, } from '../../../../detections/pages/detection_engine/rules/types'; -import { OptionalFieldLabel } from '../optional_field_label'; +import { OptionalFieldLabel } from '../../../rule_creation/components/optional_field_label'; import { isUrlInvalid } from '../../../../common/utils/validators'; -import * as I18n from './translations'; import { defaultRiskScoreValidator } from '../../validators/default_risk_score_validator'; import { maxSignalsValidatorFactory } from '../../validators/max_signals_validator_factory'; +import * as I18n from './translations'; const { emptyField } = fieldValidators; @@ -249,23 +249,7 @@ export const schema: FormSchema = { ), labelAppend: OptionalFieldLabel, }, - threatIndicatorPath: { - type: FIELD_TYPES.TEXT, - label: i18n.translate( - 'xpack.securitySolution.detectionEngine.createRule.stepAboutRule.fieldThreatIndicatorPathLabel', - { - defaultMessage: 'Indicator prefix override', - } - ), - helpText: i18n.translate( - 'xpack.securitySolution.detectionEngine.createRule.stepAboutRule.fieldThreatIndicatorPathHelpText', - { - defaultMessage: - 'Specify the document prefix containing your indicator fields. Used for enrichment of indicator match alerts.', - } - ), - labelAppend: OptionalFieldLabel, - }, + threatIndicatorPath: {}, timestampOverride: { type: FIELD_TYPES.TEXT, label: i18n.translate( @@ -360,38 +344,3 @@ export const schema: FormSchema = { labelAppend: OptionalFieldLabel, }, }; - -const threatIndicatorPathRequiredSchemaValue = { - type: FIELD_TYPES.TEXT, - label: i18n.translate( - 'xpack.securitySolution.detectionEngine.createRule.stepAboutRule.fieldThreatIndicatorPathLabel', - { - defaultMessage: 'Indicator prefix override', - } - ), - helpText: i18n.translate( - 'xpack.securitySolution.detectionEngine.createRule.stepAboutRule.fieldThreatIndicatorPathHelpText', - { - defaultMessage: - 'Specify the document prefix containing your indicator fields. Used for enrichment of indicator match alerts.', - } - ), - validations: [ - { - validator: emptyField( - i18n.translate( - 'xpack.securitySolution.detectionEngine.createRule.stepAboutRule.threatIndicatorPathFieldEmptyError', - { - defaultMessage: 'Indicator prefix override must not be empty', - } - ) - ), - type: VALIDATION_TYPES.FIELD, - }, - ], -}; - -export const threatMatchAboutSchema = { - ...schema, - threatIndicatorPath: threatIndicatorPathRequiredSchemaValue, -}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/index.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/index.test.tsx index 65384f838ac9b..6a31f9bee8fd7 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/index.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/index.test.tsx @@ -817,12 +817,10 @@ function TestForm({ isLoading={false} form={form} indicesConfig={[]} - threatIndicesConfig={[]} indexPattern={indexPattern} isIndexPatternLoading={false} isQueryBarValid={true} setIsQueryBarValid={jest.fn()} - setIsThreatQueryBarValid={jest.fn()} index={stepDefineDefaultValue.index} threatIndex={stepDefineDefaultValue.threatIndex} alertSuppressionFields={stepDefineDefaultValue[ALERT_SUPPRESSION_FIELDS_FIELD_NAME]} diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/index.tsx index 4c9461c966ced..88423bb64cf05 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/index.tsx @@ -47,9 +47,8 @@ import { HiddenField, UseField, useFormData, - UseMultiFields, } from '../../../../shared_imports'; -import type { FormHook, FieldHook } from '../../../../shared_imports'; +import type { FormHook } from '../../../../shared_imports'; import { schema } from './schema'; import { useExperimentalFeatureFieldsTransform } from './use_experimental_feature_fields_transform'; import * as i18n from './translations'; @@ -65,7 +64,6 @@ import { } from '../../../../../common/detection_engine/utils'; import { EqlQueryEdit } from '../../../rule_creation/components/eql_query_edit'; import { DataViewSelectorField } from '../data_view_selector_field'; -import { ThreatMatchInput } from '../threatmatch_input'; import { useFetchIndex } from '../../../../common/containers/source'; import { RequiredFields } from '../../../rule_creation/components/required_fields'; import { DocLink } from '../../../../common/components/links_to_docs/doc_link'; @@ -89,12 +87,14 @@ import { AnomalyThresholdEdit } from '../../../rule_creation/components/anomaly_ import { HistoryWindowStartEdit } from '../../../rule_creation/components/history_window_start_edit'; import { NewTermsFieldsEdit } from '../../../rule_creation/components/new_terms_fields_edit'; import { EsqlQueryEdit } from '../../../rule_creation/components/esql_query_edit'; +import { CreateCustomMlJobButton } from '../../../rule_creation/components/create_ml_job_button/create_ml_job_button'; +import { ThreatMatchEdit } from '../threat_match_edit'; import { usePersistentNewTermsState } from './use_persistent_new_terms_state'; import { usePersistentAlertSuppressionState } from './use_persistent_alert_suppression_state'; import { usePersistentThresholdState } from './use_persistent_threshold_state'; import { usePersistentQuery } from './use_persistent_query'; import { usePersistentMachineLearningState } from './use_persistent_machine_learning_state'; -import { CreateCustomMlJobButton } from '../../../rule_creation/components/create_ml_job_button/create_ml_job_button'; +import { usePersistentThreatMatchState } from './use_persistent_threat_match_state'; const CommonUseField = getUseField({ component: Field }); @@ -103,14 +103,12 @@ const StyledVisibleContainer = styled.div<{ isVisible: boolean }>` `; export interface StepDefineRuleProps extends RuleStepProps { indicesConfig: string[]; - threatIndicesConfig: string[]; defaultSavedQuery?: SavedQuery; form: FormHook; indexPattern: DataViewBase; isIndexPatternLoading: boolean; isQueryBarValid: boolean; setIsQueryBarValid: (valid: boolean) => void; - setIsThreatQueryBarValid: (valid: boolean) => void; index: string[]; threatIndex: string[]; alertSuppressionFields?: string[]; @@ -162,10 +160,8 @@ const StepDefineRuleComponent: FC = ({ queryBarSavedId, queryBarTitle, setIsQueryBarValid, - setIsThreatQueryBarValid, shouldLoadQueryDynamically, threatIndex, - threatIndicesConfig, }) => { const [{ ruleType, queryBar, machineLearningJobId, threshold }] = useFormData({ form, @@ -174,7 +170,6 @@ const StepDefineRuleComponent: FC = ({ const [openTimelineSearch, setOpenTimelineSearch] = useState(false); const [indexModified, setIndexModified] = useState(false); - const [threatIndexModified, setThreatIndexModified] = useState(false); const license = useLicense(); const { @@ -229,10 +224,6 @@ const StepDefineRuleComponent: FC = ({ setIndexModified(!isEqual(index, indicesConfig)); }, [index, indicesConfig]); - useEffect(() => { - setThreatIndexModified(!isEqual(threatIndex, threatIndicesConfig)); - }, [threatIndex, threatIndicesConfig]); - const { setPersistentEqlQuery, setPersistentEqlOptions } = usePersistentQuery({ form, }); @@ -250,6 +241,7 @@ const StepDefineRuleComponent: FC = ({ newTermsFieldsPath: 'newTermsFields', historyWindowStartPath: 'historyWindowSize', }); + usePersistentThreatMatchState({ form }); const handleSetRuleFromTimeline = useCallback( ({ index: timelineIndex, queryBar: timelineQueryBar, eqlOptions }) => { @@ -296,11 +288,6 @@ const StepDefineRuleComponent: FC = ({ indexField.setValue(indicesConfig); }, [getFields, indicesConfig]); - const handleResetThreatIndices = useCallback(() => { - const threatIndexField = getFields().threatIndex; - threatIndexField.setValue(threatIndicesConfig); - }, [getFields, threatIndicesConfig]); - const handleOpenTimelineSearch = useCallback(() => { setOpenTimelineSearch(true); }, []); @@ -309,28 +296,6 @@ const StepDefineRuleComponent: FC = ({ setOpenTimelineSearch(false); }, []); - const ThreatMatchInputChildren = useCallback( - ({ threatMapping }: Record) => ( - - ), - [ - handleResetThreatIndices, - indexPattern, - setIsThreatQueryBarValid, - threatIndexModified, - threatIndexPatterns, - threatIndexPatternsLoading, - ] - ); - const { fields: esqlSuppressionFields, isLoading: isEsqlSuppressionLoading } = useAllEsqlRuleFields({ esqlQuery: isEsqlRule(ruleType) ? (queryBar?.query?.query as string) : undefined, @@ -678,23 +643,16 @@ const StepDefineRuleComponent: FC = ({ )} - - <> - - {ThreatMatchInputChildren} - - - + {isThreatMatchRule(ruleType) && ( + + )} {isNewTermsRule(ruleType) && ( <> diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/schema.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/schema.tsx index d453378f03824..666cbecb07207 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/schema.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/schema.tsx @@ -9,19 +9,13 @@ import { i18n } from '@kbn/i18n'; import { EuiText } from '@elastic/eui'; import React from 'react'; -import { - singleEntryThreat, - containsInvalidItems, - customValidators, -} from '../../../../common/components/threat_match/helpers'; import { isEsqlRule, - isThreatMatchRule, isSuppressionRuleConfiguredWithGroupBy, } from '../../../../../common/detection_engine/utils'; import { isMlRule } from '../../../../../common/machine_learning/helpers'; -import type { ERROR_CODE, FormSchema, ValidationFunc } from '../../../../shared_imports'; -import { FIELD_TYPES, fieldValidators } from '../../../../shared_imports'; +import type { FormSchema, ValidationFunc } from '../../../../shared_imports'; +import { FIELD_TYPES } from '../../../../shared_imports'; import type { DefineStepRule } from '../../../../detections/pages/detection_engine/rules/types'; import { DataSourceType } from '../../../../detections/pages/detection_engine/rules/types'; import { dataViewIdValidatorFactory } from '../../validators/data_view_id_validator_factory'; @@ -33,12 +27,7 @@ import { ALERT_SUPPRESSION_MISSING_FIELDS_FIELD_NAME, } from '../../../rule_creation/components/alert_suppression_edit'; import * as alertSuppressionEditI81n from '../../../rule_creation/components/alert_suppression_edit/components/translations'; -import { - INDEX_HELPER_TEXT, - THREAT_MATCH_INDEX_HELPER_TEXT, - THREAT_MATCH_REQUIRED, - THREAT_MATCH_EMPTIES, -} from './translations'; +import { INDEX_HELPER_TEXT } from './translations'; import { queryRequiredValidatorFactory } from '../../validators/query_required_validator_factory'; import { kueryValidatorFactory } from '../../validators/kuery_validator_factory'; @@ -177,109 +166,9 @@ export const schema: FormSchema = { ), }, threshold: {}, - threatIndex: { - type: FIELD_TYPES.COMBO_BOX, - label: i18n.translate( - 'xpack.securitySolution.detectionEngine.createRule.stepDefineRule.fieldThreatIndexPatternsLabel', - { - defaultMessage: 'Indicator index patterns', - } - ), - helpText: {THREAT_MATCH_INDEX_HELPER_TEXT}, - validations: [ - { - validator: ( - ...args: Parameters - ): ReturnType> | undefined => { - const [{ formData }] = args; - const needsValidation = isThreatMatchRule(formData.ruleType); - if (!needsValidation) { - return; - } - return fieldValidators.emptyField( - i18n.translate( - 'xpack.securitySolution.detectionEngine.createRule.stepDefineRule.threatMatchoutputIndiceNameFieldRequiredError', - { - defaultMessage: 'A minimum of one index pattern is required.', - } - ) - )(...args); - }, - }, - { - validator: ( - ...args: Parameters - ): ReturnType> | undefined => { - const [{ formData, value }] = args; - const needsValidation = isThreatMatchRule(formData.ruleType); - if (!needsValidation) { - return; - } - - return customValidators.forbiddenField(value, '*'); - }, - }, - ], - }, - threatMapping: { - label: i18n.translate( - 'xpack.securitySolution.detectionEngine.createRule.stepDefineRule.fieldThreatMappingLabel', - { - defaultMessage: 'Indicator mapping', - } - ), - validations: [ - { - validator: ( - ...args: Parameters - ): ReturnType> | undefined => { - const [{ path, formData }] = args; - const needsValidation = isThreatMatchRule(formData.ruleType); - if (!needsValidation) { - return; - } - if (singleEntryThreat(formData.threatMapping)) { - return { - code: 'ERR_FIELD_MISSING', - path, - message: THREAT_MATCH_REQUIRED, - }; - } else if (containsInvalidItems(formData.threatMapping)) { - return { - code: 'ERR_FIELD_MISSING', - path, - message: THREAT_MATCH_EMPTIES, - }; - } else { - return undefined; - } - }, - }, - ], - }, - threatQueryBar: { - label: i18n.translate( - 'xpack.securitySolution.detectionEngine.createRule.stepDefineRule.fieldThreatQueryBarLabel', - { - defaultMessage: 'Indicator index query', - } - ), - validations: [ - { - validator: (...args) => { - const [{ formData }] = args; - if (!isThreatMatchRule(formData.ruleType)) { - return; - } - - return queryRequiredValidatorFactory(formData.ruleType)(...args); - }, - }, - { - validator: kueryValidatorFactory(), - }, - ], - }, + threatIndex: {}, + threatMapping: {}, + threatQueryBar: {}, newTermsFields: {}, historyWindowSize: {}, [ALERT_SUPPRESSION_FIELDS_FIELD_NAME]: { diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/translations.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/translations.tsx index 362f586dc5abd..e5c397f55c829 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/translations.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/translations.tsx @@ -62,27 +62,6 @@ export const getSavedQueryCheckboxLabelWithoutName = () => } ); -export const THREAT_MATCH_INDEX_HELPER_TEXT = i18n.translate( - 'xpack.securitySolution.detectionEngine.createRule.stepDefineRule.threatMatchingIcesHelperDescription', - { - defaultMessage: 'Select threat indices', - } -); - -export const THREAT_MATCH_REQUIRED = i18n.translate( - 'xpack.securitySolution.detectionEngine.createRule.stepDefineRule.customThreatQueryFieldRequiredError', - { - defaultMessage: 'At least one indicator match is required.', - } -); - -export const THREAT_MATCH_EMPTIES = i18n.translate( - 'xpack.securitySolution.detectionEngine.createRule.stepDefineRule.customThreatQueryFieldRequiredEmptyError', - { - defaultMessage: 'All matches require both a field and threat index field.', - } -); - export const SOURCE = i18n.translate( 'xpack.securitySolution.detectionEngine.createRule.stepDefineRule.source', { diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/use_persistent_threat_match_state.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/use_persistent_threat_match_state.ts new file mode 100644 index 0000000000000..d4e1b4915c787 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/use_persistent_threat_match_state.ts @@ -0,0 +1,58 @@ +/* + * 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 { useEffect, useRef } from 'react'; +import usePrevious from 'react-use/lib/usePrevious'; +import type { ThreatMapping } from '@kbn/securitysolution-io-ts-alerting-types'; +import type { DefineStepRule } from '../../../../detections/pages/detection_engine/rules/types'; +import { isThreatMatchRule } from '../../../../../common/detection_engine/utils'; +import type { FormHook } from '../../../../shared_imports'; +import { useFormData } from '../../../../shared_imports'; +import type { FieldValueQueryBar } from '../query_bar_field'; + +interface UsePersistentThreatMatchStateParams { + form: FormHook; +} + +interface LastThreatMatchState { + threatIndexPatterns: string[] | undefined; + threatQueryBar: FieldValueQueryBar | undefined; + threatMapping: ThreatMapping | undefined; +} + +/** + * Persists threat match form data when switching between threat match and the other rule types. + */ +export function usePersistentThreatMatchState({ form }: UsePersistentThreatMatchStateParams): void { + const lastThreatMatchState = useRef(); + const [{ ruleType, threatIndex: threatIndexPatterns, threatQueryBar, threatMapping }] = + useFormData({ + form, + watch: ['ruleType', 'threatIndex', 'threatQueryBar', 'threatMapping'], + }); + const previousRuleType = usePrevious(ruleType); + + useEffect(() => { + if ( + isThreatMatchRule(ruleType) && + !isThreatMatchRule(previousRuleType) && + lastThreatMatchState.current + ) { + form.updateFieldValues({ + threatIndex: lastThreatMatchState.current.threatIndexPatterns, + threatQueryBar: lastThreatMatchState.current.threatQueryBar, + threatMapping: lastThreatMatchState.current.threatMapping, + }); + + return; + } + + if (isThreatMatchRule(ruleType)) { + lastThreatMatchState.current = { threatIndexPatterns, threatQueryBar, threatMapping }; + } + }, [form, ruleType, previousRuleType, threatIndexPatterns, threatQueryBar, threatMapping]); +} diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/threat_match_edit.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/threat_match_edit.tsx new file mode 100644 index 0000000000000..8a42e69a62ad4 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/threat_match_edit.tsx @@ -0,0 +1,51 @@ +/* + * 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, { memo } from 'react'; +import type { DataViewBase } from '@kbn/es-query'; +import { EuiSpacer } from '@elastic/eui'; +import { ThreatMatchIndexEdit } from '../../rule_creation/components/threat_match_index_edit'; +import { ThreatMatchQueryEdit } from '../../rule_creation/components/threat_match_query_edit'; +import { ThreatMatchMappingEdit } from '../../rule_creation/components/threat_match_mapping_edit'; + +interface ThreatMatchEditProps { + indexPatternPath: string; + queryPath: string; + mappingPath: string; + threatIndexPatterns: DataViewBase; + indexPatterns: DataViewBase; + loading?: boolean; +} + +export const ThreatMatchEdit = memo(function ThreatMatchEdit({ + indexPatternPath, + queryPath, + mappingPath, + indexPatterns, + threatIndexPatterns, + loading, +}: ThreatMatchEditProps): JSX.Element { + return ( + <> + + + + + + + + + ); +}); diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/threatmatch_input/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/threatmatch_input/index.tsx index b2c9cab59e399..a8a0c80b37f5b 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/threatmatch_input/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/threatmatch_input/index.tsx @@ -5,49 +5,58 @@ * 2.0. */ -import React, { useCallback, useEffect, useState } from 'react'; +import React, { memo, useCallback, useEffect, useState } from 'react'; import { EuiFlexGroup, EuiFlexItem, EuiSpacer, EuiFormRow } from '@elastic/eui'; import type { DataViewBase } from '@kbn/es-query'; import type { ThreatMapEntries } from '../../../../common/components/threat_match/types'; import { ThreatMatchComponent } from '../../../../common/components/threat_match'; import type { FieldHook } from '../../../../shared_imports'; -import { - Field, - getUseField, - UseField, - getFieldValidityAndErrorMessage, -} from '../../../../shared_imports'; -import type { DefineStepRule } from '../../../../detections/pages/detection_engine/rules/types'; +import { UseField, getFieldValidityAndErrorMessage } from '../../../../shared_imports'; import { schema } from '../step_define_rule/schema'; import { QueryBarField } from '../query_bar_field'; -import * as i18n from '../step_define_rule/translations'; -import { MyLabelButton } from '../step_define_rule'; -const CommonUseField = getUseField({ component: Field }); - -interface ThreatMatchInputProps { - threatMapping: FieldHook; +interface ThreatMatchEditProps { + path: string; threatIndexPatterns: DataViewBase; indexPatterns: DataViewBase; threatIndexPatternsLoading: boolean; - threatIndexModified: boolean; - handleResetThreatIndices: () => void; onValidityChange?: (isValid: boolean) => void; } -const ThreatMatchInputComponent: React.FC = ({ - threatIndexModified, - handleResetThreatIndices, - threatMapping, +export const ThreatMatchEdit = memo(function ThreatMatchEdit({ + path, indexPatterns, threatIndexPatterns, threatIndexPatternsLoading, onValidityChange, -}: ThreatMatchInputProps) => { - const { setValue, value: threatItems } = threatMapping; +}: ThreatMatchEditProps): JSX.Element { + const componentProps = { + indexPatterns, + threatIndexPatterns, + threatIndexPatternsLoading, + onValidityChange, + }; + + return ; +}); +interface ThreatMatchFieldProps { + field: FieldHook; + threatIndexPatterns: DataViewBase; + indexPatterns: DataViewBase; + threatIndexPatternsLoading: boolean; + onValidityChange?: (isValid: boolean) => void; +} + +function ThreatMatchField({ + field, + threatIndexPatterns, + indexPatterns, + threatIndexPatternsLoading, + onValidityChange, +}: ThreatMatchFieldProps): JSX.Element { const { isInvalid: isThreatMappingInvalid, errorMessage } = - getFieldValidityAndErrorMessage(threatMapping); + getFieldValidityAndErrorMessage(field); const [isThreatIndexPatternValid, setIsThreatIndexPatternValid] = useState(false); useEffect(() => { @@ -56,40 +65,17 @@ const ThreatMatchInputComponent: React.FC = ({ } }, [isThreatIndexPatternValid, isThreatMappingInvalid, onValidityChange]); - const handleBuilderOnChange = useCallback( - ({ entryItems }: { entryItems: ThreatMapEntries[] }): void => { - setValue(entryItems); + const handleMappingsEntryChange = useCallback( + (newEntryItems: ThreatMapEntries[]): void => { + field.setValue(newEntryItems); }, - [setValue] + [field] ); return ( <> - - - - path="threatIndex" - config={{ - ...schema.threatIndex, - labelAppend: threatIndexModified ? ( - - {i18n.RESET_DEFAULT_INDEX} - - ) : null, - }} - componentProps={{ - idAria: 'detectionEngineStepDefineRuleThreatMatchIndices', - 'data-test-subj': 'detectionEngineStepDefineRuleThreatMatchIndices', - euiFieldProps: { - fullWidth: true, - isDisabled: false, - placeholder: '', - }, - }} - /> - - + = ({ ); -}; - -export const ThreatMatchInput = React.memo(ThreatMatchInputComponent); +} diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/form.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/form.tsx index 65ff07924c70f..0256c90d72efa 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/form.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/form.tsx @@ -8,7 +8,6 @@ import { useState, useMemo, useEffect } from 'react'; import type { DataViewBase } from '@kbn/es-query'; import { useFormWithWarnings } from '../../../common/hooks/use_form_with_warnings'; -import { isThreatMatchRule } from '../../../../common/detection_engine/utils'; import type { AboutStepRule, ActionsStepRule, @@ -20,10 +19,7 @@ import { useKibana } from '../../../common/lib/kibana'; import type { FormHook } from '../../../shared_imports'; import { useFormData } from '../../../shared_imports'; import { schema as defineRuleSchema } from '../components/step_define_rule/schema'; -import { - schema as aboutRuleSchema, - threatMatchAboutSchema, -} from '../components/step_about_rule/schema'; +import { schema as aboutRuleSchema } from '../components/step_about_rule/schema'; import { schema as scheduleRuleSchema } from '../components/step_schedule_rule/schema'; import { getSchema as getActionsRuleSchema } from '../../rule_creation/components/step_rule_actions/get_schema'; import { useFetchIndex } from '../../../common/containers/source'; @@ -62,14 +58,10 @@ export const useRuleForms = ({ ); // ABOUT STEP FORM - const typeDependentAboutRuleSchema = useMemo( - () => (isThreatMatchRule(defineStepData.ruleType) ? threatMatchAboutSchema : aboutRuleSchema), - [defineStepData.ruleType] - ); const { form: aboutStepForm } = useFormWithWarnings({ defaultValue: aboutStepDefault, options: { stripEmptyFields: false, warningValidationCodes: VALIDATION_WARNING_CODES }, - schema: typeDependentAboutRuleSchema, + schema: aboutRuleSchema, }); const [aboutStepFormData] = useFormData({ form: aboutStepForm, diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_creation/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_creation/index.tsx index ac70dabc1006d..e145edd29c9e0 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_creation/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_creation/index.tsx @@ -206,7 +206,6 @@ const CreateRulePageComponent: React.FC = () => { const collapseFn = useRef<() => void | undefined>(); const [prevRuleType, setPrevRuleType] = useState(); const [isQueryBarValid, setIsQueryBarValid] = useState(false); - const [isThreatQueryBarValid, setIsThreatQueryBarValid] = useState(false); const esqlQueryForAboutStep = useEsqlQueryForAboutStep({ defineStepData, activeStep }); @@ -219,10 +218,14 @@ const CreateRulePageComponent: React.FC = () => { const defineFieldsTransform = useExperimentalFeatureFieldsTransform(); + const defineStepFormFields = defineStepForm.getFields(); const isPreviewDisabled = getIsRulePreviewDisabled({ ruleType, isQueryBarValid, - isThreatQueryBarValid, + isThreatQueryBarValid: + defineStepFormFields.threatIndex?.isValid && + defineStepFormFields.threatQueryBar?.isValid && + defineStepFormFields.threatMapping?.isValid, index: memoizedIndex, dataViewId: defineStepData.dataViewId, dataSourceType: defineStepData.dataSourceType, @@ -536,13 +539,11 @@ const CreateRulePageComponent: React.FC = () => { { isQueryBarValid, loading, memoDefineStepReadOnly, - threatIndicesConfig, ] ); const memoDefineStepExtraAction = useMemo( diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_editing/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_editing/index.tsx index dc0c9ac6409f1..601eb852d010e 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_editing/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_editing/index.tsx @@ -60,11 +60,7 @@ import * as i18n from './translations'; import { SecurityPageName } from '../../../../app/types'; import { ruleStepsOrder } from '../../../../detections/pages/detection_engine/rules/utils'; import { useKibana, useUiSetting$ } from '../../../../common/lib/kibana'; -import { - APP_UI_ID, - DEFAULT_INDEX_KEY, - DEFAULT_THREAT_INDEX_KEY, -} from '../../../../../common/constants'; +import { APP_UI_ID, DEFAULT_INDEX_KEY } from '../../../../../common/constants'; import { useStartTransaction } from '../../../../common/lib/apm/use_start_transaction'; import { SINGLE_RULE_ACTIONS } from '../../../../common/lib/apm/user_actions'; import { useGetSavedQuery } from '../../../../detections/pages/detection_engine/rules/use_get_saved_query'; @@ -104,7 +100,6 @@ const EditRulePageComponent: FC<{ rule: RuleResponse }> = ({ rule }) => { const [isRulePreviewVisible, setIsRulePreviewVisible] = useState(true); const collapseFn = useRef<() => void | undefined>(); const [isQueryBarValid, setIsQueryBarValid] = useState(false); - const [isThreatQueryBarValid, setIsThreatQueryBarValid] = useState(false); const backOptions = useMemo( () => ({ @@ -117,7 +112,6 @@ const EditRulePageComponent: FC<{ rule: RuleResponse }> = ({ rule }) => { ); const [indicesConfig] = useUiSetting$(DEFAULT_INDEX_KEY); - const [threatIndicesConfig] = useUiSetting$(DEFAULT_THREAT_INDEX_KEY); const { aboutRuleData, defineRuleData, scheduleRuleData, ruleActionsData } = getStepsData({ rule, @@ -151,10 +145,14 @@ const EditRulePageComponent: FC<{ rule: RuleResponse }> = ({ rule }) => { [defineStepData.index, esqlIndex, defineStepData.ruleType] ); + const defineStepFormFields = defineStepForm.getFields(); const isPreviewDisabled = getIsRulePreviewDisabled({ ruleType: defineStepData.ruleType, isQueryBarValid, - isThreatQueryBarValid, + isThreatQueryBarValid: + defineStepFormFields.threatIndex?.isValid && + defineStepFormFields.threatQueryBar?.isValid && + defineStepFormFields.threatMapping?.isValid, index: memoizedIndex, dataViewId: defineStepData.dataViewId, dataSourceType: defineStepData.dataSourceType, @@ -229,7 +227,6 @@ const EditRulePageComponent: FC<{ rule: RuleResponse }> = ({ rule }) => { isLoading={loading || isLoading || isSavedQueryLoading} isUpdateView indicesConfig={indicesConfig} - threatIndicesConfig={threatIndicesConfig} defaultSavedQuery={savedQuery} form={defineStepForm} key="defineStep" @@ -237,7 +234,6 @@ const EditRulePageComponent: FC<{ rule: RuleResponse }> = ({ rule }) => { isIndexPatternLoading={isIndexPatternLoading} isQueryBarValid={isQueryBarValid} setIsQueryBarValid={setIsQueryBarValid} - setIsThreatQueryBarValid={setIsThreatQueryBarValid} index={memoizedIndex} threatIndex={defineStepData.threatIndex} alertSuppressionFields={defineStepData[ALERT_SUPPRESSION_FIELDS_FIELD_NAME]} @@ -350,7 +346,6 @@ const EditRulePageComponent: FC<{ rule: RuleResponse }> = ({ rule }) => { isSavedQueryLoading, isLoading, indicesConfig, - threatIndicesConfig, savedQuery, defineStepForm, indexPattern, diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/validators/threat_match_mapping_validator.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/validators/threat_match_mapping_validator.ts new file mode 100644 index 0000000000000..b458959cf32d6 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/validators/threat_match_mapping_validator.ts @@ -0,0 +1,50 @@ +/* + * 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 { + containsInvalidItems, + singleEntryThreat, +} from '../../../common/components/threat_match/helpers'; +import type { FormData, ValidationFunc } from '../../../shared_imports'; +import type { ThreatMapEntries } from '../../../common/components/threat_match/types'; + +export function threatMatchMappingValidatorFactory(): ValidationFunc< + FormData, + string, + ThreatMapEntries[] +> { + return (...args) => { + const [{ path, value }] = args; + + if (singleEntryThreat(value)) { + return { + code: 'ERR_FIELD_MISSING', + path, + message: i18n.translate( + 'xpack.securitySolution.detectionEngine.createRule.stepDefineRule.customThreatQueryFieldRequiredError', + { + defaultMessage: 'At least one indicator match is required.', + } + ), + }; + } + + if (containsInvalidItems(value)) { + return { + code: 'ERR_FIELD_MISSING', + path, + message: i18n.translate( + 'xpack.securitySolution.detectionEngine.createRule.stepDefineRule.customThreatQueryFieldRequiredEmptyError', + { + defaultMessage: 'All matches require both a field and threat index field.', + } + ), + }; + } + }; +} diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/api/api.test.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/api/api.test.ts index bc7c288906e8e..d3de6cf7aaa0f 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/api/api.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/api/api.test.ts @@ -854,7 +854,7 @@ describe('Detections Rules API', () => { expect(fetchMock).toHaveBeenCalledWith( expect.any(String), expect.objectContaining({ - body: '{"filter":"alert.id:\\"alert:id1\\" or alert.id:\\"alert:id2\\"","fields":"[\\"muteAll\\",\\"activeSnoozes\\",\\"isSnoozedUntil\\",\\"snoozeSchedule\\"]","per_page":2}', + body: '{"filter":"alert.id:\\"alert:id1\\" or alert.id:\\"alert:id2\\"","fields":"[\\"name\\",\\"muteAll\\",\\"activeSnoozes\\",\\"isSnoozedUntil\\",\\"snoozeSchedule\\"]","per_page":2}', }) ); }); @@ -865,7 +865,7 @@ describe('Detections Rules API', () => { expect(fetchMock).toHaveBeenCalledWith( expect.any(String), expect.objectContaining({ - body: '{"filter":"alert.id:\\"alert:id1\\" or alert.id:\\"alert:id2\\"","fields":"[\\"muteAll\\",\\"activeSnoozes\\",\\"isSnoozedUntil\\",\\"snoozeSchedule\\"]","per_page":2}', + body: '{"filter":"alert.id:\\"alert:id1\\" or alert.id:\\"alert:id2\\"","fields":"[\\"name\\",\\"muteAll\\",\\"activeSnoozes\\",\\"isSnoozedUntil\\",\\"snoozeSchedule\\"]","per_page":2}', }) ); }); @@ -876,7 +876,7 @@ describe('Detections Rules API', () => { expect(fetchMock).toHaveBeenCalledWith( expect.any(String), expect.objectContaining({ - body: '{"filter":"alert.id:\\"alert:id1\\" or alert.id:\\"alert:id2\\"","fields":"[\\"muteAll\\",\\"activeSnoozes\\",\\"isSnoozedUntil\\",\\"snoozeSchedule\\"]","per_page":2}', + body: '{"filter":"alert.id:\\"alert:id1\\" or alert.id:\\"alert:id2\\"","fields":"[\\"name\\",\\"muteAll\\",\\"activeSnoozes\\",\\"isSnoozedUntil\\",\\"snoozeSchedule\\"]","per_page":2}', }) ); }); 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 4bde24e9f4573..0ccf26d822d56 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 @@ -245,7 +245,13 @@ export const fetchRulesSnoozeSettings = async ({ method: 'POST', body: JSON.stringify({ filter: ids.map((x) => `alert.id:"alert:${x}"`).join(' or '), - fields: JSON.stringify(['muteAll', 'activeSnoozes', 'isSnoozedUntil', 'snoozeSchedule']), + fields: JSON.stringify([ + 'name', + 'muteAll', + 'activeSnoozes', + 'isSnoozedUntil', + 'snoozeSchedule', + ]), per_page: ids.length, }), signal, diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_definition_section.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_definition_section.tsx index de4fce3da3686..0de99d72c2849 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_definition_section.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_definition_section.tsx @@ -14,6 +14,8 @@ import { EuiFlexItem, EuiFlexGroup, EuiLoadingSpinner, + EuiButtonIcon, + EuiPopover, } from '@elastic/eui'; import type { EuiDescriptionListProps } from '@elastic/eui'; import type { @@ -24,6 +26,7 @@ import type { Filter } from '@kbn/es-query'; import type { SavedQuery } from '@kbn/data-plugin/public'; import { mapAndFlattenFilters } from '@kbn/data-plugin/public'; import { FilterItems } from '@kbn/unified-search-plugin/public'; +import useToggle from 'react-use/lib/useToggle'; import { isDataView } from '../../../../common/components/query_bar'; import type { AlertSuppressionMissingFieldsStrategy, @@ -237,7 +240,7 @@ interface MachineLearningJobListProps { } export const MachineLearningJobList = ({ jobIds, isInteractive }: MachineLearningJobListProps) => { - const { jobs } = useSecurityJobs(); + const { jobs: availableJobs } = useSecurityJobs(); if (!jobIds) { return null; @@ -245,11 +248,20 @@ export const MachineLearningJobList = ({ jobIds, isInteractive }: MachineLearnin const jobIdsArray = Array.isArray(jobIds) ? jobIds : [jobIds]; + const unavailableJobIds = jobIdsArray.filter( + (jobId) => !availableJobs.some((job) => job.id === jobId) + ); + if (isInteractive) { - return ; + return ( + <> + + + + ); } - const relevantJobs = jobs.filter((job) => jobIdsArray.includes(job.id)); + const relevantJobs = availableJobs.filter((job) => jobIdsArray.includes(job.id)); return ( <> @@ -260,10 +272,48 @@ export const MachineLearningJobList = ({ jobIds, isInteractive }: MachineLearnin jobName={job.customSettings?.security_app_display_name} /> ))} + ); }; +interface UnavailableMlJobsProps { + unavailableJobIds: string[]; +} + +const UnavailableMlJobs = ({ unavailableJobIds }: UnavailableMlJobsProps) => { + return unavailableJobIds.map((jobId) => ( +
    + +
    + )); +}; + +interface UnavailableMlJobLinkProps { + jobId: string; +} + +const UnavailableMlJobLink: React.FC = ({ jobId }) => { + const [isPopoverOpen, togglePopover] = useToggle(false); + + const button = ( + + ); + + return ( + + {jobId} + + {i18n.MACHINE_LEARNING_JOB_NOT_AVAILABLE} + + + ); +}; + const getRuleTypeDescription = (ruleType: Type) => { switch (ruleType) { case 'machine_learning': @@ -721,15 +771,6 @@ const prepareDefinitionSectionListItems = ( }); } - if ('threat_mapping' in rule && rule.threat_mapping) { - definitionSectionListItems.push({ - title: ( - {i18n.THREAT_MAPPING_FIELD_LABEL} - ), - description: , - }); - } - if ('threat_filters' in rule && rule.threat_filters && rule.threat_filters.length > 0) { definitionSectionListItems.push({ title: ( @@ -772,6 +813,15 @@ const prepareDefinitionSectionListItems = ( }); } + if ('threat_mapping' in rule && rule.threat_mapping) { + definitionSectionListItems.push({ + title: ( + {i18n.THREAT_MAPPING_FIELD_LABEL} + ), + description: , + }); + } + if ('new_terms_fields' in rule && rule.new_terms_fields && rule.new_terms_fields.length > 0) { definitionSectionListItems.push({ title: ( diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/data_source/index_pattern_edit.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/data_source/index_pattern_edit.tsx index 81844af5f778f..d8e9cddd9dfca 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/data_source/index_pattern_edit.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/data_source/index_pattern_edit.tsx @@ -8,7 +8,7 @@ import React, { useCallback } from 'react'; import { isEqual } from 'lodash'; import { css } from '@emotion/css'; -import { EuiButtonEmpty } from '@elastic/eui'; +import { EuiButtonEmpty, useEuiTheme } from '@elastic/eui'; import { useDefaultIndexPattern } from '../../../../../../hooks/use_default_index_pattern'; import type { FieldHook } from '../../../../../../../../shared_imports'; import { Field } from '../../../../../../../../shared_imports'; @@ -19,6 +19,7 @@ interface IndexPatternFieldProps { } export function IndexPatternField({ field }: IndexPatternFieldProps): JSX.Element { + const { euiTheme } = useEuiTheme(); const defaultIndexPattern = useDefaultIndexPattern(); const isIndexModified = !isEqual(field.value, defaultIndexPattern); @@ -39,7 +40,9 @@ export function IndexPatternField({ field }: IndexPatternFieldProps): JSX.Elemen labelAppend={ isIndexModified ? ( ); } - -const xxsHeight = css` - height: 16px; -`; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_index_indicator_path/index.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_index_indicator_path/index.ts new file mode 100644 index 0000000000000..0991eb0e6c8a0 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_index_indicator_path/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './indicator_path_edit_form'; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_index_indicator_path/indicator_path_edit_adapter.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_index_indicator_path/indicator_path_edit_adapter.tsx new file mode 100644 index 0000000000000..08194971791a5 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_index_indicator_path/indicator_path_edit_adapter.tsx @@ -0,0 +1,13 @@ +/* + * 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 { ThreatMatchIndicatorPathEdit } from '../../../../../../../rule_creation/components/threat_match_indicator_path_edit'; + +export function ThreatMatchIndicatorPathEditAdapter(): JSX.Element { + return ; +} diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_index_indicator_path/indicator_path_edit_form.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_index_indicator_path/indicator_path_edit_form.tsx new file mode 100644 index 0000000000000..d5ced106cd909 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_index_indicator_path/indicator_path_edit_form.tsx @@ -0,0 +1,21 @@ +/* + * 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 { RuleFieldEditFormWrapper } from '../../../field_final_side'; +import { ThreatMatchIndicatorPathEditAdapter } from './indicator_path_edit_adapter'; + +export function ThreatMatchIndicatorPathEditForm(): JSX.Element { + return ( + + ); +} + +const schema = {}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_match_index/index.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_match_index/index.ts new file mode 100644 index 0000000000000..1488e68bc266e --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_match_index/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './threat_match_index_edit_form'; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_match_index/threat_match_index_edit_adapter.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_match_index/threat_match_index_edit_adapter.tsx new file mode 100644 index 0000000000000..ea2a9a8c63d88 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_match_index/threat_match_index_edit_adapter.tsx @@ -0,0 +1,13 @@ +/* + * 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 { ThreatMatchIndexEdit } from '../../../../../../../rule_creation/components/threat_match_index_edit'; + +export function ThreatMatchIndexEditAdapter(): JSX.Element { + return ; +} diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_match_index/threat_match_index_edit_form.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_match_index/threat_match_index_edit_form.tsx new file mode 100644 index 0000000000000..2761113410770 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_match_index/threat_match_index_edit_form.tsx @@ -0,0 +1,21 @@ +/* + * 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 { RuleFieldEditFormWrapper } from '../../../field_final_side'; +import { ThreatMatchIndexEditAdapter } from './threat_match_index_edit_adapter'; + +export function ThreatMatchIndexEditForm(): JSX.Element { + return ( + + ); +} + +const schema = {}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_match_mapping/index.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_match_mapping/index.ts new file mode 100644 index 0000000000000..afa440eba5100 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_match_mapping/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './threat_match_mapping_edit_form'; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_match_mapping/threat_match_mapping_edit_adapter.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_match_mapping/threat_match_mapping_edit_adapter.tsx new file mode 100644 index 0000000000000..6738e5668137e --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_match_mapping/threat_match_mapping_edit_adapter.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 from 'react'; +import type { DataViewBase } from '@kbn/es-query'; +import { ThreatMatchMappingEdit } from '../../../../../../../rule_creation/components/threat_match_mapping_edit'; +import type { ThreatIndex } from '../../../../../../../../../common/api/detection_engine'; +import type { RuleFieldEditComponentProps } from '../../../field_final_side'; +import { useDataView } from '../hooks/use_data_view'; +import { useDiffableRuleDataView } from '../hooks/use_diffable_rule_data_view'; + +export function ThreatMatchMappingEditAdapter({ + finalDiffableRule, +}: RuleFieldEditComponentProps): JSX.Element | null { + const { dataView: ruleDataView } = useDiffableRuleDataView(finalDiffableRule); + const { dataView: threatIndexPatterns } = useDataView({ + indexPatterns: (finalDiffableRule as { threat_index: ThreatIndex }).threat_index ?? [], + }); + + return ( + + ); +} + +const DEFAULT_DATA_VIEW: DataViewBase = { + fields: [], + title: '', +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_match_mapping/threat_match_mapping_edit_form.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_match_mapping/threat_match_mapping_edit_form.tsx new file mode 100644 index 0000000000000..d11629bf6a8d8 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_match_mapping/threat_match_mapping_edit_form.tsx @@ -0,0 +1,21 @@ +/* + * 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 { RuleFieldEditFormWrapper } from '../../../field_final_side'; +import { ThreatMatchMappingEditAdapter } from './threat_match_mapping_edit_adapter'; + +export function ThreatMatchMappingEditForm(): JSX.Element { + return ( + + ); +} + +const schema = {}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_match_query/index.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_match_query/index.ts new file mode 100644 index 0000000000000..a9ac475a6ac95 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_match_query/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './threat_match_query_edit_form'; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_match_query/threat_match_query_edit_adapter.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_match_query/threat_match_query_edit_adapter.tsx new file mode 100644 index 0000000000000..bfab9b5d6b04a --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_match_query/threat_match_query_edit_adapter.tsx @@ -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. + */ + +import React from 'react'; +import type { DataViewBase } from '@kbn/es-query'; +import { ThreatMatchQueryEdit } from '../../../../../../../rule_creation/components/threat_match_query_edit'; +import type { ThreatIndex } from '../../../../../../../../../common/api/detection_engine'; +import type { RuleFieldEditComponentProps } from '../../../field_final_side'; +import { useDataView } from '../hooks/use_data_view'; + +export function ThreatMatchQueryEditAdapter({ + finalDiffableRule, +}: RuleFieldEditComponentProps): JSX.Element | null { + const { dataView, isLoading } = useDataView({ + indexPatterns: (finalDiffableRule as { threat_index: ThreatIndex }).threat_index ?? [], + }); + + return ( + + ); +} + +const DEFAULT_DATA_VIEW: DataViewBase = { + fields: [], + title: '', +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_match_query/threat_match_query_edit_form.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_match_query/threat_match_query_edit_form.tsx new file mode 100644 index 0000000000000..40e95bedcbb5e --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/threat_match_query/threat_match_query_edit_form.tsx @@ -0,0 +1,73 @@ +/* + * 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 { DiffableRule } from '../../../../../../../../../common/api/detection_engine'; +import { + InlineKqlQuery, + KqlQueryLanguage, + KqlQueryType, + RuleQuery, +} from '../../../../../../../../../common/api/detection_engine'; +import type { FormData } from '../../../../../../../../shared_imports'; +import type { FieldValueQueryBar } from '../../../../../../../rule_creation_ui/components/query_bar_field'; +import { RuleFieldEditFormWrapper } from '../../../field_final_side'; +import { ThreatMatchQueryEditAdapter } from './threat_match_query_edit_adapter'; +import { isFilters } from '../../../../helpers'; + +export function ThreatMatchQueryEditForm(): JSX.Element { + return ( + + ); +} + +const schema = {}; + +function deserializer( + _: FormData, + finalDiffableRule: DiffableRule +): { + threatQuery: FieldValueQueryBar; +} { + const parsedQuery = InlineKqlQuery.parse( + (finalDiffableRule as { threat_query: InlineKqlQuery }).threat_query + ); + + return { + threatQuery: { + query: { + query: parsedQuery.query, + language: parsedQuery.language, + }, + filters: isFilters(parsedQuery.filters) ? parsedQuery.filters : [], + saved_id: null, + }, + }; +} + +function serializer(formData: FormData): { + threat_query: InlineKqlQuery; +} { + const threatQuery = (formData as { threatQuery: FieldValueQueryBar }).threatQuery; + + const query = RuleQuery.parse(threatQuery.query.query); + const language = KqlQueryLanguage.parse(threatQuery.query.language); + + return { + threat_query: { + type: KqlQueryType.inline_query, + query, + language, + filters: threatQuery.filters, + }, + }; +} diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/threat_match_rule_field_edit.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/threat_match_rule_field_edit.tsx index 2e7d52ae015fc..be96cca3f1868 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/threat_match_rule_field_edit.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/threat_match_rule_field_edit.tsx @@ -6,16 +6,23 @@ */ import React from 'react'; +import { assertUnreachable } from '../../../../../../../common/utility_types'; import type { UpgradeableThreatMatchFields } from '../../../../model/prebuilt_rule_upgrade/fields'; import { KqlQueryEditForm } from './fields/kql_query'; import { DataSourceEditForm } from './fields/data_source'; import { AlertSuppressionEditForm } from './fields/alert_suppression'; +import { ThreatMatchIndexEditForm } from './fields/threat_match_index'; +import { ThreatMatchQueryEditForm } from './fields/threat_match_query'; +import { ThreatMatchMappingEditForm } from './fields/threat_match_mapping'; +import { ThreatMatchIndicatorPathEditForm } from './fields/threat_index_indicator_path'; interface ThreatMatchRuleFieldEditProps { fieldName: UpgradeableThreatMatchFields; } -export function ThreatMatchRuleFieldEdit({ fieldName }: ThreatMatchRuleFieldEditProps) { +export function ThreatMatchRuleFieldEdit({ + fieldName, +}: ThreatMatchRuleFieldEditProps): JSX.Element | null { switch (fieldName) { case 'kql_query': return ; @@ -23,7 +30,15 @@ export function ThreatMatchRuleFieldEdit({ fieldName }: ThreatMatchRuleFieldEdit return ; case 'alert_suppression': return ; + case 'threat_index': + return ; + case 'threat_query': + return ; + case 'threat_mapping': + return ; + case 'threat_indicator_path': + return ; default: - return null; // Will be replaced with `assertUnreachable(fieldName)` once all fields are implemented + return assertUnreachable(fieldName); } } diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/translations.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/translations.ts index c5183626a63a7..7ea98fbb6a067 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/translations.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/translations.ts @@ -273,6 +273,21 @@ export const MACHINE_LEARNING_JOB_ID_FIELD_LABEL = i18n.translate( } ); +export const MACHINE_LEARNING_JOB_NOT_AVAILABLE = i18n.translate( + 'xpack.securitySolution.detectionEngine.ruleDetails.machineLearning.mlJobNotAvailable', + { + defaultMessage: + 'This job is currently unavailable. Please ensure that all related ML integrations are installed and configured.', + } +); + +export const OPEN_HELP_POPOVER_ARIA_LABEL = i18n.translate( + 'xpack.securitySolution.detectionEngine.ruleDetails.machineLearning.mlJobNotAvailable.openHelpPopoverAriaLabel', + { + defaultMessage: 'Open help popover', + } +); + export const ANOMALY_THRESHOLD_FIELD_LABEL = i18n.translate( 'xpack.securitySolution.detectionEngine.ruleDetails.anomalyThresholdFieldLabel', { diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/pages/detection_engine/rules/utils.ts b/x-pack/solutions/security/plugins/security_solution/public/detections/pages/detection_engine/rules/utils.ts index 88d2fb3d6eee7..f0529e22114a7 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/pages/detection_engine/rules/utils.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/pages/detection_engine/rules/utils.ts @@ -6,6 +6,7 @@ */ import type { Type } from '@kbn/securitysolution-io-ts-alerting-types'; +import { DEFAULT_THREAT_MAPPING_VALUE } from '../../../../detection_engine/rule_creation/components/threat_match_mapping_edit'; import { ALERT_SUPPRESSION_DURATION_FIELD_NAME, ALERT_SUPPRESSION_DURATION_TYPE_FIELD_NAME, @@ -53,7 +54,7 @@ export const stepDefineDefaultValue: DefineStepRule = { }, requiredFields: [], relatedIntegrations: [], - threatMapping: [], + threatMapping: DEFAULT_THREAT_MAPPING_VALUE, threshold: { field: [], value: '200', diff --git a/x-pack/solutions/security/plugins/security_solution/public/flyout/document_details/left/components/graph_visualization.tsx b/x-pack/solutions/security/plugins/security_solution/public/flyout/document_details/left/components/graph_visualization.tsx index e745ee29f2506..b44a85376506c 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/flyout/document_details/left/components/graph_visualization.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/flyout/document_details/left/components/graph_visualization.tsx @@ -5,14 +5,18 @@ * 2.0. */ -import React, { memo } from 'react'; +import React, { memo, useCallback } from 'react'; import { css } from '@emotion/react'; import { EuiLoadingSpinner } from '@elastic/eui'; +import type { Filter, TimeRange } from '@kbn/es-query'; +import dateMath from '@kbn/datemath'; import { useGetScopedSourcererDataView } from '../../../../sourcerer/components/use_get_sourcerer_data_view'; import { SourcererScopeName } from '../../../../sourcerer/store/model'; import { useDocumentDetailsContext } from '../../shared/context'; import { GRAPH_VISUALIZATION_TEST_ID } from './test_ids'; import { useGraphPreview } from '../../shared/hooks/use_graph_preview'; +import { useInvestigateInTimeline } from '../../../../common/hooks/timeline/use_investigate_in_timeline'; +import { normalizeTimeRange } from '../../../../common/utils/normalize_time_range'; const GraphInvestigationLazy = React.lazy(() => import('@kbn/cloud-security-posture-graph').then((module) => ({ @@ -42,6 +46,35 @@ export const GraphVisualization: React.FC = memo(() => { }); const originEventIds = eventIds.map((id) => ({ id, isAlert })); + const { investigateInTimeline } = useInvestigateInTimeline(); + const openTimelineCallback = useCallback( + (filters: Filter[], timeRange: TimeRange) => { + const from = dateMath.parse(timeRange.from); + const to = dateMath.parse(timeRange.to); + + if (!from || !to) { + // TODO: show error message + return; + } + + const normalizedTimeRange = normalizeTimeRange({ + ...timeRange, + from: from.toISOString(), + to: to.toISOString(), + }); + + investigateInTimeline({ + keepDataView: true, + filters, + timeRange: { + from: normalizedTimeRange.from, + to: normalizedTimeRange.to, + kind: 'absolute', + }, + }); + }, + [investigateInTimeline] + ); return (
    { to: `${timestamp}||+30m`, }, }} + showInvestigateInTimeline={true} + onInvestigateInTimeline={openTimelineCallback} /> )} diff --git a/x-pack/solutions/security/plugins/security_solution/public/management/cypress/e2e/rbac/endpoint_role_rbac.cy.ts b/x-pack/solutions/security/plugins/security_solution/public/management/cypress/e2e/rbac/endpoint_role_rbac.cy.ts index 2c5ea11329f31..b97b37191a951 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/management/cypress/e2e/rbac/endpoint_role_rbac.cy.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/management/cypress/e2e/rbac/endpoint_role_rbac.cy.ts @@ -15,54 +15,69 @@ import { import { closeAllToasts } from '../../tasks/toasts'; import { login, ROLE } from '../../tasks/login'; -describe('When defining a kibana role for Endpoint security access', { tags: '@ess' }, () => { - const getAllSubFeatureRows = (): Cypress.Chainable> => { - return cy - .get('#featurePrivilegeControls_siem') - .findByTestSubj('mutexSubFeaturePrivilegeControl') - .closest('.euiFlexGroup'); - }; +// Unskip when defendInsights assistant feature is enabled by default +describe.skip( + 'When defining a kibana role for Endpoint security access', + { + env: { + ftrConfig: { + kbnServerArgs: [ + `--xpack.securitySolution.enableExperimental=${JSON.stringify(['defendInsights'])}`, + ], + }, + }, + tags: '@ess', + }, + () => { + const getAllSubFeatureRows = (): Cypress.Chainable> => { + return cy + .get('#featurePrivilegeControls_siem') + .findByTestSubj('mutexSubFeaturePrivilegeControl') + .closest('.euiFlexGroup'); + }; - beforeEach(() => { - login(ROLE.system_indices_superuser); - navigateToRolePage(); - closeAllToasts(); + beforeEach(() => { + login(ROLE.system_indices_superuser); + navigateToRolePage(); + closeAllToasts(); - openKibanaFeaturePrivilegesFlyout(); - setKibanaPrivilegeSpace('default'); - expandSecuritySolutionCategoryKibanaPrivileges(); - expandEndpointSecurityFeaturePrivileges(); - }); + openKibanaFeaturePrivilegesFlyout(); + setKibanaPrivilegeSpace('default'); + expandSecuritySolutionCategoryKibanaPrivileges(); + expandEndpointSecurityFeaturePrivileges(); + }); - it('should display RBAC entries with expected controls', () => { - getAllSubFeatureRows() - .then(($subFeatures) => { - const featureRows: string[] = []; - $subFeatures.each((_, $subFeature) => { - featureRows.push($subFeature.textContent ?? ''); - }); + it('should display RBAC entries with expected controls', () => { + getAllSubFeatureRows() + .then(($subFeatures) => { + const featureRows: string[] = []; + $subFeatures.each((_, $subFeature) => { + featureRows.push($subFeature.textContent ?? ''); + }); - return featureRows; - }) - .should('deep.equal', [ - 'Endpoint List Displays all hosts running Elastic Defend and their relevant integration details.Endpoint List sub-feature privilegeAllReadNone', - 'Trusted Applications Helps mitigate conflicts with other software, usually other antivirus or endpoint security applications.Trusted Applications sub-feature privilegeAllReadNone', - 'Host Isolation Exceptions Add specific IP addresses that isolated hosts are still allowed to communicate with, even when isolated from the rest of the network.Host Isolation Exceptions sub-feature privilegeAllReadNone', - 'Blocklist Extend Elastic Defend’s protection against malicious processes and protect against potentially harmful applications.Blocklist sub-feature privilegeAllReadNone', - 'Event Filters Filter out endpoint events that you do not need or want stored in Elasticsearch.Event Filters sub-feature privilegeAllReadNone', - 'Elastic Defend Policy Management Access the Elastic Defend integration policy to configure protections, event collection, and advanced policy features.Elastic Defend Policy Management sub-feature privilegeAllReadNone', - 'Response Actions History Access the history of response actions performed on endpoints.Response Actions History sub-feature privilegeAllReadNone', - 'Host Isolation Perform the "isolate" and "release" response actions.Host Isolation sub-feature privilegeAllNone', - 'Process Operations Perform process-related response actions in the response console.Process Operations sub-feature privilegeAllNone', - 'File Operations Perform file-related response actions in the response console.File Operations sub-feature privilegeAllNone', - 'Execute Operations Perform script execution response actions in the response console.Execute Operations sub-feature privilegeAllNone', - 'Scan Operations Perform folder scan response actions in the response console.Scan Operations sub-feature privilegeAllNone', - ]); - }); + return featureRows; + }) + .should('deep.equal', [ + 'Endpoint List Displays all hosts running Elastic Defend and their relevant integration details.Endpoint List sub-feature privilegeAllReadNone', + 'Endpoint Insights Access the endpoint insights.Endpoint Insights sub-feature privilegeAllReadNone', + 'Trusted Applications Helps mitigate conflicts with other software, usually other antivirus or endpoint security applications.Trusted Applications sub-feature privilegeAllReadNone', + 'Host Isolation Exceptions Add specific IP addresses that isolated hosts are still allowed to communicate with, even when isolated from the rest of the network.Host Isolation Exceptions sub-feature privilegeAllReadNone', + 'Blocklist Extend Elastic Defend’s protection against malicious processes and protect against potentially harmful applications.Blocklist sub-feature privilegeAllReadNone', + 'Event Filters Filter out endpoint events that you do not need or want stored in Elasticsearch.Event Filters sub-feature privilegeAllReadNone', + 'Elastic Defend Policy Management Access the Elastic Defend integration policy to configure protections, event collection, and advanced policy features.Elastic Defend Policy Management sub-feature privilegeAllReadNone', + 'Response Actions History Access the history of response actions performed on endpoints.Response Actions History sub-feature privilegeAllReadNone', + 'Host Isolation Perform the "isolate" and "release" response actions.Host Isolation sub-feature privilegeAllNone', + 'Process Operations Perform process-related response actions in the response console.Process Operations sub-feature privilegeAllNone', + 'File Operations Perform file-related response actions in the response console.File Operations sub-feature privilegeAllNone', + 'Execute Operations Perform script execution response actions in the response console.Execute Operations sub-feature privilegeAllNone', + 'Scan Operations Perform folder scan response actions in the response console.Scan Operations sub-feature privilegeAllNone', + ]); + }); - it('should display all RBAC entries set to None by default', () => { - getAllSubFeatureRows() - .findByTestSubj('none') - .should('have.class', 'euiButtonGroupButton-isSelected'); - }); -}); + it('should display all RBAC entries set to None by default', () => { + getAllSubFeatureRows() + .findByTestSubj('none') + .should('have.class', 'euiButtonGroupButton-isSelected'); + }); + } +); diff --git a/x-pack/solutions/security/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/api/workflow_insights_complete.cy.ts b/x-pack/solutions/security/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/api/workflow_insights_complete.cy.ts new file mode 100644 index 0000000000000..70fe199705c14 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/api/workflow_insights_complete.cy.ts @@ -0,0 +1,47 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { fetchRunningDefendInsights, fetchWorkflowInsights } from '../../../../tasks/insights'; +import { login, ROLE } from '../../../../tasks/login'; + +// Unskip when defendInsights assistant feature is enabled by default +describe.skip( + 'Workflow Insights APIs', + { + tags: ['@serverless', '@skipInServerlessMKI'], // remove @skipInServerlessMKI once changes are merged + env: { + ftrConfig: { + kbnServerArgs: [ + `--xpack.securitySolution.enableExperimental=${JSON.stringify(['defendInsights'])}`, + ], + productTypes: [ + { product_line: 'security', product_tier: 'complete' }, + { product_line: 'endpoint', product_tier: 'complete' }, + ], + }, + }, + }, + () => { + beforeEach(() => { + login(ROLE.system_indices_superuser); + }); + describe('/workflow_insights', () => { + it('GET should allow access to workflow insights api endpoint', () => { + fetchWorkflowInsights().then((response) => { + expect(response.status).to.equal(200); + }); + }); + }); + describe('/defend_insights', () => { + it('GET should allow access to defend insights api endpoint', () => { + fetchRunningDefendInsights().then((response) => { + expect(response.status).to.equal(200); + }); + }); + }); + } +); diff --git a/x-pack/solutions/security/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/api/workflow_insights_essentials.cy.ts b/x-pack/solutions/security/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/api/workflow_insights_essentials.cy.ts new file mode 100644 index 0000000000000..35952f9d94dd4 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/api/workflow_insights_essentials.cy.ts @@ -0,0 +1,62 @@ +/* + * 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 { + fetchRunningDefendInsights, + fetchWorkflowInsights, + triggerRunningDefendInsights, + updateWorkflowInsights, +} from '../../../../tasks/insights'; +import { login, ROLE } from '../../../../tasks/login'; + +// Unskip when defendInsights assistant feature is enabled by default +describe.skip( + 'Workflow Insights APIs', + { + tags: ['@serverless', '@skipInServerlessMKI'], // remove @skipInServerlessMKI once changes are merged + env: { + ftrConfig: { + kbnServerArgs: [ + `--xpack.securitySolution.enableExperimental=${JSON.stringify(['defendInsights'])}`, + ], + productTypes: [ + { product_line: 'security', product_tier: 'essentials' }, + { product_line: 'endpoint', product_tier: 'essentials' }, + ], + }, + }, + }, + () => { + beforeEach(() => { + login(ROLE.system_indices_superuser); + }); + describe('/workflow_insights', () => { + it('GET should NOT allow access to workflow insights api endpoint', () => { + fetchWorkflowInsights({ failOnStatusCode: false }).then((response) => { + expect(response.status).to.equal(403); + }); + }); + it('UPDATE should NOT allow access to workflow insights api endpoint', () => { + updateWorkflowInsights().then((response) => { + expect(response.status).to.equal(403); + }); + }); + }); + describe('/defend_insights', () => { + it('GET should NOT allow access to defend insights api endpoint', () => { + fetchRunningDefendInsights().then((response) => { + expect(response.status).to.equal(404); + }); + }); + it('POST should NOT allow access to defend insights api endpoint', () => { + triggerRunningDefendInsights().then((response) => { + expect(response.status).to.equal(404); + }); + }); + }); + } +); diff --git a/x-pack/solutions/security/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/components/endpoint_details_complete.cy.ts b/x-pack/solutions/security/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/components/endpoint_details_complete.cy.ts new file mode 100644 index 0000000000000..8924e86556234 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/components/endpoint_details_complete.cy.ts @@ -0,0 +1,64 @@ +/* + * 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 { loadEndpointDetailsFlyout, workflowInsightsSelectors } from '../../../../screens/insights'; +import type { CyIndexEndpointHosts } from '../../../../tasks/index_endpoint_hosts'; +import { indexEndpointHosts } from '../../../../tasks/index_endpoint_hosts'; +import { login, ROLE } from '../../../../tasks/login'; + +const { insightsComponentExists, addConnectorButtonExists } = workflowInsightsSelectors; + +// Unskip when defendInsights assistant feature is enabled by default +describe.skip( + 'Endpoint details', + { + tags: [ + '@serverless', + // skipped on MKI since feature flags are not supported there + '@skipInServerlessMKI', + ], + env: { + ftrConfig: { + kbnServerArgs: [ + `--xpack.securitySolution.enableExperimental=${JSON.stringify(['defendInsights'])}`, + ], + productTypes: [ + { product_line: 'security', product_tier: 'complete' }, + { product_line: 'endpoint', product_tier: 'complete' }, + ], + }, + }, + }, + () => { + let loadedEndpoint: CyIndexEndpointHosts; + let endpointId: string; + + // Since the endpoint is used only for displaying details flyout, we can use the same endpoint for all tests + before(() => { + indexEndpointHosts({ count: 1 }).then((indexedEndpoint) => { + loadedEndpoint = indexedEndpoint; + endpointId = indexedEndpoint.data.hosts[0].agent.id; + }); + }); + + after(() => { + if (loadedEndpoint) { + loadedEndpoint.cleanup(); + } + }); + + beforeEach(() => { + login(ROLE.system_indices_superuser); + }); + + it('should render Insights section on endpoint flyout with option to define connectors', () => { + loadEndpointDetailsFlyout(endpointId); + insightsComponentExists(); + addConnectorButtonExists(); + }); + } +); diff --git a/x-pack/solutions/security/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/components/endpoint_details_essentials.cy.ts b/x-pack/solutions/security/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/components/endpoint_details_essentials.cy.ts new file mode 100644 index 0000000000000..1647e6cf255ca --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/components/endpoint_details_essentials.cy.ts @@ -0,0 +1,63 @@ +/* + * 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 { loadEndpointDetailsFlyout, workflowInsightsSelectors } from '../../../../screens/insights'; +import type { CyIndexEndpointHosts } from '../../../../tasks/index_endpoint_hosts'; +import { indexEndpointHosts } from '../../../../tasks/index_endpoint_hosts'; +import { login, ROLE } from '../../../../tasks/login'; + +const { insightsComponentDoesntExist } = workflowInsightsSelectors; + +// Unskip when defendInsights assistant feature is enabled by default +describe.skip( + 'Endpoint details', + { + tags: [ + '@serverless', + // skipped on MKI since feature flags are not supported there + '@skipInServerlessMKI', + ], + env: { + ftrConfig: { + kbnServerArgs: [ + `--xpack.securitySolution.enableExperimental=${JSON.stringify(['defendInsights'])}`, + ], + productTypes: [ + { product_line: 'security', product_tier: 'essentials' }, + { product_line: 'endpoint', product_tier: 'essentials' }, + ], + }, + }, + }, + () => { + let loadedEndpoint: CyIndexEndpointHosts; + let endpointId: string; + + // Since the endpoint is used only for displaying details flyout, we can use the same endpoint for all tests + before(() => { + indexEndpointHosts({ count: 1 }).then((indexedEndpoint) => { + loadedEndpoint = indexedEndpoint; + endpointId = indexedEndpoint.data.hosts[0].agent.id; + }); + }); + + after(() => { + if (loadedEndpoint) { + loadedEndpoint.cleanup(); + } + }); + + beforeEach(() => { + login(ROLE.system_indices_superuser); + }); + + it('should render Insights section on endpoint flyout with option to define connectors', () => { + loadEndpointDetailsFlyout(endpointId); + insightsComponentDoesntExist(); + }); + } +); diff --git a/x-pack/solutions/security/plugins/security_solution/public/management/cypress/screens/insights.ts b/x-pack/solutions/security/plugins/security_solution/public/management/cypress/screens/insights.ts new file mode 100644 index 0000000000000..4259ccdca0093 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/management/cypress/screens/insights.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 { loadPage } from '../tasks/common'; + +export const loadEndpointDetailsFlyout = (endpointId: string) => + loadPage( + `/app/security/administration/endpoints?page_index=0&page_size=10&selected_endpoint=${endpointId}&show=details` + ); + +export const workflowInsightsSelectors = { + insightsComponentExists: () => cy.getByTestSubj('endpointDetailsInsightsWrapper').should('exist'), + insightsComponentDoesntExist: () => + cy.getByTestSubj('endpointDetailsInsightsWrapper').should('not.exist'), + addConnectorButtonExists: () => cy.getByTestSubj('addNewConnectorButton').should('exist'), +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/management/cypress/tasks/insights.ts b/x-pack/solutions/security/plugins/security_solution/public/management/cypress/tasks/insights.ts new file mode 100644 index 0000000000000..bacd86a009a03 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/management/cypress/tasks/insights.ts @@ -0,0 +1,74 @@ +/* + * 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 { DEFEND_INSIGHTS } from '@kbn/elastic-assistant-common'; +import { ActionType } from '../../../../common/endpoint/types/workflow_insights'; +import { request } from './common'; +import { + WORKFLOW_INSIGHTS_ROUTE, + WORKFLOW_INSIGHTS_UPDATE_ROUTE, +} from '../../../../common/endpoint/constants'; + +export const triggerRunningDefendInsights = () => { + return request({ + method: 'POST', + url: DEFEND_INSIGHTS, + body: JSON.stringify({ + endpointIds: ['test'], + insightType: 'incompatible_antivirus', + anonymizationFields: [], + replacements: {}, + subAction: 'invokeAI', + apiConfig: { + connectorId: 'test', + actionTypeId: 'test', + }, + }), + headers: { 'Elastic-Api-Version': '1' }, + failOnStatusCode: false, + }); +}; + +export const fetchRunningDefendInsights = () => { + return request({ + method: 'GET', + url: DEFEND_INSIGHTS, + qs: { + status: 'running', + endpoint_ids: 'test', + }, + headers: { 'Elastic-Api-Version': '1' }, + failOnStatusCode: false, + }); +}; + +export const fetchWorkflowInsights = (overrides?: Record) => { + return request({ + method: 'GET', + url: WORKFLOW_INSIGHTS_ROUTE, + qs: { + actionTypes: JSON.stringify([ActionType.Refreshed]), + targetIds: JSON.stringify(['test']), + }, + headers: { 'Elastic-Api-Version': '1' }, + ...(overrides ?? {}), + }); +}; + +export const updateWorkflowInsights = () => { + return request({ + method: 'PUT', + url: WORKFLOW_INSIGHTS_UPDATE_ROUTE.replace('{insightId}', 'test'), + body: JSON.stringify({ + action: { + type: ActionType.Remediated, + }, + }), + headers: { 'Elastic-Api-Version': '1' }, + failOnStatusCode: false, + }); +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/management/cypress/tsconfig.json b/x-pack/solutions/security/plugins/security_solution/public/management/cypress/tsconfig.json index 690631e032d0a..8fba3e9b22c4d 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/management/cypress/tsconfig.json +++ b/x-pack/solutions/security/plugins/security_solution/public/management/cypress/tsconfig.json @@ -35,5 +35,6 @@ "@kbn/dev-utils", "@kbn/spaces-plugin", "@kbn/test-suites-xpack/security_solution_cypress/cypress", + "@kbn/elastic-assistant-common", ] } diff --git a/x-pack/solutions/security/plugins/security_solution/public/management/pages/endpoint_hosts/view/details/components/insights/workflow_insights.tsx b/x-pack/solutions/security/plugins/security_solution/public/management/pages/endpoint_hosts/view/details/components/insights/workflow_insights.tsx index b145573ccf745..eb915069884cc 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/management/pages/endpoint_hosts/view/details/components/insights/workflow_insights.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/management/pages/endpoint_hosts/view/details/components/insights/workflow_insights.tsx @@ -87,6 +87,7 @@ export const WorkflowInsights = React.memo(({ endpointId }: WorkflowInsightsProp return ( <> diff --git a/x-pack/solutions/security/plugins/security_solution/public/management/pages/endpoint_hosts/view/details/components/insights/workflow_insights_results.tsx b/x-pack/solutions/security/plugins/security_solution/public/management/pages/endpoint_hosts/view/details/components/insights/workflow_insights_results.tsx index 719c56b0ad033..887792b0b17fd 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/management/pages/endpoint_hosts/view/details/components/insights/workflow_insights_results.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/management/pages/endpoint_hosts/view/details/components/insights/workflow_insights_results.tsx @@ -16,8 +16,10 @@ import { EuiPanel, EuiSpacer, EuiText, + EuiToolTip, } from '@elastic/eui'; import { ENDPOINT_ARTIFACT_LISTS } from '@kbn/securitysolution-list-constants'; +import { useUserPrivileges } from '../../../../../../../common/components/user_privileges'; import { WORKFLOW_INSIGHTS } from '../../../translations'; interface WorkflowInsightsResultsProps { @@ -51,6 +53,7 @@ export const WorkflowInsightsResults = ({ const { application: { navigateToUrl }, } = useKibana().services; + const { canWriteTrustedApplications } = useUserPrivileges().endpointPrivileges; useEffect(() => { setShowEmptyResultsCallout(results?.length === 0 && scanCompleted); @@ -106,6 +109,9 @@ export const WorkflowInsightsResults = ({ } else if (results?.length) { return results.flatMap((insight, index) => { return (insight.remediation.exception_list_items ?? []).map((item) => { + const { ariaLabel, tooltipContent, tooltipNoPermissions } = + WORKFLOW_INSIGHTS.issues.remediationButton; + return ( @@ -128,17 +134,23 @@ export const WorkflowInsightsResults = ({ - ) => { - e.preventDefault(); - if (insight.id) { - openArtifactCreationPage({ remediation: item, id: insight.id }); - } - }} - /> + + ) => { + e.preventDefault(); + if (insight.id) { + openArtifactCreationPage({ remediation: item, id: insight.id }); + } + }} + /> + @@ -147,7 +159,7 @@ export const WorkflowInsightsResults = ({ }); } return null; - }, [openArtifactCreationPage, results, showEmptyResultsCallout]); + }, [canWriteTrustedApplications, openArtifactCreationPage, results, showEmptyResultsCallout]); return ( <> diff --git a/x-pack/solutions/security/plugins/security_solution/public/management/pages/endpoint_hosts/view/details/components/insights/workflow_insights_scan.tsx b/x-pack/solutions/security/plugins/security_solution/public/management/pages/endpoint_hosts/view/details/components/insights/workflow_insights_scan.tsx index 2bb37cb74b67c..c4de84993c4d5 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/management/pages/endpoint_hosts/view/details/components/insights/workflow_insights_scan.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/management/pages/endpoint_hosts/view/details/components/insights/workflow_insights_scan.tsx @@ -6,7 +6,7 @@ */ import React, { useCallback, useMemo } from 'react'; -import { EuiButton, EuiFlexGroup, EuiFlexItem, EuiPanel, EuiText } from '@elastic/eui'; +import { EuiButton, EuiFlexGroup, EuiFlexItem, EuiPanel, EuiText, EuiToolTip } from '@elastic/eui'; import { DEFEND_INSIGHTS_STORAGE_KEY, ConnectorSelectorInline, @@ -17,6 +17,7 @@ import { noop } from 'lodash/fp'; import useLocalStorage from 'react-use/lib/useLocalStorage'; import { some } from 'lodash'; import { AssistantBeacon } from '@kbn/ai-assistant-icon'; +import { useUserPrivileges } from '../../../../../../../common/components/user_privileges'; import { useSpaceId } from '../../../../../../../common/hooks/use_space_id'; import { WORKFLOW_INSIGHTS } from '../../../translations'; import { useKibana } from '../../../../../../../common/lib/kibana'; @@ -43,6 +44,7 @@ export const WorkflowInsightsScanSection = ({ const { data: aiConnectors } = useLoadConnectors({ http, }); + const { canWriteWorkflowInsights } = useUserPrivileges().endpointPrivileges; // Store the selected connector id in local storage so that it persists across page reloads const [localStorageWorkflowInsightsConnectorId, setLocalStorageWorkflowInsightsConnectorId] = @@ -78,11 +80,13 @@ export const WorkflowInsightsScanSection = ({ if (!connectorExists) { return null; } - return ( + + const button = ( { if (!connectorId || !selectedConnectorActionTypeId) return; onScanButtonClick({ connectorId, actionTypeId: selectedConnectorActionTypeId }); @@ -92,7 +96,17 @@ export const WorkflowInsightsScanSection = ({ ); + + if (!canWriteWorkflowInsights) { + return ( + + {button} + + ); + } + return button; }, [ + canWriteWorkflowInsights, connectorExists, connectorId, isScanButtonDisabled, diff --git a/x-pack/solutions/security/plugins/security_solution/public/management/pages/endpoint_hosts/view/details/endpoint_details_content.tsx b/x-pack/solutions/security/plugins/security_solution/public/management/pages/endpoint_hosts/view/details/endpoint_details_content.tsx index eff9ec800ac6a..842a83f3eadbf 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/management/pages/endpoint_hosts/view/details/endpoint_details_content.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/management/pages/endpoint_hosts/view/details/endpoint_details_content.tsx @@ -24,6 +24,7 @@ import { useEndpointSelector } from '../hooks'; import { nonExistingPolicies, uiQueryParams } from '../../store/selectors'; import { POLICY_STATUS_TO_BADGE_COLOR } from '../host_constants'; import { FormattedDate } from '../../../../../common/components/formatted_date'; +import { useUserPrivileges } from '../../../../../common/components/user_privileges'; import { useNavigateByRouterEventHandler } from '../../../../../common/hooks/endpoint/use_navigate_by_router_event_handler'; import { getEndpointDetailsPath } from '../../../../common/routing'; import { EndpointPolicyLink } from '../../../../components/endpoint_policy_link'; @@ -43,7 +44,16 @@ interface EndpointDetailsContentProps { export const EndpointDetailsContent = memo( ({ hostInfo, policyInfo }) => { - const isWorkflowInsightsEnabled = useIsExperimentalFeatureEnabled('defendInsights'); + // Access control + const isWorkflowInsightsFeatureFlagEnabled = useIsExperimentalFeatureEnabled('defendInsights'); + const { canReadWorkflowInsights } = useUserPrivileges().endpointPrivileges; + const canAccessWorkflowInsights = useMemo(() => { + if (!isWorkflowInsightsFeatureFlagEnabled) { + return false; + } + return canReadWorkflowInsights; + }, [canReadWorkflowInsights, isWorkflowInsightsFeatureFlagEnabled]); + const queryParams = useEndpointSelector(uiQueryParams); const policyStatus = useMemo( () => hostInfo.metadata.Endpoint.policy.applied.status, @@ -185,7 +195,7 @@ export const EndpointDetailsContent = memo( }, [hostInfo, policyInfo, missingPolicies, policyStatus, policyStatusClickHandler]); return (
    - {isWorkflowInsightsEnabled && } + {canAccessWorkflowInsights && } /x-pack/solutions/security/plugins/security_solution/public/overview/**/*.{ts,tsx}', ], moduleNameMapper: require('../../server/__mocks__/module_name_map'), + transform: { + ...rootConfig.transform, + '^.+\\.(js|tsx?)$': + '/x-pack/solutions/security/plugins/security_solution/jest/babel-transformer.js', + }, }; diff --git a/x-pack/solutions/security/plugins/security_solution/public/overview/pages/data_quality.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/overview/pages/data_quality.test.tsx index 8b14fff8082c5..eb03b934d5a95 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/overview/pages/data_quality.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/overview/pages/data_quality.test.tsx @@ -14,6 +14,7 @@ import { useKibana as mockUseKibana } from '../../common/lib/kibana/__mocks__'; import { TestProviders } from '../../common/mock'; import { DataQuality } from './data_quality'; import { useKibana } from '../../common/lib/kibana'; +import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; const mockedUseKibana = mockUseKibana(); @@ -104,11 +105,13 @@ describe('DataQuality', () => { describe('when indices exist, and loading is complete', () => { beforeEach(async () => { render( - - - - - + + + + + + + ); await waitFor(() => {}); @@ -136,11 +139,13 @@ describe('DataQuality', () => { mockUseSourcererDataView.mockReturnValue({ ...defaultUseSourcererReturn, loading: true }); render( - - - - - + + + + + + + ); await waitFor(() => {}); @@ -168,11 +173,13 @@ describe('DataQuality', () => { mockUseSignalIndex.mockReturnValue({ ...defaultUseSignalIndexReturn, loading: true }); render( - - - - - + + + + + + + ); await waitFor(() => {}); @@ -205,11 +212,13 @@ describe('DataQuality', () => { mockUseSignalIndex.mockReturnValue({ ...defaultUseSignalIndexReturn, loading: false }); render( - - - - - + + + + + + + ); await waitFor(() => {}); @@ -242,11 +251,13 @@ describe('DataQuality', () => { mockUseSignalIndex.mockReturnValue({ ...defaultUseSignalIndexReturn, loading: false }); render( - - - - - + + + + + + + ); await waitFor(() => {}); @@ -279,11 +290,13 @@ describe('DataQuality', () => { mockUseSignalIndex.mockReturnValue({ ...defaultUseSignalIndexReturn, loading: true }); render( - - - - - + + + + + + + ); await waitFor(() => {}); @@ -335,11 +348,13 @@ describe('DataQuality', () => { }); render( - - - - - + + + + + + + ); await waitFor(() => {}); diff --git a/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/footer/index.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/footer/index.test.tsx deleted file mode 100644 index 77eae288dbaa0..0000000000000 --- a/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/footer/index.test.tsx +++ /dev/null @@ -1,236 +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 { render, screen, fireEvent } from '@testing-library/react'; -import React from 'react'; - -import { TestProviders } from '../../../../common/mock/test_providers'; - -import { FooterComponent, PagingControlComponent } from '.'; -import { TimelineId } from '../../../../../common/types/timeline'; - -jest.mock('../../../../common/lib/kibana'); - -describe('Footer Timeline Component', () => { - const loadMore = jest.fn(); - const updatedAt = 1546878704036; - const serverSideEventCount = 15546; - const itemsCount = 2; - - describe('rendering', () => { - it('shoult render the default timeline footer', () => { - render( - - - - ); - - expect(screen.getByTestId('timeline-footer')).toBeInTheDocument(); - }); - - it('should render the loading panel at the beginning ', () => { - render( - - - - ); - - expect(screen.getByTestId('LoadingPanelTimeline')).toBeInTheDocument(); - }); - - it('should render the loadMore button if it needs to fetch more', () => { - render( - - - - ); - - expect(screen.getByTestId('timeline-pagination')).toBeInTheDocument(); - }); - - it('should render `Loading...` when fetching new data', () => { - render( - - ); - - expect(screen.queryByTestId('LoadingPanelTimeline')).not.toBeInTheDocument(); - expect(screen.getByText('Loading...')).toBeInTheDocument(); - }); - - it('should render the Pagination in the more load button when fetching new data', () => { - render( - - ); - - expect(screen.getByTestId('timeline-pagination')).toBeInTheDocument(); - }); - - it('should NOT render the loadMore button because there is nothing else to fetch', () => { - render( - - - - ); - - expect(screen.queryByTestId('timeline-pagination')).not.toBeInTheDocument(); - }); - - it('should render the popover to select new itemsPerPage in timeline', () => { - render( - - - - ); - - fireEvent.click(screen.getByTestId('local-events-count-button')); - expect(screen.getByTestId('timelinePickSizeRow')).toBeInTheDocument(); - }); - }); - - describe('Events', () => { - it('should call loadmore when clicking on the button load more', () => { - render( - - - - ); - - fireEvent.click(screen.getByTestId('pagination-button-next')); - expect(loadMore).toBeCalled(); - }); - - it('should render the auto-refresh message instead of load more button when stream live is on', () => { - render( - - - - ); - - expect(screen.queryByTestId('timeline-pagination')).not.toBeInTheDocument(); - expect(screen.getByTestId('is-live-on-message')).toBeInTheDocument(); - }); - - it('should render the load more button when stream live is off', () => { - render( - - - - ); - - expect(screen.getByTestId('timeline-pagination')).toBeInTheDocument(); - expect(screen.queryByTestId('is-live-on-message')).not.toBeInTheDocument(); - }); - }); -}); diff --git a/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/footer/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/footer/index.tsx deleted file mode 100644 index 611aa8953a7b8..0000000000000 --- a/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/footer/index.tsx +++ /dev/null @@ -1,380 +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 { - EuiBadge, - EuiButtonEmpty, - EuiContextMenuItem, - EuiContextMenuPanel, - EuiFlexGroup, - EuiFlexItem, - EuiIconTip, - EuiPopover, - EuiText, - EuiToolTip, - EuiPagination, -} from '@elastic/eui'; -import { FormattedMessage } from '@kbn/i18n-react'; -import React, { useCallback, useEffect, useState, useMemo } from 'react'; -import styled from 'styled-components'; -import { useDispatch } from 'react-redux'; - -import type { OnChangePage } from '../events'; -import { EVENTS_COUNT_BUTTON_CLASS_NAME } from '../helpers'; - -import * as i18n from './translations'; -import { timelineActions, timelineSelectors } from '../../../store'; -import { useDeepEqualSelector } from '../../../../common/hooks/use_selector'; -import { useKibana } from '../../../../common/lib/kibana'; -import { LastUpdatedContainer } from './last_updated'; - -interface HeightProp { - height: number; -} - -const FooterContainer = styled(EuiFlexGroup).attrs(({ height }) => ({ - style: { - height: `${height}px`, - }, -}))` - flex: 0 0 auto; -`; - -FooterContainer.displayName = 'FooterContainer'; - -const FooterFlexGroup = styled(EuiFlexGroup)` - height: 35px; - width: 100%; -`; - -FooterFlexGroup.displayName = 'FooterFlexGroup'; - -const LoadingPanelContainer = styled.div` - padding-top: 3px; -`; - -LoadingPanelContainer.displayName = 'LoadingPanelContainer'; - -export const ServerSideEventCount = styled.div` - margin: 0 5px 0 5px; -`; - -ServerSideEventCount.displayName = 'ServerSideEventCount'; - -/** The height of the footer, exported for use in height calculations */ -export const footerHeight = 40; // px - -/** Displays the server-side count of events */ -export const EventsCountComponent = ({ - closePopover, - documentType, - footerText, - isOpen, - items, - itemsCount, - onClick, - serverSideEventCount, -}: { - closePopover: () => void; - documentType: string; - isOpen: boolean; - items: React.ReactElement[]; - itemsCount: number; - onClick: () => void; - serverSideEventCount: number; - footerText: string | React.ReactNode; -}) => { - const totalCount = useMemo( - () => (serverSideEventCount > 0 ? serverSideEventCount : 0), - [serverSideEventCount] - ); - return ( -
    - - - {itemsCount} - - - {` ${i18n.OF} `} - - } - isOpen={isOpen} - closePopover={closePopover} - panelPaddingSize="none" - > - - - - {totalCount} {footerText} - - } - > - - - {totalCount} - {' '} - {documentType} - - -
    - ); -}; - -EventsCountComponent.displayName = 'EventsCountComponent'; - -export const EventsCount = React.memo(EventsCountComponent); - -EventsCount.displayName = 'EventsCount'; - -interface PagingControlProps { - activePage: number; - isLoading: boolean; - onPageClick: OnChangePage; - totalCount: number; - totalPages: number; -} - -const TimelinePaginationContainer = styled.div<{ hideLastPage: boolean }>` - ul.euiPagination__list { - li.euiPagination__item:last-child { - ${({ hideLastPage }) => `${hideLastPage ? 'display:none' : ''}`}; - } - } -`; - -export const PagingControlComponent: React.FC = ({ - activePage, - isLoading, - onPageClick, - totalCount, - totalPages, -}) => { - if (isLoading) { - return <>{`${i18n.LOADING}...`}; - } - - if (!totalPages) { - return null; - } - - return ( - 9999}> - - - ); -}; - -PagingControlComponent.displayName = 'PagingControlComponent'; - -export const PagingControl = React.memo(PagingControlComponent); - -PagingControl.displayName = 'PagingControl'; -interface FooterProps { - updatedAt: number; - activePage: number; - height: number; - id: string; - isLive: boolean; - isLoading: boolean; - itemsCount: number; - itemsPerPage: number; - itemsPerPageOptions: number[]; - onChangePage: OnChangePage; - totalCount: number; -} - -/** Renders a loading indicator and paging controls */ -export const FooterComponent = ({ - activePage, - updatedAt, - height, - id, - isLive, - isLoading, - itemsCount, - itemsPerPage, - itemsPerPageOptions, - onChangePage, - totalCount, -}: FooterProps) => { - const dispatch = useDispatch(); - const { timelines } = useKibana().services; - const [isPopoverOpen, setIsPopoverOpen] = useState(false); - const [paginationLoading, setPaginationLoading] = useState(false); - - const getManageTimeline = useMemo(() => timelineSelectors.getTimelineByIdSelector(), []); - const { - documentType = i18n.TOTAL_COUNT_OF_EVENTS, - loadingText = i18n.LOADING_EVENTS, - footerText = i18n.TOTAL_COUNT_OF_EVENTS, - } = useDeepEqualSelector((state) => getManageTimeline(state, id)); - - const handleChangePageClick = useCallback( - (nextPage: number) => { - setPaginationLoading(true); - onChangePage(nextPage); - }, - [onChangePage] - ); - - const onButtonClick = useCallback( - () => setIsPopoverOpen(!isPopoverOpen), - [isPopoverOpen, setIsPopoverOpen] - ); - - const closePopover = useCallback(() => setIsPopoverOpen(false), [setIsPopoverOpen]); - - const onChangeItemsPerPage = useCallback( - (itemsChangedPerPage: number) => - dispatch(timelineActions.updateItemsPerPage({ id, itemsPerPage: itemsChangedPerPage })), - [dispatch, id] - ); - - const rowItems = useMemo( - () => - itemsPerPageOptions && - itemsPerPageOptions.map((item) => ( - { - closePopover(); - onChangeItemsPerPage(item); - }} - > - {`${item} ${i18n.ROWS}`} - - )), - [closePopover, itemsPerPage, itemsPerPageOptions, onChangeItemsPerPage] - ); - - const totalPages = useMemo( - () => Math.ceil(totalCount / itemsPerPage), - [itemsPerPage, totalCount] - ); - - useEffect(() => { - if (paginationLoading && !isLoading) { - setPaginationLoading(false); - } - }, [isLoading, paginationLoading]); - - if (isLoading && !paginationLoading) { - return ( - - {timelines.getLoadingPanel({ - dataTestSubj: 'LoadingPanelTimeline', - height: '35px', - showBorder: false, - text: loadingText, - width: '100%', - })} - - ); - } - - return ( - - - - - - - - - - - - - - {isLive ? ( - - - {i18n.AUTO_REFRESH_ACTIVE}{' '} - - } - type="iInCircle" - /> - - - ) : ( - - )} - - - - ); -}; - -FooterComponent.displayName = 'FooterComponent'; - -export const Footer = React.memo(FooterComponent); - -Footer.displayName = 'Footer'; diff --git a/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/tabs/eql/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/tabs/eql/index.tsx index 0b2de48e89693..e3ef66ac2bc9b 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/tabs/eql/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/tabs/eql/index.tsx @@ -105,7 +105,7 @@ export const EqlTabContentComponent: React.FC = ({ [end, isBlankTimeline, loadingSourcerer, start] ); - const [dataLoadingState, { events, inspect, totalCount, loadPage, refreshedAt, refetch }] = + const [dataLoadingState, { events, inspect, totalCount, loadNextBatch, refreshedAt, refetch }] = useTimelineEvents({ dataViewId, endDate: end, @@ -289,7 +289,7 @@ export const EqlTabContentComponent: React.FC = ({ refetch={refetch} dataLoadingState={dataLoadingState} totalCount={isBlankTimeline ? 0 : totalCount} - onFetchMoreRecords={loadPage} + onFetchMoreRecords={loadNextBatch} activeTab={activeTab} updatedAt={refreshedAt} isTextBasedQuery={false} diff --git a/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/tabs/pinned/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/tabs/pinned/index.tsx index 8c0ecbeecfdcc..c82ffb24bfddd 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/tabs/pinned/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/tabs/pinned/index.tsx @@ -139,7 +139,7 @@ export const PinnedTabContentComponent: React.FC = ({ ); const { augmentedColumnHeaders } = useTimelineColumns(columns); - const [queryLoadingState, { events, totalCount, loadPage, refreshedAt, refetch }] = + const [queryLoadingState, { events, totalCount, loadNextBatch, refreshedAt, refetch }] = useTimelineEvents({ endDate: '', id: `pinned-${timelineId}`, @@ -286,7 +286,7 @@ export const PinnedTabContentComponent: React.FC = ({ refetch={refetch} dataLoadingState={queryLoadingState} totalCount={totalCount} - onFetchMoreRecords={loadPage} + onFetchMoreRecords={loadNextBatch} activeTab={TimelineTabs.pinned} updatedAt={refreshedAt} isTextBasedQuery={false} diff --git a/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/tabs/query/index.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/tabs/query/index.test.tsx index eb13527385739..caf893e4d0951 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/tabs/query/index.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/tabs/query/index.test.tsx @@ -10,7 +10,6 @@ import React, { useEffect } from 'react'; import QueryTabContent from '.'; import { defaultRowRenderers } from '../../body/renderers'; import { TimelineId } from '../../../../../../common/types/timeline'; -import { useTimelineEvents } from '../../../../containers'; import { useTimelineEventsDetails } from '../../../../containers/details'; import { useSourcererDataView } from '../../../../../sourcerer/containers'; import { mockSourcererScope } from '../../../../../sourcerer/containers/mocks'; @@ -42,12 +41,20 @@ import { createExpandableFlyoutApiMock } from '../../../../../common/mock/expand import { OPEN_FLYOUT_BUTTON_TEST_ID } from '../../../../../notes/components/test_ids'; import { userEvent } from '@testing-library/user-event'; import * as notesApi from '../../../../../notes/api/api'; +import { getMockTimelineSearchSubscription } from '../../../../../common/mock/mock_timeline_search_service'; +import * as useTimelineEventsModule from '../../../../containers'; -jest.mock('../../../../../common/components/user_privileges'); +jest.mock('../../../../../common/utils/route/use_route_spy', () => { + return { + useRouteSpy: jest.fn().mockReturnValue([ + { + pageName: 'timeline', + }, + ]), + }; +}); -jest.mock('../../../../containers', () => ({ - useTimelineEvents: jest.fn(), -})); +jest.mock('../../../../../common/components/user_privileges'); jest.mock('../../../../containers/details'); @@ -60,8 +67,6 @@ jest.mock('../../../../../sourcerer/containers/use_signal_helpers', () => ({ useSignalHelpers: () => ({ signalIndexNeedsInit: false }), })); -jest.mock('../../../../../common/lib/kuery'); - jest.mock('../../../../../common/hooks/use_experimental_features'); jest.mock('react-router-dom', () => ({ @@ -72,6 +77,8 @@ jest.mock('react-router-dom', () => ({ })), })); +const { mockTimelineSearchSubscription } = getMockTimelineSearchSubscription(); + // These tests can take more than standard timeout of 5s // that is why we are increasing it. const SPECIAL_TEST_TIMEOUT = 50000; @@ -128,8 +135,32 @@ const customColumnOrder = [ }, ]; -const mockState = { - ...structuredClone(mockGlobalState), +const mockBaseState = structuredClone(mockGlobalState); + +const mockState: typeof mockGlobalState = { + ...mockBaseState, + timeline: { + ...mockBaseState.timeline, + timelineById: { + [TimelineId.test]: { + ...mockBaseState.timeline.timelineById[TimelineId.test], + /* 1 record for each page */ + itemsPerPage: 1, + itemsPerPageOptions: [1, 2, 3, 4, 5], + /* Returns 1 records in one query */ + sampleSize: 1, + kqlQuery: { + filterQuery: { + kuery: { + kind: 'kuery', + expression: '*', + }, + serializedQuery: '*', + }, + }, + }, + }, + }, }; mockState.timeline.timelineById[TimelineId.test].columns = customColumnOrder; @@ -144,20 +175,18 @@ const renderTestComponents = (props?: Partial { - const fetchNotesMock = jest.spyOn(notesApi, 'fetchNotesByDocumentIds'); + const fetchNotesSpy = jest.spyOn(notesApi, 'fetchNotesByDocumentIds'); beforeAll(() => { - fetchNotesMock.mockImplementation(jest.fn()); + fetchNotesSpy.mockImplementation(jest.fn()); jest.mocked(useExpandableFlyoutApi).mockImplementation(() => ({ ...createExpandableFlyoutApiMock(), openFlyout: mockOpenFlyout, @@ -171,34 +200,30 @@ describe('query tab with unified timeline', () => { }, }); }); + + const baseKibanaServicesMock = createStartServicesMock(); + const kibanaServiceMock: StartServices = { - ...createStartServicesMock(), + ...baseKibanaServicesMock, storage: storageMock, + data: { + ...baseKibanaServicesMock.data, + search: { + ...baseKibanaServicesMock.data.search, + search: mockTimelineSearchSubscription, + }, + }, }; afterEach(() => { jest.clearAllMocks(); storageMock.clear(); - fetchNotesMock.mockClear(); + fetchNotesSpy.mockClear(); cleanup(); localStorage.clear(); }); beforeEach(() => { - useTimelineEventsMock = jest.fn(() => [ - false, - { - events: structuredClone(mockTimelineData.slice(0, 1)), - pageInfo: { - activePage: 0, - totalPages: 3, - }, - refreshedAt: Date.now(), - totalCount: 3, - loadPage: loadPageMock, - }, - ]); - HTMLElement.prototype.getBoundingClientRect = jest.fn(() => { return { width: 1000, @@ -214,8 +239,6 @@ describe('query tab with unified timeline', () => { }; }); - (useTimelineEvents as jest.Mock).mockImplementation(useTimelineEventsMock); - (useTimelineEventsDetails as jest.Mock).mockImplementation(() => [false, {}]); (useSourcererDataView as jest.Mock).mockImplementation(useSourcererDataViewMocked); @@ -297,33 +320,24 @@ describe('query tab with unified timeline', () => { }); describe('pagination', () => { - beforeEach(() => { - // pagination tests need more than 1 record so here - // we return 5 records instead of just 1. - useTimelineEventsMock = jest.fn(() => [ - false, - { - events: structuredClone(mockTimelineData.slice(0, 5)), - pageInfo: { - activePage: 0, - totalPages: 5, + const mockStateWithNoteInTimeline = { + ...mockState, + timeline: { + ...mockState.timeline, + timelineById: { + [TimelineId.test]: { + ...mockState.timeline.timelineById[TimelineId.test], + /* 1 record for each page */ + itemsPerPage: 1, + itemsPerPageOptions: [1, 2, 3, 4, 5], + savedObjectId: 'timeline-1', // match timelineId in mocked notes data + pinnedEventIds: { '1': true }, + /* Returns 3 records */ + sampleSize: 3, }, - refreshedAt: Date.now(), - /* - * `totalCount` could be any number w.r.t this test - * and actually means total hits on elastic search - * and not the fecthed number of records. - * - * This helps in testing `sampleSize` and `loadMore` - */ - totalCount: 50, - loadPage: loadPageMock, }, - ]); - - (useTimelineEvents as jest.Mock).mockImplementation(useTimelineEventsMock); - }); - + }, + }; afterEach(() => { jest.clearAllMocks(); }); @@ -331,23 +345,6 @@ describe('query tab with unified timeline', () => { it( 'should paginate correctly', async () => { - const mockStateWithNoteInTimeline = { - ...mockGlobalState, - timeline: { - ...mockGlobalState.timeline, - timelineById: { - [TimelineId.test]: { - ...mockGlobalState.timeline.timelineById[TimelineId.test], - /* 1 record for each page */ - itemsPerPage: 1, - itemsPerPageOptions: [1, 2, 3, 4, 5], - savedObjectId: 'timeline-1', // match timelineId in mocked notes data - pinnedEventIds: { '1': true }, - }, - }, - }, - }; - render( { ); expect(screen.getByTestId('pagination-button-0')).toHaveAttribute('aria-current', 'true'); - expect(screen.getByTestId('pagination-button-4')).toBeVisible(); - expect(screen.queryByTestId('pagination-button-5')).toBeNull(); + expect(screen.getByTestId('pagination-button-2')).toBeVisible(); + expect(screen.queryByTestId('pagination-button-3')).toBeNull(); - fireEvent.click(screen.getByTestId('pagination-button-4')); + fireEvent.click(screen.getByTestId('pagination-button-2')); await waitFor(() => { - expect(screen.getByTestId('pagination-button-4')).toHaveAttribute('aria-current', 'true'); + expect(screen.getByTestId('pagination-button-2')).toHaveAttribute('aria-current', 'true'); }); }, SPECIAL_TEST_TIMEOUT @@ -381,27 +378,6 @@ describe('query tab with unified timeline', () => { it( 'should load more records according to sample size correctly', async () => { - const mockStateWithNoteInTimeline = { - ...mockGlobalState, - timeline: { - ...mockGlobalState.timeline, - timelineById: { - [TimelineId.test]: { - ...mockGlobalState.timeline.timelineById[TimelineId.test], - itemsPerPage: 1, - /* - * `sampleSize` is the max number of records that are fetched from elasticsearch - * in one request. If hits > sampleSize, you can fetch more records ( <= sampleSize) - */ - sampleSize: 5, - itemsPerPageOptions: [1, 2, 3, 4, 5], - savedObjectId: 'timeline-1', // match timelineId in mocked notes data - pinnedEventIds: { '1': true }, - }, - }, - }, - }; - render( { await waitFor(() => { expect(screen.getByTestId('pagination-button-0')).toHaveAttribute('aria-current', 'true'); - expect(screen.getByTestId('pagination-button-4')).toBeVisible(); + expect(screen.getByTestId('pagination-button-2')).toBeVisible(); }); // Go to last page - fireEvent.click(screen.getByTestId('pagination-button-4')); + fireEvent.click(screen.getByTestId('pagination-button-2')); await waitFor(() => { expect(screen.getByTestId('dscGridSampleSizeFetchMoreLink')).toBeVisible(); }); fireEvent.click(screen.getByTestId('dscGridSampleSizeFetchMoreLink')); - expect(loadPageMock).toHaveBeenNthCalledWith(1, 1); + await waitFor(() => { + expect(screen.getByTestId('pagination-button-2')).toHaveAttribute('aria-current', 'true'); + expect(screen.getByTestId('pagination-button-5')).toBeVisible(); + }); }, SPECIAL_TEST_TIMEOUT ); @@ -432,24 +411,6 @@ describe('query tab with unified timeline', () => { it( 'should load notes for current page only', async () => { - const mockStateWithNoteInTimeline = { - ...mockGlobalState, - timeline: { - ...mockGlobalState.timeline, - timelineById: { - [TimelineId.test]: { - ...mockGlobalState.timeline.timelineById[TimelineId.test], - /* 1 record for each page */ - itemsPerPage: 1, - pageIndex: 0, - itemsPerPageOptions: [1, 2, 3, 4, 5], - savedObjectId: 'timeline-1', // match timelineId in mocked notes data - pinnedEventIds: { '1': true }, - }, - }, - }, - }; - render( { expect(screen.getByTestId('pagination-button-previous')).toBeVisible(); expect(screen.getByTestId('pagination-button-0')).toHaveAttribute('aria-current', 'true'); - expect(fetchNotesMock).toHaveBeenCalledWith(['1']); + expect(fetchNotesSpy).toHaveBeenCalledWith(['1']); // Page : 2 - fetchNotesMock.mockClear(); + fetchNotesSpy.mockClear(); expect(screen.getByTestId('pagination-button-1')).toBeVisible(); fireEvent.click(screen.getByTestId('pagination-button-1')); @@ -477,19 +438,19 @@ describe('query tab with unified timeline', () => { await waitFor(() => { expect(screen.getByTestId('pagination-button-1')).toHaveAttribute('aria-current', 'true'); - expect(fetchNotesMock).toHaveBeenNthCalledWith(1, [mockTimelineData[1]._id]); + expect(fetchNotesSpy).toHaveBeenNthCalledWith(1, [mockTimelineData[1]._id]); }); // Page : 3 - fetchNotesMock.mockClear(); + fetchNotesSpy.mockClear(); expect(screen.getByTestId('pagination-button-2')).toBeVisible(); fireEvent.click(screen.getByTestId('pagination-button-2')); await waitFor(() => { expect(screen.getByTestId('pagination-button-2')).toHaveAttribute('aria-current', 'true'); - expect(fetchNotesMock).toHaveBeenNthCalledWith(1, [mockTimelineData[2]._id]); + expect(fetchNotesSpy).toHaveBeenNthCalledWith(1, [mockTimelineData[2]._id]); }); }, SPECIAL_TEST_TIMEOUT @@ -498,24 +459,6 @@ describe('query tab with unified timeline', () => { it( 'should load notes for correct page size', async () => { - const mockStateWithNoteInTimeline = { - ...mockGlobalState, - timeline: { - ...mockGlobalState.timeline, - timelineById: { - [TimelineId.test]: { - ...mockGlobalState.timeline.timelineById[TimelineId.test], - /* 1 record for each page */ - itemsPerPage: 1, - pageIndex: 0, - itemsPerPageOptions: [1, 2, 3, 4, 5], - savedObjectId: 'timeline-1', // match timelineId in mocked notes data - pinnedEventIds: { '1': true }, - }, - }, - }, - }; - render( { expect(screen.getByTestId('tablePagination-2-rows')).toBeVisible(); }); - fetchNotesMock.mockClear(); + fetchNotesSpy.mockClear(); fireEvent.click(screen.getByTestId('tablePagination-2-rows')); await waitFor(() => { - expect(fetchNotesMock).toHaveBeenNthCalledWith(1, [ + expect(fetchNotesSpy).toHaveBeenNthCalledWith(1, [ mockTimelineData[0]._id, mockTimelineData[1]._id, ]); @@ -554,6 +497,53 @@ describe('query tab with unified timeline', () => { ); }); + const openDisplaySettings = async () => { + expect(screen.getByTestId('dataGridDisplaySelectorButton')).toBeVisible(); + + fireEvent.click(screen.getByTestId('dataGridDisplaySelectorButton')); + + await waitFor(() => { + expect( + screen + .getAllByTestId('unifiedDataTableSampleSizeInput') + .find((el) => el.getAttribute('type') === 'number') + ).toBeVisible(); + }); + }; + + const updateSampleSize = async (sampleSize: number) => { + const sampleSizeInput = screen + .getAllByTestId('unifiedDataTableSampleSizeInput') + .find((el) => el.getAttribute('type') === 'number'); + + expect(sampleSizeInput).toBeVisible(); + + fireEvent.change(sampleSizeInput as HTMLElement, { + target: { value: sampleSize }, + }); + }; + + describe('controls', () => { + it( + 'should reftech on sample size change', + async () => { + renderTestComponents(); + + await waitFor(() => { + expect(screen.getByTestId('discoverDocTable')).toBeVisible(); + }); + expect(screen.queryByTestId('pagination-button-1')).not.toBeInTheDocument(); + + await openDisplaySettings(); + await updateSampleSize(2); + await waitFor(() => { + expect(screen.getByTestId('pagination-button-1')).toBeVisible(); + }); + }, + SPECIAL_TEST_TIMEOUT + ); + }); + describe('columns', () => { it( 'should move column left/right correctly ', @@ -640,12 +630,11 @@ describe('query tab with unified timeline', () => { }); expect(screen.getByTitle('Unsort New-Old')).toBeVisible(); - useTimelineEventsMock.mockClear(); - + useTimelineEventsSpy.mockClear(); fireEvent.click(screen.getByTitle('Sort Old-New')); await waitFor(() => { - expect(useTimelineEventsMock).toHaveBeenNthCalledWith( + expect(useTimelineEventsSpy).toHaveBeenNthCalledWith( 1, expect.objectContaining({ sort: [ @@ -684,12 +673,12 @@ describe('query tab with unified timeline', () => { expect(screen.getByTitle('Sort A-Z')).toBeVisible(); expect(screen.getByTitle('Sort Z-A')).toBeVisible(); - useTimelineEventsMock.mockClear(); + useTimelineEventsSpy.mockClear(); fireEvent.click(screen.getByTitle('Sort A-Z')); await waitFor(() => { - expect(useTimelineEventsMock).toHaveBeenNthCalledWith( + expect(useTimelineEventsSpy).toHaveBeenNthCalledWith( 1, expect.objectContaining({ sort: [ @@ -739,12 +728,12 @@ describe('query tab with unified timeline', () => { expect(screen.getByTitle('Sort Low-High')).toBeVisible(); expect(screen.getByTitle('Sort High-Low')).toBeVisible(); - useTimelineEventsMock.mockClear(); + useTimelineEventsSpy.mockClear(); fireEvent.click(screen.getByTitle('Sort Low-High')); await waitFor(() => { - expect(useTimelineEventsMock).toHaveBeenNthCalledWith( + expect(useTimelineEventsSpy).toHaveBeenNthCalledWith( 1, expect.objectContaining({ sort: [ @@ -1212,12 +1201,12 @@ describe('query tab with unified timeline', () => { 'should disable pinning when event has notes attached in timeline', async () => { const mockStateWithNoteInTimeline = { - ...mockGlobalState, + ...mockState, timeline: { - ...mockGlobalState.timeline, + ...mockState.timeline, timelineById: { [TimelineId.test]: { - ...mockGlobalState.timeline.timelineById[TimelineId.test], + ...mockState.timeline.timelineById[TimelineId.test], savedObjectId: 'timeline-1', // match timelineId in mocked notes data pinnedEventIds: { '1': true }, }, diff --git a/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/tabs/query/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/tabs/query/index.tsx index f614290fd6a5a..89ba47fd7804c 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/tabs/query/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/tabs/query/index.tsx @@ -173,24 +173,22 @@ export const QueryTabContentComponent: React.FC = ({ const { augmentedColumnHeaders, defaultColumns, timelineQueryFieldsFromColumns } = useTimelineColumns(columns); - const [ - dataLoadingState, - { events, inspect, totalCount, loadPage: loadNextEventBatch, refreshedAt, refetch }, - ] = useTimelineEvents({ - dataViewId, - endDate: end, - fields: timelineQueryFieldsFromColumns, - filterQuery: combinedQueries?.filterQuery, - id: timelineId, - indexNames: selectedPatterns, - language: kqlQuery.language, - limit: sampleSize, - runtimeMappings: sourcererDataView.runtimeFieldMap as RunTimeMappings, - skip: !canQueryTimeline, - sort: timelineQuerySortField, - startDate: start, - timerangeKind, - }); + const [dataLoadingState, { events, inspect, totalCount, loadNextBatch, refreshedAt, refetch }] = + useTimelineEvents({ + dataViewId, + endDate: end, + fields: timelineQueryFieldsFromColumns, + filterQuery: combinedQueries?.filterQuery, + id: timelineId, + indexNames: selectedPatterns, + language: kqlQuery.language, + limit: sampleSize, + runtimeMappings: sourcererDataView.runtimeFieldMap as RunTimeMappings, + skip: !canQueryTimeline, + sort: timelineQuerySortField, + startDate: start, + timerangeKind, + }); const { onLoad: loadNotesOnEventsLoad } = useFetchNotes(); @@ -383,7 +381,7 @@ export const QueryTabContentComponent: React.FC = ({ dataLoadingState={dataLoadingState} totalCount={isBlankTimeline ? 0 : totalCount} leadingControlColumns={leadingControlColumns as EuiDataGridControlColumn[]} - onFetchMoreRecords={loadNextEventBatch} + onFetchMoreRecords={loadNextBatch} activeTab={activeTab} updatedAt={refreshedAt} isTextBasedQuery={false} diff --git a/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/index.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/index.test.tsx index 3f24fc8df4aa9..99d65ef5101aa 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/index.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/index.test.tsx @@ -15,7 +15,7 @@ import { useSourcererDataView } from '../../../../../sourcerer/containers'; import type { ComponentProps } from 'react'; import { getColumnHeaders } from '../../body/column_headers/helpers'; import { mockSourcererScope } from '../../../../../sourcerer/containers/mocks'; -import { timelineActions } from '../../../../store'; +import * as timelineActions from '../../../../store/actions'; import { useExpandableFlyoutApi } from '@kbn/expandable-flyout'; import { defaultUdtHeaders } from '../../body/column_headers/default_headers'; @@ -31,10 +31,12 @@ jest.mock('react-router-dom', () => ({ const onFieldEditedMock = jest.fn(); const refetchMock = jest.fn(); -const onChangePageMock = jest.fn(); +const onFetchMoreRecordsMock = jest.fn(); const openFlyoutMock = jest.fn(); +const updateSampleSizeSpy = jest.spyOn(timelineActions, 'updateSampleSize'); + jest.mock('@kbn/expandable-flyout'); const initialEnrichedColumns = getColumnHeaders( @@ -72,7 +74,7 @@ const TestComponent = (props: TestComponentProps) => { refetch={refetchMock} dataLoadingState={DataLoadingState.loaded} totalCount={mockTimelineData.length} - onFetchMoreRecords={onChangePageMock} + onFetchMoreRecords={onFetchMoreRecordsMock} updatedAt={Date.now()} onSetColumns={jest.fn()} onFilter={jest.fn()} @@ -97,6 +99,7 @@ describe('unified data table', () => { }); }); afterEach(() => { + updateSampleSizeSpy.mockClear(); jest.clearAllMocks(); }); @@ -199,7 +202,7 @@ describe('unified data table', () => { }); it( - 'should refetch on sample size change', + 'should update sample size correctly', async () => { render(); @@ -217,8 +220,11 @@ describe('unified data table', () => { target: { value: '10' }, }); + updateSampleSizeSpy.mockClear(); + await waitFor(() => { - expect(refetchMock).toHaveBeenCalledTimes(1); + expect(updateSampleSizeSpy).toHaveBeenCalledTimes(1); + expect(updateSampleSizeSpy).toHaveBeenCalledWith({ id: TimelineId.test, sampleSize: 10 }); }); }, SPECIAL_TEST_TIMEOUT @@ -315,7 +321,7 @@ describe('unified data table', () => { expect(screen.getByTestId('dscGridSampleSizeFetchMoreLink')).toBeVisible(); fireEvent.click(screen.getByTestId('dscGridSampleSizeFetchMoreLink')); await waitFor(() => { - expect(onChangePageMock).toHaveBeenNthCalledWith(1, 1); + expect(onFetchMoreRecordsMock).toHaveBeenCalledTimes(1); }); }, SPECIAL_TEST_TIMEOUT diff --git a/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/index.tsx index 5838840548b2b..32f373000f78b 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/index.tsx @@ -136,7 +136,6 @@ export const TimelineDataTableComponent: React.FC = memo( } = useKibana(); const [expandedDoc, setExpandedDoc] = useState(); - const [fetchedPage, setFechedPage] = useState(0); const onCloseExpandableFlyout = useCallback((id: string) => { setExpandedDoc((prev) => (!prev ? prev : undefined)); @@ -237,9 +236,8 @@ export const TimelineDataTableComponent: React.FC = memo( ); const handleFetchMoreRecords = useCallback(() => { - onFetchMoreRecords(fetchedPage + 1); - setFechedPage(fetchedPage + 1); - }, [fetchedPage, onFetchMoreRecords]); + onFetchMoreRecords(); + }, [onFetchMoreRecords]); const additionalControls = useMemo( () => , @@ -252,10 +250,9 @@ export const TimelineDataTableComponent: React.FC = memo( (newSampleSize: number) => { if (newSampleSize !== sampleSize) { dispatch(timelineActions.updateSampleSize({ id: timelineId, sampleSize: newSampleSize })); - refetch(); } }, - [dispatch, sampleSize, timelineId, refetch] + [dispatch, sampleSize, timelineId] ); const onUpdateRowHeight = useCallback( diff --git a/x-pack/solutions/security/plugins/security_solution/public/timelines/containers/index.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/timelines/containers/index.test.tsx index 822740f3b9978..c41e62dc2d1cd 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/timelines/containers/index.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/timelines/containers/index.test.tsx @@ -8,13 +8,16 @@ import { DataLoadingState } from '@kbn/unified-data-table'; import { act, waitFor, renderHook } from '@testing-library/react'; import type { TimelineArgs, UseTimelineEventsProps } from '.'; -import { initSortDefault, useTimelineEvents } from '.'; +import * as useTimelineEventsModule from '.'; import { SecurityPageName } from '../../../common/constants'; import { TimelineId } from '../../../common/types/timeline'; import { useIsExperimentalFeatureEnabled } from '../../common/hooks/use_experimental_features'; -import { mockTimelineData } from '../../common/mock'; import { useRouteSpy } from '../../common/utils/route/use_route_spy'; import { useFetchNotes } from '../../notes/hooks/use_fetch_notes'; +import { useKibana } from '../../common/lib/kibana'; +import { getMockTimelineSearchSubscription } from '../../common/mock/mock_timeline_search_service'; + +const { initSortDefault, useTimelineEvents } = useTimelineEventsModule; const mockDispatch = jest.fn(); jest.mock('react-redux', () => { @@ -30,10 +33,6 @@ jest.mock('../../notes/hooks/use_fetch_notes'); const onLoadMock = jest.fn(); const useFetchNotesMock = useFetchNotes as jest.Mock; -const mockEvents = mockTimelineData.slice(0, 10); - -const mockSearch = jest.fn(); - jest.mock('../../common/lib/apm/use_track_http_request'); jest.mock('../../common/hooks/use_experimental_features'); const useIsExperimentalFeatureEnabledMock = useIsExperimentalFeatureEnabled as jest.Mock; @@ -45,51 +44,7 @@ jest.mock('../../common/lib/kibana', () => ({ addWarning: jest.fn(), remove: jest.fn(), }), - useKibana: jest.fn().mockReturnValue({ - services: { - application: { - capabilities: { - siem: { - crud: true, - }, - }, - }, - data: { - search: { - search: jest.fn().mockImplementation((args) => { - mockSearch(); - return { - subscribe: jest.fn().mockImplementation(({ next }) => { - setTimeout(() => { - next({ - isRunning: false, - isPartial: false, - inspect: { - dsl: [], - response: [], - }, - edges: mockEvents.map((item) => ({ node: item })), - pageInfo: { - activePage: args.pagination.activePage, - totalPages: 10, - }, - rawResponse: {}, - totalCount: mockTimelineData.length, - }); - }, 50); - return { unsubscribe: jest.fn() }; - }), - }; - }), - }, - }, - notifications: { - toasts: { - addWarning: jest.fn(), - }, - }, - }, - }), + useKibana: jest.fn(), })); const mockUseRouteSpy: jest.Mock = useRouteSpy as jest.Mock; @@ -107,7 +62,40 @@ mockUseRouteSpy.mockReturnValue([ }, ]); -describe('useTimelineEvents', () => { +const startDate: string = '2020-07-07T08:20:18.966Z'; +const endDate: string = '3000-01-01T00:00:00.000Z'; +const props: UseTimelineEventsProps = { + dataViewId: 'data-view-id', + endDate, + id: TimelineId.active, + indexNames: ['filebeat-*'], + fields: ['@timestamp', 'event.kind'], + filterQuery: '*', + startDate, + limit: 25, + runtimeMappings: {}, + sort: initSortDefault, + skip: false, +}; + +const { mockTimelineSearchSubscription: mockSearchSubscription, mockSearchWithArgs: mockSearch } = + getMockTimelineSearchSubscription(); + +const loadNextBatch = async (result: { current: [DataLoadingState, TimelineArgs] }) => { + act(() => { + result.current[1].loadNextBatch(); + }); + + await waitFor(() => { + expect(result.current[0]).toBe(DataLoadingState.loadingMore); + }); + + await waitFor(() => { + expect(result.current[0]).toBe(DataLoadingState.loaded); + }); +}; + +describe('useTimelineEventsHandler', () => { useIsExperimentalFeatureEnabledMock.mockReturnValue(false); beforeEach(() => { @@ -118,25 +106,31 @@ describe('useTimelineEvents', () => { useFetchNotesMock.mockReturnValue({ onLoad: onLoadMock, }); - }); - const startDate: string = '2020-07-07T08:20:18.966Z'; - const endDate: string = '3000-01-01T00:00:00.000Z'; - const props: UseTimelineEventsProps = { - dataViewId: 'data-view-id', - endDate, - id: TimelineId.active, - indexNames: ['filebeat-*'], - fields: ['@timestamp', 'event.kind'], - filterQuery: '', - startDate, - limit: 25, - runtimeMappings: {}, - sort: initSortDefault, - skip: false, - }; + (useKibana as jest.Mock).mockReturnValue({ + services: { + application: { + capabilities: { + siem: { + crud: true, + }, + }, + }, + data: { + search: { + search: mockSearchSubscription, + }, + }, + notifications: { + toasts: { + addWarning: jest.fn(), + }, + }, + }, + }); + }); - test('init', async () => { + test('should init empty response', async () => { const { result } = renderHook((args) => useTimelineEvents(args), { initialProps: props, }); @@ -147,7 +141,7 @@ describe('useTimelineEvents', () => { events: [], id: TimelineId.active, inspect: expect.objectContaining({ dsl: [], response: [] }), - loadPage: expect.any(Function), + loadNextBatch: expect.any(Function), pageInfo: expect.objectContaining({ activePage: 0, querySize: 0, @@ -159,27 +153,31 @@ describe('useTimelineEvents', () => { ]); }); - test('happy path query', async () => { - const { result, rerender } = renderHook< - [DataLoadingState, TimelineArgs], - UseTimelineEventsProps - >((args) => useTimelineEvents(args), { - initialProps: props, - }); - // useEffect on params request - await waitFor(() => new Promise((resolve) => resolve(null))); - rerender({ ...props, startDate: '', endDate: '' }); - // useEffect on params request + test('should make events search request correctly', async () => { + const { result } = renderHook<[DataLoadingState, TimelineArgs], UseTimelineEventsProps>( + (args) => useTimelineEvents(args), + { + initialProps: props, + } + ); await waitFor(() => { - expect(mockSearch).toHaveBeenCalledTimes(2); + expect(mockSearch).toHaveBeenCalledTimes(1); + expect(mockSearch).toHaveBeenNthCalledWith( + 1, + expect.objectContaining({ pagination: { activePage: 0, querySize: 25 } }) + ); + expect(result.current[1].events).toHaveLength(25); expect(result.current).toEqual([ DataLoadingState.loaded, { - events: mockEvents, + events: expect.any(Array), id: TimelineId.active, inspect: result.current[1].inspect, - loadPage: result.current[1].loadPage, - pageInfo: result.current[1].pageInfo, + loadNextBatch: result.current[1].loadNextBatch, + pageInfo: { + activePage: 0, + querySize: 25, + }, refetch: result.current[1].refetch, totalCount: 32, refreshedAt: result.current[1].refreshedAt, @@ -188,7 +186,7 @@ describe('useTimelineEvents', () => { }); }); - test('Mock cache for active timeline when switching page', async () => { + test('should mock cache for active timeline when switching page', async () => { const { result, rerender } = renderHook< [DataLoadingState, TimelineArgs], UseTimelineEventsProps @@ -214,13 +212,15 @@ describe('useTimelineEvents', () => { expect(mockSearch).toHaveBeenCalledTimes(1); + expect(result.current[1].events).toHaveLength(25); + expect(result.current).toEqual([ DataLoadingState.loaded, { - events: mockEvents, + events: expect.any(Array), id: TimelineId.active, inspect: result.current[1].inspect, - loadPage: result.current[1].loadPage, + loadNextBatch: result.current[1].loadNextBatch, pageInfo: result.current[1].pageInfo, refetch: result.current[1].refetch, totalCount: 32, @@ -266,98 +266,416 @@ describe('useTimelineEvents', () => { await waitFor(() => new Promise((resolve) => resolve(null))); mockSearch.mockReset(); act(() => { - result.current[1].loadPage(4); + result.current[1].loadNextBatch(); }); await waitFor(() => expect(mockSearch).toHaveBeenCalledTimes(1)); }); - test('should query again when a new field is added', async () => { - const { rerender } = renderHook((args) => useTimelineEvents(args), { - initialProps: props, + describe('error/invalid states', () => { + const uniqueError = 'UNIQUE_ERROR'; + const onError = jest.fn(); + const mockSubscribeWithError = jest.fn(({ error }) => { + error(uniqueError); }); - // useEffect on params request - await waitFor(() => new Promise((resolve) => resolve(null))); - rerender({ ...props, startDate, endDate }); - // useEffect on params request - await waitFor(() => new Promise((resolve) => resolve(null))); + beforeEach(() => { + onError.mockClear(); + mockSubscribeWithError.mockClear(); + + (useKibana as jest.Mock).mockReturnValue({ + services: { + data: { + search: { + search: () => ({ + subscribe: jest.fn().mockImplementation(({ error }) => { + const requestTimeout = setTimeout(() => { + mockSubscribeWithError({ error }); + }, 100); + + return { + unsubscribe: () => { + clearTimeout(requestTimeout); + }, + }; + }), + }), + showError: onError, + }, + }, + }, + }); + }); - expect(mockSearch).toHaveBeenCalledTimes(1); - mockSearch.mockClear(); + test('should broadcast correct loading state when request throws error', async () => { + const { result } = renderHook((args) => useTimelineEvents(args), { + initialProps: { ...props }, + }); - rerender({ - ...props, - startDate, - endDate, - fields: ['@timestamp', 'event.kind', 'event.category'], - }); + expect(result.current[0]).toBe(DataLoadingState.loading); - await waitFor(() => expect(mockSearch).toHaveBeenCalledTimes(1)); + await waitFor(() => { + expect(onError).toHaveBeenCalledWith(uniqueError); + expect(result.current[0]).toBe(DataLoadingState.loaded); + }); + }); + test('should should not fire any request when indexName is empty', async () => { + const { result } = renderHook((args) => useTimelineEvents(args), { + initialProps: { ...props, indexNames: [] }, + }); + + await waitFor(() => { + expect(mockSearch).not.toHaveBeenCalled(); + expect(result.current[0]).toBe(DataLoadingState.loaded); + }); + }); }); - test('should not query again when a field is removed', async () => { - const { rerender } = renderHook((args) => useTimelineEvents(args), { - initialProps: props, + describe('fields', () => { + test('should query again when a new field is added', async () => { + const { rerender } = renderHook((args) => useTimelineEvents(args), { + initialProps: props, + }); + + await waitFor(() => { + expect(mockSearch).toHaveBeenCalledTimes(1); + }); + + mockSearch.mockClear(); + + rerender({ + ...props, + startDate, + endDate, + fields: ['@timestamp', 'event.kind', 'event.category'], + }); + + await waitFor(() => expect(mockSearch).toHaveBeenCalledTimes(1)); }); - // useEffect on params request - await waitFor(() => new Promise((resolve) => resolve(null))); - rerender({ ...props, startDate, endDate }); - // useEffect on params request - await waitFor(() => new Promise((resolve) => resolve(null))); + test('should not query again when a field is removed', async () => { + const { rerender } = renderHook((args) => useTimelineEvents(args), { + initialProps: props, + }); - expect(mockSearch).toHaveBeenCalledTimes(1); - mockSearch.mockClear(); + await waitFor(() => { + expect(mockSearch).toHaveBeenCalledTimes(1); + }); + mockSearch.mockClear(); - rerender({ ...props, startDate, endDate, fields: ['@timestamp'] }); + rerender({ ...props, fields: ['@timestamp'] }); - await waitFor(() => expect(mockSearch).toHaveBeenCalledTimes(0)); + await waitFor(() => expect(mockSearch).toHaveBeenCalledTimes(0)); + }); + test('should not query again when a removed field is added back', async () => { + const { rerender } = renderHook((args) => useTimelineEvents(args), { + initialProps: props, + }); + + expect(mockSearch).toHaveBeenCalledTimes(1); + mockSearch.mockClear(); + + // remove `event.kind` from default fields + rerender({ ...props, fields: ['@timestamp'] }); + + await waitFor(() => expect(mockSearch).toHaveBeenCalledTimes(0)); + + // request default Fields + rerender({ ...props }); + + await waitFor(() => expect(mockSearch).toHaveBeenCalledTimes(0)); + }); }); - test('should not query again when a removed field is added back', async () => { - const { rerender } = renderHook((args) => useTimelineEvents(args), { - initialProps: props, + + describe('batching', () => { + test('should broadcast correct loading state based on the batch being fetched', async () => { + const { result } = renderHook((args) => useTimelineEvents(args), { + initialProps: { ...props }, + }); + + await waitFor(() => { + expect(result.current[0]).toBe(DataLoadingState.loading); + }); + + await waitFor(() => { + expect(result.current[0]).toBe(DataLoadingState.loaded); + }); + + act(() => { + result.current[1].loadNextBatch(); + }); + + expect(result.current[0]).toBe(DataLoadingState.loadingMore); + + await waitFor(() => { + expect(result.current[0]).toBe(DataLoadingState.loaded); + }); }); - // useEffect on params request - await waitFor(() => new Promise((resolve) => resolve(null))); - rerender({ ...props, startDate, endDate }); - // useEffect on params request - await waitFor(() => new Promise((resolve) => resolve(null))); + test('should request incremental batches when next batch has been requested', async () => { + const { result } = renderHook((args) => useTimelineEvents(args), { + initialProps: { ...props }, + }); - expect(mockSearch).toHaveBeenCalledTimes(1); - mockSearch.mockClear(); + await waitFor(() => { + expect(result.current[0]).toBe(DataLoadingState.loaded); + expect(mockSearch).toHaveBeenNthCalledWith( + 1, + expect.objectContaining({ pagination: { activePage: 0, querySize: 25 } }) + ); + }); - // remove `event.kind` from default fields - rerender({ ...props, startDate, endDate, fields: ['@timestamp'] }); + mockSearch.mockClear(); - await waitFor(() => new Promise((resolve) => resolve(null))); + await loadNextBatch(result); - expect(mockSearch).toHaveBeenCalledTimes(0); + await waitFor(() => { + expect(mockSearch).toHaveBeenNthCalledWith( + 1, + expect.objectContaining({ pagination: { activePage: 1, querySize: 25 } }) + ); + }); - // request default Fields - rerender({ ...props, startDate, endDate }); + mockSearch.mockClear(); - // since there is no new update in useEffect, it should throw an timeout error - // await expect(waitFor(() => null)).rejects.toThrowError(); - await waitFor(() => expect(mockSearch).toHaveBeenCalledTimes(0)); - }); + await loadNextBatch(result); - test('should return the combined list of events for all the pages when multiple pages are queried', async () => { - const { result } = renderHook((args) => useTimelineEvents(args), { - initialProps: { ...props }, + await waitFor(() => { + expect(mockSearch).toHaveBeenNthCalledWith( + 1, + expect.objectContaining({ pagination: { activePage: 2, querySize: 25 } }) + ); + }); }); - await waitFor(() => { - expect(result.current[1].events).toHaveLength(10); + + test('should fetch new columns data for the all the batches ', async () => { + const { result, rerender } = renderHook((args) => useTimelineEvents(args), { + initialProps: { ...props }, + }); + + await waitFor(() => { + expect(result.current[0]).toBe(DataLoadingState.loaded); + }); + + //////// + // fetch 2 more batches before requesting new column + //////// + await loadNextBatch(result); + + await loadNextBatch(result); + /////// + + rerender({ ...props, fields: [...props.fields, 'new_column'] }); + + await waitFor(() => { + expect(result.current[0]).toBe(DataLoadingState.loaded); + expect(mockSearch).toHaveBeenCalledWith( + expect.objectContaining({ + fields: ['@timestamp', 'event.kind', 'new_column'], + pagination: { activePage: 0, querySize: 75 }, + }) + ); + }); }); - result.current[1].loadPage(1); + test('should reset batch to 0th when the data is `refetched`', async () => { + const { result } = renderHook((args) => useTimelineEvents(args), { + initialProps: { ...props }, + }); - await waitFor(() => { - expect(result.current[0]).toEqual(DataLoadingState.loadingMore); + await waitFor(() => { + expect(mockSearch).toHaveBeenCalledWith( + expect.objectContaining({ pagination: { activePage: 0, querySize: 25 } }) + ); + }); + + mockSearch.mockClear(); + + await loadNextBatch(result); + + await waitFor(() => { + expect(mockSearch).toHaveBeenCalledWith( + expect.objectContaining({ pagination: { activePage: 1, querySize: 25 } }) + ); + }); + + mockSearch.mockClear(); + + act(() => { + result.current[1].refetch(); + }); + + await waitFor(() => { + expect(mockSearch).toHaveBeenCalledTimes(1); + expect(mockSearch).toHaveBeenNthCalledWith( + 1, + expect.objectContaining({ pagination: { activePage: 0, querySize: 25 } }) + ); + }); }); - await waitFor(() => { - expect(result.current[1].events).toHaveLength(20); + test('should query all batches when new column is added', async () => { + const { result, rerender } = renderHook((args) => useTimelineEvents(args), { + initialProps: { ...props }, + }); + + await waitFor(() => { + expect(mockSearch).toHaveBeenCalledWith( + expect.objectContaining({ pagination: { activePage: 0, querySize: 25 } }) + ); + }); + mockSearch.mockClear(); + + await loadNextBatch(result); + + await waitFor(() => { + expect(mockSearch).toHaveBeenCalledWith( + expect.objectContaining({ pagination: { activePage: 1, querySize: 25 } }) + ); + }); + + mockSearch.mockClear(); + + rerender({ ...props, fields: [...props.fields, 'new_column'] }); + + await waitFor(() => { + expect(mockSearch).toHaveBeenCalledWith( + expect.objectContaining({ pagination: { activePage: 0, querySize: 50 } }) + ); + }); + mockSearch.mockClear(); + + await loadNextBatch(result); + + await waitFor(() => { + expect(mockSearch).toHaveBeenCalledWith( + expect.objectContaining({ pagination: { activePage: 2, querySize: 25 } }) + ); + }); + }); + + test('should combine batches correctly when new column is added', async () => { + const { result, rerender } = renderHook((args) => useTimelineEvents(args), { + initialProps: { ...props, limit: 5 }, + }); + + await waitFor(() => { + expect(result.current[1].events.length).toBe(5); + }); + + ////////////////////// + // Batch 2 + await loadNextBatch(result); + await waitFor(() => { + expect(result.current[1].events.length).toBe(10); + }); + ////////////////////// + + ////////////////////// + // Batch 3 + await loadNextBatch(result); + await waitFor(() => { + expect(result.current[1].events.length).toBe(15); + }); + ////////////////////// + + /////////////////////////////////////////// + // add new column + // Fetch all 3 batches together + rerender({ ...props, limit: 5, fields: [...props.fields, 'new_column'] }); + + await waitFor(() => { + expect(result.current[0]).toBe(DataLoadingState.loadingMore); + }); + + // should fetch all the records together + await waitFor(() => { + expect(result.current[0]).toBe(DataLoadingState.loaded); + expect(result.current[1].events.length).toBe(15); + expect(result.current[1].pageInfo).toMatchObject({ + activePage: 0, + querySize: 15, + }); + }); + /////////////////////////////////////////// + + ////////////////////// + // subsequent batch should be fetched incrementally + // Batch 4 + await loadNextBatch(result); + + await waitFor(() => { + expect(result.current[1].events.length).toBe(20); + expect(result.current[1].pageInfo).toMatchObject({ + activePage: 3, + querySize: 5, + }); + }); + ////////////////////// + + ////////////////////// + // Batch 5 + await loadNextBatch(result); + + await waitFor(() => { + expect(result.current[1].events.length).toBe(25); + expect(result.current[1].pageInfo).toMatchObject({ + activePage: 4, + querySize: 5, + }); + }); + ////////////////////// + }); + + test('should request 0th batch (refetch) when batchSize is changed', async () => { + const { result, rerender } = renderHook((args) => useTimelineEvents(args), { + initialProps: { ...props, limit: 5 }, + }); + + ////////////////////// + // Batch 2 + await loadNextBatch(result); + + ////////////////////// + // Batch 3 + await loadNextBatch(result); + + mockSearch.mockClear(); + + // change the batch size + rerender({ ...props, limit: 10 }); + + await waitFor(() => { + expect(result.current[0]).toBe(DataLoadingState.loaded); + expect(mockSearch).toHaveBeenCalledWith( + expect.objectContaining({ pagination: { activePage: 0, querySize: 10 } }) + ); + }); + }); + + test('should return correct list of events ( 0th batch ) when batchSize is changed', async () => { + const { result, rerender } = renderHook((args) => useTimelineEvents(args), { + initialProps: { ...props, limit: 5 }, + }); + + ////////////////////// + // Batch 2 + await loadNextBatch(result); + + ////////////////////// + // Batch 3 + await loadNextBatch(result); + + // change the batch size + rerender({ ...props, limit: 10 }); + + await waitFor(() => { + expect(result.current[0]).toBe(DataLoadingState.loading); + }); + + await waitFor(() => { + expect(result.current[0]).toBe(DataLoadingState.loaded); + expect(result.current[1].events.length).toBe(10); + }); }); }); }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/timelines/containers/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/timelines/containers/index.tsx index baaed281c7393..767cbef4761f5 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/timelines/containers/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/timelines/containers/index.tsx @@ -53,7 +53,7 @@ export interface TimelineArgs { inspect: InspectResponse; /** - * `loadPage` loads the next page/batch of records. + * `loadNextBatch` loads the next page/batch of records. * This is different from the data grid pages. Data grid pagination is only * client side and changing data grid pages does not impact this function. * @@ -61,7 +61,7 @@ export interface TimelineArgs { * irrespective of where user is in Data grid pagination. * */ - loadPage: LoadPage; + loadNextBatch: LoadPage; pageInfo: Pick; refetch: inputsModel.Refetch; totalCount: number; @@ -72,7 +72,7 @@ type OnNextResponseHandler = (response: TimelineArgs) => Promise | void; type TimelineEventsSearchHandler = (onNextResponse?: OnNextResponseHandler) => void; -type LoadPage = (newActivePage: number) => void; +type LoadPage = () => void; type TimelineRequest = T extends 'kuery' ? TimelineEventsAllOptionsInput @@ -167,7 +167,7 @@ export const useTimelineEventsHandler = ({ const abortCtrl = useRef(new AbortController()); const searchSubscription$ = useRef(new Subscription()); const [loading, setLoading] = useState(DataLoadingState.loaded); - const [activePage, setActivePage] = useState( + const [activeBatch, setActiveBatch] = useState( id === TimelineId.active ? activeTimeline.getActivePage() : 0 ); const [timelineRequest, setTimelineRequest] = useState | null>( @@ -184,7 +184,7 @@ export const useTimelineEventsHandler = ({ }, [dispatch, id]); /** - * `wrappedLoadPage` loads the next page/batch of records. + * `loadBatchHandler` loads the next batch of records. * This is different from the data grid pages. Data grid pagination is only * client side and changing data grid pages does not impact this function. * @@ -192,18 +192,23 @@ export const useTimelineEventsHandler = ({ * irrespective of where user is in Data grid pagination. * */ - const wrappedLoadPage = useCallback( - (newActivePage: number) => { + const loadBatchHandler = useCallback( + (newActiveBatch: number) => { clearSignalsState(); if (id === TimelineId.active) { - activeTimeline.setActivePage(newActivePage); + activeTimeline.setActivePage(newActiveBatch); } - setActivePage(newActivePage); + + setActiveBatch(newActiveBatch); }, [clearSignalsState, id] ); + const loadNextBatch = useCallback(() => { + loadBatchHandler(activeBatch + 1); + }, [activeBatch, loadBatchHandler]); + useEffect(() => { return () => { searchSubscription$.current?.unsubscribe(); @@ -214,8 +219,13 @@ export const useTimelineEventsHandler = ({ if (refetch.current != null) { refetch.current(); } - wrappedLoadPage(0); - }, [wrappedLoadPage]); + loadBatchHandler(0); + }, [loadBatchHandler]); + + useEffect(() => { + // when batch size changes, refetch DataGrid + setActiveBatch(0); + }, [limit]); const [timelineResponse, setTimelineResponse] = useState({ id, @@ -230,7 +240,7 @@ export const useTimelineEventsHandler = ({ querySize: 0, }, events: [], - loadPage: wrappedLoadPage, + loadNextBatch, refreshedAt: 0, }); @@ -246,7 +256,8 @@ export const useTimelineEventsHandler = ({ const asyncSearch = async () => { prevTimelineRequest.current = request; abortCtrl.current = new AbortController(); - if (activePage === 0) { + + if (activeBatch === 0) { setLoading(DataLoadingState.loading); } else { setLoading(DataLoadingState.loadingMore); @@ -317,7 +328,6 @@ export const useTimelineEventsHandler = ({ } else { prevTimelineRequest.current = activeTimeline.getRequest(); } - refetch.current = asyncSearch; setTimelineResponse((prevResp) => { const resp = @@ -325,11 +335,7 @@ export const useTimelineEventsHandler = ({ ? activeTimeline.getEqlResponse() : activeTimeline.getResponse(); if (resp != null) { - return { - ...resp, - refetch: refetchGrid, - loadPage: wrappedLoadPage, - }; + return resp; } return prevResp; }); @@ -343,19 +349,8 @@ export const useTimelineEventsHandler = ({ searchSubscription$.current.unsubscribe(); abortCtrl.current.abort(); await asyncSearch(); - refetch.current = asyncSearch; }, - [ - pageName, - skip, - id, - activePage, - startTracking, - data.search, - dataViewId, - refetchGrid, - wrappedLoadPage, - ] + [pageName, skip, id, activeBatch, startTracking, data.search, dataViewId] ); useEffect(() => { @@ -368,7 +363,6 @@ export const useTimelineEventsHandler = ({ const prevSearchParameters = { defaultIndex: prevRequest?.defaultIndex ?? [], filterQuery: prevRequest?.filterQuery ?? '', - querySize: prevRequest?.pagination?.querySize ?? 0, sort: prevRequest?.sort ?? initSortDefault, timerange: prevRequest?.timerange ?? {}, runtimeMappings: (prevRequest?.runtimeMappings ?? {}) as unknown as RunTimeMappings, @@ -382,16 +376,15 @@ export const useTimelineEventsHandler = ({ const currentSearchParameters = { defaultIndex: indexNames, filterQuery: createFilter(filterQuery), - querySize: limit, sort, - runtimeMappings, + runtimeMappings: runtimeMappings ?? {}, ...timerange, ...deStructureEqlOptions(eqlOptions), }; - const newActivePage = deepEqual(prevSearchParameters, currentSearchParameters) - ? activePage - : 0; + const areSearchParamsSame = deepEqual(prevSearchParameters, currentSearchParameters); + + const newActiveBatch = !areSearchParamsSame ? 0 : activeBatch; /* * optimization to avoid unnecessary network request when a field @@ -410,16 +403,32 @@ export const useTimelineEventsHandler = ({ finalFieldRequest = prevRequest?.fieldRequested ?? []; } + let newPagination = { + /* + * + * fetches data cumulatively for the batches upto the activeBatch + * This is needed because, we want to get incremental data as well for the old batches + * For example, newly requested fields + * + * */ + activePage: activeBatch, + querySize: limit, + }; + + if (newFieldsRequested.length > 0) { + newPagination = { + activePage: 0, + querySize: (newActiveBatch + 1) * limit, + }; + } + const currentRequest = { defaultIndex: indexNames, factoryQueryType: TimelineEventsQueries.all, fieldRequested: finalFieldRequest, fields: finalFieldRequest, filterQuery: createFilter(filterQuery), - pagination: { - activePage: newActivePage, - querySize: limit, - }, + pagination: newPagination, language, runtimeMappings, sort, @@ -427,10 +436,10 @@ export const useTimelineEventsHandler = ({ ...(eqlOptions ? eqlOptions : {}), } as const; - if (activePage !== newActivePage) { - setActivePage(newActivePage); + if (activeBatch !== newActiveBatch) { + setActiveBatch(newActiveBatch); if (id === TimelineId.active) { - activeTimeline.setActivePage(newActivePage); + activeTimeline.setActivePage(newActiveBatch); } } if (!deepEqual(prevRequest, currentRequest)) { @@ -441,7 +450,7 @@ export const useTimelineEventsHandler = ({ }, [ dispatch, indexNames, - activePage, + activeBatch, endDate, eqlOptions, filterQuery, @@ -454,19 +463,6 @@ export const useTimelineEventsHandler = ({ runtimeMappings, ]); - const timelineSearchHandler = useCallback( - async (onNextHandler?: OnNextResponseHandler) => { - if ( - id !== TimelineId.active || - timerangeKind === 'absolute' || - !deepEqual(prevTimelineRequest.current, timelineRequest) - ) { - await timelineSearch(timelineRequest, onNextHandler); - } - }, - [id, timelineRequest, timelineSearch, timerangeKind] - ); - /* cleanup timeline events response when the filters were removed completely to avoid displaying previous query results @@ -486,13 +482,34 @@ export const useTimelineEventsHandler = ({ querySize: 0, }, events: [], - loadPage: wrappedLoadPage, + loadNextBatch, refreshedAt: 0, }); } - }, [filterQuery, id, refetchGrid, wrappedLoadPage]); + }, [filterQuery, id, refetchGrid, loadNextBatch]); - return [loading, timelineResponse, timelineSearchHandler]; + const timelineSearchHandler = useCallback( + async (onNextHandler?: OnNextResponseHandler) => { + if ( + id !== TimelineId.active || + timerangeKind === 'absolute' || + !deepEqual(prevTimelineRequest.current, timelineRequest) + ) { + await timelineSearch(timelineRequest, onNextHandler); + } + }, + [id, timelineRequest, timelineSearch, timerangeKind] + ); + + const finalTimelineLineResponse = useMemo(() => { + return { + ...timelineResponse, + loadNextBatch, + refetch: refetchGrid, + }; + }, [timelineResponse, loadNextBatch, refetchGrid]); + + return [loading, finalTimelineLineResponse, timelineSearchHandler]; }; export const useTimelineEvents = ({ @@ -536,19 +553,32 @@ export const useTimelineEvents = ({ * the combined list of events can be supplied to DataGrid. * * */ + + if (dataLoadingState !== DataLoadingState.loaded) return; + + const { activePage, querySize } = timelineResponse.pageInfo; + setEventsPerPage((prev) => { - const result = [...prev]; - result[timelineResponse.pageInfo.activePage] = timelineResponse.events; + let result = [...prev]; + if (querySize === limit) { + result[activePage] = timelineResponse.events; + } else { + result = [timelineResponse.events]; + } return result; }); - }, [timelineResponse.events, timelineResponse.pageInfo.activePage]); + }, [timelineResponse.events, timelineResponse.pageInfo, dataLoadingState, limit]); useEffect(() => { if (!timelineSearchHandler) return; timelineSearchHandler(); }, [timelineSearchHandler]); - const combinedEvents = useMemo(() => eventsPerPage.flat(), [eventsPerPage]); + const combinedEvents = useMemo( + // exclude undefined values / empty slots + () => eventsPerPage.filter(Boolean).flat(), + [eventsPerPage] + ); const combinedResponse = useMemo( () => ({ diff --git a/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/common/roles_users/endpoint_operations_analyst.ts b/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/common/roles_users/endpoint_operations_analyst.ts index 85cadf5aa65d4..168e88386f2d3 100644 --- a/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/common/roles_users/endpoint_operations_analyst.ts +++ b/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/common/roles_users/endpoint_operations_analyst.ts @@ -72,6 +72,7 @@ export const getEndpointOperationsAnalyst: () => Omit = () => { 'file_operations_all', 'execute_operations_all', 'scan_operations_all', + 'workflow_insights_all', ], }, spaces: ['*'], diff --git a/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/common/roles_users/endpoint_security_policy_manager.ts b/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/common/roles_users/endpoint_security_policy_manager.ts index ca90761a62d0c..ed82f4026c1aa 100644 --- a/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/common/roles_users/endpoint_security_policy_manager.ts +++ b/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/common/roles_users/endpoint_security_policy_manager.ts @@ -26,6 +26,8 @@ export const getEndpointSecurityPolicyManager: () => Omit = () => 'event_filters_all', 'host_isolation_exceptions_all', 'blocklist_all', + + 'workflow_insights_all', ], }, }, diff --git a/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/common/roles_users/platform_engineer.ts b/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/common/roles_users/platform_engineer.ts index 10053a9adc4fb..397d1da1cf7b7 100644 --- a/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/common/roles_users/platform_engineer.ts +++ b/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/common/roles_users/platform_engineer.ts @@ -28,6 +28,8 @@ export const getPlatformEngineer: () => Omit = () => { 'blocklist_all', 'actions_log_management_read', + + 'workflow_insights_all', ], }, }, diff --git a/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/common/roles_users/rule_author.ts b/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/common/roles_users/rule_author.ts index f957fe8947c5d..63286dc4e925b 100644 --- a/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/common/roles_users/rule_author.ts +++ b/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/common/roles_users/rule_author.ts @@ -28,6 +28,7 @@ export const getRuleAuthor: () => Omit = () => { 'host_isolation_exceptions_read', 'blocklist_all', 'actions_log_management_read', + 'workflow_insights_all', ], }, }, diff --git a/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/common/roles_users/serverless/es_serverless_resources/roles.yml b/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/common/roles_users/serverless/es_serverless_resources/roles.yml index 4c17bfa922d2e..3fe0d44073f3f 100644 --- a/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/common/roles_users/serverless/es_serverless_resources/roles.yml +++ b/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/common/roles_users/serverless/es_serverless_resources/roles.yml @@ -321,6 +321,7 @@ t3_analyst: - feature_siem.actions_log_management_all # Response actions history - feature_siem.file_operations_all - feature_siem.scan_operations_all + - feature_siem.workflow_insights_all - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all - feature_securitySolutionAttackDiscovery.all @@ -448,6 +449,7 @@ rule_author: - feature_siem.host_isolation_exceptions_read - feature_siem.blocklist_all # Elastic Defend Policy Management - feature_siem.actions_log_management_read + - feature_siem.workflow_insights_all - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all - feature_securitySolutionAttackDiscovery.all @@ -522,6 +524,7 @@ soc_manager: - feature_siem.file_operations_all - feature_siem.execute_operations_all - feature_siem.scan_operations_all + - feature_siem.workflow_insights_all - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all - feature_securitySolutionAttackDiscovery.all @@ -643,6 +646,7 @@ platform_engineer: - feature_siem.host_isolation_exceptions_all - feature_siem.blocklist_all # Elastic Defend Policy Management - feature_siem.actions_log_management_read + - feature_siem.workflow_insights_all - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all - feature_securitySolutionAttackDiscovery.all @@ -717,6 +721,7 @@ endpoint_operations_analyst: - feature_siem.file_operations_all - feature_siem.execute_operations_all # Execute - feature_siem.scan_operations_all + - feature_siem.workflow_insights_all - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all - feature_securitySolutionAttackDiscovery.all @@ -785,6 +790,7 @@ endpoint_policy_manager: - feature_siem.event_filters_all - feature_siem.host_isolation_exceptions_all - feature_siem.blocklist_all # Elastic Defend Policy Management + - feature_siem.workflow_insights_all - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all - feature_securitySolutionAttackDiscovery.all diff --git a/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/common/roles_users/soc_manager.ts b/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/common/roles_users/soc_manager.ts index 532e7271e4b6b..20cda46c70ef1 100644 --- a/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/common/roles_users/soc_manager.ts +++ b/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/common/roles_users/soc_manager.ts @@ -30,6 +30,8 @@ export const getSocManager: () => Omit = () => { 'host_isolation_all', 'process_operations_all', 'actions_log_management_all', + + 'workflow_insights_all', ], }, }, diff --git a/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/common/roles_users/t3_analyst.ts b/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/common/roles_users/t3_analyst.ts index 872cb1c352fd3..2ed145886eac8 100644 --- a/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/common/roles_users/t3_analyst.ts +++ b/x-pack/solutions/security/plugins/security_solution/scripts/endpoint/common/roles_users/t3_analyst.ts @@ -32,6 +32,7 @@ export const getT3Analyst: () => Omit = () => { 'actions_log_management_all', 'file_operations_all', 'scan_operations_all', + 'workflow_insights_all', ], }, }, diff --git a/x-pack/solutions/security/plugins/security_solution/server/endpoint/routes/workflow_insights/get_insights.test.ts b/x-pack/solutions/security/plugins/security_solution/server/endpoint/routes/workflow_insights/get_insights.test.ts index f5ca060eb2be3..e640ff2fde3db 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/endpoint/routes/workflow_insights/get_insights.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/endpoint/routes/workflow_insights/get_insights.test.ts @@ -31,7 +31,7 @@ describe('Get Insights Route Handler', () => { registerGetInsightsRoute(router, mockEndpointContext); - callRoute = async (params, authz = { canReadSecuritySolution: true }) => { + callRoute = async (params, authz = { canReadWorkflowInsights: true }) => { const mockContext = { core: { security: { @@ -96,7 +96,7 @@ describe('Get Insights Route Handler', () => { describe('with invalid privileges', () => { it('should return forbidden if user lacks read privileges', async () => { - await callRoute({}, { canReadSecuritySolution: false }); + await callRoute({}, { canReadWorkflowInsights: false }); expect(mockResponse.forbidden).toHaveBeenCalled(); }); diff --git a/x-pack/solutions/security/plugins/security_solution/server/endpoint/routes/workflow_insights/get_insights.ts b/x-pack/solutions/security/plugins/security_solution/server/endpoint/routes/workflow_insights/get_insights.ts index 9723ac3afe422..8c28c0166622f 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/endpoint/routes/workflow_insights/get_insights.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/endpoint/routes/workflow_insights/get_insights.ts @@ -45,7 +45,7 @@ export const registerGetInsightsRoute = ( }, }, withEndpointAuthz( - { all: ['canReadSecuritySolution'] }, + { all: ['canReadWorkflowInsights'] }, endpointContext.logFactory.get('workflowInsights'), getInsightsRouteHandler(endpointContext) ) diff --git a/x-pack/solutions/security/plugins/security_solution/server/endpoint/routes/workflow_insights/update_insight.test.ts b/x-pack/solutions/security/plugins/security_solution/server/endpoint/routes/workflow_insights/update_insight.test.ts index 0a8e2e1bf8771..126a7c4192fc3 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/endpoint/routes/workflow_insights/update_insight.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/endpoint/routes/workflow_insights/update_insight.test.ts @@ -35,7 +35,7 @@ describe('Update Insights Route Handler', () => { registerUpdateInsightsRoute(router, mockEndpointContext); - callRoute = async (params, body, authz = { canReadSecuritySolution: true }) => { + callRoute = async (params, body, authz = { canWriteWorkflowInsights: true }) => { const mockContext = { core: { security: { @@ -102,7 +102,7 @@ describe('Update Insights Route Handler', () => { await callRoute( { insightId: '1' }, { name: 'Updated Insight' }, - { canReadSecuritySolution: false } + { canWriteWorkflowInsights: false } ); expect(mockResponse.forbidden).toHaveBeenCalled(); diff --git a/x-pack/solutions/security/plugins/security_solution/server/endpoint/routes/workflow_insights/update_insight.ts b/x-pack/solutions/security/plugins/security_solution/server/endpoint/routes/workflow_insights/update_insight.ts index 82ffc547067c1..a1f1813b5e710 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/endpoint/routes/workflow_insights/update_insight.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/endpoint/routes/workflow_insights/update_insight.ts @@ -46,7 +46,7 @@ export const registerUpdateInsightsRoute = ( }, }, withEndpointAuthz( - { all: ['canReadSecuritySolution'] }, + { all: ['canWriteWorkflowInsights'] }, endpointContext.logFactory.get('workflowInsights'), updateInsightsRouteHandler(endpointContext) ) diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/perform_rule_upgrade/diffable_rule_fields_mappings.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/perform_rule_upgrade/diffable_rule_fields_mappings.ts index dd36fcb6e74aa..86ba3e5dd6bee 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/perform_rule_upgrade/diffable_rule_fields_mappings.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/prebuilt_rules/api/perform_rule_upgrade/diffable_rule_fields_mappings.ts @@ -132,10 +132,10 @@ const SUBFIELD_MAPPING: Record = { event_category_override: 'event_category_override', tiebreaker_field: 'tiebreaker_field', timestamp_field: 'timestamp_field', - building_block_type: 'type', threat_query: 'query', threat_language: 'language', threat_filters: 'filters', + building_block_type: 'type', rule_name_override: 'field_name', timestamp_override: 'field_name', timestamp_override_fallback_disabled: 'fallback_disabled', diff --git a/x-pack/solutions/security/plugins/security_solution_serverless/common/pli/pli_config.ts b/x-pack/solutions/security/plugins/security_solution_serverless/common/pli/pli_config.ts index 6d3155f1b6ad1..4bb78efb4b701 100644 --- a/x-pack/solutions/security/plugins/security_solution_serverless/common/pli/pli_config.ts +++ b/x-pack/solutions/security/plugins/security_solution_serverless/common/pli/pli_config.ts @@ -44,6 +44,7 @@ export const PLI_PRODUCT_FEATURES: PliProductFeatures = { ProductFeatureKey.endpointAgentTamperProtection, ProductFeatureKey.endpointCustomNotification, ProductFeatureKey.endpointProtectionUpdates, + ProductFeatureKey.securityWorkflowInsights, ], }, cloud: { diff --git a/x-pack/solutions/security/plugins/timelines/server/search_strategy/timeline/eql/helpers.ts b/x-pack/solutions/security/plugins/timelines/server/search_strategy/timeline/eql/helpers.ts index 645f6daa5727d..81012f0229dcf 100644 --- a/x-pack/solutions/security/plugins/timelines/server/search_strategy/timeline/eql/helpers.ts +++ b/x-pack/solutions/security/plugins/timelines/server/search_strategy/timeline/eql/helpers.ts @@ -20,7 +20,7 @@ import { inspectStringifyObject } from '../../../utils/build_query'; import { formatTimelineData } from '../factory/helpers/format_timeline_data'; export const buildEqlDsl = (options: TimelineEqlRequestOptions): Record => { - if (options.pagination && options.pagination.querySize >= DEFAULT_MAX_TABLE_QUERY_SIZE) { + if (options.pagination && options.pagination.querySize > DEFAULT_MAX_TABLE_QUERY_SIZE) { throw new Error(`No query size above ${DEFAULT_MAX_TABLE_QUERY_SIZE}`); } diff --git a/x-pack/solutions/security/plugins/timelines/server/search_strategy/timeline/factory/events/all/index.ts b/x-pack/solutions/security/plugins/timelines/server/search_strategy/timeline/factory/events/all/index.ts index 2ee2b64162c13..e54daafa3854c 100644 --- a/x-pack/solutions/security/plugins/timelines/server/search_strategy/timeline/factory/events/all/index.ts +++ b/x-pack/solutions/security/plugins/timelines/server/search_strategy/timeline/factory/events/all/index.ts @@ -22,7 +22,7 @@ import { formatTimelineData } from '../../helpers/format_timeline_data'; export const timelineEventsAll: TimelineFactory = { buildDsl: ({ authFilter, ...options }) => { - if (options.pagination && options.pagination.querySize >= DEFAULT_MAX_TABLE_QUERY_SIZE) { + if (options.pagination && options.pagination.querySize > DEFAULT_MAX_TABLE_QUERY_SIZE) { throw new Error(`No query size above ${DEFAULT_MAX_TABLE_QUERY_SIZE}`); } const { fieldRequested, ...queryOptions } = cloneDeep(options); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/crowdstrike.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/crowdstrike.ts index c9d1ca8814592..626a7c77b02d8 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/crowdstrike.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/crowdstrike.ts @@ -208,23 +208,37 @@ export default function createCrowdstrikeTests({ getService }: FtrProviderContex }); for (const crowdstrikeSubAction of crowdstrikeSubActions) { - it(`should allow execute of ${crowdstrikeSubAction}`, async () => { + const isAllowedSubAction = crowdstrikeSubAction === SUB_ACTION.GET_AGENT_DETAILS; + it(`should ${ + isAllowedSubAction ? 'allow' : 'deny' + } execute of ${crowdstrikeSubAction}`, async () => { const { // eslint-disable-next-line @typescript-eslint/naming-convention - body: { status, message, connector_id }, + body: { status, message, connector_id, statusCode, error }, } = await executeSubAction({ supertest: supertestWithoutAuth, subAction: crowdstrikeSubAction, subActionParams: {}, username: user.username, password: user.password, + ...(isAllowedSubAction + ? {} + : { expectedHttpCode: 403, errorLogger: logErrorDetails.ignoreCodes([403]) }), }); - expect({ status, message, connector_id }).to.eql({ - status: 'error', - message: 'an error occurred while running the action', - connector_id: connectorId, - }); + if (isAllowedSubAction) { + expect({ status, message, connector_id }).to.eql({ + status: 'error', + message: 'an error occurred while running the action', + connector_id: connectorId, + }); + } else { + expect({ statusCode, message, error }).to.eql({ + statusCode: 403, + error: 'Forbidden', + message: 'Unauthorized to execute a ".crowdstrike" action', + }); + } }); } }); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/sentinelone.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/sentinelone.ts index bf6f88be08fdf..c27958e537e70 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/sentinelone.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/actions/connector_types/sentinelone.ts @@ -217,23 +217,37 @@ export default function createSentinelOneTests({ getService }: FtrProviderContex }); for (const s1SubAction of s1SubActions) { - it(`should allow execute of ${s1SubAction}`, async () => { + const isAllowedSubAction = s1SubAction === SUB_ACTION.GET_AGENTS; + it(`should ${ + isAllowedSubAction ? 'allow' : 'deny' + } execute of ${s1SubAction}`, async () => { const { // eslint-disable-next-line @typescript-eslint/naming-convention - body: { status, message, connector_id }, + body: { status, message, connector_id, statusCode, error }, } = await executeSubAction({ supertest: supertestWithoutAuth, subAction: s1SubAction, subActionParams: {}, username: user.username, password: user.password, + ...(isAllowedSubAction + ? {} + : { expectedHttpCode: 403, errorLogger: logErrorDetails.ignoreCodes([403]) }), }); - expect({ status, message, connector_id }).to.eql({ - status: 'error', - message: 'an error occurred while running the action', - connector_id: connectorId, - }); + if (isAllowedSubAction) { + expect({ status, message, connector_id }).to.eql({ + status: 'error', + message: 'an error occurred while running the action', + connector_id: connectorId, + }); + } else { + expect({ statusCode, message, error }).to.eql({ + statusCode: 403, + error: 'Forbidden', + message: 'Unauthorized to execute a ".sentinelone" action', + }); + } }); } }); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group5/tests/alerting/create.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group5/tests/alerting/create.ts index d0716df4e2db9..47af7e546e5b7 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group5/tests/alerting/create.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group5/tests/alerting/create.ts @@ -8,6 +8,10 @@ import expect from '@kbn/expect'; import { RULE_SAVED_OBJECT_TYPE } from '@kbn/alerting-plugin/server'; import { ES_TEST_INDEX_NAME } from '@kbn/alerting-api-integration-helpers'; +import { + SENTINELONE_CONNECTOR_ID, + SUB_ACTION, +} from '@kbn/stack-connectors-plugin/common/sentinelone/constants'; import { systemActionScenario, UserAtSpaceScenarios } from '../../../scenarios'; import { checkAAD, @@ -601,6 +605,74 @@ export default function createAlertTests({ getService }: FtrProviderContext) { throw new Error(`Scenario untested: ${JSON.stringify(scenario)}`); } }); + + it('should handle create alert request appropriately with Endpoint Security actions', async () => { + let response = await supertest + .post(`${getUrlPrefix(space.id)}/api/actions/connector`) + .set('kbn-xsrf', 'foo') + .send({ + name: 'My sub connector', + connector_type_id: SENTINELONE_CONNECTOR_ID, + config: { url: 'https://some.non.existent.com' }, + secrets: { token: 'abc-123' }, + }) + .expect(200); + const connectorId = response.body.id; + + response = await supertestWithoutAuth + .post(`${getUrlPrefix(space.id)}/api/alerting/rule`) + .set('kbn-xsrf', 'foo') + .auth(user.username, user.password) + .send( + getTestRuleData({ + actions: [ + { + id: connectorId, + group: 'default', + params: { + subAction: SUB_ACTION.GET_AGENTS, + subActionParams: {}, + }, + }, + ], + }) + ); + + switch (scenario.id) { + case 'no_kibana_privileges at space1': + case 'global_read at space1': + case 'space_1_all at space2': + expect(response.statusCode).to.eql(403); + expect(response.body).to.eql({ + error: 'Forbidden', + message: getUnauthorizedErrorMessage('create', 'test.noop', 'alertsFixture'), + statusCode: 403, + }); + break; + case 'space_1_all_alerts_none_actions at space1': + expect(response.statusCode).to.eql(403); + expect(response.body).to.eql({ + error: 'Forbidden', + message: 'Unauthorized to get actions', + statusCode: 403, + }); + break; + case 'space_1_all at space1': + case 'space_1_all_with_restricted_fixture at space1': + case 'superuser at space1': + case 'system_actions at space1': + expect(response.statusCode).to.eql(400); + expect(response.body).to.eql({ + error: 'Bad Request', + message: + 'Failed to validate actions due to the following error: Endpoint security connectors cannot be used as alerting actions', + statusCode: 400, + }); + break; + default: + throw new Error(`Scenario untested: ${JSON.stringify(scenario)}`); + } + }); }); } }); diff --git a/x-pack/test/api_integration/apis/features/features/features.ts b/x-pack/test/api_integration/apis/features/features/features.ts index bbdce7ab42912..4ca972549f0cb 100644 --- a/x-pack/test/api_integration/apis/features/features/features.ts +++ b/x-pack/test/api_integration/apis/features/features/features.ts @@ -185,6 +185,7 @@ export default function ({ getService }: FtrProviderContext) { 'rulesSettings', 'uptime', 'searchInferenceEndpoints', + 'searchSynonyms', 'searchPlayground', 'siem', 'slo', diff --git a/x-pack/test/api_integration/apis/ml/saved_objects/can_sync_to_all_spaces.ts b/x-pack/test/api_integration/apis/ml/saved_objects/can_sync_to_all_spaces.ts new file mode 100644 index 0000000000000..59b3c0d13f1e2 --- /dev/null +++ b/x-pack/test/api_integration/apis/ml/saved_objects/can_sync_to_all_spaces.ts @@ -0,0 +1,52 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../ftr_provider_context'; +import { USER } from '../../../../functional/services/ml/security_common'; +import { getCommonRequestHeader } from '../../../../functional/services/ml/common_api'; + +export default ({ getService }: FtrProviderContext) => { + const ml = getService('ml'); + const spacesService = getService('spaces'); + const supertest = getService('supertestWithoutAuth'); + + const idSpace1 = 'space1'; + const idSpace2 = 'space2'; + + async function runRequest(user: USER, expectedStatusCode: number) { + const { body, status } = await supertest + .get(`/internal/ml/saved_objects/can_sync_to_all_spaces`) + .auth(user, ml.securityCommon.getPasswordForUser(user)) + .set(getCommonRequestHeader('1')); + ml.api.assertResponseStatusCode(expectedStatusCode, status, body); + + return body; + } + + describe('GET saved_objects/can_sync_to_all_spaces', () => { + beforeEach(async () => { + await spacesService.create({ id: idSpace1, name: 'space_one', disabledFeatures: [] }); + await spacesService.create({ id: idSpace2, name: 'space_two', disabledFeatures: [] }); + await ml.testResources.setKibanaTimeZoneToUTC(); + }); + + afterEach(async () => { + await spacesService.delete(idSpace1); + await spacesService.delete(idSpace2); + }); + + it('user can sync to all spaces', async () => { + const body = await runRequest(USER.ML_POWERUSER, 200); + expect(body).to.eql({ canSync: true }); + }); + it('user can not sync to all spaces', async () => { + const body = await runRequest(USER.ML_POWERUSER_SPACE1, 200); + expect(body).to.eql({ canSync: false }); + }); + }); +}; diff --git a/x-pack/test/api_integration/apis/ml/saved_objects/index.ts b/x-pack/test/api_integration/apis/ml/saved_objects/index.ts index b4b8e1d0653f3..de56161d5aef3 100644 --- a/x-pack/test/api_integration/apis/ml/saved_objects/index.ts +++ b/x-pack/test/api_integration/apis/ml/saved_objects/index.ts @@ -21,5 +21,6 @@ export default function ({ loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./update_jobs_spaces')); loadTestFile(require.resolve('./update_trained_model_spaces')); loadTestFile(require.resolve('./remove_from_current_space')); + loadTestFile(require.resolve('./can_sync_to_all_spaces')); }); } diff --git a/x-pack/test/api_integration/apis/ml/saved_objects/sync_trained_models.ts b/x-pack/test/api_integration/apis/ml/saved_objects/sync_trained_models.ts index 33c5da4d2e01c..7b5956de227b6 100644 --- a/x-pack/test/api_integration/apis/ml/saved_objects/sync_trained_models.ts +++ b/x-pack/test/api_integration/apis/ml/saved_objects/sync_trained_models.ts @@ -187,7 +187,7 @@ export default ({ getService }: FtrProviderContext) => { const model1 = getTestModel(modelIdSpace1, 'classification', dfaJobId1); await ml.api.createTrainedModelES(model1.model_id, model1.body); - // create trained model not linked to job, it should have the current space + // create trained model not linked to job, it should have * space after sync const model2 = getTestModel(modelIdSpace2, 'classification'); await ml.api.createTrainedModelES(model2.model_id, model2.body); @@ -199,7 +199,7 @@ export default ({ getService }: FtrProviderContext) => { await runSyncRequest(USER.ML_POWERUSER_ALL_SPACES, 200); await ml.api.assertTrainedModelSpaces(modelIdSpace1, [idSpace1, idSpace2]); - await ml.api.assertTrainedModelSpaces(modelIdSpace2, [idSpace1]); + await ml.api.assertTrainedModelSpaces(modelIdSpace2, ['*']); }); }); }; diff --git a/x-pack/test/api_integration/apis/security/privileges.ts b/x-pack/test/api_integration/apis/security/privileges.ts index bb00c34bc5808..015dbb27b6455 100644 --- a/x-pack/test/api_integration/apis/security/privileges.ts +++ b/x-pack/test/api_integration/apis/security/privileges.ts @@ -75,7 +75,7 @@ export default function ({ getService }: FtrProviderContext) { 'settings_read', ], fleet: ['all', 'read', 'minimal_all', 'minimal_read'], - actions: ['all', 'read', 'minimal_all', 'minimal_read'], + actions: ['all', 'read', 'minimal_all', 'minimal_read', 'endpoint_security_execute'], stackAlerts: ['all', 'read', 'minimal_all', 'minimal_read'], ml: ['all', 'read', 'minimal_all', 'minimal_read'], siem: [ diff --git a/x-pack/test/api_integration/apis/security/privileges_basic.ts b/x-pack/test/api_integration/apis/security/privileges_basic.ts index a7b8ee3fd2091..6b4f4b505e3ba 100644 --- a/x-pack/test/api_integration/apis/security/privileges_basic.ts +++ b/x-pack/test/api_integration/apis/security/privileges_basic.ts @@ -164,7 +164,7 @@ export default function ({ getService }: FtrProviderContext) { 'settings_read', ], fleet: ['all', 'read', 'minimal_all', 'minimal_read'], - actions: ['all', 'read', 'minimal_all', 'minimal_read'], + actions: ['all', 'read', 'minimal_all', 'minimal_read', 'endpoint_security_execute'], stackAlerts: ['all', 'read', 'minimal_all', 'minimal_read'], ml: ['all', 'read', 'minimal_all', 'minimal_read'], siem: [ diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/service_groups/service_group_count/service_group_count.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/service_groups/service_group_count/service_group_count.spec.ts index 08816f01d0f2b..d70d6ba0aedca 100644 --- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/service_groups/service_group_count/service_group_count.spec.ts +++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/apm/service_groups/service_group_count/service_group_count.spec.ts @@ -27,6 +27,16 @@ export default function ApiTest({ getService }: DeploymentAgnosticFtrProviderCon const start = Date.now() - 24 * 60 * 60 * 1000; const end = Date.now(); + const cleanUpAlerts = ({ roleAuthc, ruleId }: { roleAuthc: RoleCredentials; ruleId: string }) => { + return alertingApi.cleanUpAlerts({ + roleAuthc, + ruleId, + alertIndexName: APM_ALERTS_INDEX, + connectorIndexName: APM_ACTION_VARIABLE_INDEX, + consumer: 'apm', + }); + }; + describe('Service group counts', () => { let synthbeansServiceGroupId: string; let opbeansServiceGroupId: string; @@ -73,6 +83,7 @@ export default function ApiTest({ getService }: DeploymentAgnosticFtrProviderCon before(async () => { roleAuthc = await samlAuth.createM2mApiKeyWithRoleScope('admin'); + await cleanUpAlerts({ roleAuthc, ruleId }); const createdRule = await alertingApi.createRule({ name: 'Latency threshold | synth-go', params: { @@ -94,13 +105,7 @@ export default function ApiTest({ getService }: DeploymentAgnosticFtrProviderCon }); after(async () => { - await alertingApi.cleanUpAlerts({ - roleAuthc, - ruleId, - alertIndexName: APM_ALERTS_INDEX, - connectorIndexName: APM_ACTION_VARIABLE_INDEX, - consumer: 'apm', - }); + await cleanUpAlerts({ roleAuthc, ruleId }); await samlAuth.invalidateM2mApiKeyWithRoleScope(roleAuthc); }); diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/synthetics/get_monitor.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/synthetics/get_monitor.ts index 93018d604c269..4957ac0d2e688 100644 --- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/synthetics/get_monitor.ts +++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/synthetics/get_monitor.ts @@ -25,8 +25,7 @@ import { PrivateLocationTestService } from '../../../services/synthetics_private import { getFixtureJson } from './helpers/get_fixture_json'; export default function ({ getService }: DeploymentAgnosticFtrProviderContext) { - // Failing: See https://github.com/elastic/kibana/issues/204158 - describe.skip('getSyntheticsMonitors', function () { + describe('getSyntheticsMonitors', function () { const supertest = getService('supertestWithoutAuth'); const kibanaServer = getService('kibanaServer'); const retry = getService('retry'); @@ -80,8 +79,7 @@ export default function ({ getService }: DeploymentAgnosticFtrProviderContext) { monitors = _monitors; }); - // FLAKY: https://github.com/elastic/kibana/issues/204069 - describe.skip('get many monitors', () => { + describe('get many monitors', () => { it('without params', async () => { const uuid = uuidv4(); const [mon1, mon2] = await Promise.all( diff --git a/x-pack/test/cloud_security_posture_functional/page_objects/expanded_flyout.ts b/x-pack/test/cloud_security_posture_functional/page_objects/expanded_flyout_graph.ts similarity index 93% rename from x-pack/test/cloud_security_posture_functional/page_objects/expanded_flyout.ts rename to x-pack/test/cloud_security_posture_functional/page_objects/expanded_flyout_graph.ts index 1bbd2c5091d64..35d5dad387233 100644 --- a/x-pack/test/cloud_security_posture_functional/page_objects/expanded_flyout.ts +++ b/x-pack/test/cloud_security_posture_functional/page_objects/expanded_flyout_graph.ts @@ -19,9 +19,10 @@ const GRAPH_NODE_POPOVER_SHOW_ACTIONS_BY_TEST_ID = `${GRAPH_INVESTIGATION_TEST_I const GRAPH_NODE_POPOVER_SHOW_ACTIONS_ON_TEST_ID = `${GRAPH_INVESTIGATION_TEST_ID}ShowActionsOnEntity`; const GRAPH_LABEL_EXPAND_POPOVER_TEST_ID = `${GRAPH_INVESTIGATION_TEST_ID}GraphLabelExpandPopover`; const GRAPH_LABEL_EXPAND_POPOVER_SHOW_EVENTS_WITH_THIS_ACTION_ITEM_ID = `${GRAPH_INVESTIGATION_TEST_ID}ShowEventsWithThisAction`; +const GRAPH_ACTIONS_INVESTIGATE_IN_TIMELINE_ID = `${GRAPH_INVESTIGATION_TEST_ID}InvestigateInTimeline`; type Filter = Parameters[0]; -export class ExpandedFlyout extends FtrService { +export class ExpandedFlyoutGraph extends FtrService { private readonly pageObjects = this.ctx.getPageObjects(['common', 'header']); private readonly testSubjects = this.ctx.getService('testSubjects'); private readonly filterBar = this.ctx.getService('filterBar'); @@ -120,4 +121,9 @@ export class ExpandedFlyout extends FtrService { await this.testSubjects.clickWhenNotDisabled('saveFilter'); await this.pageObjects.header.waitUntilLoadingHasFinished(); } + + async clickOnInvestigateInTimelineButton(): Promise { + await this.testSubjects.click(GRAPH_ACTIONS_INVESTIGATE_IN_TIMELINE_ID); + await this.pageObjects.header.waitUntilLoadingHasFinished(); + } } diff --git a/x-pack/test/cloud_security_posture_functional/page_objects/index.ts b/x-pack/test/cloud_security_posture_functional/page_objects/index.ts index fdc904e31aac0..4cb6d0c60ba22 100644 --- a/x-pack/test/cloud_security_posture_functional/page_objects/index.ts +++ b/x-pack/test/cloud_security_posture_functional/page_objects/index.ts @@ -15,12 +15,14 @@ import { CspSecurityCommonProvider } from './security_common'; import { RulePagePageProvider } from './rule_page'; import { AlertsPageObject } from './alerts_page'; import { NetworkEventsPageObject } from './network_events_page'; -import { ExpandedFlyout } from './expanded_flyout'; +import { ExpandedFlyoutGraph } from './expanded_flyout_graph'; +import { TimelinePageObject } from './timeline_page'; export const cloudSecurityPosturePageObjects = { alerts: AlertsPageObject, networkEvents: NetworkEventsPageObject, - expandedFlyout: ExpandedFlyout, + expandedFlyoutGraph: ExpandedFlyoutGraph, + timeline: TimelinePageObject, findings: FindingsPageProvider, cloudPostureDashboard: CspDashboardPageProvider, cisAddIntegration: AddCisIntegrationFormPageProvider, diff --git a/x-pack/test/cloud_security_posture_functional/page_objects/timeline_page.ts b/x-pack/test/cloud_security_posture_functional/page_objects/timeline_page.ts new file mode 100644 index 0000000000000..84b5f0717f693 --- /dev/null +++ b/x-pack/test/cloud_security_posture_functional/page_objects/timeline_page.ts @@ -0,0 +1,103 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { subj as testSubjSelector } from '@kbn/test-subj-selector'; +import { FtrService } from '../../functional/ftr_provider_context'; + +const TIMELINE_CLOSE_BUTTON_TEST_SUBJ = 'timeline-modal-header-close-button'; +const TIMELINE_MODAL_PAGE_TEST_SUBJ = 'timeline'; +const TIMELINE_TAB_QUERY_TEST_SUBJ = 'timeline-tab-content-query'; + +const TIMELINE_CSS_SELECTOR = Object.freeze({ + /** The refresh button on the timeline view (top of view, next to the date selector) */ + refreshButton: `${testSubjSelector(TIMELINE_TAB_QUERY_TEST_SUBJ)} ${testSubjSelector( + 'superDatePickerApplyTimeButton' + )} `, +}); + +export class TimelinePageObject extends FtrService { + private readonly pageObjects = this.ctx.getPageObjects(['common', 'header']); + private readonly testSubjects = this.ctx.getService('testSubjects'); + private readonly retry = this.ctx.getService('retry'); + private readonly defaultTimeoutMs = this.ctx.getService('config').get('timeouts.waitFor'); + private readonly logger = this.ctx.getService('log'); + + async closeTimeline(): Promise { + if (await this.testSubjects.exists(TIMELINE_CLOSE_BUTTON_TEST_SUBJ)) { + await this.testSubjects.click(TIMELINE_CLOSE_BUTTON_TEST_SUBJ); + await this.testSubjects.waitForHidden(TIMELINE_MODAL_PAGE_TEST_SUBJ); + } + } + + async ensureTimelineIsOpen(): Promise { + await this.testSubjects.existOrFail(TIMELINE_MODAL_PAGE_TEST_SUBJ); + } + + /** + * From a visible timeline, clicks the "view details" for an event on the list + * @param index + */ + async showEventDetails(index: number = 0): Promise { + await this.ensureTimelineIsOpen(); + await this.testSubjects.findService.clickByCssSelector( + `${testSubjSelector('event')}:nth-child(${index + 1}) ${testSubjSelector('expand-event')}` + ); + await this.testSubjects.existOrFail('eventDetails'); + } + + /** + * Clicks the Refresh button at the top of the timeline page and waits for the refresh to complete + */ + async clickRefresh(): Promise { + await this.ensureTimelineIsOpen(); + await this.pageObjects.header.waitUntilLoadingHasFinished(); + await ( + await this.testSubjects.findService.byCssSelector(TIMELINE_CSS_SELECTOR.refreshButton) + ).isEnabled(); + await this.testSubjects.findService.clickByCssSelector(TIMELINE_CSS_SELECTOR.refreshButton); + await this.retry.waitFor( + 'Timeline refresh button to be enabled', + async (): Promise => { + return ( + await this.testSubjects.findService.byCssSelector(TIMELINE_CSS_SELECTOR.refreshButton) + ).isEnabled(); + } + ); + } + + /** + * Check to see if the timeline has events in the list + */ + async hasEvents(): Promise { + const eventRows = await this.testSubjects.findService.allByCssSelector( + `${testSubjSelector(TIMELINE_MODAL_PAGE_TEST_SUBJ)} [role="row"]` + ); + + return eventRows.length > 0; + } + + /** + * Waits for events to be displayed in the timeline. It will click on the "Refresh" button to trigger a data fetch + * @param timeoutMs + */ + async waitForEvents(timeoutMs?: number): Promise { + if (await this.hasEvents()) { + this.logger.info(`Timeline already has events displayed`); + return; + } + + await this.retry.waitForWithTimeout( + 'waiting for events to show up on timeline', + timeoutMs ?? this.defaultTimeoutMs, + async (): Promise => { + await this.clickRefresh(); + + return this.hasEvents(); + } + ); + } +} diff --git a/x-pack/test/cloud_security_posture_functional/pages/alerts_flyout.ts b/x-pack/test/cloud_security_posture_functional/pages/alerts_flyout.ts index 60dd415379c39..c8c1e30426fe8 100644 --- a/x-pack/test/cloud_security_posture_functional/pages/alerts_flyout.ts +++ b/x-pack/test/cloud_security_posture_functional/pages/alerts_flyout.ts @@ -14,9 +14,16 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const logger = getService('log'); const supertest = getService('supertest'); const esArchiver = getService('esArchiver'); - const pageObjects = getPageObjects(['common', 'header', 'alerts', 'expandedFlyout']); + const pageObjects = getPageObjects([ + 'common', + 'header', + 'alerts', + 'expandedFlyoutGraph', + 'timeline', + ]); const alertsPage = pageObjects.alerts; - const expandedFlyout = pageObjects.expandedFlyout; + const expandedFlyoutGraph = pageObjects.expandedFlyoutGraph; + const timelinePage = pageObjects.timeline; describe('Security Alerts Page - Graph visualization', function () { this.tags(['cloud_security_posture_graph_viz']); @@ -59,61 +66,66 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await alertsPage.flyout.assertGraphPreviewVisible(); await alertsPage.flyout.assertGraphNodesNumber(3); - await expandedFlyout.expandGraph(); - await expandedFlyout.waitGraphIsLoaded(); - await expandedFlyout.assertGraphNodesNumber(3); + await expandedFlyoutGraph.expandGraph(); + await expandedFlyoutGraph.waitGraphIsLoaded(); + await expandedFlyoutGraph.assertGraphNodesNumber(3); // Show actions by entity - await expandedFlyout.showActionsByEntity('admin@example.com'); - await expandedFlyout.expectFilterTextEquals(0, 'actor.entity.id: admin@example.com'); - await expandedFlyout.expectFilterPreviewEquals(0, 'actor.entity.id: admin@example.com'); + await expandedFlyoutGraph.showActionsByEntity('admin@example.com'); + await expandedFlyoutGraph.expectFilterTextEquals(0, 'actor.entity.id: admin@example.com'); + await expandedFlyoutGraph.expectFilterPreviewEquals(0, 'actor.entity.id: admin@example.com'); // Show actions on entity - await expandedFlyout.showActionsOnEntity('admin@example.com'); - await expandedFlyout.expectFilterTextEquals( + await expandedFlyoutGraph.showActionsOnEntity('admin@example.com'); + await expandedFlyoutGraph.expectFilterTextEquals( 0, 'actor.entity.id: admin@example.com OR target.entity.id: admin@example.com' ); - await expandedFlyout.expectFilterPreviewEquals( + await expandedFlyoutGraph.expectFilterPreviewEquals( 0, 'actor.entity.id: admin@example.com OR target.entity.id: admin@example.com' ); // Explore related entities - await expandedFlyout.exploreRelatedEntities('admin@example.com'); - await expandedFlyout.expectFilterTextEquals( + await expandedFlyoutGraph.exploreRelatedEntities('admin@example.com'); + await expandedFlyoutGraph.expectFilterTextEquals( 0, 'actor.entity.id: admin@example.com OR target.entity.id: admin@example.com OR related.entity: admin@example.com' ); - await expandedFlyout.expectFilterPreviewEquals( + await expandedFlyoutGraph.expectFilterPreviewEquals( 0, 'actor.entity.id: admin@example.com OR target.entity.id: admin@example.com OR related.entity: admin@example.com' ); // Show events with the same action - await expandedFlyout.showEventsOfSameAction( + await expandedFlyoutGraph.showEventsOfSameAction( 'a(admin@example.com)-b(projects/your-project-id/roles/customRole)label(google.iam.admin.v1.CreateRole)outcome(success)' ); - await expandedFlyout.expectFilterTextEquals( + await expandedFlyoutGraph.expectFilterTextEquals( 0, 'actor.entity.id: admin@example.com OR target.entity.id: admin@example.com OR related.entity: admin@example.com OR event.action: google.iam.admin.v1.CreateRole' ); - await expandedFlyout.expectFilterPreviewEquals( + await expandedFlyoutGraph.expectFilterPreviewEquals( 0, 'actor.entity.id: admin@example.com OR target.entity.id: admin@example.com OR related.entity: admin@example.com OR event.action: google.iam.admin.v1.CreateRole' ); // Clear filters - await expandedFlyout.clearAllFilters(); + await expandedFlyoutGraph.clearAllFilters(); // Add custom filter - await expandedFlyout.addFilter({ + await expandedFlyoutGraph.addFilter({ field: 'actor.entity.id', operation: 'is', value: 'admin2@example.com', }); await pageObjects.header.waitUntilLoadingHasFinished(); - await expandedFlyout.assertGraphNodesNumber(5); + await expandedFlyoutGraph.assertGraphNodesNumber(5); + + // Open timeline + await expandedFlyoutGraph.clickOnInvestigateInTimelineButton(); + await timelinePage.ensureTimelineIsOpen(); + await timelinePage.waitForEvents(); }); }); } diff --git a/x-pack/test/cloud_security_posture_functional/pages/events_flyout.ts b/x-pack/test/cloud_security_posture_functional/pages/events_flyout.ts index f3449dd8df40f..13be9646e6223 100644 --- a/x-pack/test/cloud_security_posture_functional/pages/events_flyout.ts +++ b/x-pack/test/cloud_security_posture_functional/pages/events_flyout.ts @@ -14,9 +14,16 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const logger = getService('log'); const supertest = getService('supertest'); const esArchiver = getService('esArchiver'); - const pageObjects = getPageObjects(['common', 'header', 'networkEvents', 'expandedFlyout']); + const pageObjects = getPageObjects([ + 'common', + 'header', + 'networkEvents', + 'expandedFlyoutGraph', + 'timeline', + ]); const networkEventsPage = pageObjects.networkEvents; - const expandedFlyout = pageObjects.expandedFlyout; + const expandedFlyoutGraph = pageObjects.expandedFlyoutGraph; + const timelinePage = pageObjects.timeline; describe('Security Network Page - Graph visualization', function () { this.tags(['cloud_security_posture_graph_viz']); @@ -51,61 +58,66 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await networkEventsPage.flyout.assertGraphPreviewVisible(); await networkEventsPage.flyout.assertGraphNodesNumber(3); - await expandedFlyout.expandGraph(); - await expandedFlyout.waitGraphIsLoaded(); - await expandedFlyout.assertGraphNodesNumber(3); + await expandedFlyoutGraph.expandGraph(); + await expandedFlyoutGraph.waitGraphIsLoaded(); + await expandedFlyoutGraph.assertGraphNodesNumber(3); // Show actions by entity - await expandedFlyout.showActionsByEntity('admin@example.com'); - await expandedFlyout.expectFilterTextEquals(0, 'actor.entity.id: admin@example.com'); - await expandedFlyout.expectFilterPreviewEquals(0, 'actor.entity.id: admin@example.com'); + await expandedFlyoutGraph.showActionsByEntity('admin@example.com'); + await expandedFlyoutGraph.expectFilterTextEquals(0, 'actor.entity.id: admin@example.com'); + await expandedFlyoutGraph.expectFilterPreviewEquals(0, 'actor.entity.id: admin@example.com'); // Show actions on entity - await expandedFlyout.showActionsOnEntity('admin@example.com'); - await expandedFlyout.expectFilterTextEquals( + await expandedFlyoutGraph.showActionsOnEntity('admin@example.com'); + await expandedFlyoutGraph.expectFilterTextEquals( 0, 'actor.entity.id: admin@example.com OR target.entity.id: admin@example.com' ); - await expandedFlyout.expectFilterPreviewEquals( + await expandedFlyoutGraph.expectFilterPreviewEquals( 0, 'actor.entity.id: admin@example.com OR target.entity.id: admin@example.com' ); // Explore related entities - await expandedFlyout.exploreRelatedEntities('admin@example.com'); - await expandedFlyout.expectFilterTextEquals( + await expandedFlyoutGraph.exploreRelatedEntities('admin@example.com'); + await expandedFlyoutGraph.expectFilterTextEquals( 0, 'actor.entity.id: admin@example.com OR target.entity.id: admin@example.com OR related.entity: admin@example.com' ); - await expandedFlyout.expectFilterPreviewEquals( + await expandedFlyoutGraph.expectFilterPreviewEquals( 0, 'actor.entity.id: admin@example.com OR target.entity.id: admin@example.com OR related.entity: admin@example.com' ); // Show events with the same action - await expandedFlyout.showEventsOfSameAction( + await expandedFlyoutGraph.showEventsOfSameAction( 'a(admin@example.com)-b(projects/your-project-id/roles/customRole)label(google.iam.admin.v1.CreateRole)outcome(success)' ); - await expandedFlyout.expectFilterTextEquals( + await expandedFlyoutGraph.expectFilterTextEquals( 0, 'actor.entity.id: admin@example.com OR target.entity.id: admin@example.com OR related.entity: admin@example.com OR event.action: google.iam.admin.v1.CreateRole' ); - await expandedFlyout.expectFilterPreviewEquals( + await expandedFlyoutGraph.expectFilterPreviewEquals( 0, 'actor.entity.id: admin@example.com OR target.entity.id: admin@example.com OR related.entity: admin@example.com OR event.action: google.iam.admin.v1.CreateRole' ); // Clear filters - await expandedFlyout.clearAllFilters(); + await expandedFlyoutGraph.clearAllFilters(); // Add custom filter - await expandedFlyout.addFilter({ + await expandedFlyoutGraph.addFilter({ field: 'actor.entity.id', operation: 'is', value: 'admin2@example.com', }); await pageObjects.header.waitUntilLoadingHasFinished(); - await expandedFlyout.assertGraphNodesNumber(5); + await expandedFlyoutGraph.assertGraphNodesNumber(5); + + // Open timeline + await expandedFlyoutGraph.clickOnInvestigateInTimelineButton(); + await timelinePage.ensureTimelineIsOpen(); + await timelinePage.waitForEvents(); }); }); } diff --git a/x-pack/test/fleet_api_integration/config.base.ts b/x-pack/test/fleet_api_integration/config.base.ts index 1be78bcdc04df..852b0be4f82ac 100644 --- a/x-pack/test/fleet_api_integration/config.base.ts +++ b/x-pack/test/fleet_api_integration/config.base.ts @@ -15,10 +15,11 @@ import { const getFullPath = (relativePath: string) => path.join(path.dirname(__filename), relativePath); // Docker image to use for Fleet API integration tests. -// This hash comes from the latest successful build of the Production Distribution of the Package Registry, for -// example: https://internal-ci.elastic.co/blue/organizations/jenkins/package_storage%2Findexing-job/detail/main/1884/pipeline/147. -// It should be updated any time there is a new package published. -export const dockerImage = 'docker.elastic.co/package-registry/distribution:lite'; +// This image comes from the latest successful build of https://buildkite.com/elastic/kibana-package-registry-promote +// which is promoted after acceptance tests succeed against docker.elastic.co/package-registry/distribution:lite +export const dockerImage = + process.env.FLEET_PACKAGE_REGISTRY_DOCKER_IMAGE || + 'docker.elastic.co/kibana-ci/package-registry-distribution:lite'; export const BUNDLED_PACKAGE_DIR = '/tmp/fleet_bundled_packages'; diff --git a/x-pack/test/functional/apps/ml/stack_management_jobs/synchronize.ts b/x-pack/test/functional/apps/ml/stack_management_jobs/synchronize.ts index 42a462d259812..e8c255212251b 100644 --- a/x-pack/test/functional/apps/ml/stack_management_jobs/synchronize.ts +++ b/x-pack/test/functional/apps/ml/stack_management_jobs/synchronize.ts @@ -63,6 +63,12 @@ export default function ({ getService }: FtrProviderContext) { await ml.stackManagementJobs.assertSyncFlyoutSyncButtonEnabled(false); }); + it('should not have objects to sync', async () => { + await ml.navigation.navigateToMl(); + await ml.navigation.navigateToAnomalyDetection(); + await ml.overviewPage.assertJobSyncRequiredWarningNotExists(); + }); + it('should prepare test data', async () => { // create jobs @@ -102,8 +108,8 @@ export default function ({ getService }: FtrProviderContext) { }); it('should have objects to sync', async () => { - // sync required warning is displayed - await ml.navigation.navigateToMl(); + await ml.jobTable.refreshJobList(); + await ml.overviewPage.assertJobSyncRequiredWarningExists(); // object counts in sync flyout are all 1, sync button is enabled diff --git a/x-pack/test/functional/config.base.js b/x-pack/test/functional/config.base.js index b3d2ddc1e2f78..24a4a63d53dda 100644 --- a/x-pack/test/functional/config.base.js +++ b/x-pack/test/functional/config.base.js @@ -11,10 +11,11 @@ import { services } from './services'; import { pageObjects } from './page_objects'; // Docker image to use for Fleet API integration tests. -// This hash comes from the latest successful build of the Production Distribution of the Package Registry, for -// example: https://internal-ci.elastic.co/blue/organizations/jenkins/package_storage%2Findexing-job/detail/main/1884/pipeline/147. -// It should be updated any time there is a new package published. -export const dockerImage = 'docker.elastic.co/package-registry/distribution:lite'; +// This image comes from the latest successful build of https://buildkite.com/elastic/kibana-package-registry-promote +// which is promoted after acceptance tests succeed against docker.elastic.co/package-registry/distribution:lite +export const dockerImage = + process.env.FLEET_PACKAGE_REGISTRY_DOCKER_IMAGE || + 'docker.elastic.co/kibana-ci/package-registry-distribution:lite'; // the default export of config files must be a config provider // that returns an object with the projects config values diff --git a/x-pack/test/functional/services/monitoring/logstash_pipeline_viewer.js b/x-pack/test/functional/services/monitoring/logstash_pipeline_viewer.js index c7ff4f79f3e36..5158691b3ce7e 100644 --- a/x-pack/test/functional/services/monitoring/logstash_pipeline_viewer.js +++ b/x-pack/test/functional/services/monitoring/logstash_pipeline_viewer.js @@ -10,7 +10,7 @@ export function MonitoringLogstashPipelineViewerProvider({ getService }) { const retry = getService('retry'); const find = getService('find'); - const PIPELINE_VIEWER_SELECTOR = '.monPipelineViewer'; + const PIPELINE_VIEWER_SELECTOR = '[data-test-subj*="pipeline-viewer"]'; const SUBJ_PIPELINE_SECTION_PREFIX = 'pipelineViewerSection_'; const PIPELINE_SECTION_ITEM_CLS = 'monPipelineViewer__listItem'; diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/indicator_match_rule.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/indicator_match_rule.cy.ts index 8d44be4dc3aaf..deccc1a205f61 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/indicator_match_rule.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/indicator_match_rule.cy.ts @@ -93,6 +93,7 @@ import { getIndicatorOrButton, selectIndicatorMatchType, waitForAlertsToPopulate, + getThreatMatchQueryInvalidationText, } from '../../../../tasks/create_new_rule'; import { SCHEDULE_INTERVAL_AMOUNT_INPUT, @@ -195,7 +196,7 @@ describe('indicator match', { tags: ['@ess', '@serverless', '@skipInServerlessMK }); }); - describe('custom indicator query input', () => { + describe('indicator query input', () => { beforeEach(() => { visit(CREATE_RULE_URL); selectIndicatorMatchType(); @@ -207,7 +208,7 @@ describe('indicator match', { tags: ['@ess', '@serverless', '@skipInServerlessMK it('Shows invalidation text if text is removed', () => { getCustomIndicatorQueryInput().type('{selectall}{del}'); - getCustomQueryInvalidationText().should('exist'); + getThreatMatchQueryInvalidationText().should('exist'); }); }); diff --git a/x-pack/test/security_solution_cypress/cypress/screens/create_new_rule.ts b/x-pack/test/security_solution_cypress/cypress/screens/create_new_rule.ts index 483cbf06b6256..ad66955a6e244 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/create_new_rule.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/create_new_rule.ts @@ -73,19 +73,19 @@ export const QUERY_BAR_ADD_FILTER = '[data-test-subj="detectionEngineStepDefineRuleQueryBar"] [data-test-subj="addFilter"]'; export const THREAT_MAPPING_COMBO_BOX_INPUT = - '[data-test-subj="threatMatchInput"] [data-test-subj="fieldAutocompleteComboBox"]'; + '[data-test-subj="ruleThreatMatchMappingField"] [data-test-subj="fieldAutocompleteComboBox"]'; export const THREAT_MATCH_CUSTOM_QUERY_INPUT = '[data-test-subj="detectionEngineStepDefineRuleQueryBar"] [data-test-subj="queryInput"]'; export const THREAT_MATCH_QUERY_INPUT = - '[data-test-subj="detectionEngineStepDefineThreatRuleQueryBar"] [data-test-subj="queryInput"]'; + '[data-test-subj="ruleThreatMatchQueryField"] [data-test-subj="queryInput"]'; export const CUSTOM_INDEX_PATTERN_INPUT = '[data-test-subj="detectionEngineStepDefineRuleIndices"] [data-test-subj="comboBoxInput"]'; export const THREAT_MATCH_INDICATOR_INDICATOR_INDEX = - '[data-test-subj="detectionEngineStepDefineRuleThreatMatchIndices"] [data-test-subj="comboBoxInput"]'; + '[data-test-subj="ruleThreatMatchIndicesField"] [data-test-subj="comboBoxInput"]'; export const THREAT_MATCH_AND_BUTTON = '[data-test-subj="andButton"]'; @@ -104,6 +104,8 @@ export const AT_LEAST_ONE_INDEX_PATTERN = 'A minimum of one index pattern is req export const CUSTOM_QUERY_REQUIRED = 'A custom query is required.'; +export const THREAT_MATCH_QUERY_REQUIRED = 'An indicator index query is required.'; + export const DATA_VIEW_COMBO_BOX = '[data-test-subj="pick-rule-data-source"] [data-test-subj="comboBoxInput"]'; diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/create_new_rule.ts b/x-pack/test/security_solution_cypress/cypress/tasks/create_new_rule.ts index 5890dba3a9e68..d7fbb5e13255e 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/create_new_rule.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/create_new_rule.ts @@ -134,6 +134,7 @@ import { PREVIEW_LOGGED_REQUESTS_CHECKBOX, ALERT_SUPPRESSION_DURATION_VALUE_INPUT, ALERT_SUPPRESSION_DURATION_UNIT_INPUT, + THREAT_MATCH_QUERY_REQUIRED, } from '../screens/create_new_rule'; import { INDEX_SELECTOR, @@ -784,6 +785,9 @@ export const getCustomIndicatorQueryInput = () => cy.get(THREAT_MATCH_QUERY_INPU /** Returns custom query required content */ export const getCustomQueryInvalidationText = () => cy.contains(CUSTOM_QUERY_REQUIRED); +/** Returns threat match query required content */ +export const getThreatMatchQueryInvalidationText = () => cy.contains(THREAT_MATCH_QUERY_REQUIRED); + /** * Fills in the define indicator match rules and then presses the continue button * @param rule The rule to use to fill in everything diff --git a/x-pack/test/ui_capabilities/security_and_spaces/tests/catalogue.ts b/x-pack/test/ui_capabilities/security_and_spaces/tests/catalogue.ts index 71324846b2160..4e9401cc41481 100644 --- a/x-pack/test/ui_capabilities/security_and_spaces/tests/catalogue.ts +++ b/x-pack/test/ui_capabilities/security_and_spaces/tests/catalogue.ts @@ -89,6 +89,7 @@ export default function catalogueTests({ getService }: FtrProviderContext) { 'enterpriseSearchElasticsearch', 'searchPlayground', 'searchInferenceEndpoints', + 'searchSynonyms', 'appSearch', 'observabilityAIAssistant', 'workplaceSearch', diff --git a/x-pack/test/ui_capabilities/security_and_spaces/tests/nav_links.ts b/x-pack/test/ui_capabilities/security_and_spaces/tests/nav_links.ts index 75408726ab8c9..a75dd62e6c6bc 100644 --- a/x-pack/test/ui_capabilities/security_and_spaces/tests/nav_links.ts +++ b/x-pack/test/ui_capabilities/security_and_spaces/tests/nav_links.ts @@ -63,6 +63,7 @@ export default function navLinksTests({ getService }: FtrProviderContext) { 'enterpriseSearchAnalytics', 'searchPlayground', 'searchInferenceEndpoints', + 'searchSynonyms', 'guidedOnboardingFeature', 'securitySolutionAssistant', 'securitySolutionAttackDiscovery', diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/knowledge_base/knowledge_base_status.spec.ts b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/knowledge_base/knowledge_base_status.spec.ts index b51587bc7bd68..11c039a40411b 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/knowledge_base/knowledge_base_status.spec.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/knowledge_base/knowledge_base_status.spec.ts @@ -24,6 +24,9 @@ export default function ApiTest({ getService }: FtrProviderContext) { const observabilityAIAssistantAPIClient = getService('observabilityAIAssistantAPIClient'); describe('/internal/observability_ai_assistant/kb/status', function () { + // Fails on MKI: https://github.com/elastic/kibana/issues/205677 + this.tags(['failsOnMKI']); + before(async () => { await createKnowledgeBaseModel(ml); await observabilityAIAssistantAPIClient diff --git a/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_summary.ts b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_summary.ts index ac4a2597f3d95..eb7f4aa5da310 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_summary.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_summary.ts @@ -48,7 +48,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ]); }; - describe('Dataset quality summary', () => { + // Failing: See https://github.com/elastic/kibana/issues/205545 + describe.skip('Dataset quality summary', () => { before(async () => { await synthtrace.index(getInitialTestLogs({ to, count: 4 })); await PageObjects.svlCommonPage.loginAsViewer(); diff --git a/x-pack/test_serverless/functional/test_suites/search/config.feature_flags.ts b/x-pack/test_serverless/functional/test_suites/search/config.feature_flags.ts index b7c818821d36c..d56bd086180d2 100644 --- a/x-pack/test_serverless/functional/test_suites/search/config.feature_flags.ts +++ b/x-pack/test_serverless/functional/test_suites/search/config.feature_flags.ts @@ -37,6 +37,9 @@ export default createTestConfig({ searchPlayground: { pathname: '/app/search_playground', }, + searchSynonyms: { + pathname: '/app/elasticsearch/search_synonyms', + }, elasticsearchStart: { pathname: '/app/elasticsearch/start', }, diff --git a/x-pack/test_serverless/shared/lib/security/kibana_roles/project_controller_security_roles.yml b/x-pack/test_serverless/shared/lib/security/kibana_roles/project_controller_security_roles.yml index 61d3378de4c68..8da8650a75fa3 100644 --- a/x-pack/test_serverless/shared/lib/security/kibana_roles/project_controller_security_roles.yml +++ b/x-pack/test_serverless/shared/lib/security/kibana_roles/project_controller_security_roles.yml @@ -305,6 +305,7 @@ t3_analyst: - feature_siem.actions_log_management_all # Response actions history - feature_siem.file_operations_all - feature_siem.scan_operations_all + - feature_siem.workflow_insights_all - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all - feature_securitySolutionAttackDiscovery.all @@ -433,6 +434,7 @@ rule_author: - feature_siem.host_isolation_exceptions_read - feature_siem.blocklist_all # Elastic Defend Policy Management - feature_siem.actions_log_management_read + - feature_siem.workflow_insights_all - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all - feature_securitySolutionAttackDiscovery.all @@ -509,6 +511,7 @@ soc_manager: - feature_siem.file_operations_all - feature_siem.execute_operations_all - feature_siem.scan_operations_all + - feature_siem.workflow_insights_all - feature_securitySolutionCases.all - feature_observabilityCases.all - feature_securitySolutionAssistant.all @@ -631,6 +634,7 @@ platform_engineer: - feature_siem.host_isolation_exceptions_all - feature_siem.blocklist_all # Elastic Defend Policy Management - feature_siem.actions_log_management_read + - feature_siem.workflow_insights_all - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all - feature_securitySolutionAttackDiscovery.all @@ -705,6 +709,7 @@ endpoint_operations_analyst: - feature_siem.file_operations_all - feature_siem.execute_operations_all # Execute - feature_siem.scan_operations_all + - feature_siem.workflow_insights_all - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all - feature_securitySolutionAttackDiscovery.all @@ -773,6 +778,7 @@ endpoint_policy_manager: - feature_siem.event_filters_all - feature_siem.host_isolation_exceptions_all - feature_siem.blocklist_all # Elastic Defend Policy Management + - feature_siem.workflow_insights_all - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all - feature_securitySolutionAttackDiscovery.all diff --git a/yarn.lock b/yarn.lock index a2c801f605f31..cd4006a47fdaa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -27,6 +27,42 @@ resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.4.0.tgz#728c484f4e10df03d5a3acd0d8adcbbebff8ad63" integrity sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ== +"@ai-sdk/provider-utils@2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@ai-sdk/provider-utils/-/provider-utils-2.0.4.tgz#e76ab8b592fb656013ada954cbbc81f41e3003a9" + integrity sha512-GMhcQCZbwM6RoZCri0MWeEWXRt/T+uCxsmHEsTwNvEH3GDjNzchfX25C8ftry2MeEOOn6KfqCLSKomcgK6RoOg== + dependencies: + "@ai-sdk/provider" "1.0.2" + eventsource-parser "^3.0.0" + nanoid "^3.3.8" + secure-json-parse "^2.7.0" + +"@ai-sdk/provider@1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@ai-sdk/provider/-/provider-1.0.2.tgz#1d3fa62f4d242868523549eb6cdefc2452b9bfde" + integrity sha512-YYtP6xWQyaAf5LiWLJ+ycGTOeBLWrED7LUrvc+SQIWhGaneylqbaGsyQL7VouQUeQ4JZ1qKYZuhmi3W56HADPA== + dependencies: + json-schema "^0.4.0" + +"@ai-sdk/react@1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@ai-sdk/react/-/react-1.0.6.tgz#8757e7bd21c6496e007d73f878bce103a483667a" + integrity sha512-8Hkserq0Ge6AEi7N4hlv2FkfglAGbkoAXEZ8YSp255c3PbnZz6+/5fppw+aROmZMOfNwallSRuy1i/iPa2rBpQ== + dependencies: + "@ai-sdk/provider-utils" "2.0.4" + "@ai-sdk/ui-utils" "1.0.5" + swr "^2.2.5" + throttleit "2.1.0" + +"@ai-sdk/ui-utils@1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@ai-sdk/ui-utils/-/ui-utils-1.0.5.tgz#096db17d070131851e5dc27dfe2131d658e00906" + integrity sha512-DGJSbDf+vJyWmFNexSPUsS1AAy7gtsmFmoSyNbNbJjwl9hRIf2dknfA1V0ahx6pg3NNklNYFm53L8Nphjovfvg== + dependencies: + "@ai-sdk/provider" "1.0.2" + "@ai-sdk/provider-utils" "2.0.4" + zod-to-json-schema "^3.23.5" + "@ampproject/remapping@^2.2.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" @@ -2286,18 +2322,18 @@ apache-arrow "^18.0.0" tslib "^2.4.0" -"@elastic/ems-client@8.5.3": - version "8.5.3" - resolved "https://registry.yarnpkg.com/@elastic/ems-client/-/ems-client-8.5.3.tgz#e36db4afff10d142e64f3a0e13cd98da38ab9cb3" - integrity sha512-3bCUpl1/hlK9ZlRsX6vG/GMqeV7wgDqTmqEdT34kObrYD4JhrRyOP3b1tgpV0QCI9vS76Rj6dFQXHqb9w75XFA== +"@elastic/ems-client@8.6.2": + version "8.6.2" + resolved "https://registry.yarnpkg.com/@elastic/ems-client/-/ems-client-8.6.2.tgz#cdca0a063756391705492f1d301a33a314464d8e" + integrity sha512-bhbR6BmrA5pNEDI/ais9V3612KPimx6NLacViOc1QpRw9oNGfQPRQVSOwd7IXzCn2eJKgBJoTWBgJGu6sjvZ4g== dependencies: - "@types/geojson" "^7946.0.14" - "@types/topojson-client" "^3.1.4" - "@types/topojson-specification" "^1.0.5" - chroma-js "^2.1.0" + "@types/geojson" "7946.0.15" + "@types/topojson-client" "3.1.5" + chroma-js "2.4.2" lodash "^4.17.21" lru-cache "^4.1.5" - semver "^7.6.2" + maplibre-gl "3.1.0" + semver "^7.6.3" topojson-client "^3.1.0" "@elastic/eslint-plugin-eui@0.0.2": @@ -7029,6 +7065,10 @@ version "0.0.0" uid "" +"@kbn/search-synonyms@link:x-pack/solutions/search/plugins/search_synonyms": + version "0.0.0" + uid "" + "@kbn/search-types@link:src/platform/packages/shared/kbn-search-types": version "0.0.0" uid "" @@ -7289,203 +7329,203 @@ version "0.0.0" uid "" -"@kbn/shared-ux-avatar-solution@link:packages/shared-ux/avatar/solution": +"@kbn/shared-ux-avatar-solution@link:src/platform/packages/shared/shared-ux/avatar/solution": version "0.0.0" uid "" -"@kbn/shared-ux-button-exit-full-screen@link:packages/shared-ux/button/exit_full_screen": +"@kbn/shared-ux-button-exit-full-screen@link:src/platform/packages/shared/shared-ux/button/exit_full_screen": version "0.0.0" uid "" -"@kbn/shared-ux-button-toolbar@link:packages/shared-ux/button_toolbar": +"@kbn/shared-ux-button-toolbar@link:src/platform/packages/shared/shared-ux/button_toolbar": version "0.0.0" uid "" -"@kbn/shared-ux-card-no-data-mocks@link:packages/shared-ux/card/no_data/mocks": +"@kbn/shared-ux-card-no-data-mocks@link:src/platform/packages/shared/shared-ux/card/no_data/mocks": version "0.0.0" uid "" -"@kbn/shared-ux-card-no-data-types@link:packages/shared-ux/card/no_data/types": +"@kbn/shared-ux-card-no-data-types@link:src/platform/packages/shared/shared-ux/card/no_data/types": version "0.0.0" uid "" -"@kbn/shared-ux-card-no-data@link:packages/shared-ux/card/no_data/impl": +"@kbn/shared-ux-card-no-data@link:src/platform/packages/shared/shared-ux/card/no_data/impl": version "0.0.0" uid "" -"@kbn/shared-ux-chrome-navigation@link:packages/shared-ux/chrome/navigation": +"@kbn/shared-ux-chrome-navigation@link:src/platform/packages/shared/shared-ux/chrome/navigation": version "0.0.0" uid "" -"@kbn/shared-ux-error-boundary@link:packages/shared-ux/error_boundary": +"@kbn/shared-ux-error-boundary@link:src/platform/packages/shared/shared-ux/error_boundary": version "0.0.0" uid "" -"@kbn/shared-ux-file-context@link:packages/shared-ux/file/context": +"@kbn/shared-ux-file-context@link:src/platform/packages/shared/shared-ux/file/context": version "0.0.0" uid "" -"@kbn/shared-ux-file-image-mocks@link:packages/shared-ux/file/image/mocks": +"@kbn/shared-ux-file-image-mocks@link:src/platform/packages/shared/shared-ux/file/image/mocks": version "0.0.0" uid "" -"@kbn/shared-ux-file-image@link:packages/shared-ux/file/image/impl": +"@kbn/shared-ux-file-image@link:src/platform/packages/shared/shared-ux/file/image/impl": version "0.0.0" uid "" -"@kbn/shared-ux-file-mocks@link:packages/shared-ux/file/mocks": +"@kbn/shared-ux-file-mocks@link:src/platform/packages/shared/shared-ux/file/mocks": version "0.0.0" uid "" -"@kbn/shared-ux-file-picker@link:packages/shared-ux/file/file_picker/impl": +"@kbn/shared-ux-file-picker@link:src/platform/packages/shared/shared-ux/file/file_picker/impl": version "0.0.0" uid "" -"@kbn/shared-ux-file-types@link:packages/shared-ux/file/types": +"@kbn/shared-ux-file-types@link:src/platform/packages/shared/shared-ux/file/types": version "0.0.0" uid "" -"@kbn/shared-ux-file-upload@link:packages/shared-ux/file/file_upload/impl": +"@kbn/shared-ux-file-upload@link:src/platform/packages/shared/shared-ux/file/file_upload/impl": version "0.0.0" uid "" -"@kbn/shared-ux-file-util@link:packages/shared-ux/file/util": +"@kbn/shared-ux-file-util@link:src/platform/packages/shared/shared-ux/file/util": version "0.0.0" uid "" -"@kbn/shared-ux-link-redirect-app-mocks@link:packages/shared-ux/link/redirect_app/mocks": +"@kbn/shared-ux-link-redirect-app-mocks@link:src/platform/packages/shared/shared-ux/link/redirect_app/mocks": version "0.0.0" uid "" -"@kbn/shared-ux-link-redirect-app-types@link:packages/shared-ux/link/redirect_app/types": +"@kbn/shared-ux-link-redirect-app-types@link:src/platform/packages/shared/shared-ux/link/redirect_app/types": version "0.0.0" uid "" -"@kbn/shared-ux-link-redirect-app@link:packages/shared-ux/link/redirect_app/impl": +"@kbn/shared-ux-link-redirect-app@link:src/platform/packages/shared/shared-ux/link/redirect_app/impl": version "0.0.0" uid "" -"@kbn/shared-ux-markdown-mocks@link:packages/shared-ux/markdown/mocks": +"@kbn/shared-ux-markdown-mocks@link:src/platform/packages/shared/shared-ux/markdown/mocks": version "0.0.0" uid "" -"@kbn/shared-ux-markdown-types@link:packages/shared-ux/markdown/types": +"@kbn/shared-ux-markdown-types@link:src/platform/packages/shared/shared-ux/markdown/types": version "0.0.0" uid "" -"@kbn/shared-ux-markdown@link:packages/shared-ux/markdown/impl": +"@kbn/shared-ux-markdown@link:src/platform/packages/shared/shared-ux/markdown/impl": version "0.0.0" uid "" -"@kbn/shared-ux-page-analytics-no-data-mocks@link:packages/shared-ux/page/analytics_no_data/mocks": +"@kbn/shared-ux-page-analytics-no-data-mocks@link:src/platform/packages/private/shared-ux/page/analytics_no_data/mocks": version "0.0.0" uid "" -"@kbn/shared-ux-page-analytics-no-data-types@link:packages/shared-ux/page/analytics_no_data/types": +"@kbn/shared-ux-page-analytics-no-data-types@link:src/platform/packages/private/shared-ux/page/analytics_no_data/types": version "0.0.0" uid "" -"@kbn/shared-ux-page-analytics-no-data@link:packages/shared-ux/page/analytics_no_data/impl": +"@kbn/shared-ux-page-analytics-no-data@link:src/platform/packages/private/shared-ux/page/analytics_no_data/impl": version "0.0.0" uid "" -"@kbn/shared-ux-page-kibana-no-data-mocks@link:packages/shared-ux/page/kibana_no_data/mocks": +"@kbn/shared-ux-page-kibana-no-data-mocks@link:src/platform/packages/private/shared-ux/page/kibana_no_data/mocks": version "0.0.0" uid "" -"@kbn/shared-ux-page-kibana-no-data-types@link:packages/shared-ux/page/kibana_no_data/types": +"@kbn/shared-ux-page-kibana-no-data-types@link:src/platform/packages/private/shared-ux/page/kibana_no_data/types": version "0.0.0" uid "" -"@kbn/shared-ux-page-kibana-no-data@link:packages/shared-ux/page/kibana_no_data/impl": +"@kbn/shared-ux-page-kibana-no-data@link:src/platform/packages/private/shared-ux/page/kibana_no_data/impl": version "0.0.0" uid "" -"@kbn/shared-ux-page-kibana-template-mocks@link:packages/shared-ux/page/kibana_template/mocks": +"@kbn/shared-ux-page-kibana-template-mocks@link:src/platform/packages/shared/shared-ux/page/kibana_template/mocks": version "0.0.0" uid "" -"@kbn/shared-ux-page-kibana-template-types@link:packages/shared-ux/page/kibana_template/types": +"@kbn/shared-ux-page-kibana-template-types@link:src/platform/packages/shared/shared-ux/page/kibana_template/types": version "0.0.0" uid "" -"@kbn/shared-ux-page-kibana-template@link:packages/shared-ux/page/kibana_template/impl": +"@kbn/shared-ux-page-kibana-template@link:src/platform/packages/shared/shared-ux/page/kibana_template/impl": version "0.0.0" uid "" -"@kbn/shared-ux-page-no-data-config-mocks@link:packages/shared-ux/page/no_data_config/mocks": +"@kbn/shared-ux-page-no-data-config-mocks@link:src/platform/packages/shared/shared-ux/page/no_data_config/mocks": version "0.0.0" uid "" -"@kbn/shared-ux-page-no-data-config-types@link:packages/shared-ux/page/no_data_config/types": +"@kbn/shared-ux-page-no-data-config-types@link:src/platform/packages/shared/shared-ux/page/no_data_config/types": version "0.0.0" uid "" -"@kbn/shared-ux-page-no-data-config@link:packages/shared-ux/page/no_data_config/impl": +"@kbn/shared-ux-page-no-data-config@link:src/platform/packages/shared/shared-ux/page/no_data_config/impl": version "0.0.0" uid "" -"@kbn/shared-ux-page-no-data-mocks@link:packages/shared-ux/page/no_data/mocks": +"@kbn/shared-ux-page-no-data-mocks@link:src/platform/packages/shared/shared-ux/page/no_data/mocks": version "0.0.0" uid "" -"@kbn/shared-ux-page-no-data-types@link:packages/shared-ux/page/no_data/types": +"@kbn/shared-ux-page-no-data-types@link:src/platform/packages/shared/shared-ux/page/no_data/types": version "0.0.0" uid "" -"@kbn/shared-ux-page-no-data@link:packages/shared-ux/page/no_data/impl": +"@kbn/shared-ux-page-no-data@link:src/platform/packages/shared/shared-ux/page/no_data/impl": version "0.0.0" uid "" -"@kbn/shared-ux-page-solution-nav@link:packages/shared-ux/page/solution_nav": +"@kbn/shared-ux-page-solution-nav@link:src/platform/packages/shared/shared-ux/page/solution_nav": version "0.0.0" uid "" -"@kbn/shared-ux-prompt-no-data-views-mocks@link:packages/shared-ux/prompt/no_data_views/mocks": +"@kbn/shared-ux-prompt-no-data-views-mocks@link:src/platform/packages/shared/shared-ux/prompt/no_data_views/mocks": version "0.0.0" uid "" -"@kbn/shared-ux-prompt-no-data-views-types@link:packages/shared-ux/prompt/no_data_views/types": +"@kbn/shared-ux-prompt-no-data-views-types@link:src/platform/packages/shared/shared-ux/prompt/no_data_views/types": version "0.0.0" uid "" -"@kbn/shared-ux-prompt-no-data-views@link:packages/shared-ux/prompt/no_data_views/impl": +"@kbn/shared-ux-prompt-no-data-views@link:src/platform/packages/shared/shared-ux/prompt/no_data_views/impl": version "0.0.0" uid "" -"@kbn/shared-ux-prompt-not-found@link:packages/shared-ux/prompt/not_found": +"@kbn/shared-ux-prompt-not-found@link:src/platform/packages/shared/shared-ux/prompt/not_found": version "0.0.0" uid "" -"@kbn/shared-ux-router-mocks@link:packages/shared-ux/router/mocks": +"@kbn/shared-ux-router-mocks@link:src/platform/packages/shared/shared-ux/router/mocks": version "0.0.0" uid "" -"@kbn/shared-ux-router-types@link:packages/shared-ux/router/types": +"@kbn/shared-ux-router-types@link:src/platform/packages/shared/shared-ux/router/types": version "0.0.0" uid "" -"@kbn/shared-ux-router@link:packages/shared-ux/router/impl": +"@kbn/shared-ux-router@link:src/platform/packages/shared/shared-ux/router/impl": version "0.0.0" uid "" -"@kbn/shared-ux-storybook-config@link:packages/shared-ux/storybook/config": +"@kbn/shared-ux-storybook-config@link:src/platform/packages/private/shared-ux/storybook/config": version "0.0.0" uid "" -"@kbn/shared-ux-storybook-mock@link:packages/shared-ux/storybook/mock": +"@kbn/shared-ux-storybook-mock@link:src/platform/packages/shared/shared-ux/storybook/mock": version "0.0.0" uid "" -"@kbn/shared-ux-tabbed-modal@link:packages/shared-ux/modal/tabbed": +"@kbn/shared-ux-tabbed-modal@link:src/platform/packages/shared/shared-ux/modal/tabbed": version "0.0.0" uid "" -"@kbn/shared-ux-table-persist@link:packages/shared-ux/table_persist": +"@kbn/shared-ux-table-persist@link:src/platform/packages/shared/shared-ux/table_persist": version "0.0.0" uid "" -"@kbn/shared-ux-utility@link:packages/kbn-shared-ux-utility": +"@kbn/shared-ux-utility@link:src/platform/packages/shared/kbn-shared-ux-utility": version "0.0.0" uid "" @@ -8843,7 +8883,7 @@ dependencies: "@opentelemetry/api" "^1.0.0" -"@opentelemetry/api@1.x", "@opentelemetry/api@^1.0.0", "@opentelemetry/api@^1.1.0", "@opentelemetry/api@^1.4.1": +"@opentelemetry/api@1.9.0", "@opentelemetry/api@1.x", "@opentelemetry/api@^1.0.0", "@opentelemetry/api@^1.1.0", "@opentelemetry/api@^1.4.1": version "1.9.0" resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.9.0.tgz#d03eba68273dc0f7509e2a3d5cba21eae10379fe" integrity sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg== @@ -11477,10 +11517,15 @@ resolved "https://registry.yarnpkg.com/@types/deep-freeze-strict/-/deep-freeze-strict-1.1.0.tgz#447a6a2576191344aa42310131dd3df5c41492c4" integrity sha1-RHpqJXYZE0SqQjEBMd099cQUksQ= -"@types/diff@^5.0.8": - version "5.0.8" - resolved "https://registry.yarnpkg.com/@types/diff/-/diff-5.0.8.tgz#28dc501cc3e7c62d4c5d096afe20755170acf276" - integrity sha512-kR0gRf0wMwpxQq6ME5s+tWk9zVCfJUl98eRkD05HWWRbhPB/eu4V1IbyZAsvzC1Gn4znBJ0HN01M4DGXdBEV8Q== +"@types/diff-match-patch@^1.0.36": + version "1.0.36" + resolved "https://registry.yarnpkg.com/@types/diff-match-patch/-/diff-match-patch-1.0.36.tgz#dcef10a69d357fe9d43ac4ff2eca6b85dbf466af" + integrity sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg== + +"@types/diff@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@types/diff/-/diff-6.0.0.tgz#031f27cf57564f3cce825f38fb19fdd4349ad07a" + integrity sha512-dhVCYGv3ZSbzmQaBSagrv1WJ6rXCdkyTcDyoNu1MD8JohI7pR7k8wdZEm+mvdxRKXyHVwckFzWU1vJc+Z29MlA== "@types/ejs@^3.0.6": version "3.0.6" @@ -11599,10 +11644,10 @@ resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.10.tgz#6dfbf5ea17142f7f9a043809f1cd4c448cb68249" integrity sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA== -"@types/geojson@^7946.0.14": - version "7946.0.14" - resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.14.tgz#319b63ad6df705ee2a65a73ef042c8271e696613" - integrity sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg== +"@types/geojson@7946.0.15": + version "7946.0.15" + resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.15.tgz#f9d55fd5a0aa2de9dc80b1b04e437538b7298868" + integrity sha512-9oSxFzDCT2Rj6DfcHF8G++jxBKS7mBqXl5xrRW+Kbvjry6Uduya2iiwqHPhVXpasAVMBYKkEPGgKhd3+/HZ6xA== "@types/getos@^3.0.0": version "3.0.0" @@ -12490,10 +12535,10 @@ resolved "https://registry.yarnpkg.com/@types/tinycolor2/-/tinycolor2-1.4.2.tgz#721ca5c5d1a2988b4a886e35c2ffc5735b6afbdf" integrity sha512-PeHg/AtdW6aaIO2a+98Xj7rWY4KC1E6yOy7AFknJQ7VXUGNrMlyxDFxJo7HqLtjQms/ZhhQX52mLVW/EX3JGOw== -"@types/topojson-client@^3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@types/topojson-client/-/topojson-client-3.1.4.tgz#81b83f9ecd6542dc5c3df21967f992e3fe192c33" - integrity sha512-Ntf3ZSetMYy7z3PrVCvcqmdRoVhgKA9UKN0ZuuZf8Ts2kcyL4qK34IXBs6qO5fem62EK4k03PtkJPVoroVu4/w== +"@types/topojson-client@3.1.5": + version "3.1.5" + resolved "https://registry.yarnpkg.com/@types/topojson-client/-/topojson-client-3.1.5.tgz#3fdbcd52161db8747a071b1d0f635ac700cf599d" + integrity sha512-C79rySTyPxnQNNguTZNI1Ct4D7IXgvyAs3p9HPecnl6mNrJ5+UhvGNYcZfpROYV2lMHI48kJPxwR+F9C6c7nmw== dependencies: "@types/geojson" "*" "@types/topojson-specification" "*" @@ -12505,13 +12550,6 @@ dependencies: "@types/geojson" "*" -"@types/topojson-specification@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/topojson-specification/-/topojson-specification-1.0.5.tgz#bf0009b2e0debb2d97237b124c00b9ea92570375" - integrity sha512-C7KvcQh+C2nr6Y2Ub4YfgvWvWCgP2nOQMtfhlnwsRL4pYmmwzBS7HclGiS87eQfDOU/DLQpX6GEscviaz4yLIQ== - dependencies: - "@types/geojson" "*" - "@types/tough-cookie@*", "@types/tough-cookie@^4.0.5": version "4.0.5" resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304" @@ -13316,18 +13354,18 @@ aggregate-error@^3.0.0, aggregate-error@^3.1.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ai@^2.2.33: - version "2.2.37" - resolved "https://registry.yarnpkg.com/ai/-/ai-2.2.37.tgz#49bae60229937bde351d72d3ff721ccb8060edb2" - integrity sha512-JIYm5N1muGVqBqWnvkt29FmXhESoO5TcDxw74OE41SsM+uIou6NPDDs0XWb/ABcd1gmp6k5zym64KWMPM2xm0A== +ai@^4.0.18: + version "4.0.18" + resolved "https://registry.yarnpkg.com/ai/-/ai-4.0.18.tgz#94a270165133a9327d73a1327ffefdc7b5581832" + integrity sha512-BTWzalLNE1LQphEka5xzJXDs5v4xXy1Uzr7dAVk+C/CnO3WNpuMBgrCymwUv0VrWaWc8xMQuh+OqsT7P7JyekQ== dependencies: - eventsource-parser "1.0.0" - nanoid "3.3.6" - solid-swr-store "0.10.7" - sswr "2.0.0" - swr "2.2.0" - swr-store "0.10.6" - swrv "1.0.4" + "@ai-sdk/provider" "1.0.2" + "@ai-sdk/provider-utils" "2.0.4" + "@ai-sdk/react" "1.0.6" + "@ai-sdk/ui-utils" "1.0.5" + "@opentelemetry/api" "1.9.0" + jsondiffpatch "0.6.0" + zod-to-json-schema "^3.23.5" airbnb-js-shims@^2.2.1: version "2.2.1" @@ -15132,9 +15170,9 @@ chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2, chalk@~4.1 ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^5.1.2: +chalk@^5.1.2, chalk@^5.3.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" + resolved "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz" integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== chance@1.0.18: @@ -15242,7 +15280,7 @@ chownr@^3.0.0: resolved "https://registry.yarnpkg.com/chownr/-/chownr-3.0.0.tgz#9855e64ecd240a9cc4267ce8a4aa5d24a1da15e4" integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g== -chroma-js@^2.1.0, chroma-js@^2.4.2: +chroma-js@2.4.2, chroma-js@^2.1.0, chroma-js@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chroma-js/-/chroma-js-2.4.2.tgz#dffc214ed0c11fa8eefca2c36651d8e57cbfb2b0" integrity sha512-U9eDw6+wt7V8z5NncY2jJfZa+hUH8XEj8FQHgFJTrUFnJfXYf4Ml4adI2vXZOjqRDpFWtYVWypDfZwnJ+HIR4A== @@ -17407,6 +17445,11 @@ diff@^5.0.0, diff@^5.1.0, diff@^5.2.0: resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== +diff@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-7.0.0.tgz#3fb34d387cd76d803f6eebea67b921dab0182a9a" + integrity sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw== + diffie-hellman@^5.0.0: version "5.0.2" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" @@ -18691,11 +18734,6 @@ events@^3.0.0, events@^3.2.0, events@^3.3.0: resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -eventsource-parser@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/eventsource-parser/-/eventsource-parser-1.0.0.tgz#6332e37fd5512e3c8d9df05773b2bf9e152ccc04" - integrity sha512-9jgfSCa3dmEme2ES3mPByGXfgZ87VbP97tng1G2nWwWx6bV2nYxm2AWCrbQjXToSe+yYlqaZNtxffR9IeQr95g== - eventsource-parser@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/eventsource-parser/-/eventsource-parser-3.0.0.tgz#9303e303ef807d279ee210a17ce80f16300d9f57" @@ -19062,10 +19100,10 @@ fast-xml-parser@4.4.1: dependencies: strnum "^1.0.5" -fastest-levenshtein@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" - integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== +fastest-levenshtein@^1.0.12, fastest-levenshtein@^1.0.16: + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== fastest-stable-stringify@^1.0.1: version "1.0.1" @@ -22896,9 +22934,9 @@ json-schema-typed@^8.0.1: resolved "https://registry.yarnpkg.com/json-schema-typed/-/json-schema-typed-8.0.1.tgz#826ee39e3b6cef536f85412ff048d3ff6f19dfa0" integrity sha512-XQmWYj2Sm4kn4WeTYvmpKEbyPsL7nBsb647c7pMe6l02/yx2+Jfc4dT6UZkEXnIUb5LhD55r2HPsJ1milQ4rDg== -json-schema@0.4.0: +json-schema@0.4.0, json-schema@^0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== json-stable-stringify-without-jsonify@^1.0.1: @@ -22960,6 +22998,15 @@ jsondiffpatch@0.4.1: chalk "^2.3.0" diff-match-patch "^1.0.0" +jsondiffpatch@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/jsondiffpatch/-/jsondiffpatch-0.6.0.tgz#daa6a25bedf0830974c81545568d5f671c82551f" + integrity sha512-3QItJOXp2AP1uv7waBkao5nCvhEv+QmJAd38Ybq7wNI74Q+BBmnLn4EDKz6yI9xGAIQoUF87qHt+kc1IVxB4zQ== + dependencies: + "@types/diff-match-patch" "^1.0.36" + chalk "^5.3.0" + diff-match-patch "^1.0.5" + jsonfile@^2.1.0: version "2.4.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" @@ -24944,15 +24991,10 @@ nano-css@^5.2.1: stacktrace-js "^2.0.0" stylis "3.5.0" -nanoid@3.3.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" - integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== - -nanoid@^3.3.1, nanoid@^3.3.6: - version "3.3.7" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== +nanoid@^3.3.1, nanoid@^3.3.6, nanoid@^3.3.8: + version "3.3.8" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" + integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== nanomatch@^1.2.9: version "1.2.9" @@ -29316,10 +29358,10 @@ screenfull@^5.0.0: resolved "https://registry.yarnpkg.com/screenfull/-/screenfull-5.0.0.tgz#5c2010c0e84fd4157bf852877698f90b8cbe96f6" integrity sha512-yShzhaIoE9OtOhWVyBBffA6V98CDCoyHTsp8228blmqYy1Z5bddzE/4FPiJKlr8DVR4VBiiUyfPzIQPIYDkeMA== -secure-json-parse@^2.4.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-2.6.0.tgz#95d89f84adf32d76ff7800e68a673b129fe918b0" - integrity sha512-B9osKohb6L+EZ6Kve3wHKfsAClzOC/iISA2vSuCe5Jx5NAKiwitfxx8ZKYapHXr0sYRj7UZInT7pLb3rp2Yx6A== +secure-json-parse@^2.4.0, secure-json-parse@^2.7.0: + version "2.7.0" + resolved "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz" + integrity sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw== seedrandom@^3.0.5: version "3.0.5" @@ -29380,7 +29422,7 @@ semver@^6.0.0, semver@^6.1.0, semver@^6.1.2, semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.0, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4, semver@^7.6.2, semver@^7.6.3: +semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.0, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4, semver@^7.6.3: version "7.6.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== @@ -29890,11 +29932,6 @@ socks@^2.7.1: ip-address "^9.0.5" smart-buffer "^4.2.0" -solid-swr-store@0.10.7: - version "0.10.7" - resolved "https://registry.yarnpkg.com/solid-swr-store/-/solid-swr-store-0.10.7.tgz#9511308f01250a1509efbfaad5b481be7517e436" - integrity sha512-A6d68aJmRP471aWqKKPE2tpgOiR5fH4qXQNfKIec+Vap+MGQm3tvXlT8n0I8UgJSlNAsSAUuw2VTviH2h3Vv5g== - sonic-boom@^1.0.2: version "1.3.0" resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-1.3.0.tgz#5c77c846ce6c395dddf2eb8e8e65f9cc576f2e76" @@ -30220,13 +30257,6 @@ ssri@^8.0.1: dependencies: minipass "^3.1.1" -sswr@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/sswr/-/sswr-2.0.0.tgz#db5e1f7c44addb8316de8e7efe23b7ea2cba090d" - integrity sha512-mV0kkeBHcjcb0M5NqKtKVg/uTIYNlIIniyDfSGrSfxpEdM9C365jK0z55pl9K0xAkNTJi2OAOVFQpgMPUk+V0w== - dependencies: - swrev "^4.0.0" - stable@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" @@ -30934,20 +30964,6 @@ swagger2openapi@^7.0.8: yaml "^1.10.0" yargs "^17.0.1" -swr-store@0.10.6: - version "0.10.6" - resolved "https://registry.yarnpkg.com/swr-store/-/swr-store-0.10.6.tgz#1856bda886e87dbed40c8c9874c1b1624d2e502d" - integrity sha512-xPjB1hARSiRaNNlUQvWSVrG5SirCjk2TmaUyzzvk69SZQan9hCJqw/5rG9iL7xElHU784GxRPISClq4488/XVw== - dependencies: - dequal "^2.0.3" - -swr@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/swr/-/swr-2.2.0.tgz#575c6ac1bec087847f4c86a39ccbc0043c834d6a" - integrity sha512-AjqHOv2lAhkuUdIiBu9xbuettzAzWXmCEcLONNKJRba87WAefz8Ca9d6ds/SzrPc235n1IxWYdhJ2zF3MNUaoQ== - dependencies: - use-sync-external-store "^1.2.0" - swr@^2.2.5: version "2.2.5" resolved "https://registry.yarnpkg.com/swr/-/swr-2.2.5.tgz#063eea0e9939f947227d5ca760cc53696f46446b" @@ -30956,16 +30972,6 @@ swr@^2.2.5: client-only "^0.0.1" use-sync-external-store "^1.2.0" -swrev@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/swrev/-/swrev-4.0.0.tgz#83da6983c7ef9d71ac984a9b169fc197cbf18ff8" - integrity sha512-LqVcOHSB4cPGgitD1riJ1Hh4vdmITOp+BkmfmXRh4hSF/t7EnS4iD+SOTmq7w5pPm/SiPeto4ADbKS6dHUDWFA== - -swrv@1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/swrv/-/swrv-1.0.4.tgz#278b4811ed4acbb1ae46654972a482fd1847e480" - integrity sha512-zjEkcP8Ywmj+xOJW3lIT65ciY/4AL4e/Or7Gj0MzU3zBJNMdJiT8geVZhINavnlHRMMCcJLHhraLTAiDOTmQ9g== - symbol-observable@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" @@ -31280,6 +31286,11 @@ throttle-debounce@^3.0.1: resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-3.0.1.tgz#32f94d84dfa894f786c9a1f290e7a645b6a19abb" integrity sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg== +throttleit@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-2.1.0.tgz#a7e4aa0bf4845a5bd10daa39ea0c783f631a07b4" + integrity sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw== + throttleit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" @@ -33941,10 +33952,10 @@ zip-stream@^6.0.1: compress-commons "^6.0.2" readable-stream "^4.0.0" -zod-to-json-schema@^3.22.3, zod-to-json-schema@^3.22.4, zod-to-json-schema@^3.22.5, zod-to-json-schema@^3.23.0: - version "3.23.2" - resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.23.2.tgz#bc7e379c8050462538383e382964c03d8fe008f9" - integrity sha512-uSt90Gzc/tUfyNqxnjlfBs8W6WSGpNBv0rVsNxP/BVSMHMKGdthPYff4xtCHYloJGM0CFxFsb3NbC0eqPhfImw== +zod-to-json-schema@^3.22.3, zod-to-json-schema@^3.22.4, zod-to-json-schema@^3.22.5, zod-to-json-schema@^3.23.0, zod-to-json-schema@^3.23.5: + version "3.24.1" + resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.24.1.tgz#f08c6725091aadabffa820ba8d50c7ab527f227a" + integrity sha512-3h08nf3Vw3Wl3PK+q3ow/lIil81IT2Oa7YpQyUUDsEWbXveMesdfK1xBd2RhCkynwZndAxixji/7SYJJowr62w== zod@3.23.8, zod@^3.22.3, zod@^3.22.4, zod@^3.23.8: version "3.23.8"
    + {bucketSize}{bucketSize}
    - + + {data} - + + {shards}