diff --git a/.buildkite/ftr_platform_stateful_configs.yml b/.buildkite/ftr_platform_stateful_configs.yml index c1236a04685fb..af04aef1e0911 100644 --- a/.buildkite/ftr_platform_stateful_configs.yml +++ b/.buildkite/ftr_platform_stateful_configs.yml @@ -42,6 +42,9 @@ disabled: # Default http2 config to use for performance journeys - x-pack/performance/configs/http2_config.ts + # Gen AI suites, running with their own pipeline + - x-pack/test/functional_gen_ai/inference/config.ts + defaultQueue: 'n2-4-spot' enabled: - test/accessibility/config.ts @@ -288,7 +291,6 @@ enabled: - x-pack/test/plugin_functional/config.ts - x-pack/test/reporting_api_integration/reporting_and_security.config.ts - x-pack/test/reporting_api_integration/reporting_without_security.config.ts - - x-pack/test/reporting_functional/reporting_and_deprecated_security.config.ts - x-pack/test/reporting_functional/reporting_and_security.config.ts - x-pack/test/reporting_functional/reporting_without_security.config.ts - x-pack/test/rule_registry/security_and_spaces/config_basic.ts diff --git a/.buildkite/ftr_security_serverless_configs.yml b/.buildkite/ftr_security_serverless_configs.yml index 920ecce349356..74d82d40c8bce 100644 --- a/.buildkite/ftr_security_serverless_configs.yml +++ b/.buildkite/ftr_security_serverless_configs.yml @@ -76,7 +76,8 @@ enabled: - x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/large_prebuilt_rules_package/trial_license_complete_tier/configs/serverless.config.ts - x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/management/trial_license_complete_tier/configs/serverless.config.ts - x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/update_prebuilt_rules_package/trial_license_complete_tier/configs/serverless.config.ts - - x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/trial_license_complete_tier/configs/serverless.config.ts + - x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/customization_enabled/configs/serverless.config.ts + - x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/customization_disabled/configs/serverless.config.ts - x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_bulk_actions/trial_license_complete_tier/configs/serverless.config.ts - x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_delete/trial_license_complete_tier/configs/serverless.config.ts - x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_delete/basic_license_essentials_tier/configs/serverless.config.ts diff --git a/.buildkite/ftr_security_stateful_configs.yml b/.buildkite/ftr_security_stateful_configs.yml index f7caacba05e1b..bd8bc9e922f0d 100644 --- a/.buildkite/ftr_security_stateful_configs.yml +++ b/.buildkite/ftr_security_stateful_configs.yml @@ -58,7 +58,8 @@ enabled: - x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/large_prebuilt_rules_package/trial_license_complete_tier/configs/ess.config.ts - x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/management/trial_license_complete_tier/configs/ess.config.ts - x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/update_prebuilt_rules_package/trial_license_complete_tier/configs/ess.config.ts - - x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/trial_license_complete_tier/configs/ess.config.ts + - x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/customization_enabled/configs/ess.config.ts + - x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/customization_disabled/configs/ess.config.ts - x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_bulk_actions/trial_license_complete_tier/configs/ess.config.ts - x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_delete/trial_license_complete_tier/configs/ess.config.ts - x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_delete/basic_license_essentials_tier/configs/ess.config.ts @@ -100,3 +101,4 @@ enabled: - x-pack/test/cloud_security_posture_functional/config.ts - x-pack/test/cloud_security_posture_functional/config.agentless.ts - x-pack/test/cloud_security_posture_functional/data_views/config.ts + - x-pack/test/automatic_import_api_integration/security/config_basic.ts diff --git a/.buildkite/pipelines/flaky_tests/groups.json b/.buildkite/pipelines/flaky_tests/groups.json index 77c3d23714d6f..2e92f82a4d958 100644 --- a/.buildkite/pipelines/flaky_tests/groups.json +++ b/.buildkite/pipelines/flaky_tests/groups.json @@ -88,6 +88,10 @@ "key": "cypress/apm_cypress", "name": "APM - Cypress" }, + { + "key": "cypress/profiling_cypress", + "name": "Profiling - Cypress" + }, { "key": "cypress/inventory_cypress", "name": "Inventory - Cypress" diff --git a/.buildkite/pipelines/on_merge.yml b/.buildkite/pipelines/on_merge.yml index 66cc3f9f33042..2f1562ef1d741 100644 --- a/.buildkite/pipelines/on_merge.yml +++ b/.buildkite/pipelines/on_merge.yml @@ -169,6 +169,28 @@ steps: - exit_status: '*' limit: 1 + - command: .buildkite/scripts/steps/test/ftr_configs.sh + env: + FTR_CONFIG: "x-pack/test/functional_gen_ai/inference/config.ts" + FTR_CONFIG_GROUP_KEY: 'ftr-ai-infra-gen-ai-inference-api' + FTR_GEN_AI: "1" + label: AppEx AI-Infra Inference APIs FTR tests + key: ai-infra-gen-ai-inference-api + timeout_in_minutes: 50 + parallelism: 1 + agents: + image: family/kibana-ubuntu-2004 + imageProject: elastic-images-prod + provider: gcp + machineType: n2-standard-4 + preemptible: true + retry: + automatic: + - exit_status: '-1' + limit: 3 + - exit_status: '*' + limit: 1 + - command: .buildkite/scripts/steps/functional/security_serverless_entity_analytics.sh label: 'Serverless Entity Analytics - Security Cypress Tests' agents: diff --git a/.buildkite/pipelines/pull_request/ai_infra_gen_ai.yml b/.buildkite/pipelines/pull_request/ai_infra_gen_ai.yml new file mode 100644 index 0000000000000..650039b278d52 --- /dev/null +++ b/.buildkite/pipelines/pull_request/ai_infra_gen_ai.yml @@ -0,0 +1,30 @@ +steps: + - group: AppEx AI-Infra genAI tests + key: ai-infra-gen-ai + depends_on: + - build + - quick_checks + - checks + - linting + - linting_with_types + - check_types + - check_oas_snapshot + steps: + - command: .buildkite/scripts/steps/test/ftr_configs.sh + env: + FTR_CONFIG: "x-pack/test/functional_gen_ai/inference/config.ts" + FTR_CONFIG_GROUP_KEY: 'ftr-ai-infra-gen-ai-inference-api' + FTR_GEN_AI: "1" + label: AppEx AI-Infra Inference APIs FTR tests + key: ai-infra-gen-ai-inference-api + timeout_in_minutes: 50 + parallelism: 1 + agents: + machineType: n2-standard-4 + preemptible: true + retry: + automatic: + - exit_status: '-1' + limit: 3 + - exit_status: '*' + limit: 1 diff --git a/.buildkite/scripts/common/setup_job_env.sh b/.buildkite/scripts/common/setup_job_env.sh index b2e3bfdd024d3..d05719cbbbb32 100644 --- a/.buildkite/scripts/common/setup_job_env.sh +++ b/.buildkite/scripts/common/setup_job_env.sh @@ -132,6 +132,14 @@ EOF export ELASTIC_APM_API_KEY } +# Set up GenAI keys +{ + if [[ "${FTR_GEN_AI:-}" =~ ^(1|true)$ ]]; then + echo "FTR_GEN_AI was set - exposing LLM connectors" + export KIBANA_TESTING_AI_CONNECTORS="$(vault_get ai-infra-ci-connectors connectors-config)" + fi +} + # Set up GCS Service Account for CDN { GCS_SA_CDN_KEY="$(vault_get gcs-sa-cdn-prod key)" diff --git a/.buildkite/scripts/pipelines/pull_request/pipeline.ts b/.buildkite/scripts/pipelines/pull_request/pipeline.ts index 6b805d540c254..ad71f70258a23 100644 --- a/.buildkite/scripts/pipelines/pull_request/pipeline.ts +++ b/.buildkite/scripts/pipelines/pull_request/pipeline.ts @@ -113,33 +113,59 @@ const getPipeline = (filename: string, removeSteps = true) => { pipeline.push(getPipeline('.buildkite/pipelines/pull_request/fleet_cypress.yml')); } - if (await doAnyChangesMatch([/^x-pack\/plugins\/observability_solution\/exploratory_view/])) { + if ( + (await doAnyChangesMatch([/^x-pack\/plugins\/observability_solution\/exploratory_view/])) || + GITHUB_PR_LABELS.includes('ci:synthetics-runner-suites') + ) { pipeline.push(getPipeline('.buildkite/pipelines/pull_request/exploratory_view_plugin.yml')); } if ( - await doAnyChangesMatch([ + (await doAnyChangesMatch([ /^x-pack\/plugins\/observability_solution\/synthetics/, /^x-pack\/plugins\/observability_solution\/exploratory_view/, - ]) + ])) || + GITHUB_PR_LABELS.includes('ci:synthetics-runner-suites') ) { pipeline.push(getPipeline('.buildkite/pipelines/pull_request/synthetics_plugin.yml')); pipeline.push(getPipeline('.buildkite/pipelines/pull_request/uptime_plugin.yml')); } if ( - await doAnyChangesMatch([ + (await doAnyChangesMatch([ /^x-pack\/plugins\/observability_solution\/ux/, /^x-pack\/plugins\/observability_solution\/exploratory_view/, - ]) + ])) || + GITHUB_PR_LABELS.includes('ci:synthetics-runner-suites') ) { pipeline.push(getPipeline('.buildkite/pipelines/pull_request/ux_plugin_e2e.yml')); } - if (await doAnyChangesMatch([/^x-pack\/plugins\/observability_solution/])) { + if ( + (await doAnyChangesMatch([ + /^x-pack\/plugins\/observability_solution/, + /^package.json/, + /^yarn.lock/, + ])) || + GITHUB_PR_LABELS.includes('ci:synthetics-runner-suites') + ) { pipeline.push(getPipeline('.buildkite/pipelines/pull_request/slo_plugin_e2e.yml')); } + if ( + (await doAnyChangesMatch([ + /^x-pack\/packages\/ai-infra/, + /^x-pack\/plugins\/ai_infra/, + /^x-pack\/plugins\/inference/, + /^x-pack\/plugins\/stack_connectors\/server\/connector_types\/bedrock/, + /^x-pack\/plugins\/stack_connectors\/server\/connector_types\/gemini/, + /^x-pack\/plugins\/stack_connectors\/server\/connector_types\/openai/, + ])) || + GITHUB_PR_LABELS.includes('ci:all-gen-ai-suites') + ) { + pipeline.push(getPipeline('.buildkite/pipelines/pull_request/ai_infra_gen_ai.yml')); + } + if ( GITHUB_PR_LABELS.includes('ci:deploy-cloud') || GITHUB_PR_LABELS.includes('ci:cloud-deploy') || diff --git a/.buildkite/scripts/steps/checks/capture_oas_snapshot.sh b/.buildkite/scripts/steps/checks/capture_oas_snapshot.sh index e9f42d67008ea..66051c8fd5e29 100755 --- a/.buildkite/scripts/steps/checks/capture_oas_snapshot.sh +++ b/.buildkite/scripts/steps/checks/capture_oas_snapshot.sh @@ -8,7 +8,7 @@ source .buildkite/scripts/common/util.sh .buildkite/scripts/copy_es_snapshot_cache.sh echo --- Capture OAS snapshot -cmd="node scripts/capture_oas_snapshot --include-path /api/status --include-path /api/alerting/rule/ --include-path /api/alerting/rules --include-path /api/actions --include-path /api/security/role --include-path /api/spaces --include-path /api/fleet" +cmd="node scripts/capture_oas_snapshot --include-path /api/status --include-path /api/alerting/rule/ --include-path /api/alerting/rules --include-path /api/actions --include-path /api/security/role --include-path /api/spaces --include-path /api/fleet --include-path /api/dashboards" if is_pr && ! is_auto_commit_disabled; then cmd="$cmd --update" fi diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index f5c2ed37db761..2f64a12a39581 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -370,6 +370,7 @@ packages/kbn-formatters @elastic/obs-ux-logs-team packages/kbn-ftr-common-functional-services @elastic/kibana-operations @elastic/appex-qa packages/kbn-ftr-common-functional-ui-services @elastic/appex-qa packages/kbn-ftr-screenshot-filename @elastic/kibana-operations @elastic/appex-qa +packages/kbn-gen-ai-functional-testing @elastic/appex-ai-infra packages/kbn-generate @elastic/kibana-operations packages/kbn-generate-console-definitions @elastic/kibana-management packages/kbn-generate-csv @elastic/appex-sharedux @@ -561,6 +562,7 @@ packages/react/kibana_context/styled @elastic/appex-sharedux packages/react/kibana_context/theme @elastic/appex-sharedux packages/react/kibana_mount @elastic/appex-sharedux packages/response-ops/feature_flag_service @elastic/response-ops +packages/response-ops/rule_form @elastic/response-ops packages/response-ops/rule_params @elastic/response-ops packages/serverless/project_switcher @elastic/appex-sharedux packages/serverless/settings/common @elastic/appex-sharedux @elastic/kibana-management @@ -981,8 +983,8 @@ x-pack/plugins/snapshot_restore @elastic/kibana-management x-pack/plugins/spaces @elastic/kibana-security x-pack/plugins/stack_alerts @elastic/response-ops x-pack/plugins/stack_connectors @elastic/response-ops -x-pack/plugins/streams @simianhacker @flash1293 @dgieselaar -x-pack/plugins/streams_app @simianhacker @flash1293 @dgieselaar +x-pack/plugins/streams @elastic/streams-program-team +x-pack/plugins/streams_app @elastic/streams-program-team x-pack/plugins/task_manager @elastic/response-ops x-pack/plugins/telemetry_collection_xpack @elastic/kibana-core x-pack/plugins/threat_intelligence @elastic/security-threat-hunting-investigations @@ -1818,6 +1820,7 @@ packages/kbn-monaco/src/esql @elastic/kibana-esql # AppEx AI Infra /x-pack/plugins/inference @elastic/appex-ai-infra @elastic/obs-ai-assistant @elastic/security-generative-ai +/x-pack/test/functional_gen_ai/inference @elastic/appex-ai-infra # AppEx Platform Services Security //x-pack/test_serverless/api_integration/test_suites/common/security_response_headers.ts @elastic/kibana-security @@ -2103,7 +2106,7 @@ x-pack/test/api_integration/apis/management/index_management/inference_endpoints /x-pack/test/api_integration/services/security_solution_*.gen.ts @elastic/security-solution /x-pack/test/accessibility/apps/group3/security_solution.ts @elastic/security-solution /x-pack/test_serverless/functional/test_suites/security/config.ts @elastic/security-solution @elastic/appex-qa -x-pack/test_serverless/functional/test_suites/security/config.mki_only.ts @elastic/security-solution @elastic/appex-qa +x-pack/test_serverless/functional/test_suites/security/config.mki_only.ts @elastic/security-solution @elastic/appex-qa x-pack/test_serverless/functional/test_suites/security/index.mki_only.ts @elastic/security-solution @elastic/appex-qa @elastic/kibana-cloud-security-posture /x-pack/test_serverless/functional/test_suites/security/config.feature_flags.ts @elastic/security-solution @elastic/kibana-cloud-security-posture /x-pack/test_serverless/api_integration/test_suites/observability/config.feature_flags.ts @elastic/security-solution @@ -2459,6 +2462,9 @@ x-pack/plugins/security_solution/common/api/entity_analytics @elastic/security-e ## Security Solution sub teams - GenAI x-pack/test/security_solution_api_integration/test_suites/genai @elastic/security-generative-ai +## Security Solution sub teams - Automatic Import +x-pack/test/automatic_import_api_integration @elastic/security-scalability + # Security Defend Workflows - OSQuery Ownership /x-pack/test/osquery_cypress @elastic/security-defend-workflows /x-pack/plugins/osquery @elastic/security-defend-workflows diff --git a/.i18nrc.json b/.i18nrc.json index 5c7642e6283eb..38629974722f3 100644 --- a/.i18nrc.json +++ b/.i18nrc.json @@ -117,7 +117,7 @@ "searchTypes": "packages/kbn-search-types", "securitySolutionPackages": "x-pack/packages/security-solution", "serverlessPackages": "packages/serverless", - "sse": [ "packages/kbn-sse-utils" ], + "sse": ["packages/kbn-sse-utils"], "coloring": "packages/kbn-coloring/src", "languageDocumentation": "packages/kbn-language-documentation/src", "esql": "src/plugins/esql", @@ -154,7 +154,8 @@ "unifiedDataTable": "packages/kbn-unified-data-table", "unsavedChangesBadge": "packages/kbn-unsaved-changes-badge", "unsavedChangesPrompt": "packages/kbn-unsaved-changes-prompt", - "managedContentBadge": "packages/kbn-managed-content-badge" + "managedContentBadge": "packages/kbn-managed-content-badge", + "responseOpsRuleForm": "packages/response-ops/rule_form" }, "translations": [] } diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 25325239da8cb..44e6df0051c00 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] --- import actionsObj from './actions.devdocs.json'; diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index 3ba1bc950dca4..d9b7684a21014 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: 2024-12-03 +date: 2024-12-05 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 e6a25e9c32d37..16b3d049774c3 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: 2024-12-03 +date: 2024-12-05 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 5a442711b0a1f..f08953a636c2f 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops'] --- import aiopsObj from './aiops.devdocs.json'; diff --git a/api_docs/alerting.devdocs.json b/api_docs/alerting.devdocs.json index 7e168f7bf1120..3cf6f3f057d70 100644 --- a/api_docs/alerting.devdocs.json +++ b/api_docs/alerting.devdocs.json @@ -362,9 +362,9 @@ { "parentPluginId": "alerting", "id": "def-server.AlertingAuthorization.Unnamed.$1", - "type": "Object", + "type": "CompoundType", "tags": [], - "label": "{\n ruleTypeRegistry,\n request,\n authorization,\n features,\n getSpace,\n getSpaceId,\n }", + "label": "{\n ruleTypeRegistry,\n request,\n authorization,\n getSpaceId,\n allRegisteredConsumers,\n ruleTypesConsumersMap,\n }", "description": [], "signature": [ "ConstructorOptions" @@ -377,6 +377,50 @@ ], "returnComment": [] }, + { + "parentPluginId": "alerting", + "id": "def-server.AlertingAuthorization.create", + "type": "Function", + "tags": [], + "label": "create", + "description": [ + "\nCreates an AlertingAuthorization object." + ], + "signature": [ + "({ request, features, getSpace, getSpaceId, authorization, ruleTypeRegistry, }: ", + "CreateOptions", + ") => Promise<", + { + "pluginId": "alerting", + "scope": "server", + "docId": "kibAlertingPluginApi", + "section": "def-server.AlertingAuthorization", + "text": "AlertingAuthorization" + }, + ">" + ], + "path": "x-pack/plugins/alerting/server/authorization/alerting_authorization.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "alerting", + "id": "def-server.AlertingAuthorization.create.$1", + "type": "Object", + "tags": [], + "label": "{\n request,\n features,\n getSpace,\n getSpaceId,\n authorization,\n ruleTypeRegistry,\n }", + "description": [], + "signature": [ + "CreateOptions" + ], + "path": "x-pack/plugins/alerting/server/authorization/alerting_authorization.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, { "parentPluginId": "alerting", "id": "def-server.AlertingAuthorization.getSpaceId", @@ -395,39 +439,15 @@ }, { "parentPluginId": "alerting", - "id": "def-server.AlertingAuthorization.getAugmentedRuleTypesWithAuthorization", + "id": "def-server.AlertingAuthorization.getAllAuthorizedRuleTypes", "type": "Function", "tags": [], - "label": "getAugmentedRuleTypesWithAuthorization", + "label": "getAllAuthorizedRuleTypes", "description": [], "signature": [ - "(featureIds: readonly string[], operations: (", - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.ReadOperations", - "text": "ReadOperations" - }, - " | ", - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.WriteOperations", - "text": "WriteOperations" - }, - ")[], authorizationEntity: ", - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.AlertingAuthorizationEntity", - "text": "AlertingAuthorizationEntity" - }, - ") => Promise<{ username?: string | undefined; hasAllRequested: boolean; authorizedRuleTypes: Set<", - "RegistryAlertTypeWithAuth", - ">; }>" + "(params: GetAllAuthorizedRuleTypes) => Promise<{ username?: string | undefined; hasAllRequested: boolean; authorizedRuleTypes: ", + "AuthorizedRuleTypes", + "; }>" ], "path": "x-pack/plugins/alerting/server/authorization/alerting_authorization.ts", "deprecated": false, @@ -435,65 +455,13 @@ "children": [ { "parentPluginId": "alerting", - "id": "def-server.AlertingAuthorization.getAugmentedRuleTypesWithAuthorization.$1", + "id": "def-server.AlertingAuthorization.getAllAuthorizedRuleTypes.$1", "type": "Object", "tags": [], - "label": "featureIds", - "description": [], - "signature": [ - "readonly string[]" - ], - "path": "x-pack/plugins/alerting/server/authorization/alerting_authorization.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "alerting", - "id": "def-server.AlertingAuthorization.getAugmentedRuleTypesWithAuthorization.$2", - "type": "Array", - "tags": [], - "label": "operations", - "description": [], - "signature": [ - "(", - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.ReadOperations", - "text": "ReadOperations" - }, - " | ", - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.WriteOperations", - "text": "WriteOperations" - }, - ")[]" - ], - "path": "x-pack/plugins/alerting/server/authorization/alerting_authorization.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "alerting", - "id": "def-server.AlertingAuthorization.getAugmentedRuleTypesWithAuthorization.$3", - "type": "Enum", - "tags": [], - "label": "authorizationEntity", + "label": "params", "description": [], "signature": [ - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.AlertingAuthorizationEntity", - "text": "AlertingAuthorizationEntity" - } + "GetAllAuthorizedRuleTypes" ], "path": "x-pack/plugins/alerting/server/authorization/alerting_authorization.ts", "deprecated": false, @@ -511,7 +479,7 @@ "label": "ensureAuthorized", "description": [], "signature": [ - "({ ruleTypeId, consumer: legacyConsumer, operation, entity, additionalPrivileges, }: ", + "({ ruleTypeId, consumer, operation, entity, additionalPrivileges, }: ", "EnsureAuthorizedOpts", ") => Promise" ], @@ -524,7 +492,7 @@ "id": "def-server.AlertingAuthorization.ensureAuthorized.$1", "type": "Object", "tags": [], - "label": "{\n ruleTypeId,\n consumer: legacyConsumer,\n operation,\n entity,\n additionalPrivileges = [],\n }", + "label": "{\n ruleTypeId,\n consumer,\n operation,\n entity,\n additionalPrivileges = [],\n }", "description": [], "signature": [ "EnsureAuthorizedOpts" @@ -545,17 +513,7 @@ "label": "getFindAuthorizationFilter", "description": [], "signature": [ - "(authorizationEntity: ", - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.AlertingAuthorizationEntity", - "text": "AlertingAuthorizationEntity" - }, - ", filterOpts: ", - "AlertingAuthorizationFilterOpts", - ", featuresIds?: Set | undefined) => Promise<{ filter?: ", + "(params: GetFindAuthorizationFilterParams) => Promise<{ filter?: ", { "pluginId": "@kbn/es-query", "scope": "common", @@ -580,76 +538,32 @@ { "parentPluginId": "alerting", "id": "def-server.AlertingAuthorization.getFindAuthorizationFilter.$1", - "type": "Enum", - "tags": [], - "label": "authorizationEntity", - "description": [], - "signature": [ - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.AlertingAuthorizationEntity", - "text": "AlertingAuthorizationEntity" - } - ], - "path": "x-pack/plugins/alerting/server/authorization/alerting_authorization.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "alerting", - "id": "def-server.AlertingAuthorization.getFindAuthorizationFilter.$2", "type": "Object", "tags": [], - "label": "filterOpts", + "label": "params", "description": [], "signature": [ - "AlertingAuthorizationFilterOpts" + "GetFindAuthorizationFilterParams" ], "path": "x-pack/plugins/alerting/server/authorization/alerting_authorization.ts", "deprecated": false, "trackAdoption": false, "isRequired": true - }, - { - "parentPluginId": "alerting", - "id": "def-server.AlertingAuthorization.getFindAuthorizationFilter.$3", - "type": "Object", - "tags": [], - "label": "featuresIds", - "description": [], - "signature": [ - "Set | undefined" - ], - "path": "x-pack/plugins/alerting/server/authorization/alerting_authorization.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": false } ], "returnComment": [] }, { "parentPluginId": "alerting", - "id": "def-server.AlertingAuthorization.getAuthorizedRuleTypes", + "id": "def-server.AlertingAuthorization.getAllAuthorizedRuleTypesFindOperation", "type": "Function", "tags": [], - "label": "getAuthorizedRuleTypes", + "label": "getAllAuthorizedRuleTypesFindOperation", "description": [], "signature": [ - "(authorizationEntity: ", - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.AlertingAuthorizationEntity", - "text": "AlertingAuthorizationEntity" - }, - ", featuresIds?: Set | undefined) => Promise<", - "RegistryAlertTypeWithAuth", - "[]>" + "(params: GetAllAuthorizedRuleTypesFindOperationParams) => Promise<", + "AuthorizedRuleTypes", + ">" ], "path": "x-pack/plugins/alerting/server/authorization/alerting_authorization.ts", "deprecated": false, @@ -657,39 +571,18 @@ "children": [ { "parentPluginId": "alerting", - "id": "def-server.AlertingAuthorization.getAuthorizedRuleTypes.$1", - "type": "Enum", - "tags": [], - "label": "authorizationEntity", - "description": [], - "signature": [ - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.AlertingAuthorizationEntity", - "text": "AlertingAuthorizationEntity" - } - ], - "path": "x-pack/plugins/alerting/server/authorization/alerting_authorization.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "alerting", - "id": "def-server.AlertingAuthorization.getAuthorizedRuleTypes.$2", + "id": "def-server.AlertingAuthorization.getAllAuthorizedRuleTypesFindOperation.$1", "type": "Object", "tags": [], - "label": "featuresIds", + "label": "params", "description": [], "signature": [ - "Set | undefined" + "GetAllAuthorizedRuleTypesFindOperationParams" ], "path": "x-pack/plugins/alerting/server/authorization/alerting_authorization.ts", "deprecated": false, "trackAdoption": false, - "isRequired": false + "isRequired": true } ], "returnComment": [] @@ -702,33 +595,7 @@ "label": "getAuthorizationFilter", "description": [], "signature": [ - "(authorizationEntity: ", - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.AlertingAuthorizationEntity", - "text": "AlertingAuthorizationEntity" - }, - ", filterOpts: ", - "AlertingAuthorizationFilterOpts", - ", operation: ", - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.ReadOperations", - "text": "ReadOperations" - }, - " | ", - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.WriteOperations", - "text": "WriteOperations" - }, - ", featuresIds?: Set | undefined) => Promise<{ filter?: ", + "(params: GetAuthorizationFilterParams) => Promise<{ filter?: ", { "pluginId": "@kbn/es-query", "scope": "common", @@ -753,123 +620,32 @@ { "parentPluginId": "alerting", "id": "def-server.AlertingAuthorization.getAuthorizationFilter.$1", - "type": "Enum", - "tags": [], - "label": "authorizationEntity", - "description": [], - "signature": [ - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.AlertingAuthorizationEntity", - "text": "AlertingAuthorizationEntity" - } - ], - "path": "x-pack/plugins/alerting/server/authorization/alerting_authorization.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "alerting", - "id": "def-server.AlertingAuthorization.getAuthorizationFilter.$2", "type": "Object", "tags": [], - "label": "filterOpts", - "description": [], - "signature": [ - "AlertingAuthorizationFilterOpts" - ], - "path": "x-pack/plugins/alerting/server/authorization/alerting_authorization.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "alerting", - "id": "def-server.AlertingAuthorization.getAuthorizationFilter.$3", - "type": "CompoundType", - "tags": [], - "label": "operation", + "label": "params", "description": [], "signature": [ - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.ReadOperations", - "text": "ReadOperations" - }, - " | ", - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.WriteOperations", - "text": "WriteOperations" - } + "GetAuthorizationFilterParams" ], "path": "x-pack/plugins/alerting/server/authorization/alerting_authorization.ts", "deprecated": false, "trackAdoption": false, "isRequired": true - }, - { - "parentPluginId": "alerting", - "id": "def-server.AlertingAuthorization.getAuthorizationFilter.$4", - "type": "Object", - "tags": [], - "label": "featuresIds", - "description": [], - "signature": [ - "Set | undefined" - ], - "path": "x-pack/plugins/alerting/server/authorization/alerting_authorization.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": false } ], "returnComment": [] }, { "parentPluginId": "alerting", - "id": "def-server.AlertingAuthorization.filterByRuleTypeAuthorization", + "id": "def-server.AlertingAuthorization.getAuthorizedRuleTypes", "type": "Function", "tags": [], - "label": "filterByRuleTypeAuthorization", + "label": "getAuthorizedRuleTypes", "description": [], "signature": [ - "(ruleTypes: Set<", - "RegistryRuleType", - ">, operations: (", - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.ReadOperations", - "text": "ReadOperations" - }, - " | ", - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.WriteOperations", - "text": "WriteOperations" - }, - ")[], authorizationEntity: ", - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.AlertingAuthorizationEntity", - "text": "AlertingAuthorizationEntity" - }, - ") => Promise>" + "(params: GetAuthorizedRuleTypesParams) => Promise<", + "AuthorizedRuleTypes", + ">" ], "path": "x-pack/plugins/alerting/server/authorization/alerting_authorization.ts", "deprecated": false, @@ -877,67 +653,13 @@ "children": [ { "parentPluginId": "alerting", - "id": "def-server.AlertingAuthorization.filterByRuleTypeAuthorization.$1", + "id": "def-server.AlertingAuthorization.getAuthorizedRuleTypes.$1", "type": "Object", "tags": [], - "label": "ruleTypes", + "label": "params", "description": [], "signature": [ - "Set<", - "RegistryRuleType", - ">" - ], - "path": "x-pack/plugins/alerting/server/authorization/alerting_authorization.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "alerting", - "id": "def-server.AlertingAuthorization.filterByRuleTypeAuthorization.$2", - "type": "Array", - "tags": [], - "label": "operations", - "description": [], - "signature": [ - "(", - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.ReadOperations", - "text": "ReadOperations" - }, - " | ", - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.WriteOperations", - "text": "WriteOperations" - }, - ")[]" - ], - "path": "x-pack/plugins/alerting/server/authorization/alerting_authorization.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "alerting", - "id": "def-server.AlertingAuthorization.filterByRuleTypeAuthorization.$3", - "type": "Enum", - "tags": [], - "label": "authorizationEntity", - "description": [], - "signature": [ - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.AlertingAuthorizationEntity", - "text": "AlertingAuthorizationEntity" - } + "GetAuthorizedRuleTypesParams" ], "path": "x-pack/plugins/alerting/server/authorization/alerting_authorization.ts", "deprecated": false, @@ -1590,14 +1312,15 @@ "label": "getRulesClient", "description": [], "signature": [ - "() => ", + "() => Promise<", { "pluginId": "alerting", "scope": "server", "docId": "kibAlertingPluginApi", "section": "def-server.RulesClient", "text": "RulesClient" - } + }, + ">" ], "path": "x-pack/plugins/alerting/server/types.ts", "deprecated": false, @@ -1663,7 +1386,7 @@ "label": "listTypes", "description": [], "signature": [ - "() => Set<", + "() => Map" ], @@ -1739,8 +1462,8 @@ "pluginId": "alerting", "scope": "server", "docId": "kibAlertingPluginApi", - "section": "def-server.PluginSetupContract", - "text": "PluginSetupContract" + "section": "def-server.AlertingServerSetup", + "text": "AlertingServerSetup" } ], "path": "x-pack/plugins/alerting/server/types.ts", @@ -1759,8 +1482,8 @@ "pluginId": "alerting", "scope": "server", "docId": "kibAlertingPluginApi", - "section": "def-server.PluginStartContract", - "text": "PluginStartContract" + "section": "def-server.AlertingServerStart", + "text": "AlertingServerStart" } ], "path": "x-pack/plugins/alerting/server/types.ts", @@ -1772,137 +1495,63 @@ }, { "parentPluginId": "alerting", - "id": "def-server.BulkOperationError", - "type": "Interface", - "tags": [], - "label": "BulkOperationError", - "description": [], - "path": "x-pack/plugins/alerting/server/rules_client/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "alerting", - "id": "def-server.BulkOperationError.message", - "type": "string", - "tags": [], - "label": "message", - "description": [], - "path": "x-pack/plugins/alerting/server/rules_client/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "alerting", - "id": "def-server.BulkOperationError.status", - "type": "number", - "tags": [], - "label": "status", - "description": [], - "signature": [ - "number | undefined" - ], - "path": "x-pack/plugins/alerting/server/rules_client/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "alerting", - "id": "def-server.BulkOperationError.rule", - "type": "Object", - "tags": [], - "label": "rule", - "description": [], - "signature": [ - "{ id: string; name: string; }" - ], - "path": "x-pack/plugins/alerting/server/rules_client/types.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "alerting", - "id": "def-server.ConnectorAdapter", + "id": "def-server.AlertingServerSetup", "type": "Interface", "tags": [], - "label": "ConnectorAdapter", + "label": "AlertingServerSetup", "description": [], - "signature": [ - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.ConnectorAdapter", - "text": "ConnectorAdapter" - }, - "" - ], - "path": "x-pack/plugins/alerting/server/connector_adapters/types.ts", + "path": "x-pack/plugins/alerting/server/plugin.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "alerting", - "id": "def-server.ConnectorAdapter.connectorTypeId", - "type": "string", + "id": "def-server.AlertingServerSetup.registerConnectorAdapter", + "type": "Function", "tags": [], - "label": "connectorTypeId", + "label": "registerConnectorAdapter", "description": [], - "path": "x-pack/plugins/alerting/server/connector_adapters/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "alerting", - "id": "def-server.ConnectorAdapter.ruleActionParamsSchema", - "type": "Object", - "tags": [], - "label": "ruleActionParamsSchema", - "description": [ - "\nThe schema of the action persisted\nin the rule. The schema will be validated\nwhen a rule is created or updated.\nThe schema should be backwards compatible\nand should never introduce any breaking\nchanges." - ], "signature": [ + "(adapter: ", { - "pluginId": "@kbn/config-schema", - "scope": "common", - "docId": "kibKbnConfigSchemaPluginApi", - "section": "def-common.ObjectType", - "text": "ObjectType" + "pluginId": "alerting", + "scope": "server", + "docId": "kibAlertingPluginApi", + "section": "def-server.ConnectorAdapter", + "text": "ConnectorAdapter" }, - "" - ], - "path": "x-pack/plugins/alerting/server/connector_adapters/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "alerting", - "id": "def-server.ConnectorAdapter.buildActionParams", - "type": "Function", - "tags": [], - "label": "buildActionParams", - "description": [], - "signature": [ - "(args: BuildActionParamsArgs) => ConnectorParams" + ") => void" ], - "path": "x-pack/plugins/alerting/server/connector_adapters/types.ts", + "path": "x-pack/plugins/alerting/server/plugin.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "alerting", - "id": "def-server.ConnectorAdapter.buildActionParams.$1", + "id": "def-server.AlertingServerSetup.registerConnectorAdapter.$1", "type": "Object", "tags": [], - "label": "args", + "label": "adapter", "description": [], "signature": [ - "BuildActionParamsArgs" + { + "pluginId": "alerting", + "scope": "server", + "docId": "kibAlertingPluginApi", + "section": "def-server.ConnectorAdapter", + "text": "ConnectorAdapter" + }, + "" ], - "path": "x-pack/plugins/alerting/server/connector_adapters/types.ts", + "path": "x-pack/plugins/alerting/server/plugin.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -1912,81 +1561,120 @@ }, { "parentPluginId": "alerting", - "id": "def-server.ConnectorAdapter.getKibanaPrivileges", + "id": "def-server.AlertingServerSetup.registerType", "type": "Function", "tags": [], - "label": "getKibanaPrivileges", + "label": "registerType", "description": [], "signature": [ - "((args: { consumer: string; producer: string; }) => string[]) | undefined" + " = Record, InstanceContext extends { [x: string]: unknown; } = { [x: string]: unknown; }, ActionGroupIds extends string = never, RecoveryActionGroupId extends string = never, AlertData extends ", + { + "pluginId": "alerting", + "scope": "common", + "docId": "kibAlertingPluginApi", + "section": "def-common.RuleAlertData", + "text": "RuleAlertData" + }, + " = never>(ruleType: ", + { + "pluginId": "alerting", + "scope": "server", + "docId": "kibAlertingPluginApi", + "section": "def-server.RuleType", + "text": "RuleType" + }, + ") => void" ], - "path": "x-pack/plugins/alerting/server/connector_adapters/types.ts", + "path": "x-pack/plugins/alerting/server/plugin.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "alerting", - "id": "def-server.ConnectorAdapter.getKibanaPrivileges.$1", + "id": "def-server.AlertingServerSetup.registerType.$1", "type": "Object", "tags": [], - "label": "args", + "label": "ruleType", "description": [], - "path": "x-pack/plugins/alerting/server/connector_adapters/types.ts", + "signature": [ + { + "pluginId": "alerting", + "scope": "server", + "docId": "kibAlertingPluginApi", + "section": "def-server.RuleType", + "text": "RuleType" + }, + "" + ], + "path": "x-pack/plugins/alerting/server/plugin.ts", "deprecated": false, "trackAdoption": false, - "children": [ - { - "parentPluginId": "alerting", - "id": "def-server.ConnectorAdapter.getKibanaPrivileges.$1.consumer", - "type": "string", - "tags": [], - "label": "consumer", - "description": [], - "path": "x-pack/plugins/alerting/server/connector_adapters/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "alerting", - "id": "def-server.ConnectorAdapter.getKibanaPrivileges.$1.producer", - "type": "string", - "tags": [], - "label": "producer", - "description": [], - "path": "x-pack/plugins/alerting/server/connector_adapters/types.ts", - "deprecated": false, - "trackAdoption": false - } - ] + "isRequired": true } ], "returnComment": [] - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "alerting", - "id": "def-server.DataStreamAdapter", - "type": "Interface", - "tags": [], - "label": "DataStreamAdapter", - "description": [], - "path": "x-pack/plugins/alerting/server/alerts_service/lib/data_stream_adapter.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ + }, { "parentPluginId": "alerting", - "id": "def-server.DataStreamAdapter.isUsingDataStreams", + "id": "def-server.AlertingServerSetup.getSecurityHealth", "type": "Function", "tags": [], - "label": "isUsingDataStreams", + "label": "getSecurityHealth", "description": [], "signature": [ - "() => boolean" + "() => Promise<", + "SecurityHealth", + ">" ], - "path": "x-pack/plugins/alerting/server/alerts_service/lib/data_stream_adapter.ts", + "path": "x-pack/plugins/alerting/server/plugin.ts", "deprecated": false, "trackAdoption": false, "children": [], @@ -1994,84 +1682,63 @@ }, { "parentPluginId": "alerting", - "id": "def-server.DataStreamAdapter.getIndexTemplateFields", + "id": "def-server.AlertingServerSetup.getConfig", "type": "Function", "tags": [], - "label": "getIndexTemplateFields", + "label": "getConfig", "description": [], "signature": [ - "(alias: string, pattern: string) => ", - "IndexTemplateFields" - ], - "path": "x-pack/plugins/alerting/server/alerts_service/lib/data_stream_adapter.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "alerting", - "id": "def-server.DataStreamAdapter.getIndexTemplateFields.$1", - "type": "string", - "tags": [], - "label": "alias", - "description": [], - "signature": [ - "string" - ], - "path": "x-pack/plugins/alerting/server/alerts_service/lib/data_stream_adapter.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, + "() => ", { - "parentPluginId": "alerting", - "id": "def-server.DataStreamAdapter.getIndexTemplateFields.$2", - "type": "string", - "tags": [], - "label": "pattern", - "description": [], - "signature": [ - "string" - ], - "path": "x-pack/plugins/alerting/server/alerts_service/lib/data_stream_adapter.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true + "pluginId": "alerting", + "scope": "server", + "docId": "kibAlertingPluginApi", + "section": "def-server.AlertingRulesConfig", + "text": "AlertingRulesConfig" } ], + "path": "x-pack/plugins/alerting/server/plugin.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], "returnComment": [] }, { "parentPluginId": "alerting", - "id": "def-server.DataStreamAdapter.createStream", - "type": "Function", + "id": "def-server.AlertingServerSetup.frameworkAlerts", + "type": "CompoundType", "tags": [], - "label": "createStream", + "label": "frameworkAlerts", "description": [], "signature": [ - "(opts: ", - "CreateConcreteWriteIndexOpts", - ") => Promise" + "PublicAlertsService", + " & { enabled: () => boolean; }" ], - "path": "x-pack/plugins/alerting/server/alerts_service/lib/data_stream_adapter.ts", + "path": "x-pack/plugins/alerting/server/plugin.ts", "deprecated": false, - "trackAdoption": false, - "children": [ + "trackAdoption": false + }, + { + "parentPluginId": "alerting", + "id": "def-server.AlertingServerSetup.getDataStreamAdapter", + "type": "Function", + "tags": [], + "label": "getDataStreamAdapter", + "description": [], + "signature": [ + "() => ", { - "parentPluginId": "alerting", - "id": "def-server.DataStreamAdapter.createStream.$1", - "type": "Object", - "tags": [], - "label": "opts", - "description": [], - "signature": [ - "CreateConcreteWriteIndexOpts" - ], - "path": "x-pack/plugins/alerting/server/alerts_service/lib/data_stream_adapter.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true + "pluginId": "alerting", + "scope": "server", + "docId": "kibAlertingPluginApi", + "section": "def-server.DataStreamAdapter", + "text": "DataStreamAdapter" } ], + "path": "x-pack/plugins/alerting/server/plugin.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], "returnComment": [] } ], @@ -2079,373 +1746,590 @@ }, { "parentPluginId": "alerting", - "id": "def-server.FindResult", + "id": "def-server.AlertingServerStart", "type": "Interface", "tags": [], - "label": "FindResult", + "label": "AlertingServerStart", "description": [], - "signature": [ - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.FindResult", - "text": "FindResult" - }, - "" - ], - "path": "x-pack/plugins/alerting/server/application/rule/methods/find/find_rules.ts", + "path": "x-pack/plugins/alerting/server/plugin.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "alerting", - "id": "def-server.FindResult.page", - "type": "number", - "tags": [], - "label": "page", - "description": [], - "path": "x-pack/plugins/alerting/server/application/rule/methods/find/find_rules.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "alerting", - "id": "def-server.FindResult.perPage", - "type": "number", + "id": "def-server.AlertingServerStart.listTypes", + "type": "Function", "tags": [], - "label": "perPage", + "label": "listTypes", "description": [], - "path": "x-pack/plugins/alerting/server/application/rule/methods/find/find_rules.ts", + "signature": [ + "() => Map" + ], + "path": "x-pack/plugins/alerting/server/plugin.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "returnComment": [], + "children": [] }, { "parentPluginId": "alerting", - "id": "def-server.FindResult.total", - "type": "number", + "id": "def-server.AlertingServerStart.getAllTypes", + "type": "Function", "tags": [], - "label": "total", + "label": "getAllTypes", "description": [], - "path": "x-pack/plugins/alerting/server/application/rule/methods/find/find_rules.ts", + "signature": [ + "() => string[]" + ], + "path": "x-pack/plugins/alerting/server/plugin.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "returnComment": [], + "children": [] }, { "parentPluginId": "alerting", - "id": "def-server.FindResult.data", - "type": "Array", + "id": "def-server.AlertingServerStart.getType", + "type": "Function", "tags": [], - "label": "data", + "label": "getType", "description": [], "signature": [ + "[]" - ], - "path": "x-pack/plugins/alerting/server/application/rule/methods/find/find_rules.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "alerting", - "id": "def-server.GetViewInAppRelativeUrlFnOpts", - "type": "Interface", - "tags": [], - "label": "GetViewInAppRelativeUrlFnOpts", - "description": [], - "signature": [ - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.GetViewInAppRelativeUrlFnOpts", - "text": "GetViewInAppRelativeUrlFnOpts" - }, - "" - ], - "path": "x-pack/plugins/alerting/server/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "alerting", - "id": "def-server.GetViewInAppRelativeUrlFnOpts.rule", - "type": "CompoundType", - "tags": [], - "label": "rule", - "description": [], - "signature": [ - "Pick<", + " = ", { "pluginId": "@kbn/alerting-types", "scope": "common", "docId": "kibKbnAlertingTypesPluginApi", - "section": "def-common.SanitizedRule", - "text": "SanitizedRule" + "section": "def-common.RuleTypeParams", + "text": "RuleTypeParams" }, - ", \"id\"> & Omit>, \"viewInAppRelativeUrl\">" + " = ", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.RuleTypeParams", + "text": "RuleTypeParams" + }, + ", State extends ", + { + "pluginId": "alerting", + "scope": "common", + "docId": "kibAlertingPluginApi", + "section": "def-common.RuleTypeState", + "text": "RuleTypeState" + }, + " = ", + { + "pluginId": "alerting", + "scope": "common", + "docId": "kibAlertingPluginApi", + "section": "def-common.RuleTypeState", + "text": "RuleTypeState" + }, + ", InstanceState extends Record = Record, InstanceContext extends { [x: string]: unknown; } = { [x: string]: unknown; }, ActionGroupIds extends string = string, RecoveryActionGroupId extends string = string, AlertData extends ", + { + "pluginId": "alerting", + "scope": "common", + "docId": "kibAlertingPluginApi", + "section": "def-common.RuleAlertData", + "text": "RuleAlertData" + }, + " = ", + { + "pluginId": "alerting", + "scope": "common", + "docId": "kibAlertingPluginApi", + "section": "def-common.RuleAlertData", + "text": "RuleAlertData" + }, + ">(id: string) => ", + "NormalizedRuleType", + "" ], - "path": "x-pack/plugins/alerting/server/types.ts", + "path": "x-pack/plugins/alerting/server/plugin.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "alerting", + "id": "def-server.AlertingServerStart.getType.$1", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "path": "x-pack/plugins/alerting/server/rule_type_registry.ts", + "deprecated": false, + "trackAdoption": false + } + ] }, { "parentPluginId": "alerting", - "id": "def-server.GetViewInAppRelativeUrlFnOpts.start", - "type": "number", + "id": "def-server.AlertingServerStart.getAlertIndicesAlias", + "type": "Function", "tags": [], - "label": "start", + "label": "getAlertIndicesAlias", "description": [], "signature": [ - "number | undefined" + "(rulesTypes: string[], spaceId?: string | undefined) => string[]" ], - "path": "x-pack/plugins/alerting/server/types.ts", + "path": "x-pack/plugins/alerting/server/plugin.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "alerting", + "id": "def-server.AlertingServerStart.getAlertIndicesAlias.$1", + "type": "Array", + "tags": [], + "label": "rulesTypes", + "description": [], + "signature": [ + "string[]" + ], + "path": "x-pack/plugins/alerting/server/lib/create_get_alert_indices_alias.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "alerting", + "id": "def-server.AlertingServerStart.getAlertIndicesAlias.$2", + "type": "string", + "tags": [], + "label": "spaceId", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/alerting/server/lib/create_get_alert_indices_alias.ts", + "deprecated": false, + "trackAdoption": false + } + ] }, { "parentPluginId": "alerting", - "id": "def-server.GetViewInAppRelativeUrlFnOpts.end", - "type": "number", + "id": "def-server.AlertingServerStart.getRulesClientWithRequest", + "type": "Function", "tags": [], - "label": "end", + "label": "getRulesClientWithRequest", "description": [], "signature": [ - "number | undefined" + "(request: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.KibanaRequest", + "text": "KibanaRequest" + }, + ") => Promise<", + "RulesClientApi", + ">" ], - "path": "x-pack/plugins/alerting/server/types.ts", + "path": "x-pack/plugins/alerting/server/plugin.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "children": [ + { + "parentPluginId": "alerting", + "id": "def-server.AlertingServerStart.getRulesClientWithRequest.$1", + "type": "Object", + "tags": [], + "label": "request", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.KibanaRequest", + "text": "KibanaRequest" + }, + "" + ], + "path": "x-pack/plugins/alerting/server/plugin.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "alerting", + "id": "def-server.AlertingServerStart.getAlertingAuthorizationWithRequest", + "type": "Function", + "tags": [], + "label": "getAlertingAuthorizationWithRequest", + "description": [], + "signature": [ + "(request: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.KibanaRequest", + "text": "KibanaRequest" + }, + ") => Promise<", + { + "pluginId": "@kbn/utility-types", + "scope": "common", + "docId": "kibKbnUtilityTypesPluginApi", + "section": "def-common.PublicMethodsOf", + "text": "PublicMethodsOf" + }, + "<", + { + "pluginId": "alerting", + "scope": "server", + "docId": "kibAlertingPluginApi", + "section": "def-server.AlertingAuthorization", + "text": "AlertingAuthorization" + }, + ">>" + ], + "path": "x-pack/plugins/alerting/server/plugin.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "alerting", + "id": "def-server.AlertingServerStart.getAlertingAuthorizationWithRequest.$1", + "type": "Object", + "tags": [], + "label": "request", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.KibanaRequest", + "text": "KibanaRequest" + }, + "" + ], + "path": "x-pack/plugins/alerting/server/plugin.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "alerting", + "id": "def-server.AlertingServerStart.getFrameworkHealth", + "type": "Function", + "tags": [], + "label": "getFrameworkHealth", + "description": [], + "signature": [ + "() => Promise<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.AlertsHealth", + "text": "AlertsHealth" + }, + ">" + ], + "path": "x-pack/plugins/alerting/server/plugin.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] } ], "initialIsOpen": false }, { "parentPluginId": "alerting", - "id": "def-server.IRuleTypeAlerts", + "id": "def-server.BulkOperationError", "type": "Interface", "tags": [], - "label": "IRuleTypeAlerts", + "label": "BulkOperationError", "description": [], - "signature": [ - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.IRuleTypeAlerts", - "text": "IRuleTypeAlerts" - }, - "" - ], - "path": "x-pack/plugins/alerting/server/types.ts", + "path": "x-pack/plugins/alerting/server/rules_client/types.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "alerting", - "id": "def-server.IRuleTypeAlerts.context", + "id": "def-server.BulkOperationError.message", "type": "string", "tags": [], - "label": "context", - "description": [ - "\nSpecifies the target alerts-as-data resource\nfor this rule type. All alerts created with the same\ncontext are written to the same alerts-as-data index.\n\nAll custom mappings defined for a context must be the same!" - ], - "path": "x-pack/plugins/alerting/server/types.ts", + "label": "message", + "description": [], + "path": "x-pack/plugins/alerting/server/rules_client/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "alerting", - "id": "def-server.IRuleTypeAlerts.mappings", - "type": "Object", + "id": "def-server.BulkOperationError.status", + "type": "number", "tags": [], - "label": "mappings", - "description": [ - "\nSpecifies custom mappings for the target alerts-as-data\nindex. These mappings will be translated into a component template\nand used in the index template for the index." - ], + "label": "status", + "description": [], "signature": [ - "ComponentTemplateSpec" + "number | undefined" ], - "path": "x-pack/plugins/alerting/server/types.ts", + "path": "x-pack/plugins/alerting/server/rules_client/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "alerting", - "id": "def-server.IRuleTypeAlerts.shouldWrite", - "type": "CompoundType", + "id": "def-server.BulkOperationError.rule", + "type": "Object", "tags": [], - "label": "shouldWrite", - "description": [ - "\nOptional flag to opt into writing alerts as data. When not specified\ndefaults to false. We need this because we needed all previous rule\nregistry rules to register with the framework in order to install\nElasticsearch assets but we don't want to migrate them to using\nthe framework for writing alerts as data until all the pieces are ready" - ], + "label": "rule", + "description": [], "signature": [ - "boolean | undefined" + "{ id: string; name: string; }" ], - "path": "x-pack/plugins/alerting/server/types.ts", + "path": "x-pack/plugins/alerting/server/rules_client/types.ts", "deprecated": false, "trackAdoption": false - }, + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "alerting", + "id": "def-server.ConnectorAdapter", + "type": "Interface", + "tags": [], + "label": "ConnectorAdapter", + "description": [], + "signature": [ { - "parentPluginId": "alerting", - "id": "def-server.IRuleTypeAlerts.useEcs", - "type": "CompoundType", - "tags": [], - "label": "useEcs", - "description": [ - "\nOptional flag to include a reference to the ECS component template." - ], - "signature": [ - "boolean | undefined" - ], - "path": "x-pack/plugins/alerting/server/types.ts", - "deprecated": false, - "trackAdoption": false + "pluginId": "alerting", + "scope": "server", + "docId": "kibAlertingPluginApi", + "section": "def-server.ConnectorAdapter", + "text": "ConnectorAdapter" }, + "" + ], + "path": "x-pack/plugins/alerting/server/connector_adapters/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ { "parentPluginId": "alerting", - "id": "def-server.IRuleTypeAlerts.useLegacyAlerts", - "type": "CompoundType", + "id": "def-server.ConnectorAdapter.connectorTypeId", + "type": "string", "tags": [], - "label": "useLegacyAlerts", - "description": [ - "\nOptional flag to include a reference to the legacy alert component template.\nAny rule type that is migrating from the rule registry should set this\nflag to true to ensure their alerts-as-data indices are backwards compatible." - ], - "signature": [ - "boolean | undefined" - ], - "path": "x-pack/plugins/alerting/server/types.ts", + "label": "connectorTypeId", + "description": [], + "path": "x-pack/plugins/alerting/server/connector_adapters/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "alerting", - "id": "def-server.IRuleTypeAlerts.isSpaceAware", - "type": "CompoundType", + "id": "def-server.ConnectorAdapter.ruleActionParamsSchema", + "type": "Object", "tags": [], - "label": "isSpaceAware", + "label": "ruleActionParamsSchema", "description": [ - "\nOptional flag to indicate that resources should be space-aware. When set to\ntrue, alerts-as-data resources will be created for every space where a rule\nof this type runs." + "\nThe schema of the action persisted\nin the rule. The schema will be validated\nwhen a rule is created or updated.\nThe schema should be backwards compatible\nand should never introduce any breaking\nchanges." ], "signature": [ - "boolean | undefined" + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.ObjectType", + "text": "ObjectType" + }, + "" ], - "path": "x-pack/plugins/alerting/server/types.ts", + "path": "x-pack/plugins/alerting/server/connector_adapters/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "alerting", - "id": "def-server.IRuleTypeAlerts.secondaryAlias", - "type": "string", + "id": "def-server.ConnectorAdapter.buildActionParams", + "type": "Function", "tags": [], - "label": "secondaryAlias", - "description": [ - "\nOptional secondary alias to use. This alias should not include the namespace." - ], + "label": "buildActionParams", + "description": [], "signature": [ - "string | undefined" + "(args: BuildActionParamsArgs) => ConnectorParams" ], - "path": "x-pack/plugins/alerting/server/types.ts", + "path": "x-pack/plugins/alerting/server/connector_adapters/types.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "children": [ + { + "parentPluginId": "alerting", + "id": "def-server.ConnectorAdapter.buildActionParams.$1", + "type": "Object", + "tags": [], + "label": "args", + "description": [], + "signature": [ + "BuildActionParamsArgs" + ], + "path": "x-pack/plugins/alerting/server/connector_adapters/types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] }, { "parentPluginId": "alerting", - "id": "def-server.IRuleTypeAlerts.formatAlert", + "id": "def-server.ConnectorAdapter.getKibanaPrivileges", "type": "Function", "tags": [], - "label": "formatAlert", - "description": [ - "\nOptional function to format each alert in summarizedAlerts right after fetching them." - ], + "label": "getKibanaPrivileges", + "description": [], "signature": [ - "FormatAlert", - " | undefined" + "((args: { consumer: string; producer: string; }) => string[]) | undefined" ], - "path": "x-pack/plugins/alerting/server/types.ts", + "path": "x-pack/plugins/alerting/server/connector_adapters/types.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "children": [ + { + "parentPluginId": "alerting", + "id": "def-server.ConnectorAdapter.getKibanaPrivileges.$1", + "type": "Object", + "tags": [], + "label": "args", + "description": [], + "path": "x-pack/plugins/alerting/server/connector_adapters/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "alerting", + "id": "def-server.ConnectorAdapter.getKibanaPrivileges.$1.consumer", + "type": "string", + "tags": [], + "label": "consumer", + "description": [], + "path": "x-pack/plugins/alerting/server/connector_adapters/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "alerting", + "id": "def-server.ConnectorAdapter.getKibanaPrivileges.$1.producer", + "type": "string", + "tags": [], + "label": "producer", + "description": [], + "path": "x-pack/plugins/alerting/server/connector_adapters/types.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [] } ], "initialIsOpen": false }, { "parentPluginId": "alerting", - "id": "def-server.PluginSetupContract", + "id": "def-server.DataStreamAdapter", "type": "Interface", "tags": [], - "label": "PluginSetupContract", + "label": "DataStreamAdapter", "description": [], - "path": "x-pack/plugins/alerting/server/plugin.ts", + "path": "x-pack/plugins/alerting/server/alerts_service/lib/data_stream_adapter.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "alerting", - "id": "def-server.PluginSetupContract.registerConnectorAdapter", + "id": "def-server.DataStreamAdapter.isUsingDataStreams", "type": "Function", "tags": [], - "label": "registerConnectorAdapter", + "label": "isUsingDataStreams", "description": [], "signature": [ - "(adapter: ", - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.ConnectorAdapter", - "text": "ConnectorAdapter" - }, - ") => void" + "() => boolean" ], - "path": "x-pack/plugins/alerting/server/plugin.ts", + "path": "x-pack/plugins/alerting/server/alerts_service/lib/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "alerting", + "id": "def-server.DataStreamAdapter.getIndexTemplateFields", + "type": "Function", + "tags": [], + "label": "getIndexTemplateFields", + "description": [], + "signature": [ + "(alias: string, pattern: string) => ", + "IndexTemplateFields" + ], + "path": "x-pack/plugins/alerting/server/alerts_service/lib/data_stream_adapter.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "alerting", - "id": "def-server.PluginSetupContract.registerConnectorAdapter.$1", - "type": "Object", + "id": "def-server.DataStreamAdapter.getIndexTemplateFields.$1", + "type": "string", "tags": [], - "label": "adapter", + "label": "alias", "description": [], "signature": [ - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.ConnectorAdapter", - "text": "ConnectorAdapter" - }, - "" + "string" ], - "path": "x-pack/plugins/alerting/server/plugin.ts", + "path": "x-pack/plugins/alerting/server/alerts_service/lib/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "alerting", + "id": "def-server.DataStreamAdapter.getIndexTemplateFields.$2", + "type": "string", + "tags": [], + "label": "pattern", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/plugins/alerting/server/alerts_service/lib/data_stream_adapter.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -2455,507 +2339,347 @@ }, { "parentPluginId": "alerting", - "id": "def-server.PluginSetupContract.registerType", + "id": "def-server.DataStreamAdapter.createStream", "type": "Function", "tags": [], - "label": "registerType", + "label": "createStream", "description": [], "signature": [ - " = Record, InstanceContext extends { [x: string]: unknown; } = { [x: string]: unknown; }, ActionGroupIds extends string = never, RecoveryActionGroupId extends string = never, AlertData extends ", - { - "pluginId": "alerting", - "scope": "common", - "docId": "kibAlertingPluginApi", - "section": "def-common.RuleAlertData", - "text": "RuleAlertData" - }, - " = never>(ruleType: ", - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.RuleType", - "text": "RuleType" - }, - ") => void" + "(opts: ", + "CreateConcreteWriteIndexOpts", + ") => Promise" ], - "path": "x-pack/plugins/alerting/server/plugin.ts", + "path": "x-pack/plugins/alerting/server/alerts_service/lib/data_stream_adapter.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "alerting", - "id": "def-server.PluginSetupContract.registerType.$1", - "type": "Object", - "tags": [], - "label": "ruleType", - "description": [], - "signature": [ - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.RuleType", - "text": "RuleType" - }, - "" + "id": "def-server.DataStreamAdapter.createStream.$1", + "type": "Object", + "tags": [], + "label": "opts", + "description": [], + "signature": [ + "CreateConcreteWriteIndexOpts" ], - "path": "x-pack/plugins/alerting/server/plugin.ts", + "path": "x-pack/plugins/alerting/server/alerts_service/lib/data_stream_adapter.ts", "deprecated": false, "trackAdoption": false, "isRequired": true } ], "returnComment": [] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "alerting", + "id": "def-server.FindResult", + "type": "Interface", + "tags": [], + "label": "FindResult", + "description": [], + "signature": [ + { + "pluginId": "alerting", + "scope": "server", + "docId": "kibAlertingPluginApi", + "section": "def-server.FindResult", + "text": "FindResult" }, + "" + ], + "path": "x-pack/plugins/alerting/server/application/rule/methods/find/find_rules.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ { "parentPluginId": "alerting", - "id": "def-server.PluginSetupContract.getSecurityHealth", - "type": "Function", + "id": "def-server.FindResult.page", + "type": "number", "tags": [], - "label": "getSecurityHealth", + "label": "page", "description": [], - "signature": [ - "() => Promise<", - "SecurityHealth", - ">" - ], - "path": "x-pack/plugins/alerting/server/plugin.ts", + "path": "x-pack/plugins/alerting/server/application/rule/methods/find/find_rules.ts", "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] + "trackAdoption": false }, { "parentPluginId": "alerting", - "id": "def-server.PluginSetupContract.getConfig", - "type": "Function", + "id": "def-server.FindResult.perPage", + "type": "number", "tags": [], - "label": "getConfig", + "label": "perPage", "description": [], - "signature": [ - "() => ", - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.AlertingRulesConfig", - "text": "AlertingRulesConfig" - } - ], - "path": "x-pack/plugins/alerting/server/plugin.ts", + "path": "x-pack/plugins/alerting/server/application/rule/methods/find/find_rules.ts", "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] + "trackAdoption": false }, { "parentPluginId": "alerting", - "id": "def-server.PluginSetupContract.frameworkAlerts", - "type": "CompoundType", + "id": "def-server.FindResult.total", + "type": "number", "tags": [], - "label": "frameworkAlerts", + "label": "total", "description": [], - "signature": [ - "PublicAlertsService", - " & { enabled: () => boolean; }" - ], - "path": "x-pack/plugins/alerting/server/plugin.ts", + "path": "x-pack/plugins/alerting/server/application/rule/methods/find/find_rules.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "alerting", - "id": "def-server.PluginSetupContract.getDataStreamAdapter", - "type": "Function", + "id": "def-server.FindResult.data", + "type": "Array", "tags": [], - "label": "getDataStreamAdapter", + "label": "data", "description": [], "signature": [ - "() => ", { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.DataStreamAdapter", - "text": "DataStreamAdapter" - } + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.SanitizedRule", + "text": "SanitizedRule" + }, + "[]" ], - "path": "x-pack/plugins/alerting/server/plugin.ts", + "path": "x-pack/plugins/alerting/server/application/rule/methods/find/find_rules.ts", "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] + "trackAdoption": false } ], "initialIsOpen": false }, { "parentPluginId": "alerting", - "id": "def-server.PluginStartContract", + "id": "def-server.GetViewInAppRelativeUrlFnOpts", "type": "Interface", "tags": [], - "label": "PluginStartContract", + "label": "GetViewInAppRelativeUrlFnOpts", "description": [], - "path": "x-pack/plugins/alerting/server/plugin.ts", + "signature": [ + { + "pluginId": "alerting", + "scope": "server", + "docId": "kibAlertingPluginApi", + "section": "def-server.GetViewInAppRelativeUrlFnOpts", + "text": "GetViewInAppRelativeUrlFnOpts" + }, + "" + ], + "path": "x-pack/plugins/alerting/server/types.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "alerting", - "id": "def-server.PluginStartContract.listTypes", - "type": "Function", + "id": "def-server.GetViewInAppRelativeUrlFnOpts.rule", + "type": "CompoundType", "tags": [], - "label": "listTypes", + "label": "rule", "description": [], "signature": [ - "() => Set<", - "RegistryRuleType", - ">" + "Pick<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.SanitizedRule", + "text": "SanitizedRule" + }, + ", \"id\"> & Omit>, \"viewInAppRelativeUrl\">" ], - "path": "x-pack/plugins/alerting/server/plugin.ts", + "path": "x-pack/plugins/alerting/server/types.ts", "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [] + "trackAdoption": false }, { "parentPluginId": "alerting", - "id": "def-server.PluginStartContract.getAllTypes", - "type": "Function", + "id": "def-server.GetViewInAppRelativeUrlFnOpts.start", + "type": "number", "tags": [], - "label": "getAllTypes", + "label": "start", "description": [], "signature": [ - "() => string[]" + "number | undefined" ], - "path": "x-pack/plugins/alerting/server/plugin.ts", + "path": "x-pack/plugins/alerting/server/types.ts", "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [] + "trackAdoption": false }, { "parentPluginId": "alerting", - "id": "def-server.PluginStartContract.getType", - "type": "Function", + "id": "def-server.GetViewInAppRelativeUrlFnOpts.end", + "type": "number", "tags": [], - "label": "getType", + "label": "end", "description": [], "signature": [ - " = Record, InstanceContext extends { [x: string]: unknown; } = { [x: string]: unknown; }, ActionGroupIds extends string = string, RecoveryActionGroupId extends string = string, AlertData extends ", - { - "pluginId": "alerting", - "scope": "common", - "docId": "kibAlertingPluginApi", - "section": "def-common.RuleAlertData", - "text": "RuleAlertData" - }, - " = ", - { - "pluginId": "alerting", - "scope": "common", - "docId": "kibAlertingPluginApi", - "section": "def-common.RuleAlertData", - "text": "RuleAlertData" - }, - ">(id: string) => ", - "NormalizedRuleType", - "" + "number | undefined" + ], + "path": "x-pack/plugins/alerting/server/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "alerting", + "id": "def-server.IRuleTypeAlerts", + "type": "Interface", + "tags": [], + "label": "IRuleTypeAlerts", + "description": [], + "signature": [ + { + "pluginId": "alerting", + "scope": "server", + "docId": "kibAlertingPluginApi", + "section": "def-server.IRuleTypeAlerts", + "text": "IRuleTypeAlerts" + }, + "" + ], + "path": "x-pack/plugins/alerting/server/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "alerting", + "id": "def-server.IRuleTypeAlerts.context", + "type": "string", + "tags": [], + "label": "context", + "description": [ + "\nSpecifies the target alerts-as-data resource\nfor this rule type. All alerts created with the same\ncontext are written to the same alerts-as-data index.\n\nAll custom mappings defined for a context must be the same!" ], - "path": "x-pack/plugins/alerting/server/plugin.ts", + "path": "x-pack/plugins/alerting/server/types.ts", "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "alerting", - "id": "def-server.PluginStartContract.getType.$1", - "type": "string", - "tags": [], - "label": "id", - "description": [], - "path": "x-pack/plugins/alerting/server/rule_type_registry.ts", - "deprecated": false, - "trackAdoption": false - } - ] + "trackAdoption": false }, { "parentPluginId": "alerting", - "id": "def-server.PluginStartContract.getAlertIndicesAlias", - "type": "Function", + "id": "def-server.IRuleTypeAlerts.mappings", + "type": "Object", "tags": [], - "label": "getAlertIndicesAlias", - "description": [], + "label": "mappings", + "description": [ + "\nSpecifies custom mappings for the target alerts-as-data\nindex. These mappings will be translated into a component template\nand used in the index template for the index." + ], "signature": [ - "(rulesTypes: string[], spaceId?: string | undefined) => string[]" + "ComponentTemplateSpec" ], - "path": "x-pack/plugins/alerting/server/plugin.ts", + "path": "x-pack/plugins/alerting/server/types.ts", "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "alerting", - "id": "def-server.PluginStartContract.getAlertIndicesAlias.$1", - "type": "Array", - "tags": [], - "label": "rulesTypes", - "description": [], - "signature": [ - "string[]" - ], - "path": "x-pack/plugins/alerting/server/lib/create_get_alert_indices_alias.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "alerting", - "id": "def-server.PluginStartContract.getAlertIndicesAlias.$2", - "type": "string", - "tags": [], - "label": "spaceId", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "x-pack/plugins/alerting/server/lib/create_get_alert_indices_alias.ts", - "deprecated": false, - "trackAdoption": false - } - ] + "trackAdoption": false }, { "parentPluginId": "alerting", - "id": "def-server.PluginStartContract.getRulesClientWithRequest", - "type": "Function", + "id": "def-server.IRuleTypeAlerts.shouldWrite", + "type": "CompoundType", "tags": [], - "label": "getRulesClientWithRequest", - "description": [], + "label": "shouldWrite", + "description": [ + "\nOptional flag to opt into writing alerts as data. When not specified\ndefaults to false. We need this because we needed all previous rule\nregistry rules to register with the framework in order to install\nElasticsearch assets but we don't want to migrate them to using\nthe framework for writing alerts as data until all the pieces are ready" + ], "signature": [ - "(request: ", - { - "pluginId": "@kbn/core-http-server", - "scope": "server", - "docId": "kibKbnCoreHttpServerPluginApi", - "section": "def-server.KibanaRequest", - "text": "KibanaRequest" - }, - ") => ", - "RulesClientApi" + "boolean | undefined" ], - "path": "x-pack/plugins/alerting/server/plugin.ts", + "path": "x-pack/plugins/alerting/server/types.ts", "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "alerting", - "id": "def-server.PluginStartContract.getRulesClientWithRequest.$1", - "type": "Object", - "tags": [], - "label": "request", - "description": [], - "signature": [ - { - "pluginId": "@kbn/core-http-server", - "scope": "server", - "docId": "kibKbnCoreHttpServerPluginApi", - "section": "def-server.KibanaRequest", - "text": "KibanaRequest" - }, - "" - ], - "path": "x-pack/plugins/alerting/server/plugin.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } + "trackAdoption": false + }, + { + "parentPluginId": "alerting", + "id": "def-server.IRuleTypeAlerts.useEcs", + "type": "CompoundType", + "tags": [], + "label": "useEcs", + "description": [ + "\nOptional flag to include a reference to the ECS component template." ], - "returnComment": [] + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/plugins/alerting/server/types.ts", + "deprecated": false, + "trackAdoption": false }, { "parentPluginId": "alerting", - "id": "def-server.PluginStartContract.getAlertingAuthorizationWithRequest", - "type": "Function", + "id": "def-server.IRuleTypeAlerts.useLegacyAlerts", + "type": "CompoundType", "tags": [], - "label": "getAlertingAuthorizationWithRequest", - "description": [], + "label": "useLegacyAlerts", + "description": [ + "\nOptional flag to include a reference to the legacy alert component template.\nAny rule type that is migrating from the rule registry should set this\nflag to true to ensure their alerts-as-data indices are backwards compatible." + ], "signature": [ - "(request: ", - { - "pluginId": "@kbn/core-http-server", - "scope": "server", - "docId": "kibKbnCoreHttpServerPluginApi", - "section": "def-server.KibanaRequest", - "text": "KibanaRequest" - }, - ") => ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.PublicMethodsOf", - "text": "PublicMethodsOf" - }, - "<", - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.AlertingAuthorization", - "text": "AlertingAuthorization" - }, - ">" + "boolean | undefined" ], - "path": "x-pack/plugins/alerting/server/plugin.ts", + "path": "x-pack/plugins/alerting/server/types.ts", "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "alerting", - "id": "def-server.PluginStartContract.getAlertingAuthorizationWithRequest.$1", - "type": "Object", - "tags": [], - "label": "request", - "description": [], - "signature": [ - { - "pluginId": "@kbn/core-http-server", - "scope": "server", - "docId": "kibKbnCoreHttpServerPluginApi", - "section": "def-server.KibanaRequest", - "text": "KibanaRequest" - }, - "" - ], - "path": "x-pack/plugins/alerting/server/plugin.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } + "trackAdoption": false + }, + { + "parentPluginId": "alerting", + "id": "def-server.IRuleTypeAlerts.isSpaceAware", + "type": "CompoundType", + "tags": [], + "label": "isSpaceAware", + "description": [ + "\nOptional flag to indicate that resources should be space-aware. When set to\ntrue, alerts-as-data resources will be created for every space where a rule\nof this type runs." ], - "returnComment": [] + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/plugins/alerting/server/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "alerting", + "id": "def-server.IRuleTypeAlerts.secondaryAlias", + "type": "string", + "tags": [], + "label": "secondaryAlias", + "description": [ + "\nOptional secondary alias to use. This alias should not include the namespace." + ], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/alerting/server/types.ts", + "deprecated": false, + "trackAdoption": false }, { "parentPluginId": "alerting", - "id": "def-server.PluginStartContract.getFrameworkHealth", + "id": "def-server.IRuleTypeAlerts.formatAlert", "type": "Function", "tags": [], - "label": "getFrameworkHealth", - "description": [], + "label": "formatAlert", + "description": [ + "\nOptional function to format each alert in summarizedAlerts right after fetching them." + ], "signature": [ - "() => Promise<", - { - "pluginId": "@kbn/alerting-types", - "scope": "common", - "docId": "kibKbnAlertingTypesPluginApi", - "section": "def-common.AlertsHealth", - "text": "AlertsHealth" - }, - ">" + "FormatAlert", + " | undefined" ], - "path": "x-pack/plugins/alerting/server/plugin.ts", + "path": "x-pack/plugins/alerting/server/types.ts", "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] + "trackAdoption": false } ], "initialIsOpen": false @@ -4544,7 +4268,7 @@ "tags": [], "label": "AlertingAuthorizationEntity", "description": [], - "path": "x-pack/plugins/alerting/server/authorization/alerting_authorization.ts", + "path": "x-pack/plugins/alerting/server/authorization/types.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4568,7 +4292,7 @@ "tags": [], "label": "ReadOperations", "description": [], - "path": "x-pack/plugins/alerting/server/authorization/alerting_authorization.ts", + "path": "x-pack/plugins/alerting/server/authorization/types.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -4592,7 +4316,7 @@ "tags": [], "label": "WriteOperations", "description": [], - "path": "x-pack/plugins/alerting/server/authorization/alerting_authorization.ts", + "path": "x-pack/plugins/alerting/server/authorization/types.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5014,7 +4738,7 @@ "section": "def-common.RuleTypeParams", "text": "RuleTypeParams" }, - " = never>(params?: Readonly<{ options?: Readonly<{ page?: number | undefined; filter?: string | Record | undefined; search?: string | undefined; perPage?: number | undefined; defaultSearchOperator?: \"AND\" | \"OR\" | undefined; searchFields?: string[] | undefined; sortField?: string | undefined; sortOrder?: \"asc\" | \"desc\" | undefined; hasReference?: Readonly<{} & { id: string; type: string; }> | undefined; fields?: string[] | undefined; filterConsumers?: string[] | undefined; } & {}> | undefined; includeSnoozeData?: boolean | undefined; excludeFromPublicApi?: boolean | undefined; featureIds?: string[] | undefined; } & {}> | undefined) => Promise<", + " = never>(params?: Readonly<{ options?: Readonly<{ page?: number | undefined; filter?: string | Record | undefined; search?: string | undefined; perPage?: number | undefined; defaultSearchOperator?: \"AND\" | \"OR\" | undefined; searchFields?: string[] | undefined; sortField?: string | undefined; sortOrder?: \"asc\" | \"desc\" | undefined; hasReference?: Readonly<{} & { id: string; type: string; }> | undefined; fields?: string[] | undefined; ruleTypeIds?: string[] | undefined; consumers?: string[] | undefined; } & {}> | undefined; includeSnoozeData?: boolean | undefined; excludeFromPublicApi?: boolean | undefined; } & {}> | undefined) => Promise<", { "pluginId": "alerting", "scope": "server", @@ -5126,9 +4850,9 @@ "SnoozeRuleOptions", ") => Promise; unsnooze: (options: ", "UnsnoozeParams", - ") => Promise; unmuteAll: (options: { id: string; }) => Promise; muteInstance: (options: Readonly<{} & { alertId: string; alertInstanceId: string; }>) => Promise; unmuteInstance: (options: Readonly<{} & { alertId: string; alertInstanceId: string; }>) => Promise; bulkUntrackAlerts: (options: Readonly<{ indices?: string[] | undefined; featureIds?: string[] | undefined; alertUuids?: string[] | undefined; query?: any[] | undefined; } & { isUsingQuery: boolean; }>) => Promise; runSoon: (options: { id: string; }) => Promise; listRuleTypes: () => Promise Promise; unmuteAll: (options: { id: string; }) => Promise; muteInstance: (options: Readonly<{} & { alertId: string; alertInstanceId: string; }>) => Promise; unmuteInstance: (options: Readonly<{} & { alertId: string; alertInstanceId: string; }>) => Promise; bulkUntrackAlerts: (options: Readonly<{ indices?: string[] | undefined; ruleTypeIds?: string[] | undefined; alertUuids?: string[] | undefined; query?: any[] | undefined; } & { isUsingQuery: boolean; }>) => Promise; runSoon: (options: { id: string; }) => Promise; listRuleTypes: () => Promise<", "RegistryAlertTypeWithAuth", - ">>; scheduleBackfill: (params: Readonly<{ end?: string | undefined; } & { start: string; ruleId: string; }>[]) => Promise<(Readonly<{ end?: string | undefined; } & { id: string; spaceId: string; start: string; rule: Readonly<{ apiKeyCreatedByUser?: boolean | null | undefined; } & { params: Record; id: string; consumer: string; name: string; tags: string[]; enabled: boolean; alertTypeId: string; schedule: Readonly<{} & { interval: string; }>; createdBy: string | null; updatedBy: string | null; createdAt: string; updatedAt: string; apiKeyOwner: string | null; revision: number; }>; enabled: boolean; schedule: Readonly<{} & { interval: string; status: \"error\" | \"running\" | \"complete\" | \"pending\" | \"timeout\"; runAt: string; }>[]; createdAt: string; duration: string; status: \"error\" | \"running\" | \"complete\" | \"pending\" | \"timeout\"; }> | Readonly<{} & { error: Readonly<{ status?: number | undefined; } & { message: string; rule: Readonly<{ name?: string | undefined; } & { id: string; }>; }>; }>)[]>; getBackfill: (id: string) => Promise; id: string; consumer: string; name: string; tags: string[]; enabled: boolean; alertTypeId: string; schedule: Readonly<{} & { interval: string; }>; createdBy: string | null; updatedBy: string | null; createdAt: string; updatedAt: string; apiKeyOwner: string | null; revision: number; }>; enabled: boolean; schedule: Readonly<{} & { interval: string; status: \"error\" | \"running\" | \"complete\" | \"pending\" | \"timeout\"; runAt: string; }>[]; createdAt: string; duration: string; status: \"error\" | \"running\" | \"complete\" | \"pending\" | \"timeout\"; }>>; findBackfill: (params: Readonly<{ start?: string | undefined; end?: string | undefined; sortField?: \"start\" | \"createdAt\" | undefined; sortOrder?: \"asc\" | \"desc\" | undefined; ruleIds?: string | undefined; } & { page: number; perPage: number; }>) => Promise; id: string; consumer: string; name: string; tags: string[]; enabled: boolean; alertTypeId: string; schedule: Readonly<{} & { interval: string; }>; createdBy: string | null; updatedBy: string | null; createdAt: string; updatedAt: string; apiKeyOwner: string | null; revision: number; }>; enabled: boolean; schedule: Readonly<{} & { interval: string; status: \"error\" | \"running\" | \"complete\" | \"pending\" | \"timeout\"; runAt: string; }>[]; createdAt: string; duration: string; status: \"error\" | \"running\" | \"complete\" | \"pending\" | \"timeout\"; }>[]; perPage: number; total: number; }>>; deleteBackfill: (id: string) => Promise<{}>; getSpaceId: () => string | undefined; getAuthorization: () => ", + "[]>; scheduleBackfill: (params: Readonly<{ end?: string | undefined; } & { start: string; ruleId: string; }>[]) => Promise<(Readonly<{ end?: string | undefined; } & { id: string; spaceId: string; start: string; rule: Readonly<{ apiKeyCreatedByUser?: boolean | null | undefined; } & { params: Record; id: string; consumer: string; name: string; tags: string[]; enabled: boolean; alertTypeId: string; schedule: Readonly<{} & { interval: string; }>; createdBy: string | null; updatedBy: string | null; createdAt: string; updatedAt: string; apiKeyOwner: string | null; revision: number; }>; enabled: boolean; schedule: Readonly<{} & { interval: string; status: \"error\" | \"running\" | \"complete\" | \"pending\" | \"timeout\"; runAt: string; }>[]; createdAt: string; duration: string; status: \"error\" | \"running\" | \"complete\" | \"pending\" | \"timeout\"; }> | Readonly<{} & { error: Readonly<{ status?: number | undefined; } & { message: string; rule: Readonly<{ name?: string | undefined; } & { id: string; }>; }>; }>)[]>; getBackfill: (id: string) => Promise; id: string; consumer: string; name: string; tags: string[]; enabled: boolean; alertTypeId: string; schedule: Readonly<{} & { interval: string; }>; createdBy: string | null; updatedBy: string | null; createdAt: string; updatedAt: string; apiKeyOwner: string | null; revision: number; }>; enabled: boolean; schedule: Readonly<{} & { interval: string; status: \"error\" | \"running\" | \"complete\" | \"pending\" | \"timeout\"; runAt: string; }>[]; createdAt: string; duration: string; status: \"error\" | \"running\" | \"complete\" | \"pending\" | \"timeout\"; }>>; findBackfill: (params: Readonly<{ start?: string | undefined; end?: string | undefined; sortField?: \"start\" | \"createdAt\" | undefined; sortOrder?: \"asc\" | \"desc\" | undefined; ruleIds?: string | undefined; } & { page: number; perPage: number; }>) => Promise; id: string; consumer: string; name: string; tags: string[]; enabled: boolean; alertTypeId: string; schedule: Readonly<{} & { interval: string; }>; createdBy: string | null; updatedBy: string | null; createdAt: string; updatedAt: string; apiKeyOwner: string | null; revision: number; }>; enabled: boolean; schedule: Readonly<{} & { interval: string; status: \"error\" | \"running\" | \"complete\" | \"pending\" | \"timeout\"; runAt: string; }>[]; createdAt: string; duration: string; status: \"error\" | \"running\" | \"complete\" | \"pending\" | \"timeout\"; }>[]; perPage: number; total: number; }>>; deleteBackfill: (id: string) => Promise<{}>; getSpaceId: () => string | undefined; getAuthorization: () => ", { "pluginId": "alerting", "scope": "server", diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index 3172ccf49b330..e7364c539c72a 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.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 | |-------------------|-----------|------------------------|-----------------| -| 880 | 1 | 848 | 50 | +| 872 | 1 | 839 | 50 | ## Client diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index d9d9c62757559..af73a15c4d23d 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: 2024-12-03 +date: 2024-12-05 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 decef801d061d..375bdd80ea47c 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/asset_inventory.devdocs.json b/api_docs/asset_inventory.devdocs.json new file mode 100644 index 0000000000000..6fdfe95fc2c1e --- /dev/null +++ b/api_docs/asset_inventory.devdocs.json @@ -0,0 +1,114 @@ +{ + "id": "assetInventory", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [], + "setup": { + "parentPluginId": "assetInventory", + "id": "def-public.AssetInventoryPluginSetup", + "type": "Interface", + "tags": [], + "label": "AssetInventoryPluginSetup", + "description": [], + "path": "x-pack/plugins/asset_inventory/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "lifecycle": "setup", + "initialIsOpen": true + }, + "start": { + "parentPluginId": "assetInventory", + "id": "def-public.AssetInventoryPluginStart", + "type": "Interface", + "tags": [], + "label": "AssetInventoryPluginStart", + "description": [], + "path": "x-pack/plugins/asset_inventory/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "lifecycle": "start", + "initialIsOpen": true + } + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [], + "setup": { + "parentPluginId": "assetInventory", + "id": "def-server.AssetInventoryPluginSetup", + "type": "Interface", + "tags": [], + "label": "AssetInventoryPluginSetup", + "description": [], + "path": "x-pack/plugins/asset_inventory/server/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "lifecycle": "setup", + "initialIsOpen": true + }, + "start": { + "parentPluginId": "assetInventory", + "id": "def-server.AssetInventoryPluginStart", + "type": "Interface", + "tags": [], + "label": "AssetInventoryPluginStart", + "description": [], + "path": "x-pack/plugins/asset_inventory/server/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "lifecycle": "start", + "initialIsOpen": true + } + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [ + { + "parentPluginId": "assetInventory", + "id": "def-common.PLUGIN_ID", + "type": "string", + "tags": [], + "label": "PLUGIN_ID", + "description": [], + "signature": [ + "\"assetInventory\"" + ], + "path": "x-pack/plugins/asset_inventory/common/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "assetInventory", + "id": "def-common.PLUGIN_NAME", + "type": "string", + "tags": [], + "label": "PLUGIN_NAME", + "description": [], + "signature": [ + "\"assetInventory\"" + ], + "path": "x-pack/plugins/asset_inventory/common/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/asset_inventory.mdx b/api_docs/asset_inventory.mdx new file mode 100644 index 0000000000000..926e855163d18 --- /dev/null +++ b/api_docs/asset_inventory.mdx @@ -0,0 +1,46 @@ +--- +#### +#### 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: kibAssetInventoryPluginApi +slug: /kibana-dev-docs/api/assetInventory +title: "assetInventory" +image: https://source.unsplash.com/400x175/?github +description: API docs for the assetInventory plugin +date: 2024-12-05 +tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetInventory'] +--- +import assetInventoryObj from './asset_inventory.devdocs.json'; + +Centralized asset inventory experience within the Elastic Security solution. A central place for users to view and manage all their assets from different environments + +Contact [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 6 | 0 | 6 | 0 | + +## Client + +### Setup + + +### Start + + +## Server + +### Setup + + +### Start + + +## Common + +### Consts, variables and types + + diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index 37f6ffd3c560a..dfe1f20c84c5c 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'banners'] --- import bannersObj from './banners.devdocs.json'; diff --git a/api_docs/bfetch.mdx b/api_docs/bfetch.mdx index 1574b0899679f..10315cb41d758 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github description: API docs for the bfetch plugin -date: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'bfetch'] --- import bfetchObj from './bfetch.devdocs.json'; diff --git a/api_docs/canvas.mdx b/api_docs/canvas.mdx index 90d1aa548e6a8..440492b1035b2 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: 2024-12-03 +date: 2024-12-05 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 601841b63ddc3..1c0bf62c8e510 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: 2024-12-03 +date: 2024-12-05 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 5d341d4fb0450..1d810a9559a4b 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: 2024-12-03 +date: 2024-12-05 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 fae98a56939c8..ef8cf26d2ecc0 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: 2024-12-03 +date: 2024-12-05 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 eb5a95b7d2cc8..246d5634136f9 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: 2024-12-03 +date: 2024-12-05 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 7646521c485d2..9b6cc4b640853 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: 2024-12-03 +date: 2024-12-05 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 dcf110b8af02c..f233f88b833e1 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: 2024-12-03 +date: 2024-12-05 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 ac3593719be3d..1d5b02638c26b 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: 2024-12-03 +date: 2024-12-05 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 a6efce141f661..15dbdf080af4d 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: 2024-12-03 +date: 2024-12-05 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 3c954c4b17384..e7b895fab2fe1 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: 2024-12-03 +date: 2024-12-05 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 b25d90614eecb..bd3bcc2e10e98 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations'] --- import customIntegrationsObj from './custom_integrations.devdocs.json'; diff --git a/api_docs/dashboard.devdocs.json b/api_docs/dashboard.devdocs.json index d77e83955513b..79542dae85297 100644 --- a/api_docs/dashboard.devdocs.json +++ b/api_docs/dashboard.devdocs.json @@ -178,7 +178,7 @@ "section": "def-public.PublishesFilters", "text": "PublishesFilters" }, - " & { isCompatibleWithUnifiedSearch?: (() => boolean) | undefined; query$: ", + " & { isCompatibleWithUnifiedSearch?: (() => boolean) | undefined; canEditUnifiedSearch?: (() => boolean) | undefined; query$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -264,7 +264,7 @@ "section": "def-public.PublishesFilters", "text": "PublishesFilters" }, - " & { isCompatibleWithUnifiedSearch?: (() => boolean) | undefined; query$: ", + " & { isCompatibleWithUnifiedSearch?: (() => boolean) | undefined; canEditUnifiedSearch?: (() => boolean) | undefined; query$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -936,7 +936,7 @@ "section": "def-public.PublishesFilters", "text": "PublishesFilters" }, - " & { isCompatibleWithUnifiedSearch?: (() => boolean) | undefined; query$: ", + " & { isCompatibleWithUnifiedSearch?: (() => boolean) | undefined; canEditUnifiedSearch?: (() => boolean) | undefined; query$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -1285,7 +1285,9 @@ "section": "def-common.DashboardContainerInput", "text": "DashboardContainerInput" }, - ", \"executionContext\" | \"panels\" | \"controlGroupInput\">> & { dashboardId?: string | undefined; useHash?: boolean | undefined; preserveSavedFilters?: boolean | undefined; searchSessionId?: string | undefined; panels?: (Omit | undefined; savedObjectId?: string | undefined; } & {}>; gridData: Readonly<{} & { i: string; y: number; w: number; h: number; x: number; }>; panelIndex: string; }>, \"panelConfig\"> & { panelConfig: Readonly<{ version?: string | undefined; title?: string | undefined; description?: string | undefined; hidePanelTitles?: boolean | undefined; enhancements?: Record | undefined; savedObjectId?: string | undefined; } & {}> & { [key: string]: any; }; } & ", + ", \"executionContext\" | \"panels\" | \"controlGroupInput\">> & { dashboardId?: string | undefined; useHash?: boolean | undefined; preserveSavedFilters?: boolean | undefined; searchSessionId?: string | undefined; panels?: (Omit | undefined; savedObjectId?: string | undefined; } & {}>; gridData: Readonly<{ i?: string | undefined; } & { y: number; w: number; h: number; x: number; }>; }>, \"panelConfig\"> & { panelConfig: Readonly<{ version?: string | undefined; title?: string | undefined; description?: string | undefined; hidePanelTitles?: boolean | undefined; enhancements?: Record | undefined; savedObjectId?: string | undefined; } & {}> & { [key: string]: any; }; gridData: ", + "GridData", + "; } & ", { "pluginId": "@kbn/utility-types", "scope": "common", @@ -1532,7 +1534,7 @@ "section": "def-common.ControlLabelPosition", "text": "ControlLabelPosition" }, - "; autoApplySelections: boolean; ignoreParentSettings: Readonly<{} & { ignoreFilters: boolean; ignoreQuery: boolean; ignoreTimerange: boolean; ignoreValidations: boolean; }>; controls: Readonly<{ controlConfig?: Record | undefined; } & { id: string; type: string; order: number; grow: boolean; width: ", + "; autoApplySelections: boolean; ignoreParentSettings: Readonly<{} & { ignoreFilters: boolean; ignoreQuery: boolean; ignoreTimerange: boolean; ignoreValidations: boolean; }>; controls: Readonly<{ id?: string | undefined; controlConfig?: Record | undefined; } & { type: string; order: number; grow: boolean; width: ", { "pluginId": "controls", "scope": "common", @@ -1572,7 +1574,7 @@ "section": "def-common.FilterStateStore", "text": "FilterStateStore" }, - "; }> | undefined; } & { meta: Readonly<{ params?: any; key?: string | undefined; value?: string | undefined; type?: string | undefined; alias?: string | null | undefined; index?: string | undefined; disabled?: boolean | undefined; field?: string | undefined; group?: string | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; isMultiIndex?: boolean | undefined; } & {}>; }>[] | undefined; query?: Readonly<{} & { query: string | Record; language: string; }> | undefined; } & {}> | undefined; } & {}>; timeRestore: boolean; panels: Readonly<{ id?: string | undefined; version?: string | undefined; title?: string | undefined; panelRefName?: string | undefined; } & { type: string; panelConfig: Readonly<{ version?: string | undefined; title?: string | undefined; description?: string | undefined; hidePanelTitles?: boolean | undefined; enhancements?: Record | undefined; savedObjectId?: string | undefined; } & {}>; gridData: Readonly<{} & { i: string; y: number; w: number; h: number; x: number; }>; panelIndex: string; }>[]; }>, \"panels\"> & { panels: ", + "; }> | undefined; } & { meta: Readonly<{ params?: any; key?: string | undefined; value?: string | undefined; type?: string | undefined; alias?: string | null | undefined; index?: string | undefined; disabled?: boolean | undefined; field?: string | undefined; group?: string | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; isMultiIndex?: boolean | undefined; } & {}>; }>[] | undefined; query?: Readonly<{} & { query: string | Record; language: string; }> | undefined; } & {}> | undefined; } & {}>; timeRestore: boolean; panels: Readonly<{ id?: string | undefined; version?: string | undefined; title?: string | undefined; panelRefName?: string | undefined; panelIndex?: string | undefined; } & { type: string; panelConfig: Readonly<{ version?: string | undefined; title?: string | undefined; description?: string | undefined; hidePanelTitles?: boolean | undefined; enhancements?: Record | undefined; savedObjectId?: string | undefined; } & {}>; gridData: Readonly<{ i?: string | undefined; } & { y: number; w: number; h: number; x: number; }>; }>[]; }>, \"panels\"> & { panels: ", "DashboardPanel", "[]; }" ], @@ -1661,7 +1663,9 @@ "section": "def-common.DashboardPanelMap", "text": "DashboardPanelMap" }, - ", removeLegacyVersion?: boolean | undefined) => { panelRefName?: string | undefined; id?: string | undefined; title?: string | undefined; type: string; gridData: Readonly<{} & { i: string; y: number; w: number; h: number; x: number; }>; panelIndex: string; panelConfig: _.Omit { panelRefName?: string | undefined; id?: string | undefined; title?: string | undefined; type: string; gridData: ", + "GridData", + "; panelIndex: string; panelConfig: _.Omit, \"i\"> & { readonly i: string; }" ], "path": "src/plugins/dashboard/common/dashboard_container/types.ts", "deprecated": false, diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx index 01900e4b0d9c1..48928e26afd80 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboard'] --- import dashboardObj from './dashboard.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kib | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 114 | 0 | 111 | 13 | +| 114 | 0 | 111 | 14 | ## Client diff --git a/api_docs/dashboard_enhanced.mdx b/api_docs/dashboard_enhanced.mdx index c268fdfdf2193..15f3a035e41db 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: 2024-12-03 +date: 2024-12-05 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 318ea50da0b48..0e44f5b6ae59d 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_quality.mdx b/api_docs/data_quality.mdx index f00b1f0ffbedd..30e7b68e6c5b9 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: 2024-12-03 +date: 2024-12-05 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 e6a4c20b9451d..8322dc65837cf 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.query'] --- import dataQueryObj from './data_query.devdocs.json'; diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index ace239d289721..c1168207a4e7d 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] --- import dataSearchObj from './data_search.devdocs.json'; diff --git a/api_docs/data_usage.mdx b/api_docs/data_usage.mdx index ecf73aa12a4c4..66f926fb30ded 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: 2024-12-03 +date: 2024-12-05 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 d6af1159f4d8c..a2f7a703413bf 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: 2024-12-03 +date: 2024-12-05 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 d7f742560200e..f9dc815b24f43 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: 2024-12-03 +date: 2024-12-05 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 0a652e4195687..e8169220add69 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement'] --- import dataViewManagementObj from './data_view_management.devdocs.json'; diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index 16737110a6685..9f0b52d55f51b 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: 2024-12-03 +date: 2024-12-05 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 e6599d0884ebf..4a9723ee0237f 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: 2024-12-03 +date: 2024-12-05 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 c829741bc56c9..66a06d208d474 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: 2024-12-03 +date: 2024-12-05 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 0d4d75b73171e..a99a28bec938e 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -29,7 +29,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | stackAlerts, alerting, securitySolution, inputControlVis | - | | | triggersActionsUi | - | | | triggersActionsUi | - | -| | @kbn/core, visualizations, triggersActionsUi, @kbn/alerts-ui-shared | - | +| | @kbn/core, visualizations, triggersActionsUi, @kbn/response-ops-rule-form | - | | | ruleRegistry, securitySolution, slo | - | | | security, actions, alerting, ruleRegistry, files, cases, fleet, securitySolution | - | | | alerting, securitySolution | - | @@ -105,7 +105,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | @kbn/core-root-browser-internal, @kbn/core-saved-objects-browser-mocks | - | | | fleet, exploratoryView, osquery, synthetics | - | | | @kbn/security-plugin-types-server, telemetry, fleet, profiling, @kbn/security-authorization-core, security | - | -| | @kbn/core-application-browser-internal, management, @kbn/core-application-browser-mocks, fleet, security, kibanaOverview, @kbn/core | - | +| | @kbn/core-application-browser-internal, management, @kbn/core-application-browser-mocks, assetInventory, fleet, security, kibanaOverview, @kbn/core | - | | | graph, visTypeTimeseries, dataViewManagement, dataViews | - | | | graph, visTypeTimeseries, dataViewManagement, dataViews | - | | | graph, visTypeTimeseries, dataViewManagement | - | diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index d38e73008c019..eb52c777ee8a3 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -20,14 +20,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] -## @kbn/alerts-ui-shared - -| Deprecated API | Reference location(s) | Remove By | -| ---------------|-----------|-----------| -| | [rule_actions_item.tsx](https://github.com/elastic/kibana/tree/main/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_item.tsx#:~:text=SavedObjectAttribute), [rule_actions_item.tsx](https://github.com/elastic/kibana/tree/main/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_item.tsx#:~:text=SavedObjectAttribute), [rule_actions_item.tsx](https://github.com/elastic/kibana/tree/main/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_item.tsx#:~:text=SavedObjectAttribute), [rule_actions_item.tsx](https://github.com/elastic/kibana/tree/main/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_item.tsx#:~:text=SavedObjectAttribute), [rule_actions_system_actions_item.tsx](https://github.com/elastic/kibana/tree/main/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_system_actions_item.tsx#:~:text=SavedObjectAttribute), [rule_actions_system_actions_item.tsx](https://github.com/elastic/kibana/tree/main/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_system_actions_item.tsx#:~:text=SavedObjectAttribute), [rule_actions_system_actions_item.tsx](https://github.com/elastic/kibana/tree/main/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_system_actions_item.tsx#:~:text=SavedObjectAttribute), [rule_actions_system_actions_item.tsx](https://github.com/elastic/kibana/tree/main/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_system_actions_item.tsx#:~:text=SavedObjectAttribute) | - | - - - ## @kbn/content-management-table-list-view | Deprecated API | Reference location(s) | Remove By | @@ -418,6 +410,14 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] +## @kbn/response-ops-rule-form + +| Deprecated API | Reference location(s) | Remove By | +| ---------------|-----------|-----------| +| | [rule_actions_item.tsx](https://github.com/elastic/kibana/tree/main/packages/response-ops/rule_form/src/rule_actions/rule_actions_item.tsx#:~:text=SavedObjectAttribute), [rule_actions_item.tsx](https://github.com/elastic/kibana/tree/main/packages/response-ops/rule_form/src/rule_actions/rule_actions_item.tsx#:~:text=SavedObjectAttribute), [rule_actions_item.tsx](https://github.com/elastic/kibana/tree/main/packages/response-ops/rule_form/src/rule_actions/rule_actions_item.tsx#:~:text=SavedObjectAttribute), [rule_actions_item.tsx](https://github.com/elastic/kibana/tree/main/packages/response-ops/rule_form/src/rule_actions/rule_actions_item.tsx#:~:text=SavedObjectAttribute), [rule_actions_system_actions_item.tsx](https://github.com/elastic/kibana/tree/main/packages/response-ops/rule_form/src/rule_actions/rule_actions_system_actions_item.tsx#:~:text=SavedObjectAttribute), [rule_actions_system_actions_item.tsx](https://github.com/elastic/kibana/tree/main/packages/response-ops/rule_form/src/rule_actions/rule_actions_system_actions_item.tsx#:~:text=SavedObjectAttribute), [rule_actions_system_actions_item.tsx](https://github.com/elastic/kibana/tree/main/packages/response-ops/rule_form/src/rule_actions/rule_actions_system_actions_item.tsx#:~:text=SavedObjectAttribute), [rule_actions_system_actions_item.tsx](https://github.com/elastic/kibana/tree/main/packages/response-ops/rule_form/src/rule_actions/rule_actions_system_actions_item.tsx#:~:text=SavedObjectAttribute) | - | + + + ## @kbn/search-errors | Deprecated API | Reference location(s) | Remove By | @@ -545,6 +545,14 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] +## assetInventory + +| Deprecated API | Reference location(s) | Remove By | +| ---------------|-----------|-----------| +| | [application.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/asset_inventory/public/application.tsx#:~:text=appBasePath) | - | + + + ## canvas | Deprecated API | Reference location(s) | Remove By | @@ -737,7 +745,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [plugin.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/plugin.tsx#:~:text=executeTriggerActions) | - | | | [discover_state.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/application/main/state_management/discover_state.test.ts#:~:text=savedObjects) | - | | | [discover_state.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/application/main/state_management/discover_state.test.ts#:~:text=resolve) | - | -| | [ui_settings.ts](https://github.com/elastic/kibana/tree/main/src/plugins/discover/server/ui_settings.ts#:~:text=metric), [ui_settings.ts](https://github.com/elastic/kibana/tree/main/src/plugins/discover/server/ui_settings.ts#:~:text=metric), [ui_settings.ts](https://github.com/elastic/kibana/tree/main/src/plugins/discover/server/ui_settings.ts#:~:text=metric) | - | +| | [ui_settings.ts](https://github.com/elastic/kibana/tree/main/src/plugins/discover/server/ui_settings.ts#:~:text=metric), [ui_settings.ts](https://github.com/elastic/kibana/tree/main/src/plugins/discover/server/ui_settings.ts#:~:text=metric) | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index c42ccc11a88b8..7d98513dfb169 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 0b3e9a7f75b68..e8a85571768a3 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.devdocs.json b/api_docs/discover.devdocs.json index 51ca924813168..770007141ebb5 100644 --- a/api_docs/discover.devdocs.json +++ b/api_docs/discover.devdocs.json @@ -3576,7 +3576,7 @@ "section": "def-public.PublishesFilters", "text": "PublishesFilters" }, - " & { isCompatibleWithUnifiedSearch?: (() => boolean) | undefined; query$: ", + " & { isCompatibleWithUnifiedSearch?: (() => boolean) | undefined; canEditUnifiedSearch?: (() => boolean) | undefined; query$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index dc4c2a117f6c2..bf1f872ed5d90 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: 2024-12-03 +date: 2024-12-05 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 dd1634e549f7b..443ae331e1b31 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: 2024-12-03 +date: 2024-12-05 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 0f6288b8ea946..885628f638a5e 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: 2024-12-03 +date: 2024-12-05 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 98377a0807c98..47c1847ae25f3 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/elastic_assistant.devdocs.json b/api_docs/elastic_assistant.devdocs.json index 60d0345bc415b..6292df433806a 100644 --- a/api_docs/elastic_assistant.devdocs.json +++ b/api_docs/elastic_assistant.devdocs.json @@ -1569,6 +1569,27 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "elasticAssistant", + "id": "def-server.AssistantToolParams.llmTasks", + "type": "Object", + "tags": [], + "label": "llmTasks", + "description": [], + "signature": [ + { + "pluginId": "llmTasks", + "scope": "server", + "docId": "kibLlmTasksPluginApi", + "section": "def-server.LlmTasksPluginStart", + "text": "LlmTasksPluginStart" + }, + " | undefined" + ], + "path": "x-pack/plugins/elastic_assistant/server/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "elasticAssistant", "id": "def-server.AssistantToolParams.isOssModel", @@ -1862,6 +1883,26 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "elasticAssistant", + "id": "def-server.ElasticAssistantPluginStartDependencies.llmTasks", + "type": "Object", + "tags": [], + "label": "llmTasks", + "description": [], + "signature": [ + { + "pluginId": "llmTasks", + "scope": "server", + "docId": "kibLlmTasksPluginApi", + "section": "def-server.LlmTasksPluginStart", + "text": "LlmTasksPluginStart" + } + ], + "path": "x-pack/plugins/elastic_assistant/server/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "elasticAssistant", "id": "def-server.ElasticAssistantPluginStartDependencies.inference", @@ -1942,6 +1983,26 @@ "path": "x-pack/plugins/elastic_assistant/server/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "elasticAssistant", + "id": "def-server.ElasticAssistantPluginStartDependencies.productDocBase", + "type": "Object", + "tags": [], + "label": "productDocBase", + "description": [], + "signature": [ + { + "pluginId": "productDocBase", + "scope": "server", + "docId": "kibProductDocBasePluginApi", + "section": "def-server.ProductDocBaseStartContract", + "text": "ProductDocBaseStartContract" + } + ], + "path": "x-pack/plugins/elastic_assistant/server/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/elastic_assistant.mdx b/api_docs/elastic_assistant.mdx index 7a0831a5debfe..f42de26ee4fd2 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'elasticAssistant'] --- import elasticAssistantObj from './elastic_assistant.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 53 | 0 | 38 | 2 | +| 56 | 0 | 41 | 2 | ## Server diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 7774b8b0a3c5d..bcf9a3e04d446 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: 2024-12-03 +date: 2024-12-05 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 2439bde8e99de..a17079616ba63 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: 2024-12-03 +date: 2024-12-05 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 32a3d89f65a24..9f5599e782000 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: 2024-12-03 +date: 2024-12-05 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 230c232342c75..318c9cb6aae4e 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: 2024-12-03 +date: 2024-12-05 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 fb7b4c912b45e..00e0e88820aca 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entitiesDataAccess'] --- import entitiesDataAccessObj from './entities_data_access.devdocs.json'; diff --git a/api_docs/entity_manager.devdocs.json b/api_docs/entity_manager.devdocs.json index fb4d3e8050c6f..e08d74b938581 100644 --- a/api_docs/entity_manager.devdocs.json +++ b/api_docs/entity_manager.devdocs.json @@ -21,7 +21,7 @@ "label": "repositoryClient", "description": [], "signature": [ - "(endpoint: TEndpoint, ...args: MaybeOptionalArgs<", + "(endpoint: TEndpoint, ...args: MaybeOptionalArgs<", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -29,7 +29,79 @@ "section": "def-common.ClientRequestParamsOf", "text": "ClientRequestParamsOf" }, - "<{ \"POST /internal/entities/v2/_search/preview\": ", + "<{ \"GET /internal/entities/v2/definitions/sources\": { endpoint: \"GET /internal/entities/v2/definitions/sources\"; handler: ServerRouteHandler<", + "EntityManagerRouteHandlerResources", + ", undefined, ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.IKibanaResponse", + "text": "IKibanaResponse" + }, + "<{ sources: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; }>>; security?: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteSecurity", + "text": "RouteSecurity" + }, + " | undefined; }; \"POST /internal/entities/v2/definitions/sources\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"POST /internal/entities/v2/definitions/sources\", Zod.ZodObject<{ body: Zod.ZodObject<{ source: Zod.ZodObject<{ id: Zod.ZodString; type_id: Zod.ZodString; index_patterns: Zod.ZodArray; identity_fields: Zod.ZodArray; metadata_fields: Zod.ZodArray; filters: Zod.ZodArray; timestamp_field: Zod.ZodOptional; display_name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }, { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { source: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }; }, { source: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }; }>; }, \"strip\", Zod.ZodTypeAny, { body: { source: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }; }; }, { body: { source: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }; }; }>, ", + "EntityManagerRouteHandlerResources", + ", ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.IKibanaResponse", + "text": "IKibanaResponse" + }, + "<{ source: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }; }>, undefined>; \"GET /internal/entities/v2/definitions/types\": { endpoint: \"GET /internal/entities/v2/definitions/types\"; handler: ServerRouteHandler<", + "EntityManagerRouteHandlerResources", + ", undefined, ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.IKibanaResponse", + "text": "IKibanaResponse" + }, + "<{ types: { id: string; }[]; }>>; security?: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteSecurity", + "text": "RouteSecurity" + }, + " | undefined; }; \"POST /internal/entities/v2/definitions/types\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"POST /internal/entities/v2/definitions/types\", Zod.ZodObject<{ body: Zod.ZodObject<{ type: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { type: { id: string; }; }, { type: { id: string; }; }>; }, \"strip\", Zod.ZodTypeAny, { body: { type: { id: string; }; }; }, { body: { type: { id: string; }; }; }>, ", + "EntityManagerRouteHandlerResources", + ", ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.IKibanaResponse", + "text": "IKibanaResponse" + }, + ", undefined>; \"POST /internal/entities/v2/_search/preview\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -37,7 +109,7 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"POST /internal/entities/v2/_search/preview\", Zod.ZodObject<{ body: Zod.ZodObject<{ sources: Zod.ZodArray; index_patterns: Zod.ZodArray; identity_fields: Zod.ZodArray; metadata_fields: Zod.ZodArray; filters: Zod.ZodArray; display_name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }, { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }>, \"many\">; start: Zod.ZodEffects>, string, string | undefined>; end: Zod.ZodEffects>, string, string | undefined>; sort: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; direction: \"ASC\" | \"DESC\"; }, { field: string; direction: \"ASC\" | \"DESC\"; }>>; limit: Zod.ZodDefault>; }, \"strip\", Zod.ZodTypeAny, { start: string; end: string; sources: { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; limit: number; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }, { sources: { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; limit?: number | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { body: { start: string; end: string; sources: { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; limit: number; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }; }, { body: { sources: { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; limit?: number | undefined; }; }>, ", + "<\"POST /internal/entities/v2/_search/preview\", Zod.ZodObject<{ body: Zod.ZodIntersection>, string, string | undefined>; end: Zod.ZodEffects>, string, string | undefined>; sort: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; direction: \"ASC\" | \"DESC\"; }, { field: string; direction: \"ASC\" | \"DESC\"; }>>; limit: Zod.ZodDefault>; metadata_fields: Zod.ZodDefault>>; filters: Zod.ZodDefault>>; }, \"strip\", Zod.ZodTypeAny, { start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }, { start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; }>, Zod.ZodObject<{ sources: Zod.ZodArray; identity_fields: Zod.ZodArray; metadata_fields: Zod.ZodArray; filters: Zod.ZodArray; timestamp_field: Zod.ZodOptional; display_name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }, { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { sources: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; }, { sources: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; }>>; }, \"strip\", Zod.ZodTypeAny, { body: { start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; } & { sources: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; }; }, { body: { start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; } & { sources: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; }; }>, ", "EntityManagerRouteHandlerResources", ", ", { @@ -63,7 +135,7 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"POST /internal/entities/v2/_search\", Zod.ZodObject<{ body: Zod.ZodObject<{ type: Zod.ZodString; metadata_fields: Zod.ZodDefault>>; filters: Zod.ZodDefault>>; start: Zod.ZodEffects>, string, string | undefined>; end: Zod.ZodEffects>, string, string | undefined>; sort: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; direction: \"ASC\" | \"DESC\"; }, { field: string; direction: \"ASC\" | \"DESC\"; }>>; limit: Zod.ZodDefault>; }, \"strip\", Zod.ZodTypeAny, { type: string; start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }, { type: string; start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { body: { type: string; start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }; }, { body: { type: string; start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; }; }>, ", + "<\"POST /internal/entities/v2/_search\", Zod.ZodObject<{ body: Zod.ZodIntersection>, string, string | undefined>; end: Zod.ZodEffects>, string, string | undefined>; sort: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; direction: \"ASC\" | \"DESC\"; }, { field: string; direction: \"ASC\" | \"DESC\"; }>>; limit: Zod.ZodDefault>; metadata_fields: Zod.ZodDefault>>; filters: Zod.ZodDefault>>; }, \"strip\", Zod.ZodTypeAny, { start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }, { start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; }>, Zod.ZodObject<{ type: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { type: string; }, { type: string; }>>; }, \"strip\", Zod.ZodTypeAny, { body: { start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; } & { type: string; }; }, { body: { start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; } & { type: string; }; }>, ", "EntityManagerRouteHandlerResources", ", ", { @@ -377,7 +449,61 @@ "section": "def-common.ReturnOf", "text": "ReturnOf" }, - "<{ \"POST /internal/entities/v2/_search/preview\": ", + "<{ \"GET /internal/entities/v2/definitions/sources\": { endpoint: \"GET /internal/entities/v2/definitions/sources\"; handler: ServerRouteHandler<", + "EntityManagerRouteHandlerResources", + ", undefined, ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.IKibanaResponse", + "text": "IKibanaResponse" + }, + "<{ sources: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; }>>; security?: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteSecurity", + "text": "RouteSecurity" + }, + " | undefined; }; \"POST /internal/entities/v2/definitions/sources\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"POST /internal/entities/v2/definitions/sources\", Zod.ZodObject<{ body: Zod.ZodObject<{ source: Zod.ZodObject<{ id: Zod.ZodString; type_id: Zod.ZodString; index_patterns: Zod.ZodArray; identity_fields: Zod.ZodArray; metadata_fields: Zod.ZodArray; filters: Zod.ZodArray; timestamp_field: Zod.ZodOptional; display_name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }, { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { source: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }; }, { source: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }; }>; }, \"strip\", Zod.ZodTypeAny, { body: { source: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }; }; }, { body: { source: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }; }; }>, ", + "EntityManagerRouteHandlerResources", + ", ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.IKibanaResponse", + "text": "IKibanaResponse" + }, + "<{ source: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }; }>, undefined>; \"GET /internal/entities/v2/definitions/types\": { endpoint: \"GET /internal/entities/v2/definitions/types\"; handler: ServerRouteHandler<", + "EntityManagerRouteHandlerResources", + ", undefined, ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.IKibanaResponse", + "text": "IKibanaResponse" + }, + "<{ types: { id: string; }[]; }>>; security?: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteSecurity", + "text": "RouteSecurity" + }, + " | undefined; }; \"POST /internal/entities/v2/definitions/types\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -385,7 +511,25 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"POST /internal/entities/v2/_search/preview\", Zod.ZodObject<{ body: Zod.ZodObject<{ sources: Zod.ZodArray; index_patterns: Zod.ZodArray; identity_fields: Zod.ZodArray; metadata_fields: Zod.ZodArray; filters: Zod.ZodArray; display_name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }, { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }>, \"many\">; start: Zod.ZodEffects>, string, string | undefined>; end: Zod.ZodEffects>, string, string | undefined>; sort: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; direction: \"ASC\" | \"DESC\"; }, { field: string; direction: \"ASC\" | \"DESC\"; }>>; limit: Zod.ZodDefault>; }, \"strip\", Zod.ZodTypeAny, { start: string; end: string; sources: { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; limit: number; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }, { sources: { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; limit?: number | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { body: { start: string; end: string; sources: { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; limit: number; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }; }, { body: { sources: { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; limit?: number | undefined; }; }>, ", + "<\"POST /internal/entities/v2/definitions/types\", Zod.ZodObject<{ body: Zod.ZodObject<{ type: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { type: { id: string; }; }, { type: { id: string; }; }>; }, \"strip\", Zod.ZodTypeAny, { body: { type: { id: string; }; }; }, { body: { type: { id: string; }; }; }>, ", + "EntityManagerRouteHandlerResources", + ", ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.IKibanaResponse", + "text": "IKibanaResponse" + }, + ", undefined>; \"POST /internal/entities/v2/_search/preview\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"POST /internal/entities/v2/_search/preview\", Zod.ZodObject<{ body: Zod.ZodIntersection>, string, string | undefined>; end: Zod.ZodEffects>, string, string | undefined>; sort: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; direction: \"ASC\" | \"DESC\"; }, { field: string; direction: \"ASC\" | \"DESC\"; }>>; limit: Zod.ZodDefault>; metadata_fields: Zod.ZodDefault>>; filters: Zod.ZodDefault>>; }, \"strip\", Zod.ZodTypeAny, { start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }, { start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; }>, Zod.ZodObject<{ sources: Zod.ZodArray; identity_fields: Zod.ZodArray; metadata_fields: Zod.ZodArray; filters: Zod.ZodArray; timestamp_field: Zod.ZodOptional; display_name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }, { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { sources: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; }, { sources: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; }>>; }, \"strip\", Zod.ZodTypeAny, { body: { start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; } & { sources: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; }; }, { body: { start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; } & { sources: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; }; }>, ", "EntityManagerRouteHandlerResources", ", ", { @@ -411,7 +555,7 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"POST /internal/entities/v2/_search\", Zod.ZodObject<{ body: Zod.ZodObject<{ type: Zod.ZodString; metadata_fields: Zod.ZodDefault>>; filters: Zod.ZodDefault>>; start: Zod.ZodEffects>, string, string | undefined>; end: Zod.ZodEffects>, string, string | undefined>; sort: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; direction: \"ASC\" | \"DESC\"; }, { field: string; direction: \"ASC\" | \"DESC\"; }>>; limit: Zod.ZodDefault>; }, \"strip\", Zod.ZodTypeAny, { type: string; start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }, { type: string; start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { body: { type: string; start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }; }, { body: { type: string; start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; }; }>, ", + "<\"POST /internal/entities/v2/_search\", Zod.ZodObject<{ body: Zod.ZodIntersection>, string, string | undefined>; end: Zod.ZodEffects>, string, string | undefined>; sort: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; direction: \"ASC\" | \"DESC\"; }, { field: string; direction: \"ASC\" | \"DESC\"; }>>; limit: Zod.ZodDefault>; metadata_fields: Zod.ZodDefault>>; filters: Zod.ZodDefault>>; }, \"strip\", Zod.ZodTypeAny, { start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }, { start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; }>, Zod.ZodObject<{ type: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { type: string; }, { type: string; }>>; }, \"strip\", Zod.ZodTypeAny, { body: { start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; } & { type: string; }; }, { body: { start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; } & { type: string; }; }>, ", "EntityManagerRouteHandlerResources", ", ", { @@ -1261,6 +1405,36 @@ "interfaces": [], "enums": [], "misc": [ + { + "parentPluginId": "entityManager", + "id": "def-server.CREATE_ENTITY_SOURCE_DEFINITION_PRIVILEGE", + "type": "string", + "tags": [], + "label": "CREATE_ENTITY_SOURCE_DEFINITION_PRIVILEGE", + "description": [], + "signature": [ + "\"create_entity_source_definition\"" + ], + "path": "x-pack/plugins/entity_manager/server/lib/v2/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "entityManager", + "id": "def-server.CREATE_ENTITY_TYPE_DEFINITION_PRIVILEGE", + "type": "string", + "tags": [], + "label": "CREATE_ENTITY_TYPE_DEFINITION_PRIVILEGE", + "description": [], + "signature": [ + "\"create_entity_type_definition\"" + ], + "path": "x-pack/plugins/entity_manager/server/lib/v2/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "entityManager", "id": "def-server.EntityManagerConfig", @@ -1284,7 +1458,25 @@ "label": "EntityManagerRouteRepository", "description": [], "signature": [ - "{ \"POST /internal/entities/v2/_search/preview\": ", + "{ \"GET /internal/entities/v2/definitions/sources\": { endpoint: \"GET /internal/entities/v2/definitions/sources\"; handler: ServerRouteHandler<", + "EntityManagerRouteHandlerResources", + ", undefined, ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.IKibanaResponse", + "text": "IKibanaResponse" + }, + "<{ sources: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; }>>; security?: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteSecurity", + "text": "RouteSecurity" + }, + " | undefined; }; \"POST /internal/entities/v2/definitions/sources\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -1292,7 +1484,61 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"POST /internal/entities/v2/_search/preview\", Zod.ZodObject<{ body: Zod.ZodObject<{ sources: Zod.ZodArray; index_patterns: Zod.ZodArray; identity_fields: Zod.ZodArray; metadata_fields: Zod.ZodArray; filters: Zod.ZodArray; display_name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }, { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }>, \"many\">; start: Zod.ZodEffects>, string, string | undefined>; end: Zod.ZodEffects>, string, string | undefined>; sort: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; direction: \"ASC\" | \"DESC\"; }, { field: string; direction: \"ASC\" | \"DESC\"; }>>; limit: Zod.ZodDefault>; }, \"strip\", Zod.ZodTypeAny, { start: string; end: string; sources: { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; limit: number; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }, { sources: { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; limit?: number | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { body: { start: string; end: string; sources: { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; limit: number; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }; }, { body: { sources: { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; limit?: number | undefined; }; }>, ", + "<\"POST /internal/entities/v2/definitions/sources\", Zod.ZodObject<{ body: Zod.ZodObject<{ source: Zod.ZodObject<{ id: Zod.ZodString; type_id: Zod.ZodString; index_patterns: Zod.ZodArray; identity_fields: Zod.ZodArray; metadata_fields: Zod.ZodArray; filters: Zod.ZodArray; timestamp_field: Zod.ZodOptional; display_name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }, { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { source: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }; }, { source: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }; }>; }, \"strip\", Zod.ZodTypeAny, { body: { source: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }; }; }, { body: { source: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }; }; }>, ", + "EntityManagerRouteHandlerResources", + ", ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.IKibanaResponse", + "text": "IKibanaResponse" + }, + "<{ source: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }; }>, undefined>; \"GET /internal/entities/v2/definitions/types\": { endpoint: \"GET /internal/entities/v2/definitions/types\"; handler: ServerRouteHandler<", + "EntityManagerRouteHandlerResources", + ", undefined, ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.IKibanaResponse", + "text": "IKibanaResponse" + }, + "<{ types: { id: string; }[]; }>>; security?: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteSecurity", + "text": "RouteSecurity" + }, + " | undefined; }; \"POST /internal/entities/v2/definitions/types\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"POST /internal/entities/v2/definitions/types\", Zod.ZodObject<{ body: Zod.ZodObject<{ type: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { type: { id: string; }; }, { type: { id: string; }; }>; }, \"strip\", Zod.ZodTypeAny, { body: { type: { id: string; }; }; }, { body: { type: { id: string; }; }; }>, ", + "EntityManagerRouteHandlerResources", + ", ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.IKibanaResponse", + "text": "IKibanaResponse" + }, + ", undefined>; \"POST /internal/entities/v2/_search/preview\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"POST /internal/entities/v2/_search/preview\", Zod.ZodObject<{ body: Zod.ZodIntersection>, string, string | undefined>; end: Zod.ZodEffects>, string, string | undefined>; sort: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; direction: \"ASC\" | \"DESC\"; }, { field: string; direction: \"ASC\" | \"DESC\"; }>>; limit: Zod.ZodDefault>; metadata_fields: Zod.ZodDefault>>; filters: Zod.ZodDefault>>; }, \"strip\", Zod.ZodTypeAny, { start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }, { start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; }>, Zod.ZodObject<{ sources: Zod.ZodArray; identity_fields: Zod.ZodArray; metadata_fields: Zod.ZodArray; filters: Zod.ZodArray; timestamp_field: Zod.ZodOptional; display_name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }, { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { sources: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; }, { sources: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; }>>; }, \"strip\", Zod.ZodTypeAny, { body: { start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; } & { sources: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; }; }, { body: { start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; } & { sources: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; }; }>, ", "EntityManagerRouteHandlerResources", ", ", { @@ -1318,7 +1564,7 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"POST /internal/entities/v2/_search\", Zod.ZodObject<{ body: Zod.ZodObject<{ type: Zod.ZodString; metadata_fields: Zod.ZodDefault>>; filters: Zod.ZodDefault>>; start: Zod.ZodEffects>, string, string | undefined>; end: Zod.ZodEffects>, string, string | undefined>; sort: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; direction: \"ASC\" | \"DESC\"; }, { field: string; direction: \"ASC\" | \"DESC\"; }>>; limit: Zod.ZodDefault>; }, \"strip\", Zod.ZodTypeAny, { type: string; start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }, { type: string; start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { body: { type: string; start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }; }, { body: { type: string; start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; }; }>, ", + "<\"POST /internal/entities/v2/_search\", Zod.ZodObject<{ body: Zod.ZodIntersection>, string, string | undefined>; end: Zod.ZodEffects>, string, string | undefined>; sort: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; direction: \"ASC\" | \"DESC\"; }, { field: string; direction: \"ASC\" | \"DESC\"; }>>; limit: Zod.ZodDefault>; metadata_fields: Zod.ZodDefault>>; filters: Zod.ZodDefault>>; }, \"strip\", Zod.ZodTypeAny, { start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }, { start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; }>, Zod.ZodObject<{ type: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { type: string; }, { type: string; }>>; }, \"strip\", Zod.ZodTypeAny, { body: { start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; } & { type: string; }; }, { body: { start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; } & { type: string; }; }>, ", "EntityManagerRouteHandlerResources", ", ", { @@ -1622,6 +1868,51 @@ "deprecated": false, "trackAdoption": false, "initialIsOpen": false + }, + { + "parentPluginId": "entityManager", + "id": "def-server.READ_ENTITIES_PRIVILEGE", + "type": "string", + "tags": [], + "label": "READ_ENTITIES_PRIVILEGE", + "description": [], + "signature": [ + "\"read_entities\"" + ], + "path": "x-pack/plugins/entity_manager/server/lib/v2/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "entityManager", + "id": "def-server.READ_ENTITY_SOURCE_DEFINITION_PRIVILEGE", + "type": "string", + "tags": [], + "label": "READ_ENTITY_SOURCE_DEFINITION_PRIVILEGE", + "description": [], + "signature": [ + "\"read_entity_source_definition\"" + ], + "path": "x-pack/plugins/entity_manager/server/lib/v2/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "entityManager", + "id": "def-server.READ_ENTITY_TYPE_DEFINITION_PRIVILEGE", + "type": "string", + "tags": [], + "label": "READ_ENTITY_TYPE_DEFINITION_PRIVILEGE", + "description": [], + "signature": [ + "\"read_entity_type_definition\"" + ], + "path": "x-pack/plugins/entity_manager/server/lib/v2/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false } ], "objects": [], diff --git a/api_docs/entity_manager.mdx b/api_docs/entity_manager.mdx index 3711c94ed9ba3..f50584f7f362a 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entityManager'] --- import entityManagerObj from './entity_manager.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-entities](https://github.com/orgs/elastic/teams/obs-entiti | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 37 | 0 | 37 | 3 | +| 42 | 0 | 42 | 3 | ## Client diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index 1d5cd9990b9db..f309d4fb9419c 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: 2024-12-03 +date: 2024-12-05 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 d026d789d73ae..b6df8b06085f1 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: 2024-12-03 +date: 2024-12-05 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 4cd5976f886ca..11f50f8c71474 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: 2024-12-03 +date: 2024-12-05 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 60c63d315f8f7..f496e8286b0fe 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: 2024-12-03 +date: 2024-12-05 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 006a0ad52e329..292a5f672cbab 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotationListing'] --- import eventAnnotationListingObj from './event_annotation_listing.devdocs.json'; diff --git a/api_docs/event_log.devdocs.json b/api_docs/event_log.devdocs.json index 38cb6edc47b4d..109159af2d1bf 100644 --- a/api_docs/event_log.devdocs.json +++ b/api_docs/event_log.devdocs.json @@ -1514,7 +1514,7 @@ "label": "data", "description": [], "signature": [ - "(Readonly<{ log?: Readonly<{ logger?: string | undefined; level?: string | undefined; } & {}> | undefined; error?: Readonly<{ id?: string | undefined; type?: string | undefined; message?: string | undefined; code?: string | undefined; stack_trace?: string | undefined; } & {}> | undefined; '@timestamp'?: string | undefined; message?: string | undefined; tags?: string[] | undefined; rule?: Readonly<{ id?: string | undefined; version?: string | undefined; name?: string | undefined; license?: string | undefined; description?: string | undefined; uuid?: string | undefined; category?: string | undefined; reference?: string | undefined; author?: string[] | undefined; ruleset?: string | undefined; } & {}> | undefined; kibana?: Readonly<{ task?: Readonly<{ id?: string | undefined; schedule_delay?: string | number | undefined; scheduled?: string | undefined; } & {}> | undefined; action?: Readonly<{ id?: string | undefined; name?: string | undefined; execution?: Readonly<{ source?: string | undefined; uuid?: string | undefined; gen_ai?: Readonly<{ usage?: Readonly<{ prompt_tokens?: string | number | undefined; completion_tokens?: string | number | undefined; total_tokens?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; usage?: Readonly<{ request_body_bytes?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; type_id?: string | undefined; } & {}> | undefined; version?: string | undefined; alerting?: Readonly<{ outcome?: string | undefined; status?: string | undefined; summary?: Readonly<{ recovered?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; new?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; ongoing?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; instance_id?: string | undefined; action_group_id?: string | undefined; action_subgroup?: string | undefined; } & {}> | undefined; alert?: Readonly<{ rule?: Readonly<{ consumer?: string | undefined; revision?: string | number | undefined; execution?: Readonly<{ uuid?: string | undefined; status?: string | undefined; metrics?: Readonly<{ total_search_duration_ms?: string | number | undefined; total_indexing_duration_ms?: string | number | undefined; number_of_triggered_actions?: string | number | undefined; number_of_generated_actions?: string | number | undefined; alert_counts?: Readonly<{ recovered?: string | number | undefined; active?: string | number | undefined; new?: string | number | undefined; } & {}> | undefined; number_of_delayed_alerts?: string | number | undefined; number_of_searches?: string | number | undefined; es_search_duration_ms?: string | number | undefined; execution_gap_duration_s?: string | number | undefined; rule_type_run_duration_ms?: string | number | undefined; process_alerts_duration_ms?: string | number | undefined; trigger_actions_duration_ms?: string | number | undefined; process_rule_duration_ms?: string | number | undefined; claim_to_start_duration_ms?: string | number | undefined; persist_alerts_duration_ms?: string | number | undefined; prepare_rule_duration_ms?: string | number | undefined; total_run_duration_ms?: string | number | undefined; total_enrichment_duration_ms?: string | number | undefined; } & {}> | undefined; status_order?: string | number | undefined; backfill?: Readonly<{ id?: string | undefined; start?: string | undefined; interval?: string | undefined; } & {}> | undefined; } & {}> | undefined; rule_type_id?: string | undefined; } & {}> | undefined; flapping?: boolean | undefined; uuid?: string | undefined; maintenance_window_ids?: string[] | undefined; } & {}> | undefined; space_ids?: string[] | undefined; server_uuid?: string | undefined; saved_objects?: Readonly<{ id?: string | undefined; type?: string | undefined; namespace?: string | undefined; rel?: string | undefined; type_id?: string | undefined; space_agnostic?: boolean | undefined; } & {}>[] | undefined; } & {}> | undefined; event?: Readonly<{ id?: string | undefined; type?: string[] | undefined; reason?: string | undefined; action?: string | undefined; start?: string | undefined; end?: string | undefined; outcome?: string | undefined; duration?: string | number | undefined; code?: string | undefined; severity?: string | number | undefined; category?: string[] | undefined; timezone?: string | undefined; risk_score?: number | undefined; url?: string | undefined; created?: string | undefined; provider?: string | undefined; dataset?: string | undefined; hash?: string | undefined; ingested?: string | undefined; kind?: string | undefined; module?: string | undefined; original?: string | undefined; reference?: string | undefined; risk_score_norm?: number | undefined; sequence?: string | number | undefined; } & {}> | undefined; ecs?: Readonly<{ version?: string | undefined; } & {}> | undefined; user?: Readonly<{ id?: string | undefined; name?: string | undefined; } & {}> | undefined; } & {}> | undefined)[]" + "(Readonly<{ log?: Readonly<{ logger?: string | undefined; level?: string | undefined; } & {}> | undefined; error?: Readonly<{ id?: string | undefined; type?: string | undefined; message?: string | undefined; code?: string | undefined; stack_trace?: string | undefined; } & {}> | undefined; '@timestamp'?: string | undefined; message?: string | undefined; tags?: string[] | undefined; rule?: Readonly<{ id?: string | undefined; version?: string | undefined; name?: string | undefined; license?: string | undefined; description?: string | undefined; uuid?: string | undefined; category?: string | undefined; reference?: string | undefined; author?: string[] | undefined; ruleset?: string | undefined; } & {}> | undefined; kibana?: Readonly<{ task?: Readonly<{ id?: string | undefined; schedule_delay?: string | number | undefined; scheduled?: string | undefined; } & {}> | undefined; action?: Readonly<{ id?: string | undefined; name?: string | undefined; type_id?: string | undefined; execution?: Readonly<{ source?: string | undefined; uuid?: string | undefined; gen_ai?: Readonly<{ usage?: Readonly<{ prompt_tokens?: string | number | undefined; completion_tokens?: string | number | undefined; total_tokens?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; usage?: Readonly<{ request_body_bytes?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; version?: string | undefined; alerting?: Readonly<{ outcome?: string | undefined; status?: string | undefined; summary?: Readonly<{ recovered?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; new?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; ongoing?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; instance_id?: string | undefined; action_group_id?: string | undefined; action_subgroup?: string | undefined; } & {}> | undefined; alert?: Readonly<{ rule?: Readonly<{ consumer?: string | undefined; revision?: string | number | undefined; execution?: Readonly<{ uuid?: string | undefined; status?: string | undefined; metrics?: Readonly<{ total_search_duration_ms?: string | number | undefined; total_indexing_duration_ms?: string | number | undefined; number_of_triggered_actions?: string | number | undefined; number_of_generated_actions?: string | number | undefined; alert_counts?: Readonly<{ recovered?: string | number | undefined; active?: string | number | undefined; new?: string | number | undefined; } & {}> | undefined; number_of_delayed_alerts?: string | number | undefined; number_of_searches?: string | number | undefined; es_search_duration_ms?: string | number | undefined; execution_gap_duration_s?: string | number | undefined; rule_type_run_duration_ms?: string | number | undefined; process_alerts_duration_ms?: string | number | undefined; trigger_actions_duration_ms?: string | number | undefined; process_rule_duration_ms?: string | number | undefined; claim_to_start_duration_ms?: string | number | undefined; persist_alerts_duration_ms?: string | number | undefined; prepare_rule_duration_ms?: string | number | undefined; total_run_duration_ms?: string | number | undefined; total_enrichment_duration_ms?: string | number | undefined; } & {}> | undefined; status_order?: string | number | undefined; backfill?: Readonly<{ id?: string | undefined; start?: string | undefined; interval?: string | undefined; } & {}> | undefined; } & {}> | undefined; rule_type_id?: string | undefined; } & {}> | undefined; flapping?: boolean | undefined; uuid?: string | undefined; maintenance_window_ids?: string[] | undefined; } & {}> | undefined; space_ids?: string[] | undefined; server_uuid?: string | undefined; saved_objects?: Readonly<{ id?: string | undefined; type?: string | undefined; namespace?: string | undefined; rel?: string | undefined; type_id?: string | undefined; space_agnostic?: boolean | undefined; } & {}>[] | undefined; } & {}> | undefined; event?: Readonly<{ id?: string | undefined; type?: string[] | undefined; reason?: string | undefined; action?: string | undefined; start?: string | undefined; end?: string | undefined; outcome?: string | undefined; duration?: string | number | undefined; code?: string | undefined; severity?: string | number | undefined; category?: string[] | undefined; timezone?: string | undefined; risk_score?: number | undefined; url?: string | undefined; created?: string | undefined; provider?: string | undefined; dataset?: string | undefined; hash?: string | undefined; ingested?: string | undefined; kind?: string | undefined; module?: string | undefined; original?: string | undefined; reference?: string | undefined; risk_score_norm?: number | undefined; sequence?: string | number | undefined; } & {}> | undefined; ecs?: Readonly<{ version?: string | undefined; } & {}> | undefined; user?: Readonly<{ id?: string | undefined; name?: string | undefined; } & {}> | undefined; } & {}> | undefined)[]" ], "path": "x-pack/plugins/event_log/server/es/cluster_client_adapter.ts", "deprecated": false, @@ -1534,7 +1534,7 @@ "label": "IEvent", "description": [], "signature": [ - "DeepPartial | undefined; error?: Readonly<{ id?: string | undefined; type?: string | undefined; message?: string | undefined; code?: string | undefined; stack_trace?: string | undefined; } & {}> | undefined; '@timestamp'?: string | undefined; message?: string | undefined; tags?: string[] | undefined; rule?: Readonly<{ id?: string | undefined; version?: string | undefined; name?: string | undefined; license?: string | undefined; description?: string | undefined; uuid?: string | undefined; category?: string | undefined; reference?: string | undefined; author?: string[] | undefined; ruleset?: string | undefined; } & {}> | undefined; kibana?: Readonly<{ task?: Readonly<{ id?: string | undefined; schedule_delay?: string | number | undefined; scheduled?: string | undefined; } & {}> | undefined; action?: Readonly<{ id?: string | undefined; name?: string | undefined; execution?: Readonly<{ source?: string | undefined; uuid?: string | undefined; gen_ai?: Readonly<{ usage?: Readonly<{ prompt_tokens?: string | number | undefined; completion_tokens?: string | number | undefined; total_tokens?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; usage?: Readonly<{ request_body_bytes?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; type_id?: string | undefined; } & {}> | undefined; version?: string | undefined; alerting?: Readonly<{ outcome?: string | undefined; status?: string | undefined; summary?: Readonly<{ recovered?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; new?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; ongoing?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; instance_id?: string | undefined; action_group_id?: string | undefined; action_subgroup?: string | undefined; } & {}> | undefined; alert?: Readonly<{ rule?: Readonly<{ consumer?: string | undefined; revision?: string | number | undefined; execution?: Readonly<{ uuid?: string | undefined; status?: string | undefined; metrics?: Readonly<{ total_search_duration_ms?: string | number | undefined; total_indexing_duration_ms?: string | number | undefined; number_of_triggered_actions?: string | number | undefined; number_of_generated_actions?: string | number | undefined; alert_counts?: Readonly<{ recovered?: string | number | undefined; active?: string | number | undefined; new?: string | number | undefined; } & {}> | undefined; number_of_delayed_alerts?: string | number | undefined; number_of_searches?: string | number | undefined; es_search_duration_ms?: string | number | undefined; execution_gap_duration_s?: string | number | undefined; rule_type_run_duration_ms?: string | number | undefined; process_alerts_duration_ms?: string | number | undefined; trigger_actions_duration_ms?: string | number | undefined; process_rule_duration_ms?: string | number | undefined; claim_to_start_duration_ms?: string | number | undefined; persist_alerts_duration_ms?: string | number | undefined; prepare_rule_duration_ms?: string | number | undefined; total_run_duration_ms?: string | number | undefined; total_enrichment_duration_ms?: string | number | undefined; } & {}> | undefined; status_order?: string | number | undefined; backfill?: Readonly<{ id?: string | undefined; start?: string | undefined; interval?: string | undefined; } & {}> | undefined; } & {}> | undefined; rule_type_id?: string | undefined; } & {}> | undefined; flapping?: boolean | undefined; uuid?: string | undefined; maintenance_window_ids?: string[] | undefined; } & {}> | undefined; space_ids?: string[] | undefined; server_uuid?: string | undefined; saved_objects?: Readonly<{ id?: string | undefined; type?: string | undefined; namespace?: string | undefined; rel?: string | undefined; type_id?: string | undefined; space_agnostic?: boolean | undefined; } & {}>[] | undefined; } & {}> | undefined; event?: Readonly<{ id?: string | undefined; type?: string[] | undefined; reason?: string | undefined; action?: string | undefined; start?: string | undefined; end?: string | undefined; outcome?: string | undefined; duration?: string | number | undefined; code?: string | undefined; severity?: string | number | undefined; category?: string[] | undefined; timezone?: string | undefined; risk_score?: number | undefined; url?: string | undefined; created?: string | undefined; provider?: string | undefined; dataset?: string | undefined; hash?: string | undefined; ingested?: string | undefined; kind?: string | undefined; module?: string | undefined; original?: string | undefined; reference?: string | undefined; risk_score_norm?: number | undefined; sequence?: string | number | undefined; } & {}> | undefined; ecs?: Readonly<{ version?: string | undefined; } & {}> | undefined; user?: Readonly<{ id?: string | undefined; name?: string | undefined; } & {}> | undefined; } & {}>>> | undefined" + "DeepPartial | undefined; error?: Readonly<{ id?: string | undefined; type?: string | undefined; message?: string | undefined; code?: string | undefined; stack_trace?: string | undefined; } & {}> | undefined; '@timestamp'?: string | undefined; message?: string | undefined; tags?: string[] | undefined; rule?: Readonly<{ id?: string | undefined; version?: string | undefined; name?: string | undefined; license?: string | undefined; description?: string | undefined; uuid?: string | undefined; category?: string | undefined; reference?: string | undefined; author?: string[] | undefined; ruleset?: string | undefined; } & {}> | undefined; kibana?: Readonly<{ task?: Readonly<{ id?: string | undefined; schedule_delay?: string | number | undefined; scheduled?: string | undefined; } & {}> | undefined; action?: Readonly<{ id?: string | undefined; name?: string | undefined; type_id?: string | undefined; execution?: Readonly<{ source?: string | undefined; uuid?: string | undefined; gen_ai?: Readonly<{ usage?: Readonly<{ prompt_tokens?: string | number | undefined; completion_tokens?: string | number | undefined; total_tokens?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; usage?: Readonly<{ request_body_bytes?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; version?: string | undefined; alerting?: Readonly<{ outcome?: string | undefined; status?: string | undefined; summary?: Readonly<{ recovered?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; new?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; ongoing?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; instance_id?: string | undefined; action_group_id?: string | undefined; action_subgroup?: string | undefined; } & {}> | undefined; alert?: Readonly<{ rule?: Readonly<{ consumer?: string | undefined; revision?: string | number | undefined; execution?: Readonly<{ uuid?: string | undefined; status?: string | undefined; metrics?: Readonly<{ total_search_duration_ms?: string | number | undefined; total_indexing_duration_ms?: string | number | undefined; number_of_triggered_actions?: string | number | undefined; number_of_generated_actions?: string | number | undefined; alert_counts?: Readonly<{ recovered?: string | number | undefined; active?: string | number | undefined; new?: string | number | undefined; } & {}> | undefined; number_of_delayed_alerts?: string | number | undefined; number_of_searches?: string | number | undefined; es_search_duration_ms?: string | number | undefined; execution_gap_duration_s?: string | number | undefined; rule_type_run_duration_ms?: string | number | undefined; process_alerts_duration_ms?: string | number | undefined; trigger_actions_duration_ms?: string | number | undefined; process_rule_duration_ms?: string | number | undefined; claim_to_start_duration_ms?: string | number | undefined; persist_alerts_duration_ms?: string | number | undefined; prepare_rule_duration_ms?: string | number | undefined; total_run_duration_ms?: string | number | undefined; total_enrichment_duration_ms?: string | number | undefined; } & {}> | undefined; status_order?: string | number | undefined; backfill?: Readonly<{ id?: string | undefined; start?: string | undefined; interval?: string | undefined; } & {}> | undefined; } & {}> | undefined; rule_type_id?: string | undefined; } & {}> | undefined; flapping?: boolean | undefined; uuid?: string | undefined; maintenance_window_ids?: string[] | undefined; } & {}> | undefined; space_ids?: string[] | undefined; server_uuid?: string | undefined; saved_objects?: Readonly<{ id?: string | undefined; type?: string | undefined; namespace?: string | undefined; rel?: string | undefined; type_id?: string | undefined; space_agnostic?: boolean | undefined; } & {}>[] | undefined; } & {}> | undefined; event?: Readonly<{ id?: string | undefined; type?: string[] | undefined; reason?: string | undefined; action?: string | undefined; start?: string | undefined; end?: string | undefined; outcome?: string | undefined; duration?: string | number | undefined; code?: string | undefined; severity?: string | number | undefined; category?: string[] | undefined; timezone?: string | undefined; risk_score?: number | undefined; url?: string | undefined; created?: string | undefined; provider?: string | undefined; dataset?: string | undefined; hash?: string | undefined; ingested?: string | undefined; kind?: string | undefined; module?: string | undefined; original?: string | undefined; reference?: string | undefined; risk_score_norm?: number | undefined; sequence?: string | number | undefined; } & {}> | undefined; ecs?: Readonly<{ version?: string | undefined; } & {}> | undefined; user?: Readonly<{ id?: string | undefined; name?: string | undefined; } & {}> | undefined; } & {}>>> | undefined" ], "path": "x-pack/plugins/event_log/generated/schemas.ts", "deprecated": false, @@ -1549,7 +1549,7 @@ "label": "IValidatedEvent", "description": [], "signature": [ - "Readonly<{ log?: Readonly<{ logger?: string | undefined; level?: string | undefined; } & {}> | undefined; error?: Readonly<{ id?: string | undefined; type?: string | undefined; message?: string | undefined; code?: string | undefined; stack_trace?: string | undefined; } & {}> | undefined; '@timestamp'?: string | undefined; message?: string | undefined; tags?: string[] | undefined; rule?: Readonly<{ id?: string | undefined; version?: string | undefined; name?: string | undefined; license?: string | undefined; description?: string | undefined; uuid?: string | undefined; category?: string | undefined; reference?: string | undefined; author?: string[] | undefined; ruleset?: string | undefined; } & {}> | undefined; kibana?: Readonly<{ task?: Readonly<{ id?: string | undefined; schedule_delay?: string | number | undefined; scheduled?: string | undefined; } & {}> | undefined; action?: Readonly<{ id?: string | undefined; name?: string | undefined; execution?: Readonly<{ source?: string | undefined; uuid?: string | undefined; gen_ai?: Readonly<{ usage?: Readonly<{ prompt_tokens?: string | number | undefined; completion_tokens?: string | number | undefined; total_tokens?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; usage?: Readonly<{ request_body_bytes?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; type_id?: string | undefined; } & {}> | undefined; version?: string | undefined; alerting?: Readonly<{ outcome?: string | undefined; status?: string | undefined; summary?: Readonly<{ recovered?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; new?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; ongoing?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; instance_id?: string | undefined; action_group_id?: string | undefined; action_subgroup?: string | undefined; } & {}> | undefined; alert?: Readonly<{ rule?: Readonly<{ consumer?: string | undefined; revision?: string | number | undefined; execution?: Readonly<{ uuid?: string | undefined; status?: string | undefined; metrics?: Readonly<{ total_search_duration_ms?: string | number | undefined; total_indexing_duration_ms?: string | number | undefined; number_of_triggered_actions?: string | number | undefined; number_of_generated_actions?: string | number | undefined; alert_counts?: Readonly<{ recovered?: string | number | undefined; active?: string | number | undefined; new?: string | number | undefined; } & {}> | undefined; number_of_delayed_alerts?: string | number | undefined; number_of_searches?: string | number | undefined; es_search_duration_ms?: string | number | undefined; execution_gap_duration_s?: string | number | undefined; rule_type_run_duration_ms?: string | number | undefined; process_alerts_duration_ms?: string | number | undefined; trigger_actions_duration_ms?: string | number | undefined; process_rule_duration_ms?: string | number | undefined; claim_to_start_duration_ms?: string | number | undefined; persist_alerts_duration_ms?: string | number | undefined; prepare_rule_duration_ms?: string | number | undefined; total_run_duration_ms?: string | number | undefined; total_enrichment_duration_ms?: string | number | undefined; } & {}> | undefined; status_order?: string | number | undefined; backfill?: Readonly<{ id?: string | undefined; start?: string | undefined; interval?: string | undefined; } & {}> | undefined; } & {}> | undefined; rule_type_id?: string | undefined; } & {}> | undefined; flapping?: boolean | undefined; uuid?: string | undefined; maintenance_window_ids?: string[] | undefined; } & {}> | undefined; space_ids?: string[] | undefined; server_uuid?: string | undefined; saved_objects?: Readonly<{ id?: string | undefined; type?: string | undefined; namespace?: string | undefined; rel?: string | undefined; type_id?: string | undefined; space_agnostic?: boolean | undefined; } & {}>[] | undefined; } & {}> | undefined; event?: Readonly<{ id?: string | undefined; type?: string[] | undefined; reason?: string | undefined; action?: string | undefined; start?: string | undefined; end?: string | undefined; outcome?: string | undefined; duration?: string | number | undefined; code?: string | undefined; severity?: string | number | undefined; category?: string[] | undefined; timezone?: string | undefined; risk_score?: number | undefined; url?: string | undefined; created?: string | undefined; provider?: string | undefined; dataset?: string | undefined; hash?: string | undefined; ingested?: string | undefined; kind?: string | undefined; module?: string | undefined; original?: string | undefined; reference?: string | undefined; risk_score_norm?: number | undefined; sequence?: string | number | undefined; } & {}> | undefined; ecs?: Readonly<{ version?: string | undefined; } & {}> | undefined; user?: Readonly<{ id?: string | undefined; name?: string | undefined; } & {}> | undefined; } & {}> | undefined" + "Readonly<{ log?: Readonly<{ logger?: string | undefined; level?: string | undefined; } & {}> | undefined; error?: Readonly<{ id?: string | undefined; type?: string | undefined; message?: string | undefined; code?: string | undefined; stack_trace?: string | undefined; } & {}> | undefined; '@timestamp'?: string | undefined; message?: string | undefined; tags?: string[] | undefined; rule?: Readonly<{ id?: string | undefined; version?: string | undefined; name?: string | undefined; license?: string | undefined; description?: string | undefined; uuid?: string | undefined; category?: string | undefined; reference?: string | undefined; author?: string[] | undefined; ruleset?: string | undefined; } & {}> | undefined; kibana?: Readonly<{ task?: Readonly<{ id?: string | undefined; schedule_delay?: string | number | undefined; scheduled?: string | undefined; } & {}> | undefined; action?: Readonly<{ id?: string | undefined; name?: string | undefined; type_id?: string | undefined; execution?: Readonly<{ source?: string | undefined; uuid?: string | undefined; gen_ai?: Readonly<{ usage?: Readonly<{ prompt_tokens?: string | number | undefined; completion_tokens?: string | number | undefined; total_tokens?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; usage?: Readonly<{ request_body_bytes?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; version?: string | undefined; alerting?: Readonly<{ outcome?: string | undefined; status?: string | undefined; summary?: Readonly<{ recovered?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; new?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; ongoing?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; instance_id?: string | undefined; action_group_id?: string | undefined; action_subgroup?: string | undefined; } & {}> | undefined; alert?: Readonly<{ rule?: Readonly<{ consumer?: string | undefined; revision?: string | number | undefined; execution?: Readonly<{ uuid?: string | undefined; status?: string | undefined; metrics?: Readonly<{ total_search_duration_ms?: string | number | undefined; total_indexing_duration_ms?: string | number | undefined; number_of_triggered_actions?: string | number | undefined; number_of_generated_actions?: string | number | undefined; alert_counts?: Readonly<{ recovered?: string | number | undefined; active?: string | number | undefined; new?: string | number | undefined; } & {}> | undefined; number_of_delayed_alerts?: string | number | undefined; number_of_searches?: string | number | undefined; es_search_duration_ms?: string | number | undefined; execution_gap_duration_s?: string | number | undefined; rule_type_run_duration_ms?: string | number | undefined; process_alerts_duration_ms?: string | number | undefined; trigger_actions_duration_ms?: string | number | undefined; process_rule_duration_ms?: string | number | undefined; claim_to_start_duration_ms?: string | number | undefined; persist_alerts_duration_ms?: string | number | undefined; prepare_rule_duration_ms?: string | number | undefined; total_run_duration_ms?: string | number | undefined; total_enrichment_duration_ms?: string | number | undefined; } & {}> | undefined; status_order?: string | number | undefined; backfill?: Readonly<{ id?: string | undefined; start?: string | undefined; interval?: string | undefined; } & {}> | undefined; } & {}> | undefined; rule_type_id?: string | undefined; } & {}> | undefined; flapping?: boolean | undefined; uuid?: string | undefined; maintenance_window_ids?: string[] | undefined; } & {}> | undefined; space_ids?: string[] | undefined; server_uuid?: string | undefined; saved_objects?: Readonly<{ id?: string | undefined; type?: string | undefined; namespace?: string | undefined; rel?: string | undefined; type_id?: string | undefined; space_agnostic?: boolean | undefined; } & {}>[] | undefined; } & {}> | undefined; event?: Readonly<{ id?: string | undefined; type?: string[] | undefined; reason?: string | undefined; action?: string | undefined; start?: string | undefined; end?: string | undefined; outcome?: string | undefined; duration?: string | number | undefined; code?: string | undefined; severity?: string | number | undefined; category?: string[] | undefined; timezone?: string | undefined; risk_score?: number | undefined; url?: string | undefined; created?: string | undefined; provider?: string | undefined; dataset?: string | undefined; hash?: string | undefined; ingested?: string | undefined; kind?: string | undefined; module?: string | undefined; original?: string | undefined; reference?: string | undefined; risk_score_norm?: number | undefined; sequence?: string | number | undefined; } & {}> | undefined; ecs?: Readonly<{ version?: string | undefined; } & {}> | undefined; user?: Readonly<{ id?: string | undefined; name?: string | undefined; } & {}> | undefined; } & {}> | undefined" ], "path": "x-pack/plugins/event_log/generated/schemas.ts", "deprecated": false, diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index 90bed851be237..6a0a0e1f57232 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: 2024-12-03 +date: 2024-12-05 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 d226a1207d3fc..dfe16304652cc 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: 2024-12-03 +date: 2024-12-05 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 5412c012dccf0..fc2c49ea0a549 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: 2024-12-03 +date: 2024-12-05 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 0be715deea203..fe8cf1d70e8da 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: 2024-12-03 +date: 2024-12-05 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 c7882909785de..c5b47ba0533fa 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: 2024-12-03 +date: 2024-12-05 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 c9332d0b0ff68..6e8caf2c8470a 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: 2024-12-03 +date: 2024-12-05 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 e83cea3de90cb..bf7bc8c457d54 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: 2024-12-03 +date: 2024-12-05 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 872ef40b76e34..77fa8c8f1bfe7 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: 2024-12-03 +date: 2024-12-05 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 b3c82de9aaed6..f42788be47536 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: 2024-12-03 +date: 2024-12-05 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 8c1e1462e9ee5..9217f8db6d058 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: 2024-12-03 +date: 2024-12-05 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 fe3383781dd3c..d61b5f529b8b6 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: 2024-12-03 +date: 2024-12-05 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 585fdceb1ae5a..8e4f6107b4e87 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: 2024-12-03 +date: 2024-12-05 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 3c46e5108b05f..ae20f22e10cf7 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: 2024-12-03 +date: 2024-12-05 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 1ab84e554d867..cd5e581996cd1 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: 2024-12-03 +date: 2024-12-05 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 c63d33f62a1cb..8e1ce15251e29 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: 2024-12-03 +date: 2024-12-05 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 f7433b89be8a4..4dae3493adbbc 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressions'] --- import expressionsObj from './expressions.devdocs.json'; diff --git a/api_docs/features.devdocs.json b/api_docs/features.devdocs.json index b2c5e5c97a10b..afc982a1c2d43 100644 --- a/api_docs/features.devdocs.json +++ b/api_docs/features.devdocs.json @@ -56,7 +56,7 @@ "label": "config", "description": [], "signature": [ - "Readonly<{ id: string; name: string; description?: string | undefined; category: Readonly<{ id: string; label: string; ariaLabel?: string | undefined; order?: number | undefined; euiIconType?: string | undefined; }>; order?: number | undefined; excludeFromBasePrivileges?: boolean | undefined; minimumLicense?: \"basic\" | \"standard\" | \"gold\" | \"platinum\" | \"enterprise\" | \"trial\" | undefined; app: readonly string[]; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; alerting?: readonly string[] | undefined; cases?: readonly string[] | undefined; privileges: Readonly<{ all: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; read: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; }> | null; subFeatures?: readonly Readonly<{ name: string; requireAllSpaces?: boolean | undefined; privilegesTooltip?: string | undefined; privilegeGroups: readonly Readonly<{ groupType: ", + "Readonly<{ id: string; name: string; description?: string | undefined; category: Readonly<{ id: string; label: string; ariaLabel?: string | undefined; order?: number | undefined; euiIconType?: string | undefined; }>; order?: number | undefined; excludeFromBasePrivileges?: boolean | undefined; minimumLicense?: \"basic\" | \"standard\" | \"gold\" | \"platinum\" | \"enterprise\" | \"trial\" | undefined; app: readonly string[]; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; alerting?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; cases?: readonly string[] | undefined; privileges: Readonly<{ all: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; read: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; }> | null; subFeatures?: readonly Readonly<{ name: string; requireAllSpaces?: boolean | undefined; privilegesTooltip?: string | undefined; privilegeGroups: readonly Readonly<{ groupType: ", { "pluginId": "features", "scope": "common", @@ -64,7 +64,7 @@ "section": "def-common.SubFeaturePrivilegeGroupType", "text": "SubFeaturePrivilegeGroupType" }, - "; privileges: readonly Readonly<{ id: string; name: string; includeIn: \"none\" | \"read\" | \"all\"; minimumLicense?: \"basic\" | \"standard\" | \"gold\" | \"platinum\" | \"enterprise\" | \"trial\" | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; app?: readonly string[] | undefined; ui: readonly string[]; catalogue?: readonly string[] | undefined; requireAllSpaces?: boolean | undefined; api?: readonly string[] | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; }>[]; }>[]; description?: string | undefined; }>[] | undefined; privilegesTooltip?: string | undefined; reserved?: Readonly<{ description: string; privileges: readonly Readonly<{ id: string; privilege: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; }>[]; }> | undefined; hidden?: boolean | undefined; scope?: readonly ", + "; privileges: readonly Readonly<{ id: string; name: string; includeIn: \"none\" | \"read\" | \"all\"; minimumLicense?: \"basic\" | \"standard\" | \"gold\" | \"platinum\" | \"enterprise\" | \"trial\" | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; app?: readonly string[] | undefined; ui: readonly string[]; catalogue?: readonly string[] | undefined; requireAllSpaces?: boolean | undefined; api?: readonly string[] | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; }>[]; }>[]; description?: string | undefined; }>[] | undefined; privilegesTooltip?: string | undefined; reserved?: Readonly<{ description: string; privileges: readonly Readonly<{ id: string; privilege: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; }>[]; }> | undefined; hidden?: boolean | undefined; scope?: readonly ", { "pluginId": "features", "scope": "common", @@ -238,7 +238,7 @@ "label": "privileges", "description": [], "signature": [ - "Readonly<{ all: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; read: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; }> | null" + "Readonly<{ all: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; read: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; }> | null" ], "path": "x-pack/plugins/features/common/kibana_feature.ts", "deprecated": false, @@ -252,7 +252,7 @@ "label": "alerting", "description": [], "signature": [ - "readonly string[] | undefined" + "readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined" ], "path": "x-pack/plugins/features/common/kibana_feature.ts", "deprecated": false, @@ -291,7 +291,7 @@ "label": "reserved", "description": [], "signature": [ - "Readonly<{ description: string; privileges: readonly Readonly<{ id: string; privilege: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; }>[]; }> | undefined" + "Readonly<{ description: string; privileges: readonly Readonly<{ id: string; privilege: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; }>[]; }> | undefined" ], "path": "x-pack/plugins/features/common/kibana_feature.ts", "deprecated": false, @@ -483,7 +483,15 @@ "\nIf your feature requires access to specific Alert Types, then specify your access needs here.\nInclude both Alert Types registered by the feature and external Alert Types such as built-in\nAlert Types and Alert Types provided by other features to which you wish to grant access." ], "signature": [ - "{ rule?: { all?: readonly string[] | undefined; read?: readonly string[] | undefined; } | undefined; alert?: { all?: readonly string[] | undefined; read?: readonly string[] | undefined; } | undefined; } | undefined" + "{ rule?: { all?: ", + "AlertingKibanaPrivilege", + " | undefined; read?: ", + "AlertingKibanaPrivilege", + " | undefined; } | undefined; alert?: { all?: ", + "AlertingKibanaPrivilege", + " | undefined; read?: ", + "AlertingKibanaPrivilege", + " | undefined; } | undefined; } | undefined" ], "path": "x-pack/plugins/features/common/feature_kibana_privileges.ts", "deprecated": false, @@ -788,10 +796,11 @@ "tags": [], "label": "alerting", "description": [ - "\nIf your feature grants access to specific Alert Types, you can specify them here to control visibility based on the current space.\nInclude both Alert Types registered by the feature and external Alert Types such as built-in\nAlert Types and Alert Types provided by other features to which you wish to grant access." + "\nIf your feature grants access to specific rule types, you can specify them here to control visibility based on the current space.\nInclude both rule types registered by the feature and external rule types such as built-in\nrule types and rule types provided by other features to which you wish to grant access. For each rule type\nyou can specify the consumers the feature has access to." ], "signature": [ - "readonly string[] | undefined" + "AlertingKibanaPrivilege", + " | undefined" ], "path": "x-pack/plugins/features/common/kibana_feature.ts", "deprecated": false, @@ -1481,7 +1490,7 @@ "label": "config", "description": [], "signature": [ - "Readonly<{ id: string; name: string; description?: string | undefined; category: Readonly<{ id: string; label: string; ariaLabel?: string | undefined; order?: number | undefined; euiIconType?: string | undefined; }>; order?: number | undefined; excludeFromBasePrivileges?: boolean | undefined; minimumLicense?: \"basic\" | \"standard\" | \"gold\" | \"platinum\" | \"enterprise\" | \"trial\" | undefined; app: readonly string[]; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; alerting?: readonly string[] | undefined; cases?: readonly string[] | undefined; privileges: Readonly<{ all: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; read: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; }> | null; subFeatures?: readonly Readonly<{ name: string; requireAllSpaces?: boolean | undefined; privilegesTooltip?: string | undefined; privilegeGroups: readonly Readonly<{ groupType: ", + "Readonly<{ id: string; name: string; description?: string | undefined; category: Readonly<{ id: string; label: string; ariaLabel?: string | undefined; order?: number | undefined; euiIconType?: string | undefined; }>; order?: number | undefined; excludeFromBasePrivileges?: boolean | undefined; minimumLicense?: \"basic\" | \"standard\" | \"gold\" | \"platinum\" | \"enterprise\" | \"trial\" | undefined; app: readonly string[]; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; alerting?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; cases?: readonly string[] | undefined; privileges: Readonly<{ all: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; read: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; }> | null; subFeatures?: readonly Readonly<{ name: string; requireAllSpaces?: boolean | undefined; privilegesTooltip?: string | undefined; privilegeGroups: readonly Readonly<{ groupType: ", { "pluginId": "features", "scope": "common", @@ -1489,7 +1498,7 @@ "section": "def-common.SubFeaturePrivilegeGroupType", "text": "SubFeaturePrivilegeGroupType" }, - "; privileges: readonly Readonly<{ id: string; name: string; includeIn: \"none\" | \"read\" | \"all\"; minimumLicense?: \"basic\" | \"standard\" | \"gold\" | \"platinum\" | \"enterprise\" | \"trial\" | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; app?: readonly string[] | undefined; ui: readonly string[]; catalogue?: readonly string[] | undefined; requireAllSpaces?: boolean | undefined; api?: readonly string[] | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; }>[]; }>[]; description?: string | undefined; }>[] | undefined; privilegesTooltip?: string | undefined; reserved?: Readonly<{ description: string; privileges: readonly Readonly<{ id: string; privilege: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; }>[]; }> | undefined; hidden?: boolean | undefined; scope?: readonly ", + "; privileges: readonly Readonly<{ id: string; name: string; includeIn: \"none\" | \"read\" | \"all\"; minimumLicense?: \"basic\" | \"standard\" | \"gold\" | \"platinum\" | \"enterprise\" | \"trial\" | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; app?: readonly string[] | undefined; ui: readonly string[]; catalogue?: readonly string[] | undefined; requireAllSpaces?: boolean | undefined; api?: readonly string[] | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; }>[]; }>[]; description?: string | undefined; }>[] | undefined; privilegesTooltip?: string | undefined; reserved?: Readonly<{ description: string; privileges: readonly Readonly<{ id: string; privilege: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; }>[]; }> | undefined; hidden?: boolean | undefined; scope?: readonly ", { "pluginId": "features", "scope": "common", @@ -1663,7 +1672,7 @@ "label": "privileges", "description": [], "signature": [ - "Readonly<{ all: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; read: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; }> | null" + "Readonly<{ all: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; read: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; }> | null" ], "path": "x-pack/plugins/features/common/kibana_feature.ts", "deprecated": false, @@ -1677,7 +1686,7 @@ "label": "alerting", "description": [], "signature": [ - "readonly string[] | undefined" + "readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined" ], "path": "x-pack/plugins/features/common/kibana_feature.ts", "deprecated": false, @@ -1716,7 +1725,7 @@ "label": "reserved", "description": [], "signature": [ - "Readonly<{ description: string; privileges: readonly Readonly<{ id: string; privilege: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; }>[]; }> | undefined" + "Readonly<{ description: string; privileges: readonly Readonly<{ id: string; privilege: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; }>[]; }> | undefined" ], "path": "x-pack/plugins/features/common/kibana_feature.ts", "deprecated": false, @@ -2087,7 +2096,15 @@ "\nIf your feature requires access to specific Alert Types, then specify your access needs here.\nInclude both Alert Types registered by the feature and external Alert Types such as built-in\nAlert Types and Alert Types provided by other features to which you wish to grant access." ], "signature": [ - "{ rule?: { all?: readonly string[] | undefined; read?: readonly string[] | undefined; } | undefined; alert?: { all?: readonly string[] | undefined; read?: readonly string[] | undefined; } | undefined; } | undefined" + "{ rule?: { all?: ", + "AlertingKibanaPrivilege", + " | undefined; read?: ", + "AlertingKibanaPrivilege", + " | undefined; } | undefined; alert?: { all?: ", + "AlertingKibanaPrivilege", + " | undefined; read?: ", + "AlertingKibanaPrivilege", + " | undefined; } | undefined; } | undefined" ], "path": "x-pack/plugins/features/common/feature_kibana_privileges.ts", "deprecated": false, @@ -2975,10 +2992,11 @@ "tags": [], "label": "alerting", "description": [ - "\nIf your feature grants access to specific Alert Types, you can specify them here to control visibility based on the current space.\nInclude both Alert Types registered by the feature and external Alert Types such as built-in\nAlert Types and Alert Types provided by other features to which you wish to grant access." + "\nIf your feature grants access to specific rule types, you can specify them here to control visibility based on the current space.\nInclude both rule types registered by the feature and external rule types such as built-in\nrule types and rule types provided by other features to which you wish to grant access. For each rule type\nyou can specify the consumers the feature has access to." ], "signature": [ - "readonly string[] | undefined" + "AlertingKibanaPrivilege", + " | undefined" ], "path": "x-pack/plugins/features/common/kibana_feature.ts", "deprecated": false, @@ -3502,7 +3520,7 @@ "label": "config", "description": [], "signature": [ - "Readonly<{ id: string; name: string; description?: string | undefined; category: Readonly<{ id: string; label: string; ariaLabel?: string | undefined; order?: number | undefined; euiIconType?: string | undefined; }>; order?: number | undefined; excludeFromBasePrivileges?: boolean | undefined; minimumLicense?: \"basic\" | \"standard\" | \"gold\" | \"platinum\" | \"enterprise\" | \"trial\" | undefined; app: readonly string[]; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; alerting?: readonly string[] | undefined; cases?: readonly string[] | undefined; privileges: Readonly<{ all: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; read: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; }> | null; subFeatures?: readonly Readonly<{ name: string; requireAllSpaces?: boolean | undefined; privilegesTooltip?: string | undefined; privilegeGroups: readonly Readonly<{ groupType: ", + "Readonly<{ id: string; name: string; description?: string | undefined; category: Readonly<{ id: string; label: string; ariaLabel?: string | undefined; order?: number | undefined; euiIconType?: string | undefined; }>; order?: number | undefined; excludeFromBasePrivileges?: boolean | undefined; minimumLicense?: \"basic\" | \"standard\" | \"gold\" | \"platinum\" | \"enterprise\" | \"trial\" | undefined; app: readonly string[]; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; alerting?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; cases?: readonly string[] | undefined; privileges: Readonly<{ all: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; read: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; }> | null; subFeatures?: readonly Readonly<{ name: string; requireAllSpaces?: boolean | undefined; privilegesTooltip?: string | undefined; privilegeGroups: readonly Readonly<{ groupType: ", { "pluginId": "features", "scope": "common", @@ -3510,7 +3528,7 @@ "section": "def-common.SubFeaturePrivilegeGroupType", "text": "SubFeaturePrivilegeGroupType" }, - "; privileges: readonly Readonly<{ id: string; name: string; includeIn: \"none\" | \"read\" | \"all\"; minimumLicense?: \"basic\" | \"standard\" | \"gold\" | \"platinum\" | \"enterprise\" | \"trial\" | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; app?: readonly string[] | undefined; ui: readonly string[]; catalogue?: readonly string[] | undefined; requireAllSpaces?: boolean | undefined; api?: readonly string[] | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; }>[]; }>[]; description?: string | undefined; }>[] | undefined; privilegesTooltip?: string | undefined; reserved?: Readonly<{ description: string; privileges: readonly Readonly<{ id: string; privilege: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; }>[]; }> | undefined; hidden?: boolean | undefined; scope?: readonly ", + "; privileges: readonly Readonly<{ id: string; name: string; includeIn: \"none\" | \"read\" | \"all\"; minimumLicense?: \"basic\" | \"standard\" | \"gold\" | \"platinum\" | \"enterprise\" | \"trial\" | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; app?: readonly string[] | undefined; ui: readonly string[]; catalogue?: readonly string[] | undefined; requireAllSpaces?: boolean | undefined; api?: readonly string[] | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; }>[]; }>[]; description?: string | undefined; }>[] | undefined; privilegesTooltip?: string | undefined; reserved?: Readonly<{ description: string; privileges: readonly Readonly<{ id: string; privilege: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; }>[]; }> | undefined; hidden?: boolean | undefined; scope?: readonly ", { "pluginId": "features", "scope": "common", @@ -3684,7 +3702,7 @@ "label": "privileges", "description": [], "signature": [ - "Readonly<{ all: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; read: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; }> | null" + "Readonly<{ all: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; read: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; }> | null" ], "path": "x-pack/plugins/features/common/kibana_feature.ts", "deprecated": false, @@ -3698,7 +3716,7 @@ "label": "alerting", "description": [], "signature": [ - "readonly string[] | undefined" + "readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined" ], "path": "x-pack/plugins/features/common/kibana_feature.ts", "deprecated": false, @@ -3737,7 +3755,7 @@ "label": "reserved", "description": [], "signature": [ - "Readonly<{ description: string; privileges: readonly Readonly<{ id: string; privilege: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; }>[]; }> | undefined" + "Readonly<{ description: string; privileges: readonly Readonly<{ id: string; privilege: Readonly<{ excludeFromBasePrivileges?: boolean | undefined; requireAllSpaces?: boolean | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; catalogue?: readonly string[] | undefined; api?: readonly string[] | undefined; app?: readonly string[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; ui: readonly string[]; composedOf?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | Readonly<{ default: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; minimal: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[]; }> | undefined; }>; }>[]; }> | undefined" ], "path": "x-pack/plugins/features/common/kibana_feature.ts", "deprecated": false, @@ -3832,7 +3850,7 @@ "section": "def-common.SubFeaturePrivilegeGroupType", "text": "SubFeaturePrivilegeGroupType" }, - "; privileges: readonly Readonly<{ id: string; name: string; includeIn: \"none\" | \"read\" | \"all\"; minimumLicense?: \"basic\" | \"standard\" | \"gold\" | \"platinum\" | \"enterprise\" | \"trial\" | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; app?: readonly string[] | undefined; ui: readonly string[]; catalogue?: readonly string[] | undefined; requireAllSpaces?: boolean | undefined; api?: readonly string[] | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; }>[]; }>[]; description?: string | undefined; }>" + "; privileges: readonly Readonly<{ id: string; name: string; includeIn: \"none\" | \"read\" | \"all\"; minimumLicense?: \"basic\" | \"standard\" | \"gold\" | \"platinum\" | \"enterprise\" | \"trial\" | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; app?: readonly string[] | undefined; ui: readonly string[]; catalogue?: readonly string[] | undefined; requireAllSpaces?: boolean | undefined; api?: readonly string[] | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; }>[]; }>[]; description?: string | undefined; }>" ], "path": "x-pack/plugins/features/common/sub_feature.ts", "deprecated": false, @@ -3869,7 +3887,7 @@ "section": "def-common.SubFeaturePrivilegeGroupType", "text": "SubFeaturePrivilegeGroupType" }, - "; privileges: readonly Readonly<{ id: string; name: string; includeIn: \"none\" | \"read\" | \"all\"; minimumLicense?: \"basic\" | \"standard\" | \"gold\" | \"platinum\" | \"enterprise\" | \"trial\" | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; app?: readonly string[] | undefined; ui: readonly string[]; catalogue?: readonly string[] | undefined; requireAllSpaces?: boolean | undefined; api?: readonly string[] | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; }>[]; }>[]" + "; privileges: readonly Readonly<{ id: string; name: string; includeIn: \"none\" | \"read\" | \"all\"; minimumLicense?: \"basic\" | \"standard\" | \"gold\" | \"platinum\" | \"enterprise\" | \"trial\" | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; app?: readonly string[] | undefined; ui: readonly string[]; catalogue?: readonly string[] | undefined; requireAllSpaces?: boolean | undefined; api?: readonly string[] | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; }>[]; }>[]" ], "path": "x-pack/plugins/features/common/sub_feature.ts", "deprecated": false, @@ -3913,7 +3931,7 @@ "section": "def-common.SubFeaturePrivilegeGroupType", "text": "SubFeaturePrivilegeGroupType" }, - "; privileges: readonly Readonly<{ id: string; name: string; includeIn: \"none\" | \"read\" | \"all\"; minimumLicense?: \"basic\" | \"standard\" | \"gold\" | \"platinum\" | \"enterprise\" | \"trial\" | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly string[] | undefined; read?: readonly string[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; app?: readonly string[] | undefined; ui: readonly string[]; catalogue?: readonly string[] | undefined; requireAllSpaces?: boolean | undefined; api?: readonly string[] | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; }>[]; }>[]; description?: string | undefined; }" + "; privileges: readonly Readonly<{ id: string; name: string; includeIn: \"none\" | \"read\" | \"all\"; minimumLicense?: \"basic\" | \"standard\" | \"gold\" | \"platinum\" | \"enterprise\" | \"trial\" | undefined; replacedBy?: readonly Readonly<{ feature: string; privileges: readonly string[]; }>[] | undefined; alerting?: Readonly<{ rule?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; alert?: Readonly<{ all?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; read?: readonly Readonly<{ ruleTypeId: string; consumers: readonly string[]; }>[] | undefined; }> | undefined; }> | undefined; cases?: Readonly<{ all?: readonly string[] | undefined; push?: readonly string[] | undefined; create?: readonly string[] | undefined; read?: readonly string[] | undefined; update?: readonly string[] | undefined; delete?: readonly string[] | undefined; settings?: readonly string[] | undefined; createComment?: readonly string[] | undefined; reopenCase?: readonly string[] | undefined; }> | undefined; disabled?: boolean | undefined; management?: Readonly<{ [x: string]: readonly string[]; }> | undefined; app?: readonly string[] | undefined; ui: readonly string[]; catalogue?: readonly string[] | undefined; requireAllSpaces?: boolean | undefined; api?: readonly string[] | undefined; savedObject: Readonly<{ all: readonly string[]; read: readonly string[]; }>; }>[]; }>[]; description?: string | undefined; }" ], "path": "x-pack/plugins/features/common/sub_feature.ts", "deprecated": false, @@ -4241,7 +4259,15 @@ "\nIf your feature requires access to specific Alert Types, then specify your access needs here.\nInclude both Alert Types registered by the feature and external Alert Types such as built-in\nAlert Types and Alert Types provided by other features to which you wish to grant access." ], "signature": [ - "{ rule?: { all?: readonly string[] | undefined; read?: readonly string[] | undefined; } | undefined; alert?: { all?: readonly string[] | undefined; read?: readonly string[] | undefined; } | undefined; } | undefined" + "{ rule?: { all?: ", + "AlertingKibanaPrivilege", + " | undefined; read?: ", + "AlertingKibanaPrivilege", + " | undefined; } | undefined; alert?: { all?: ", + "AlertingKibanaPrivilege", + " | undefined; read?: ", + "AlertingKibanaPrivilege", + " | undefined; } | undefined; } | undefined" ], "path": "x-pack/plugins/features/common/feature_kibana_privileges.ts", "deprecated": false, @@ -4591,10 +4617,11 @@ "tags": [], "label": "alerting", "description": [ - "\nIf your feature grants access to specific Alert Types, you can specify them here to control visibility based on the current space.\nInclude both Alert Types registered by the feature and external Alert Types such as built-in\nAlert Types and Alert Types provided by other features to which you wish to grant access." + "\nIf your feature grants access to specific rule types, you can specify them here to control visibility based on the current space.\nInclude both rule types registered by the feature and external rule types such as built-in\nrule types and rule types provided by other features to which you wish to grant access. For each rule type\nyou can specify the consumers the feature has access to." ], "signature": [ - "readonly string[] | undefined" + "AlertingKibanaPrivilege", + " | undefined" ], "path": "x-pack/plugins/features/common/kibana_feature.ts", "deprecated": false, diff --git a/api_docs/features.mdx b/api_docs/features.mdx index b4cab32461bd3..8519484bec428 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'features'] --- import featuresObj from './features.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 270 | 0 | 110 | 2 | +| 270 | 0 | 110 | 3 | ## Client diff --git a/api_docs/field_formats.mdx b/api_docs/field_formats.mdx index d3a77744d9383..8f9409bcf4e65 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: 2024-12-03 +date: 2024-12-05 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 7700b42a9da68..b520762cb0979 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: 2024-12-03 +date: 2024-12-05 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 2169567dd27db..c7008a3d269fa 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: 2024-12-03 +date: 2024-12-05 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 c7568eef46d7f..af0071c018d86 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: 2024-12-03 +date: 2024-12-05 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 ebcc2d578f6ca..faae03200d380 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement'] --- import filesManagementObj from './files_management.devdocs.json'; diff --git a/api_docs/fleet.devdocs.json b/api_docs/fleet.devdocs.json index 9abcedefd3043..fdd4aea83eeb4 100644 --- a/api_docs/fleet.devdocs.json +++ b/api_docs/fleet.devdocs.json @@ -24444,7 +24444,7 @@ "label": "monitoring_http", "description": [], "signature": [ - "{ enabled: boolean; host?: string | undefined; port?: number | undefined; buffer?: { enabled: boolean; } | undefined; } | undefined" + "{ enabled?: boolean | undefined; host?: string | undefined; port?: number | undefined; buffer?: { enabled: boolean; } | undefined; } | undefined" ], "path": "x-pack/plugins/fleet/common/types/models/agent_policy.ts", "deprecated": false, diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index 1c4db3adeae7d..fecbc7e88e1c9 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: 2024-12-03 +date: 2024-12-05 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 229d3a9e4bbb7..c8c37b5fd2b64 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: 2024-12-03 +date: 2024-12-05 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 7824e377774e3..eeea8aed87340 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: 2024-12-03 +date: 2024-12-05 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 7dc920164d8d1..353208af2fcfe 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: 2024-12-03 +date: 2024-12-05 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 67b9a220830bd..8c6493d6cb739 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: 2024-12-03 +date: 2024-12-05 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 56da4fb40641c..676529442492a 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: 2024-12-03 +date: 2024-12-05 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 2e82880526e59..246349bd87696 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: 2024-12-03 +date: 2024-12-05 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 ec0fa9af52514..bd88e1d2395c0 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: 2024-12-03 +date: 2024-12-05 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 76d0e667edacf..c7bdce7d50ea3 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: 2024-12-03 +date: 2024-12-05 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 7c385f03d849f..8caea386dffa0 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: 2024-12-03 +date: 2024-12-05 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 453e6fba686db..db766c7df9012 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: 2024-12-03 +date: 2024-12-05 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 8d8a9090a8272..bbbf11ed39d71 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: 2024-12-03 +date: 2024-12-05 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 8a5c806b2c6a6..e3f71b62a81b1 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: 2024-12-03 +date: 2024-12-05 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 aadd2ea61f55f..358e44bec724e 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: 2024-12-03 +date: 2024-12-05 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 655656d8e900c..c75d1d6b30873 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: 2024-12-03 +date: 2024-12-05 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 8d11653091be4..80041fff6f649 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigateApp'] --- import investigateAppObj from './investigate_app.devdocs.json'; diff --git a/api_docs/kbn_actions_types.mdx b/api_docs/kbn_actions_types.mdx index bc6e94cfac6eb..7bd5ce2e24be0 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/actions-types'] --- import kbnActionsTypesObj from './kbn_actions_types.devdocs.json'; diff --git a/api_docs/kbn_ai_assistant.mdx b/api_docs/kbn_ai_assistant.mdx index c683aeba68730..2127ba43fe97f 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: 2024-12-03 +date: 2024-12-05 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 f19f97a4449f4..6dae3837f8265 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ai-assistant-common'] --- import kbnAiAssistantCommonObj from './kbn_ai_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index f97b1a673f4e3..b7c6fb7e6dab4 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: 2024-12-03 +date: 2024-12-05 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 fbac611741b86..10b46b612c11b 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: 2024-12-03 +date: 2024-12-05 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 3dd810cf505b6..b3a6437a88c2c 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: 2024-12-03 +date: 2024-12-05 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 55bf830ff7842..7b03075b89e7a 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: 2024-12-03 +date: 2024-12-05 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 4accc32a4deb3..f363044ec29bb 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: 2024-12-03 +date: 2024-12-05 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 44f688a7bb5da..436cdfa5ac8b8 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: 2024-12-03 +date: 2024-12-05 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.devdocs.json b/api_docs/kbn_alerting_types.devdocs.json index 830a829583ab9..035291b979d31 100644 --- a/api_docs/kbn_alerting_types.devdocs.json +++ b/api_docs/kbn_alerting_types.devdocs.json @@ -3793,15 +3793,7 @@ "section": "def-common.ISearchRequestParams", "text": "ISearchRequestParams" }, - "> & { featureIds: ", - { - "pluginId": "@kbn/rule-data-utils", - "scope": "common", - "docId": "kibKbnRuleDataUtilsPluginApi", - "section": "def-common.AlertConsumers", - "text": "AlertConsumers" - }, - "[]; fields?: ", + "> & { ruleTypeIds: string[]; consumers?: string[] | undefined; fields?: ", "QueryDslFieldAndFormat", "[] | undefined; query?: Pick<", "QueryDslQueryContainer", diff --git a/api_docs/kbn_alerting_types.mdx b/api_docs/kbn_alerting_types.mdx index e086a27730597..b4e927000fdad 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: 2024-12-03 +date: 2024-12-05 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 5e51f13103f95..32a2c5620280c 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: 2024-12-03 +date: 2024-12-05 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.devdocs.json b/api_docs/kbn_alerts_grouping.devdocs.json index e1841971236c8..b4a3dd624dff0 100644 --- a/api_docs/kbn_alerts_grouping.devdocs.json +++ b/api_docs/kbn_alerts_grouping.devdocs.json @@ -362,22 +362,31 @@ }, { "parentPluginId": "@kbn/alerts-grouping", - "id": "def-public.AlertsGroupingProps.featureIds", + "id": "def-public.AlertsGroupingProps.ruleTypeIds", "type": "Array", "tags": [], - "label": "featureIds", + "label": "ruleTypeIds", "description": [ - "\nThe alerting feature ids this grouping covers" + "\nThe alerting rule type ids this grouping covers" ], "signature": [ - { - "pluginId": "@kbn/rule-data-utils", - "scope": "common", - "docId": "kibKbnRuleDataUtilsPluginApi", - "section": "def-common.AlertConsumers", - "text": "AlertConsumers" - }, - "[]" + "string[]" + ], + "path": "packages/kbn-alerts-grouping/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/alerts-grouping", + "id": "def-public.AlertsGroupingProps.consumers", + "type": "Array", + "tags": [], + "label": "consumers", + "description": [ + "\nThe alerting consumers this grouping covers" + ], + "signature": [ + "string[] | undefined" ], "path": "packages/kbn-alerts-grouping/src/types.ts", "deprecated": false, diff --git a/api_docs/kbn_alerts_grouping.mdx b/api_docs/kbn_alerts_grouping.mdx index 2e75a8a1181f0..705268d6772eb 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-grouping'] --- import kbnAlertsGroupingObj from './kbn_alerts_grouping.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 | |-------------------|-----------|------------------------|-----------------| -| 31 | 0 | 15 | 1 | +| 32 | 0 | 15 | 1 | ## Client diff --git a/api_docs/kbn_alerts_ui_shared.devdocs.json b/api_docs/kbn_alerts_ui_shared.devdocs.json index b186a273e1dd4..50b0cf5a6edd9 100644 --- a/api_docs/kbn_alerts_ui_shared.devdocs.json +++ b/api_docs/kbn_alerts_ui_shared.devdocs.json @@ -142,7 +142,7 @@ "label": "AlertsSearchBar", "description": [], "signature": [ - "({ appName, disableQueryLanguageSwitcher, featureIds, ruleTypeId, query, filters, onQueryChange, onQuerySubmit, onFiltersUpdated, rangeFrom, rangeTo, showFilterBar, showDatePicker, showSubmitButton, placeholder, submitOnBlur, http, toasts, unifiedSearchBar, dataService, }: ", + "({ appName, disableQueryLanguageSwitcher, ruleTypeIds, query, filters, onQueryChange, onQuerySubmit, onFiltersUpdated, rangeFrom, rangeTo, showFilterBar, showDatePicker, showSubmitButton, placeholder, submitOnBlur, http, toasts, unifiedSearchBar, dataService, }: ", { "pluginId": "@kbn/alerts-ui-shared", "scope": "public", @@ -161,7 +161,7 @@ "id": "def-public.AlertsSearchBar.$1", "type": "Object", "tags": [], - "label": "{\n appName,\n disableQueryLanguageSwitcher = false,\n featureIds = EMPTY_FEATURE_IDS,\n ruleTypeId,\n query,\n filters,\n onQueryChange,\n onQuerySubmit,\n onFiltersUpdated,\n rangeFrom,\n rangeTo,\n showFilterBar = false,\n showDatePicker = true,\n showSubmitButton = true,\n placeholder = SEARCH_BAR_PLACEHOLDER,\n submitOnBlur = false,\n http,\n toasts,\n unifiedSearchBar,\n dataService,\n}", + "label": "{\n appName,\n disableQueryLanguageSwitcher = false,\n ruleTypeIds = [],\n query,\n filters,\n onQueryChange,\n onQuerySubmit,\n onFiltersUpdated,\n rangeFrom,\n rangeTo,\n showFilterBar = false,\n showDatePicker = true,\n showSubmitButton = true,\n placeholder = SEARCH_BAR_PLACEHOLDER,\n submitOnBlur = false,\n http,\n toasts,\n unifiedSearchBar,\n dataService,\n}", "description": [], "signature": [ { @@ -183,92 +183,88 @@ }, { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.MaintenanceWindowCallout", + "id": "def-public.checkActionFormActionTypeEnabled", "type": "Function", "tags": [], - "label": "MaintenanceWindowCallout", + "label": "checkActionFormActionTypeEnabled", "description": [], "signature": [ - "({\n kibanaServices,\n categories,\n}: { kibanaServices: ", - "KibanaServices", - "; categories?: string[] | undefined; }) => JSX.Element | null" + "(actionType: ", + { + "pluginId": "@kbn/actions-types", + "scope": "common", + "docId": "kibKbnActionsTypesPluginApi", + "section": "def-common.ActionType", + "text": "ActionType" + }, + ", preconfiguredConnectors: ", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.ActionConnector", + "text": "ActionConnector" + }, + ", Record>[]) => ", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.IsEnabledResult", + "text": "IsEnabledResult" + }, + " | ", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.IsDisabledResult", + "text": "IsDisabledResult" + } ], - "path": "packages/kbn-alerts-ui-shared/src/maintenance_window_callout/index.tsx", + "path": "packages/kbn-alerts-ui-shared/src/check_action_type_enabled/check_action_type_enabled.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.MaintenanceWindowCallout.$1", + "id": "def-public.checkActionFormActionTypeEnabled.$1", "type": "Object", "tags": [], - "label": "{\n kibanaServices,\n categories,\n}", + "label": "actionType", "description": [], - "path": "packages/kbn-alerts-ui-shared/src/maintenance_window_callout/index.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.MaintenanceWindowCallout.$1.kibanaServices", - "type": "Object", - "tags": [], - "label": "kibanaServices", - "description": [], - "signature": [ - "KibanaServices" - ], - "path": "packages/kbn-alerts-ui-shared/src/maintenance_window_callout/index.tsx", - "deprecated": false, - "trackAdoption": false - }, + "signature": [ { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.MaintenanceWindowCallout.$1.categories", - "type": "Array", - "tags": [], - "label": "categories", - "description": [], - "signature": [ - "string[] | undefined" - ], - "path": "packages/kbn-alerts-ui-shared/src/maintenance_window_callout/index.tsx", - "deprecated": false, - "trackAdoption": false + "pluginId": "@kbn/actions-types", + "scope": "common", + "docId": "kibKbnActionsTypesPluginApi", + "section": "def-common.ActionType", + "text": "ActionType" } - ] - } - ], - "returnComment": [], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.ScrollableFlyoutTabbedContent", - "type": "Function", - "tags": [], - "label": "ScrollableFlyoutTabbedContent", - "description": [], - "signature": [ - "(props: ", - "EuiTabbedContentProps", - ") => React.JSX.Element" - ], - "path": "packages/kbn-alerts-ui-shared/src/alert_fields_table/index.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ + ], + "path": "packages/kbn-alerts-ui-shared/src/check_action_type_enabled/check_action_type_enabled.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.ScrollableFlyoutTabbedContent.$1", - "type": "CompoundType", + "id": "def-public.checkActionFormActionTypeEnabled.$2", + "type": "Array", "tags": [], - "label": "props", + "label": "preconfiguredConnectors", "description": [], "signature": [ - "EuiTabbedContentProps" + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.ActionConnector", + "text": "ActionConnector" + }, + ", Record>[]" ], - "path": "packages/kbn-alerts-ui-shared/src/alert_fields_table/index.tsx", + "path": "packages/kbn-alerts-ui-shared/src/check_action_type_enabled/check_action_type_enabled.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -279,140 +275,232 @@ }, { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.useAlertsDataView", + "id": "def-public.checkActionTypeEnabled", "type": "Function", "tags": [], - "label": "useAlertsDataView", - "description": [ - "\nComputes a {@link DataViewBase} object for alerts indices based on the provided feature ids\n" - ], + "label": "checkActionTypeEnabled", + "description": [], "signature": [ - "({ http, dataViewsService, toasts, featureIds, }: ", + "(actionType?: ", + { + "pluginId": "@kbn/actions-types", + "scope": "common", + "docId": "kibKbnActionsTypesPluginApi", + "section": "def-common.ActionType", + "text": "ActionType" + }, + " | undefined, isPreconfiguredConnector?: boolean) => ", { "pluginId": "@kbn/alerts-ui-shared", "scope": "public", "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.UseAlertsDataViewParams", - "text": "UseAlertsDataViewParams" + "section": "def-public.IsEnabledResult", + "text": "IsEnabledResult" }, - ") => ", + " | ", { "pluginId": "@kbn/alerts-ui-shared", "scope": "public", "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.UseAlertsDataViewResult", - "text": "UseAlertsDataViewResult" + "section": "def-public.IsDisabledResult", + "text": "IsDisabledResult" } ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_alerts_data_view.ts", + "path": "packages/kbn-alerts-ui-shared/src/check_action_type_enabled/check_action_type_enabled.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.useAlertsDataView.$1", + "id": "def-public.checkActionTypeEnabled.$1", "type": "Object", "tags": [], - "label": "{\n http,\n dataViewsService,\n toasts,\n featureIds,\n}", + "label": "actionType", "description": [], "signature": [ { - "pluginId": "@kbn/alerts-ui-shared", - "scope": "public", - "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.UseAlertsDataViewParams", - "text": "UseAlertsDataViewParams" - } + "pluginId": "@kbn/actions-types", + "scope": "common", + "docId": "kibKbnActionsTypesPluginApi", + "section": "def-common.ActionType", + "text": "ActionType" + }, + " | undefined" ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_alerts_data_view.ts", + "path": "packages/kbn-alerts-ui-shared/src/check_action_type_enabled/check_action_type_enabled.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-public.checkActionTypeEnabled.$2", + "type": "boolean", + "tags": [], + "label": "isPreconfiguredConnector", + "description": [], + "signature": [ + "boolean" + ], + "path": "packages/kbn-alerts-ui-shared/src/check_action_type_enabled/check_action_type_enabled.ts", "deprecated": false, "trackAdoption": false, "isRequired": true } ], - "returnComment": [ - "A {@link DataViewBase } object, intentionally not typed as a complete {@link DataView } object\nsince only Security Solution uses an actual in-memory data view (when `featureIds = ['siem']).\nIn all other cases the data view is computed from the index names and fields fetched from the\nalerting APIs." - ], + "returnComment": [], "initialIsOpen": false }, { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.useCreateRule", + "id": "def-public.getAlwaysProvidedActionVariables", "type": "Function", "tags": [], - "label": "useCreateRule", + "label": "getAlwaysProvidedActionVariables", "description": [], "signature": [ - "(props: ", + "() => ", { - "pluginId": "@kbn/alerts-ui-shared", - "scope": "public", - "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.UseCreateRuleProps", - "text": "UseCreateRuleProps" + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" }, - ") => ", - "UseMutationResult", - "<", + "[]" + ], + "path": "packages/kbn-alerts-ui-shared/src/action_variables/transforms.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-public.getAvailableActionVariables", + "type": "Function", + "tags": [], + "label": "getAvailableActionVariables", + "description": [], + "signature": [ + "(actionVariables: ", { - "pluginId": "@kbn/alerts-ui-shared", - "scope": "public", - "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.Rule", - "text": "Rule" + "pluginId": "@kbn/triggers-actions-ui-types", + "scope": "common", + "docId": "kibKbnTriggersActionsUiTypesPluginApi", + "section": "def-common.ActionVariables", + "text": "ActionVariables" }, - "<", + ", summaryActionVariables?: ", { - "pluginId": "@kbn/alerts-ui-shared", - "scope": "public", - "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.RuleTypeParams", - "text": "RuleTypeParams" + "pluginId": "@kbn/triggers-actions-ui-types", + "scope": "common", + "docId": "kibKbnTriggersActionsUiTypesPluginApi", + "section": "def-common.ActionVariables", + "text": "ActionVariables" }, - ">, ", + " | undefined, actionGroup?: ", { - "pluginId": "@kbn/core-http-browser", - "scope": "public", - "docId": "kibKbnCoreHttpBrowserPluginApi", - "section": "def-public.IHttpFetchError", - "text": "IHttpFetchError" + "pluginId": "@kbn/triggers-actions-ui-types", + "scope": "common", + "docId": "kibKbnTriggersActionsUiTypesPluginApi", + "section": "def-common.ActionGroupWithMessageVariables", + "text": "ActionGroupWithMessageVariables" }, - "<{ message: string; }>, { formData: ", - "CreateRuleBody", - "<", + " | undefined, isSummaryAction?: boolean | undefined) => ", { - "pluginId": "@kbn/alerts-ui-shared", - "scope": "public", - "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.RuleTypeParams", - "text": "RuleTypeParams" + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" }, - ">; }, unknown>" + "[]" ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_create_rule.ts", + "path": "packages/kbn-alerts-ui-shared/src/action_variables/get_available_action_variables.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.useCreateRule.$1", - "type": "Object", + "id": "def-public.getAvailableActionVariables.$1", + "type": "CompoundType", "tags": [], - "label": "props", + "label": "actionVariables", "description": [], "signature": [ { - "pluginId": "@kbn/alerts-ui-shared", - "scope": "public", - "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.UseCreateRuleProps", - "text": "UseCreateRuleProps" + "pluginId": "@kbn/triggers-actions-ui-types", + "scope": "common", + "docId": "kibKbnTriggersActionsUiTypesPluginApi", + "section": "def-common.ActionVariables", + "text": "ActionVariables" } ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_create_rule.ts", + "path": "packages/kbn-alerts-ui-shared/src/action_variables/get_available_action_variables.ts", "deprecated": false, "trackAdoption": false, "isRequired": true + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-public.getAvailableActionVariables.$2", + "type": "CompoundType", + "tags": [], + "label": "summaryActionVariables", + "description": [], + "signature": [ + { + "pluginId": "@kbn/triggers-actions-ui-types", + "scope": "common", + "docId": "kibKbnTriggersActionsUiTypesPluginApi", + "section": "def-common.ActionVariables", + "text": "ActionVariables" + }, + " | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/action_variables/get_available_action_variables.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-public.getAvailableActionVariables.$3", + "type": "Object", + "tags": [], + "label": "actionGroup", + "description": [], + "signature": [ + { + "pluginId": "@kbn/triggers-actions-ui-types", + "scope": "common", + "docId": "kibKbnTriggersActionsUiTypesPluginApi", + "section": "def-common.ActionGroupWithMessageVariables", + "text": "ActionGroupWithMessageVariables" + }, + " | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/action_variables/get_available_action_variables.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-public.getAvailableActionVariables.$4", + "type": "CompoundType", + "tags": [], + "label": "isSummaryAction", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/action_variables/get_available_action_variables.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false } ], "returnComment": [], @@ -420,52 +508,85 @@ }, { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.useGetAlertsGroupAggregationsQuery", + "id": "def-public.getSummaryAlertActionVariables", "type": "Function", "tags": [], - "label": "useGetAlertsGroupAggregationsQuery", - "description": [ - "\nFetches alerts aggregations for a given groupByField.\n\nSome default aggregations are applied:\n- `groupByFields`, to get the buckets based on the provided grouping field,\n - `unitsCount`, to count the number of alerts in each bucket,\n- `unitsCount`, to count the total number of alerts targeted by the query,\n- `groupsCount`, to count the total number of groups.\n\nThe provided `aggregations` are applied within `groupByFields`. Here the `groupByField` runtime\nfield can be used to perform grouping-based aggregations.\n`groupByField` buckets computed over a field with a null/absent value are marked with the\n`isNullGroup` flag set to true and their key is set to the `--` string.\n\nApplies alerting RBAC through featureIds." - ], + "label": "getSummaryAlertActionVariables", + "description": [], "signature": [ - "({ http, toasts, enabled, params, }: ", + "() => ", { - "pluginId": "@kbn/alerts-ui-shared", - "scope": "public", - "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.UseGetAlertsGroupAggregationsQueryProps", - "text": "UseGetAlertsGroupAggregationsQueryProps" + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" }, - ") => ", - "UseQueryResult", - "<", - "SearchResponseBody", - "<{}, T>, Error>" + "[]" ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_get_alerts_group_aggregations_query.ts", + "path": "packages/kbn-alerts-ui-shared/src/action_variables/transforms.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-public.MaintenanceWindowCallout", + "type": "Function", + "tags": [], + "label": "MaintenanceWindowCallout", + "description": [], + "signature": [ + "({\n kibanaServices,\n categories,\n}: { kibanaServices: ", + "KibanaServices", + "; categories?: string[] | undefined; }) => JSX.Element | null" + ], + "path": "packages/kbn-alerts-ui-shared/src/maintenance_window_callout/index.tsx", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.useGetAlertsGroupAggregationsQuery.$1", + "id": "def-public.MaintenanceWindowCallout.$1", "type": "Object", "tags": [], - "label": "{\n http,\n toasts,\n enabled = true,\n params,\n}", + "label": "{\n kibanaServices,\n categories,\n}", "description": [], - "signature": [ - { - "pluginId": "@kbn/alerts-ui-shared", - "scope": "public", - "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.UseGetAlertsGroupAggregationsQueryProps", - "text": "UseGetAlertsGroupAggregationsQueryProps" - } - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_get_alerts_group_aggregations_query.ts", + "path": "packages/kbn-alerts-ui-shared/src/maintenance_window_callout/index.tsx", "deprecated": false, "trackAdoption": false, - "isRequired": true + "children": [ + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-public.MaintenanceWindowCallout.$1.kibanaServices", + "type": "Object", + "tags": [], + "label": "kibanaServices", + "description": [], + "signature": [ + "KibanaServices" + ], + "path": "packages/kbn-alerts-ui-shared/src/maintenance_window_callout/index.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-public.MaintenanceWindowCallout.$1.categories", + "type": "Array", + "tags": [], + "label": "categories", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/maintenance_window_callout/index.tsx", + "deprecated": false, + "trackAdoption": false + } + ] } ], "returnComment": [], @@ -473,43 +594,31 @@ }, { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.useHealthCheck", + "id": "def-public.ScrollableFlyoutTabbedContent", "type": "Function", "tags": [], - "label": "useHealthCheck", + "label": "ScrollableFlyoutTabbedContent", "description": [], "signature": [ "(props: ", - { - "pluginId": "@kbn/alerts-ui-shared", - "scope": "public", - "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.UseHealthCheckProps", - "text": "UseHealthCheckProps" - }, - ") => { isLoading: boolean; isInitialLoading: boolean; error: \"alertsError\" | \"encryptionError\" | \"apiKeysDisabledError\" | \"apiKeysAndEncryptionError\" | null; }" + "EuiTabbedContentProps", + ") => React.JSX.Element" ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_health_check.tsx", + "path": "packages/kbn-alerts-ui-shared/src/alert_fields_table/index.tsx", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.useHealthCheck.$1", - "type": "Object", + "id": "def-public.ScrollableFlyoutTabbedContent.$1", + "type": "CompoundType", "tags": [], "label": "props", "description": [], "signature": [ - { - "pluginId": "@kbn/alerts-ui-shared", - "scope": "public", - "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.UseHealthCheckProps", - "text": "UseHealthCheckProps" - } + "EuiTabbedContentProps" ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_health_check.tsx", + "path": "packages/kbn-alerts-ui-shared/src/alert_fields_table/index.tsx", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -520,54 +629,129 @@ }, { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.useLoadAlertingFrameworkHealth", + "id": "def-public.transformActionVariables", "type": "Function", "tags": [], - "label": "useLoadAlertingFrameworkHealth", + "label": "transformActionVariables", "description": [], "signature": [ - "(props: ", + "(actionVariables: ", { - "pluginId": "@kbn/alerts-ui-shared", - "scope": "public", - "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.UseLoadAlertingFrameworkHealthProps", - "text": "UseLoadAlertingFrameworkHealthProps" + "pluginId": "@kbn/triggers-actions-ui-types", + "scope": "common", + "docId": "kibKbnTriggersActionsUiTypesPluginApi", + "section": "def-common.ActionVariables", + "text": "ActionVariables" }, - ") => { data: ", + ", summaryActionVariables?: ", + { + "pluginId": "@kbn/triggers-actions-ui-types", + "scope": "common", + "docId": "kibKbnTriggersActionsUiTypesPluginApi", + "section": "def-common.ActionVariables", + "text": "ActionVariables" + }, + " | undefined, omitMessageVariables?: ", + { + "pluginId": "@kbn/triggers-actions-ui-types", + "scope": "common", + "docId": "kibKbnTriggersActionsUiTypesPluginApi", + "section": "def-common.OmitMessageVariablesType", + "text": "OmitMessageVariablesType" + }, + " | undefined, isSummaryAction?: boolean | undefined) => ", { "pluginId": "@kbn/alerting-types", "scope": "common", "docId": "kibKbnAlertingTypesPluginApi", - "section": "def-common.AlertingFrameworkHealth", - "text": "AlertingFrameworkHealth" + "section": "def-common.ActionVariable", + "text": "ActionVariable" }, - " | undefined; isLoading: boolean; isInitialLoading: boolean; isSuccess: boolean; isError: boolean; error: unknown; }" + "[]" ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_alerting_framework_health.ts", + "path": "packages/kbn-alerts-ui-shared/src/action_variables/transforms.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.useLoadAlertingFrameworkHealth.$1", - "type": "Object", + "id": "def-public.transformActionVariables.$1", + "type": "CompoundType", "tags": [], - "label": "props", + "label": "actionVariables", "description": [], "signature": [ { - "pluginId": "@kbn/alerts-ui-shared", - "scope": "public", - "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.UseLoadAlertingFrameworkHealthProps", - "text": "UseLoadAlertingFrameworkHealthProps" + "pluginId": "@kbn/triggers-actions-ui-types", + "scope": "common", + "docId": "kibKbnTriggersActionsUiTypesPluginApi", + "section": "def-common.ActionVariables", + "text": "ActionVariables" } ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_alerting_framework_health.ts", + "path": "packages/kbn-alerts-ui-shared/src/action_variables/transforms.ts", "deprecated": false, "trackAdoption": false, "isRequired": true + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-public.transformActionVariables.$2", + "type": "CompoundType", + "tags": [], + "label": "summaryActionVariables", + "description": [], + "signature": [ + { + "pluginId": "@kbn/triggers-actions-ui-types", + "scope": "common", + "docId": "kibKbnTriggersActionsUiTypesPluginApi", + "section": "def-common.ActionVariables", + "text": "ActionVariables" + }, + " | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/action_variables/transforms.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-public.transformActionVariables.$3", + "type": "CompoundType", + "tags": [], + "label": "omitMessageVariables", + "description": [], + "signature": [ + { + "pluginId": "@kbn/triggers-actions-ui-types", + "scope": "common", + "docId": "kibKbnTriggersActionsUiTypesPluginApi", + "section": "def-common.OmitMessageVariablesType", + "text": "OmitMessageVariablesType" + }, + " | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/action_variables/transforms.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-public.transformActionVariables.$4", + "type": "CompoundType", + "tags": [], + "label": "isSummaryAction", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/action_variables/transforms.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false } ], "returnComment": [], @@ -575,106 +759,95 @@ }, { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.useLoadConnectors", + "id": "def-public.useAlertsDataView", "type": "Function", "tags": [], - "label": "useLoadConnectors", - "description": [], + "label": "useAlertsDataView", + "description": [ + "\nComputes a {@link DataViewBase} object for alerts indices based on the provided feature ids\n" + ], "signature": [ - "(props: ", + "({ http, dataViewsService, toasts, ruleTypeIds, }: ", { "pluginId": "@kbn/alerts-ui-shared", "scope": "public", "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.UseLoadConnectorsProps", - "text": "UseLoadConnectorsProps" + "section": "def-public.UseAlertsDataViewParams", + "text": "UseAlertsDataViewParams" }, - ") => { data: ", + ") => ", { "pluginId": "@kbn/alerts-ui-shared", "scope": "public", "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.ActionConnector", - "text": "ActionConnector" - }, - ", Record>[] | undefined; isInitialLoading: boolean; isLoading: boolean; }" + "section": "def-public.UseAlertsDataViewResult", + "text": "UseAlertsDataViewResult" + } ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connectors.ts", + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_alerts_data_view.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.useLoadConnectors.$1", + "id": "def-public.useAlertsDataView.$1", "type": "Object", "tags": [], - "label": "props", + "label": "{\n http,\n dataViewsService,\n toasts,\n ruleTypeIds,\n}", "description": [], "signature": [ { "pluginId": "@kbn/alerts-ui-shared", "scope": "public", "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.UseLoadConnectorsProps", - "text": "UseLoadConnectorsProps" + "section": "def-public.UseAlertsDataViewParams", + "text": "UseAlertsDataViewParams" } ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connectors.ts", + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_alerts_data_view.ts", "deprecated": false, "trackAdoption": false, "isRequired": true } ], - "returnComment": [], + "returnComment": [ + "A {@link DataViewBase } object, intentionally not typed as a complete {@link DataView } object\nsince only Security Solution uses an actual in-memory data view (when `featureIds = ['siem']).\nIn all other cases the data view is computed from the index names and fields fetched from the\nalerting APIs." + ], "initialIsOpen": false }, { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.useLoadConnectorTypes", + "id": "def-public.useFetchFlappingSettings", "type": "Function", "tags": [], - "label": "useLoadConnectorTypes", + "label": "useFetchFlappingSettings", "description": [], "signature": [ - "(props: ", - { - "pluginId": "@kbn/alerts-ui-shared", - "scope": "public", - "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.UseLoadConnectorTypesProps", - "text": "UseLoadConnectorTypesProps" - }, - ") => { data: ", + "(props: UseFetchFlappingSettingsProps) => { isInitialLoading: boolean; isLoading: boolean; isError: boolean; data: ", { - "pluginId": "@kbn/actions-types", + "pluginId": "@kbn/alerting-types", "scope": "common", - "docId": "kibKbnActionsTypesPluginApi", - "section": "def-common.ActionType", - "text": "ActionType" + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.RulesSettingsFlapping", + "text": "RulesSettingsFlapping" }, - "[] | undefined; isInitialLoading: boolean; isLoading: boolean; }" + " | undefined; }" ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connector_types.ts", + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_fetch_flapping_settings.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.useLoadConnectorTypes.$1", + "id": "def-public.useFetchFlappingSettings.$1", "type": "Object", "tags": [], "label": "props", "description": [], "signature": [ - { - "pluginId": "@kbn/alerts-ui-shared", - "scope": "public", - "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.UseLoadConnectorTypesProps", - "text": "UseLoadConnectorTypesProps" - } + "UseFetchFlappingSettingsProps" ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connector_types.ts", + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_fetch_flapping_settings.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -685,59 +858,49 @@ }, { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.useLoadRuleTypesQuery", + "id": "def-public.useGetAlertsGroupAggregationsQuery", "type": "Function", "tags": [], - "label": "useLoadRuleTypesQuery", - "description": [], + "label": "useGetAlertsGroupAggregationsQuery", + "description": [ + "\nFetches alerts aggregations for a given groupByField.\n\nSome default aggregations are applied:\n- `groupByFields`, to get the buckets based on the provided grouping field,\n - `unitsCount`, to count the number of alerts in each bucket,\n- `unitsCount`, to count the total number of alerts targeted by the query,\n- `groupsCount`, to count the total number of groups.\n\nThe provided `aggregations` are applied within `groupByFields`. Here the `groupByField` runtime\nfield can be used to perform grouping-based aggregations.\n`groupByField` buckets computed over a field with a null/absent value are marked with the\n`isNullGroup` flag set to true and their key is set to the `--` string.\n\nApplies alerting RBAC through ruleTypeIds." + ], "signature": [ - "({ http, toasts, filteredRuleTypes, registeredRuleTypes, enabled, }: ", + "({ http, toasts, enabled, params, }: ", { "pluginId": "@kbn/alerts-ui-shared", "scope": "public", "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.UseRuleTypesProps", - "text": "UseRuleTypesProps" + "section": "def-public.UseGetAlertsGroupAggregationsQueryProps", + "text": "UseGetAlertsGroupAggregationsQueryProps" }, - ") => { ruleTypesState: { isInitialLoad: boolean; isLoading: boolean; data: ", - { - "pluginId": "@kbn/alerts-ui-shared", - "scope": "public", - "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.RuleTypeIndexWithDescriptions", - "text": "RuleTypeIndexWithDescriptions" - }, - "; error: Error | null; }; hasAnyAuthorizedRuleType: boolean; authorizedRuleTypes: ", - { - "pluginId": "@kbn/alerts-ui-shared", - "scope": "public", - "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.RuleTypeWithDescription", - "text": "RuleTypeWithDescription" - }, - "[]; authorizedToReadAnyRules: boolean; authorizedToCreateAnyRules: boolean; isSuccess: boolean; }" - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_rule_types_query.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ + ") => ", + "UseQueryResult", + "<", + "SearchResponseBody", + "<{}, T>, Error>" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_get_alerts_group_aggregations_query.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.useLoadRuleTypesQuery.$1", + "id": "def-public.useGetAlertsGroupAggregationsQuery.$1", "type": "Object", "tags": [], - "label": "{\n http,\n toasts,\n filteredRuleTypes,\n registeredRuleTypes,\n enabled = true,\n}", + "label": "{\n http,\n toasts,\n enabled = true,\n params,\n}", "description": [], "signature": [ { "pluginId": "@kbn/alerts-ui-shared", "scope": "public", "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.UseRuleTypesProps", - "text": "UseRuleTypesProps" + "section": "def-public.UseGetAlertsGroupAggregationsQueryProps", + "text": "UseGetAlertsGroupAggregationsQueryProps" } ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_rule_types_query.ts", + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_get_alerts_group_aggregations_query.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -748,10 +911,10 @@ }, { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.useLoadUiConfig", + "id": "def-public.useHealthCheck", "type": "Function", "tags": [], - "label": "useLoadUiConfig", + "label": "useHealthCheck", "description": [], "signature": [ "(props: ", @@ -759,20 +922,18 @@ "pluginId": "@kbn/alerts-ui-shared", "scope": "public", "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.UseLoadUiConfigProps", - "text": "UseLoadUiConfigProps" + "section": "def-public.UseHealthCheckProps", + "text": "UseHealthCheckProps" }, - ") => { data: ", - "UiConfig", - " | undefined; isLoading: boolean; isInitialLoading: boolean; isSuccess: boolean; isError: boolean; error: unknown; }" + ") => { isLoading: boolean; isInitialLoading: boolean; error: \"alertsError\" | \"encryptionError\" | \"apiKeysDisabledError\" | \"apiKeysAndEncryptionError\" | null; }" ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_ui_config.ts", + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_health_check.tsx", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.useLoadUiConfig.$1", + "id": "def-public.useHealthCheck.$1", "type": "Object", "tags": [], "label": "props", @@ -782,11 +943,11 @@ "pluginId": "@kbn/alerts-ui-shared", "scope": "public", "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.UseLoadUiConfigProps", - "text": "UseLoadUiConfigProps" + "section": "def-public.UseHealthCheckProps", + "text": "UseHealthCheckProps" } ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_ui_config.ts", + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_health_check.tsx", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -797,10 +958,10 @@ }, { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.useLoadUiHealth", + "id": "def-public.useLoadAlertingFrameworkHealth", "type": "Function", "tags": [], - "label": "useLoadUiHealth", + "label": "useLoadAlertingFrameworkHealth", "description": [], "signature": [ "(props: ", @@ -808,20 +969,26 @@ "pluginId": "@kbn/alerts-ui-shared", "scope": "public", "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.UseLoadUiHealthProps", - "text": "UseLoadUiHealthProps" + "section": "def-public.UseLoadAlertingFrameworkHealthProps", + "text": "UseLoadAlertingFrameworkHealthProps" }, ") => { data: ", - "UiHealthCheck", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.AlertingFrameworkHealth", + "text": "AlertingFrameworkHealth" + }, " | undefined; isLoading: boolean; isInitialLoading: boolean; isSuccess: boolean; isError: boolean; error: unknown; }" ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_ui_health.ts", + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_alerting_framework_health.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.useLoadUiHealth.$1", + "id": "def-public.useLoadAlertingFrameworkHealth.$1", "type": "Object", "tags": [], "label": "props", @@ -831,11 +998,11 @@ "pluginId": "@kbn/alerts-ui-shared", "scope": "public", "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.UseLoadUiHealthProps", - "text": "UseLoadUiHealthProps" + "section": "def-public.UseLoadAlertingFrameworkHealthProps", + "text": "UseLoadAlertingFrameworkHealthProps" } ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_ui_health.ts", + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_alerting_framework_health.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -846,107 +1013,59 @@ }, { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.useResolveRule", + "id": "def-public.useLoadRuleTypesQuery", "type": "Function", "tags": [], - "label": "useResolveRule", + "label": "useLoadRuleTypesQuery", "description": [], "signature": [ - "(props: ", + "({ http, toasts, filteredRuleTypes, registeredRuleTypes, enabled, }: ", { "pluginId": "@kbn/alerts-ui-shared", "scope": "public", "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.UseResolveProps", - "text": "UseResolveProps" + "section": "def-public.UseRuleTypesProps", + "text": "UseRuleTypesProps" }, - ") => { data: ", - "RuleFormData", - "<", + ") => { ruleTypesState: { isInitialLoad: boolean; isLoading: boolean; data: ", { - "pluginId": "@kbn/alerts-ui-shared", - "scope": "public", - "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.RuleTypeParams", - "text": "RuleTypeParams" + "pluginId": "@kbn/triggers-actions-ui-types", + "scope": "common", + "docId": "kibKbnTriggersActionsUiTypesPluginApi", + "section": "def-common.RuleTypeIndexWithDescriptions", + "text": "RuleTypeIndexWithDescriptions" }, - "> | null | undefined; isLoading: boolean; isInitialLoading: boolean; isSuccess: boolean; isError: boolean; error: unknown; }" - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_resolve_rule.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.useResolveRule.$1", - "type": "Object", - "tags": [], - "label": "props", - "description": [], - "signature": [ - { - "pluginId": "@kbn/alerts-ui-shared", - "scope": "public", - "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.UseResolveProps", - "text": "UseResolveProps" - } - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_resolve_rule.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.useRuleAADFields", - "type": "Function", - "tags": [], - "label": "useRuleAADFields", - "description": [], - "signature": [ - "(props: ", + "; error: Error | null; }; hasAnyAuthorizedRuleType: boolean; authorizedRuleTypes: ", { - "pluginId": "@kbn/alerts-ui-shared", - "scope": "public", - "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.UseRuleAADFieldsProps", - "text": "UseRuleAADFieldsProps" + "pluginId": "@kbn/triggers-actions-ui-types", + "scope": "common", + "docId": "kibKbnTriggersActionsUiTypesPluginApi", + "section": "def-common.RuleTypeWithDescription", + "text": "RuleTypeWithDescription" }, - ") => ", - { - "pluginId": "@kbn/alerts-ui-shared", - "scope": "public", - "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.UseRuleAADFieldsResult", - "text": "UseRuleAADFieldsResult" - } + "[]; authorizedToReadAnyRules: boolean; authorizedToCreateAnyRules: boolean; isSuccess: boolean; }" ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_rule_aad_fields.ts", + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_rule_types_query.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.useRuleAADFields.$1", + "id": "def-public.useLoadRuleTypesQuery.$1", "type": "Object", "tags": [], - "label": "props", + "label": "{\n http,\n toasts,\n filteredRuleTypes,\n registeredRuleTypes,\n enabled = true,\n}", "description": [], "signature": [ { "pluginId": "@kbn/alerts-ui-shared", "scope": "public", "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.UseRuleAADFieldsProps", - "text": "UseRuleAADFieldsProps" + "section": "def-public.UseRuleTypesProps", + "text": "UseRuleTypesProps" } ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_rule_aad_fields.ts", + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_rule_types_query.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -957,10 +1076,10 @@ }, { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.useUpdateRule", + "id": "def-public.useLoadUiHealth", "type": "Function", "tags": [], - "label": "useUpdateRule", + "label": "useLoadUiHealth", "description": [], "signature": [ "(props: ", @@ -968,54 +1087,20 @@ "pluginId": "@kbn/alerts-ui-shared", "scope": "public", "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.UseUpdateRuleProps", - "text": "UseUpdateRuleProps" - }, - ") => ", - "UseMutationResult", - "<", - { - "pluginId": "@kbn/alerts-ui-shared", - "scope": "public", - "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.Rule", - "text": "Rule" - }, - "<", - { - "pluginId": "@kbn/alerts-ui-shared", - "scope": "public", - "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.RuleTypeParams", - "text": "RuleTypeParams" - }, - ">, ", - { - "pluginId": "@kbn/core-http-browser", - "scope": "public", - "docId": "kibKbnCoreHttpBrowserPluginApi", - "section": "def-public.IHttpFetchError", - "text": "IHttpFetchError" - }, - "<{ message: string; }>, { id: string; formData: ", - "UpdateRuleBody", - "<", - { - "pluginId": "@kbn/alerts-ui-shared", - "scope": "public", - "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.RuleTypeParams", - "text": "RuleTypeParams" + "section": "def-public.UseLoadUiHealthProps", + "text": "UseLoadUiHealthProps" }, - ">; }, unknown>" + ") => { data: ", + "UiHealthCheck", + " | undefined; isLoading: boolean; isInitialLoading: boolean; isSuccess: boolean; isError: boolean; error: unknown; }" ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_update_rule.ts", + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_ui_health.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.useUpdateRule.$1", + "id": "def-public.useLoadUiHealth.$1", "type": "Object", "tags": [], "label": "props", @@ -1025,11 +1110,11 @@ "pluginId": "@kbn/alerts-ui-shared", "scope": "public", "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.UseUpdateRuleProps", - "text": "UseUpdateRuleProps" + "section": "def-public.UseLoadUiHealthProps", + "text": "UseLoadUiHealthProps" } ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_update_rule.ts", + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_ui_health.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -2151,27 +2236,6 @@ "deprecated": false, "trackAdoption": false }, - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.AlertsSearchBarProps.featureIds", - "type": "Array", - "tags": [], - "label": "featureIds", - "description": [], - "signature": [ - { - "pluginId": "@kbn/rule-data-utils", - "scope": "common", - "docId": "kibKbnRuleDataUtilsPluginApi", - "section": "def-common.AlertConsumers", - "text": "AlertConsumers" - }, - "[]" - ], - "path": "packages/kbn-alerts-ui-shared/src/alerts_search_bar/types.ts", - "deprecated": false, - "trackAdoption": false - }, { "parentPluginId": "@kbn/alerts-ui-shared", "id": "def-public.AlertsSearchBarProps.rangeFrom", @@ -2307,13 +2371,13 @@ }, { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.AlertsSearchBarProps.ruleTypeId", - "type": "string", + "id": "def-public.AlertsSearchBarProps.ruleTypeIds", + "type": "Array", "tags": [], - "label": "ruleTypeId", + "label": "ruleTypeIds", "description": [], "signature": [ - "string | undefined" + "string[] | undefined" ], "path": "packages/kbn-alerts-ui-shared/src/alerts_search_bar/types.ts", "deprecated": false, @@ -3009,20 +3073,13 @@ }, { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.FilterGroupProps.featureIds", + "id": "def-public.FilterGroupProps.ruleTypeIds", "type": "Array", "tags": [], - "label": "featureIds", + "label": "ruleTypeIds", "description": [], "signature": [ - { - "pluginId": "@kbn/rule-data-utils", - "scope": "common", - "docId": "kibKbnRuleDataUtilsPluginApi", - "section": "def-common.AlertConsumers", - "text": "AlertConsumers" - }, - "[]" + "string[]" ], "path": "packages/kbn-alerts-ui-shared/src/alert_filter_controls/types.ts", "deprecated": false, @@ -3407,37 +3464,51 @@ }, { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.LegacyField", + "id": "def-public.IsDisabledResult", "type": "Interface", "tags": [], - "label": "LegacyField", + "label": "IsDisabledResult", "description": [], - "path": "packages/kbn-alerts-ui-shared/src/common/types/alerts_types.ts", + "path": "packages/kbn-alerts-ui-shared/src/check_action_type_enabled/check_action_type_enabled.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.LegacyField.field", + "id": "def-public.IsDisabledResult.isEnabled", + "type": "boolean", + "tags": [], + "label": "isEnabled", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-alerts-ui-shared/src/check_action_type_enabled/check_action_type_enabled.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-public.IsDisabledResult.message", "type": "string", "tags": [], - "label": "field", + "label": "message", "description": [], - "path": "packages/kbn-alerts-ui-shared/src/common/types/alerts_types.ts", + "path": "packages/kbn-alerts-ui-shared/src/check_action_type_enabled/check_action_type_enabled.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.LegacyField.value", - "type": "Array", + "id": "def-public.IsDisabledResult.messageCard", + "type": "Object", "tags": [], - "label": "value", + "label": "messageCard", "description": [], "signature": [ - "string[]" + "JSX.Element" ], - "path": "packages/kbn-alerts-ui-shared/src/common/types/alerts_types.ts", + "path": "packages/kbn-alerts-ui-shared/src/check_action_type_enabled/check_action_type_enabled.ts", "deprecated": false, "trackAdoption": false } @@ -3446,34 +3517,26 @@ }, { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.MinimumScheduleInterval", + "id": "def-public.IsEnabledResult", "type": "Interface", "tags": [], - "label": "MinimumScheduleInterval", + "label": "IsEnabledResult", "description": [], - "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "path": "packages/kbn-alerts-ui-shared/src/check_action_type_enabled/check_action_type_enabled.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.MinimumScheduleInterval.value", - "type": "string", - "tags": [], - "label": "value", - "description": [], - "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.MinimumScheduleInterval.enforce", + "id": "def-public.IsEnabledResult.isEnabled", "type": "boolean", "tags": [], - "label": "enforce", + "label": "isEnabled", "description": [], - "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "signature": [ + "true" + ], + "path": "packages/kbn-alerts-ui-shared/src/check_action_type_enabled/check_action_type_enabled.ts", "deprecated": false, "trackAdoption": false } @@ -3482,26 +3545,101 @@ }, { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.RuleFormActionsErrors", + "id": "def-public.LegacyField", "type": "Interface", "tags": [], - "label": "RuleFormActionsErrors", + "label": "LegacyField", "description": [], - "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "path": "packages/kbn-alerts-ui-shared/src/common/types/alerts_types.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.RuleFormActionsErrors.filterQuery", - "type": "Array", + "id": "def-public.LegacyField.field", + "type": "string", "tags": [], - "label": "filterQuery", + "label": "field", "description": [], - "signature": [ - "string[] | undefined" - ], - "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "path": "packages/kbn-alerts-ui-shared/src/common/types/alerts_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-public.LegacyField.value", + "type": "Array", + "tags": [], + "label": "value", + "description": [], + "signature": [ + "string[]" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/alerts_types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-public.MinimumScheduleInterval", + "type": "Interface", + "tags": [], + "label": "MinimumScheduleInterval", + "description": [], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-public.MinimumScheduleInterval.value", + "type": "string", + "tags": [], + "label": "value", + "description": [], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-public.MinimumScheduleInterval.enforce", + "type": "boolean", + "tags": [], + "label": "enforce", + "description": [], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-public.RuleFormActionsErrors", + "type": "Interface", + "tags": [], + "label": "RuleFormActionsErrors", + "description": [], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-public.RuleFormActionsErrors.filterQuery", + "type": "Array", + "tags": [], + "label": "filterQuery", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", "deprecated": false, "trackAdoption": false } @@ -4642,22 +4780,15 @@ }, { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseAlertsDataViewParams.featureIds", + "id": "def-public.UseAlertsDataViewParams.ruleTypeIds", "type": "Array", "tags": [], - "label": "featureIds", + "label": "ruleTypeIds", "description": [ - "\nArray of feature ids used for authorization and area-based filtering\n\nSecurity data views must be requested in isolation (i.e. `['siem']`). If mixed with\nother feature ids, the resulting data view will be empty." + "\nArray of rule type ids used for authorization and area-based filtering\n\nSecurity data views must be requested in isolation (i.e. `['siem']`). If mixed with\nother rule type ids, the resulting data view will be empty." ], "signature": [ - { - "pluginId": "@kbn/rule-data-utils", - "scope": "common", - "docId": "kibKbnRuleDataUtilsPluginApi", - "section": "def-common.AlertConsumers", - "text": "AlertConsumers" - }, - "[]" + "string[]" ], "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_alerts_data_view.ts", "deprecated": false, @@ -4714,541 +4845,7 @@ }, "[]; }) | undefined" ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_alerts_data_view.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseCreateRuleProps", - "type": "Interface", - "tags": [], - "label": "UseCreateRuleProps", - "description": [], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_create_rule.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseCreateRuleProps.http", - "type": "Object", - "tags": [], - "label": "http", - "description": [], - "signature": [ - { - "pluginId": "@kbn/core-http-browser", - "scope": "public", - "docId": "kibKbnCoreHttpBrowserPluginApi", - "section": "def-public.HttpSetup", - "text": "HttpSetup" - } - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_create_rule.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseCreateRuleProps.onSuccess", - "type": "Function", - "tags": [], - "label": "onSuccess", - "description": [], - "signature": [ - "((rule: ", - { - "pluginId": "@kbn/alerts-ui-shared", - "scope": "public", - "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.Rule", - "text": "Rule" - }, - "<", - { - "pluginId": "@kbn/alerts-ui-shared", - "scope": "public", - "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.RuleTypeParams", - "text": "RuleTypeParams" - }, - ">) => void) | undefined" - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_create_rule.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseCreateRuleProps.onSuccess.$1", - "type": "CompoundType", - "tags": [], - "label": "rule", - "description": [], - "signature": [ - { - "pluginId": "@kbn/alerts-ui-shared", - "scope": "public", - "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.Rule", - "text": "Rule" - }, - "<", - { - "pluginId": "@kbn/alerts-ui-shared", - "scope": "public", - "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.RuleTypeParams", - "text": "RuleTypeParams" - }, - ">" - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_create_rule.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseCreateRuleProps.onError", - "type": "Function", - "tags": [], - "label": "onError", - "description": [], - "signature": [ - "((error: ", - { - "pluginId": "@kbn/core-http-browser", - "scope": "public", - "docId": "kibKbnCoreHttpBrowserPluginApi", - "section": "def-public.IHttpFetchError", - "text": "IHttpFetchError" - }, - "<{ message: string; }>) => void) | undefined" - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_create_rule.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseCreateRuleProps.onError.$1", - "type": "Object", - "tags": [], - "label": "error", - "description": [], - "signature": [ - { - "pluginId": "@kbn/core-http-browser", - "scope": "public", - "docId": "kibKbnCoreHttpBrowserPluginApi", - "section": "def-public.IHttpFetchError", - "text": "IHttpFetchError" - }, - "<{ message: string; }>" - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_create_rule.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseGetAlertsGroupAggregationsQueryProps", - "type": "Interface", - "tags": [], - "label": "UseGetAlertsGroupAggregationsQueryProps", - "description": [], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_get_alerts_group_aggregations_query.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseGetAlertsGroupAggregationsQueryProps.http", - "type": "Object", - "tags": [], - "label": "http", - "description": [], - "signature": [ - { - "pluginId": "@kbn/core-http-browser", - "scope": "public", - "docId": "kibKbnCoreHttpBrowserPluginApi", - "section": "def-public.HttpSetup", - "text": "HttpSetup" - } - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_get_alerts_group_aggregations_query.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseGetAlertsGroupAggregationsQueryProps.toasts", - "type": "Object", - "tags": [], - "label": "toasts", - "description": [], - "signature": [ - { - "pluginId": "@kbn/core-notifications-browser", - "scope": "public", - "docId": "kibKbnCoreNotificationsBrowserPluginApi", - "section": "def-public.IToasts", - "text": "IToasts" - } - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_get_alerts_group_aggregations_query.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseGetAlertsGroupAggregationsQueryProps.enabled", - "type": "CompoundType", - "tags": [], - "label": "enabled", - "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_get_alerts_group_aggregations_query.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseGetAlertsGroupAggregationsQueryProps.params", - "type": "Object", - "tags": [], - "label": "params", - "description": [], - "signature": [ - "{ featureIds: ", - { - "pluginId": "@kbn/rule-data-utils", - "scope": "common", - "docId": "kibKbnRuleDataUtilsPluginApi", - "section": "def-common.AlertConsumers", - "text": "AlertConsumers" - }, - "[]; groupByField: string; aggregations?: Record | undefined; filters?: ", - "QueryDslQueryContainer", - "[] | undefined; sort?: ", - "SortCombinations", - "[] | undefined; pageIndex?: number | undefined; pageSize?: number | undefined; }" - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_get_alerts_group_aggregations_query.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseHealthCheckProps", - "type": "Interface", - "tags": [], - "label": "UseHealthCheckProps", - "description": [], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_health_check.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseHealthCheckProps.http", - "type": "Object", - "tags": [], - "label": "http", - "description": [], - "signature": [ - { - "pluginId": "@kbn/core-http-browser", - "scope": "public", - "docId": "kibKbnCoreHttpBrowserPluginApi", - "section": "def-public.HttpSetup", - "text": "HttpSetup" - } - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_health_check.tsx", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseHealthCheckResult", - "type": "Interface", - "tags": [], - "label": "UseHealthCheckResult", - "description": [], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_health_check.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseHealthCheckResult.isLoading", - "type": "boolean", - "tags": [], - "label": "isLoading", - "description": [], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_health_check.tsx", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseHealthCheckResult.healthCheckError", - "type": "CompoundType", - "tags": [], - "label": "healthCheckError", - "description": [], - "signature": [ - "HealthCheckErrors", - " | null" - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_health_check.tsx", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseLoadAlertingFrameworkHealthProps", - "type": "Interface", - "tags": [], - "label": "UseLoadAlertingFrameworkHealthProps", - "description": [], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_alerting_framework_health.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseLoadAlertingFrameworkHealthProps.http", - "type": "Object", - "tags": [], - "label": "http", - "description": [], - "signature": [ - { - "pluginId": "@kbn/core-http-browser", - "scope": "public", - "docId": "kibKbnCoreHttpBrowserPluginApi", - "section": "def-public.HttpSetup", - "text": "HttpSetup" - } - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_alerting_framework_health.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseLoadConnectorsProps", - "type": "Interface", - "tags": [], - "label": "UseLoadConnectorsProps", - "description": [], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connectors.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseLoadConnectorsProps.http", - "type": "Object", - "tags": [], - "label": "http", - "description": [], - "signature": [ - { - "pluginId": "@kbn/core-http-browser", - "scope": "public", - "docId": "kibKbnCoreHttpBrowserPluginApi", - "section": "def-public.HttpSetup", - "text": "HttpSetup" - } - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connectors.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseLoadConnectorsProps.includeSystemActions", - "type": "CompoundType", - "tags": [], - "label": "includeSystemActions", - "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connectors.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseLoadConnectorsProps.enabled", - "type": "CompoundType", - "tags": [], - "label": "enabled", - "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connectors.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseLoadConnectorsProps.cacheTime", - "type": "number", - "tags": [], - "label": "cacheTime", - "description": [], - "signature": [ - "number | undefined" - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connectors.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseLoadConnectorTypesProps", - "type": "Interface", - "tags": [], - "label": "UseLoadConnectorTypesProps", - "description": [], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connector_types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseLoadConnectorTypesProps.http", - "type": "Object", - "tags": [], - "label": "http", - "description": [], - "signature": [ - { - "pluginId": "@kbn/core-http-browser", - "scope": "public", - "docId": "kibKbnCoreHttpBrowserPluginApi", - "section": "def-public.HttpSetup", - "text": "HttpSetup" - } - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connector_types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseLoadConnectorTypesProps.includeSystemActions", - "type": "CompoundType", - "tags": [], - "label": "includeSystemActions", - "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connector_types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseLoadConnectorTypesProps.enabled", - "type": "CompoundType", - "tags": [], - "label": "enabled", - "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connector_types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseLoadConnectorTypesProps.featureId", - "type": "string", - "tags": [], - "label": "featureId", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connector_types.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseLoadUiConfigProps", - "type": "Interface", - "tags": [], - "label": "UseLoadUiConfigProps", - "description": [], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_ui_config.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseLoadUiConfigProps.http", - "type": "Object", - "tags": [], - "label": "http", - "description": [], - "signature": [ - { - "pluginId": "@kbn/core-http-browser", - "scope": "public", - "docId": "kibKbnCoreHttpBrowserPluginApi", - "section": "def-public.HttpSetup", - "text": "HttpSetup" - } - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_ui_config.ts", + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_alerts_data_view.ts", "deprecated": false, "trackAdoption": false } @@ -5257,18 +4854,18 @@ }, { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseLoadUiHealthProps", + "id": "def-public.UseGetAlertsGroupAggregationsQueryProps", "type": "Interface", "tags": [], - "label": "UseLoadUiHealthProps", + "label": "UseGetAlertsGroupAggregationsQueryProps", "description": [], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_ui_health.ts", + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_get_alerts_group_aggregations_query.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseLoadUiHealthProps.http", + "id": "def-public.UseGetAlertsGroupAggregationsQueryProps.http", "type": "Object", "tags": [], "label": "http", @@ -5282,69 +4879,61 @@ "text": "HttpSetup" } ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_ui_health.ts", + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_get_alerts_group_aggregations_query.ts", "deprecated": false, "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseResolveProps", - "type": "Interface", - "tags": [], - "label": "UseResolveProps", - "description": [], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_resolve_rule.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ + }, { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseResolveProps.http", + "id": "def-public.UseGetAlertsGroupAggregationsQueryProps.toasts", "type": "Object", "tags": [], - "label": "http", + "label": "toasts", "description": [], "signature": [ { - "pluginId": "@kbn/core-http-browser", + "pluginId": "@kbn/core-notifications-browser", "scope": "public", - "docId": "kibKbnCoreHttpBrowserPluginApi", - "section": "def-public.HttpSetup", - "text": "HttpSetup" + "docId": "kibKbnCoreNotificationsBrowserPluginApi", + "section": "def-public.IToasts", + "text": "IToasts" } ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_resolve_rule.ts", + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_get_alerts_group_aggregations_query.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseResolveProps.id", - "type": "string", + "id": "def-public.UseGetAlertsGroupAggregationsQueryProps.enabled", + "type": "CompoundType", "tags": [], - "label": "id", + "label": "enabled", "description": [], "signature": [ - "string | undefined" + "boolean | undefined" ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_resolve_rule.ts", + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_get_alerts_group_aggregations_query.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseResolveProps.cacheTime", - "type": "number", + "id": "def-public.UseGetAlertsGroupAggregationsQueryProps.params", + "type": "Object", "tags": [], - "label": "cacheTime", + "label": "params", "description": [], "signature": [ - "number | undefined" + "{ ruleTypeIds: string[]; consumers?: string[] | undefined; groupByField: string; aggregations?: Record | undefined; filters?: ", + "QueryDslQueryContainer", + "[] | undefined; sort?: ", + "SortCombinations", + "[] | undefined; pageIndex?: number | undefined; pageSize?: number | undefined; }" ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_resolve_rule.ts", + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_get_alerts_group_aggregations_query.ts", "deprecated": false, "trackAdoption": false } @@ -5353,32 +4942,18 @@ }, { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseRuleAADFieldsProps", + "id": "def-public.UseHealthCheckProps", "type": "Interface", "tags": [], - "label": "UseRuleAADFieldsProps", + "label": "UseHealthCheckProps", "description": [], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_rule_aad_fields.ts", + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_health_check.tsx", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseRuleAADFieldsProps.ruleTypeId", - "type": "string", - "tags": [], - "label": "ruleTypeId", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_rule_aad_fields.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseRuleAADFieldsProps.http", + "id": "def-public.UseHealthCheckProps.http", "type": "Object", "tags": [], "label": "http", @@ -5392,27 +4967,7 @@ "text": "HttpSetup" } ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_rule_aad_fields.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseRuleAADFieldsProps.toasts", - "type": "Object", - "tags": [], - "label": "toasts", - "description": [], - "signature": [ - { - "pluginId": "@kbn/core-notifications-browser", - "scope": "public", - "docId": "kibKbnCoreNotificationsBrowserPluginApi", - "section": "def-public.IToasts", - "text": "IToasts" - } - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_rule_aad_fields.ts", + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_health_check.tsx", "deprecated": false, "trackAdoption": false } @@ -5421,44 +4976,38 @@ }, { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseRuleAADFieldsResult", + "id": "def-public.UseHealthCheckResult", "type": "Interface", "tags": [], - "label": "UseRuleAADFieldsResult", + "label": "UseHealthCheckResult", "description": [], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_rule_aad_fields.ts", + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_health_check.tsx", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseRuleAADFieldsResult.aadFields", - "type": "Array", + "id": "def-public.UseHealthCheckResult.isLoading", + "type": "boolean", "tags": [], - "label": "aadFields", + "label": "isLoading", "description": [], - "signature": [ - { - "pluginId": "dataViews", - "scope": "common", - "docId": "kibDataViewsPluginApi", - "section": "def-common.DataViewField", - "text": "DataViewField" - }, - "[]" - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_rule_aad_fields.ts", + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_health_check.tsx", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseRuleAADFieldsResult.loading", - "type": "boolean", + "id": "def-public.UseHealthCheckResult.healthCheckError", + "type": "CompoundType", "tags": [], - "label": "loading", + "label": "healthCheckError", "description": [], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_rule_aad_fields.ts", + "signature": [ + "HealthCheckErrors", + " | null" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_health_check.tsx", "deprecated": false, "trackAdoption": false } @@ -5467,18 +5016,18 @@ }, { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseRuleTypesProps", + "id": "def-public.UseLoadAlertingFrameworkHealthProps", "type": "Interface", "tags": [], - "label": "UseRuleTypesProps", + "label": "UseLoadAlertingFrameworkHealthProps", "description": [], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_rule_types_query.ts", + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_alerting_framework_health.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseRuleTypesProps.http", + "id": "def-public.UseLoadAlertingFrameworkHealthProps.http", "type": "Object", "tags": [], "label": "http", @@ -5492,69 +5041,41 @@ "text": "HttpSetup" } ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_rule_types_query.ts", + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_alerting_framework_health.ts", "deprecated": false, "trackAdoption": false - }, + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-public.UseLoadUiHealthProps", + "type": "Interface", + "tags": [], + "label": "UseLoadUiHealthProps", + "description": [], + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_ui_health.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseRuleTypesProps.toasts", + "id": "def-public.UseLoadUiHealthProps.http", "type": "Object", "tags": [], - "label": "toasts", + "label": "http", "description": [], "signature": [ { - "pluginId": "@kbn/core-notifications-browser", + "pluginId": "@kbn/core-http-browser", "scope": "public", - "docId": "kibKbnCoreNotificationsBrowserPluginApi", - "section": "def-public.IToasts", - "text": "IToasts" + "docId": "kibKbnCoreHttpBrowserPluginApi", + "section": "def-public.HttpSetup", + "text": "HttpSetup" } ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_rule_types_query.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseRuleTypesProps.filteredRuleTypes", - "type": "Array", - "tags": [], - "label": "filteredRuleTypes", - "description": [], - "signature": [ - "string[] | undefined" - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_rule_types_query.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseRuleTypesProps.registeredRuleTypes", - "type": "Array", - "tags": [], - "label": "registeredRuleTypes", - "description": [], - "signature": [ - "{ id: string; description: string; }[] | undefined" - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_rule_types_query.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseRuleTypesProps.enabled", - "type": "CompoundType", - "tags": [], - "label": "enabled", - "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_rule_types_query.ts", + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_ui_health.ts", "deprecated": false, "trackAdoption": false } @@ -5563,18 +5084,18 @@ }, { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseUpdateRuleProps", + "id": "def-public.UseRuleTypesProps", "type": "Interface", "tags": [], - "label": "UseUpdateRuleProps", + "label": "UseRuleTypesProps", "description": [], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_update_rule.ts", + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_rule_types_query.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseUpdateRuleProps.http", + "id": "def-public.UseRuleTypesProps.http", "type": "Object", "tags": [], "label": "http", @@ -5588,119 +5109,71 @@ "text": "HttpSetup" } ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_update_rule.ts", + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_rule_types_query.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseUpdateRuleProps.onSuccess", - "type": "Function", + "id": "def-public.UseRuleTypesProps.toasts", + "type": "Object", "tags": [], - "label": "onSuccess", + "label": "toasts", "description": [], "signature": [ - "((rule: ", - { - "pluginId": "@kbn/alerts-ui-shared", - "scope": "public", - "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.Rule", - "text": "Rule" - }, - "<", { - "pluginId": "@kbn/alerts-ui-shared", + "pluginId": "@kbn/core-notifications-browser", "scope": "public", - "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.RuleTypeParams", - "text": "RuleTypeParams" - }, - ">) => void) | undefined" + "docId": "kibKbnCoreNotificationsBrowserPluginApi", + "section": "def-public.IToasts", + "text": "IToasts" + } ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_update_rule.ts", + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_rule_types_query.ts", "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseUpdateRuleProps.onSuccess.$1", - "type": "CompoundType", - "tags": [], - "label": "rule", - "description": [], - "signature": [ - { - "pluginId": "@kbn/alerts-ui-shared", - "scope": "public", - "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.Rule", - "text": "Rule" - }, - "<", - { - "pluginId": "@kbn/alerts-ui-shared", - "scope": "public", - "docId": "kibKbnAlertsUiSharedPluginApi", - "section": "def-public.RuleTypeParams", - "text": "RuleTypeParams" - }, - ">" - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_update_rule.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-public.UseRuleTypesProps.filteredRuleTypes", + "type": "Array", + "tags": [], + "label": "filteredRuleTypes", + "description": [], + "signature": [ + "string[] | undefined" ], - "returnComment": [] + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_rule_types_query.ts", + "deprecated": false, + "trackAdoption": false }, { "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseUpdateRuleProps.onError", - "type": "Function", + "id": "def-public.UseRuleTypesProps.registeredRuleTypes", + "type": "Array", "tags": [], - "label": "onError", + "label": "registeredRuleTypes", "description": [], "signature": [ - "((error: ", - { - "pluginId": "@kbn/core-http-browser", - "scope": "public", - "docId": "kibKbnCoreHttpBrowserPluginApi", - "section": "def-public.IHttpFetchError", - "text": "IHttpFetchError" - }, - "<{ message: string; }>) => void) | undefined" + "{ id: string; description: string; }[] | undefined" ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_update_rule.ts", + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_rule_types_query.ts", "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/alerts-ui-shared", - "id": "def-public.UseUpdateRuleProps.onError.$1", - "type": "Object", - "tags": [], - "label": "error", - "description": [], - "signature": [ - { - "pluginId": "@kbn/core-http-browser", - "scope": "public", - "docId": "kibKbnCoreHttpBrowserPluginApi", - "section": "def-public.IHttpFetchError", - "text": "IHttpFetchError" - }, - "<{ message: string; }>" - ], - "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_update_rule.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-public.UseRuleTypesProps.enabled", + "type": "CompoundType", + "tags": [], + "label": "enabled", + "description": [], + "signature": [ + "boolean | undefined" ], - "returnComment": [] + "path": "packages/kbn-alerts-ui-shared/src/common/hooks/use_load_rule_types_query.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -5746,6 +5219,42 @@ "deprecated": false, "trackAdoption": false, "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-public.AlertProvidedActionVariables", + "type": "Enum", + "tags": [], + "label": "AlertProvidedActionVariables", + "description": [], + "path": "packages/kbn-alerts-ui-shared/src/action_variables/action_variables.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-public.LegacyAlertProvidedActionVariables", + "type": "Enum", + "tags": [], + "label": "LegacyAlertProvidedActionVariables", + "description": [], + "path": "packages/kbn-alerts-ui-shared/src/action_variables/action_variables.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-public.SummaryAlertProvidedActionVariables", + "type": "Enum", + "tags": [], + "label": "SummaryAlertProvidedActionVariables", + "description": [], + "path": "packages/kbn-alerts-ui-shared/src/action_variables/action_variables.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false } ], "misc": [ @@ -6525,6 +6034,21 @@ } ], "objects": [ + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-public.AlertProvidedActionVariableDescriptions", + "type": "Object", + "tags": [], + "label": "AlertProvidedActionVariableDescriptions", + "description": [], + "signature": [ + "{ [x: `rule.params.${string}`]: ActionVariablesWithoutName; params: ActionVariablesWithoutName; spaceId: ActionVariablesWithoutName; date: ActionVariablesWithoutName; tags: ActionVariablesWithoutName; alertId: ActionVariablesWithoutName; alertInstanceId: ActionVariablesWithoutName; \"rule.id\": ActionVariablesWithoutName; \"rule.name\": ActionVariablesWithoutName; \"alert.uuid\": ActionVariablesWithoutName; \"alert.flapping\": ActionVariablesWithoutName; \"rule.tags\": ActionVariablesWithoutName; \"rule.type\": ActionVariablesWithoutName; alertName: ActionVariablesWithoutName; alertActionGroup: ActionVariablesWithoutName; alertActionGroupName: ActionVariablesWithoutName; kibanaBaseUrl: ActionVariablesWithoutName; \"rule.spaceId\": ActionVariablesWithoutName; \"rule.url\": ActionVariablesWithoutName; \"alert.id\": ActionVariablesWithoutName; \"alert.actionGroup\": ActionVariablesWithoutName; \"alert.actionGroupName\": ActionVariablesWithoutName; \"alert.consecutiveMatches\": ActionVariablesWithoutName; \"rule.params\": ActionVariablesWithoutName; }" + ], + "path": "packages/kbn-alerts-ui-shared/src/action_variables/action_variables.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/alerts-ui-shared", "id": "def-public.search", @@ -6584,6 +6108,277 @@ } ], "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-public.SummarizedAlertProvidedActionVariableDescriptions", + "type": "Object", + "tags": [], + "label": "SummarizedAlertProvidedActionVariableDescriptions", + "description": [], + "signature": [ + "{ [x: `rule.params.${string}`]: Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + ", \"name\">; params: Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + ", \"name\">; spaceId: Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + ", \"name\">; date: Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + ", \"name\">; tags: Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + ", \"name\">; alertId: Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + ", \"name\">; alertInstanceId: Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + ", \"name\">; \"rule.id\": Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + ", \"name\">; \"rule.name\": Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + ", \"name\">; \"alert.uuid\": Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + ", \"name\">; \"alert.flapping\": Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + ", \"name\">; \"rule.tags\": Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + ", \"name\">; \"rule.type\": Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + ", \"name\">; alertName: Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + ", \"name\">; alertActionGroup: Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + ", \"name\">; alertActionGroupName: Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + ", \"name\">; kibanaBaseUrl: Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + ", \"name\">; \"rule.spaceId\": Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + ", \"name\">; \"rule.url\": Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + ", \"name\">; \"alert.id\": Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + ", \"name\">; \"alert.actionGroup\": Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + ", \"name\">; \"alert.actionGroupName\": Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + ", \"name\">; \"alert.consecutiveMatches\": Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + ", \"name\">; \"rule.params\": Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + ", \"name\">; \"alerts.recovered.count\": Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + ", \"name\">; \"alerts.recovered.data\": Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + ", \"name\">; \"alerts.new.count\": Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + ", \"name\">; \"alerts.new.data\": Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + ", \"name\">; \"alerts.all.count\": Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + ", \"name\">; \"alerts.all.data\": Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + ", \"name\">; \"alerts.ongoing.count\": Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + ", \"name\">; \"alerts.ongoing.data\": Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + ", \"name\">; }" + ], + "path": "packages/kbn-alerts-ui-shared/src/action_variables/action_variables.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 9e573d9868d5b..03a37f44fe7c4 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: 2024-12-03 +date: 2024-12-05 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 | |-------------------|-----------|------------------------|-----------------| -| 321 | 0 | 305 | 8 | +| 302 | 0 | 286 | 4 | ## Client diff --git a/api_docs/kbn_analytics.mdx b/api_docs/kbn_analytics.mdx index 4920c2b74d82b..2a0ed19749522 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: 2024-12-03 +date: 2024-12-05 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 e31437c87d60f..2bc6282fc5ce3 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: 2024-12-03 +date: 2024-12-05 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 6f3489930119d..5789a45a790bf 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: 2024-12-03 +date: 2024-12-05 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 11f911917bf01..56a6621ea877a 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: 2024-12-03 +date: 2024-12-05 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 77ca49ee9a36a..599aa2fb083dc 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: 2024-12-03 +date: 2024-12-05 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 41bd4c9ae2481..ffcac4379cef7 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: 2024-12-03 +date: 2024-12-05 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 55b6b16418ba0..fb96df17d1788 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: 2024-12-03 +date: 2024-12-05 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 4075db91aeeb5..f1a9e5e8c8fd3 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: 2024-12-03 +date: 2024-12-05 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 b601c38a6b6f2..0a520cce01d44 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: 2024-12-03 +date: 2024-12-05 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 015b7e6fc4655..7d18395a49575 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_bfetch_error.mdx b/api_docs/kbn_bfetch_error.mdx index b1f7af0142da9..e97ce07efcea2 100644 --- a/api_docs/kbn_bfetch_error.mdx +++ b/api_docs/kbn_bfetch_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-bfetch-error title: "@kbn/bfetch-error" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/bfetch-error plugin -date: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/bfetch-error'] --- import kbnBfetchErrorObj from './kbn_bfetch_error.devdocs.json'; diff --git a/api_docs/kbn_calculate_auto.mdx b/api_docs/kbn_calculate_auto.mdx index 9aee2ea98ae3c..1ee103258509d 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: 2024-12-03 +date: 2024-12-05 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 773c0ec8ab72b..7a2a97b5e03e9 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: 2024-12-03 +date: 2024-12-05 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 8b250e1427d25..7f23851f916f3 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: 2024-12-03 +date: 2024-12-05 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 f4d4502cdc37b..823e8c539063e 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: 2024-12-03 +date: 2024-12-05 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 0e297dede197c..8d761c6213a28 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: 2024-12-03 +date: 2024-12-05 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 a5e272dd9b74d..eceff927c7476 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: 2024-12-03 +date: 2024-12-05 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 8d943b0d72a6a..5182a6bc65785 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-icons'] --- import kbnChartIconsObj from './kbn_chart_icons.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_core.mdx b/api_docs/kbn_ci_stats_core.mdx index 41b41e8befbf2..37384a9fb79fe 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: 2024-12-03 +date: 2024-12-05 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 31077f7f51401..eec85e6d1ec36 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: 2024-12-03 +date: 2024-12-05 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 043bf8e005c29..e6ae95bf722a1 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: 2024-12-03 +date: 2024-12-05 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 aa15347482fc0..eef9901d343f6 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: 2024-12-03 +date: 2024-12-05 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 9a9ebb3ed96a5..7f538e041d2c3 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: 2024-12-03 +date: 2024-12-05 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 0c9d0ce05e98f..3061b19b9b5b6 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture-common'] --- import kbnCloudSecurityPostureCommonObj from './kbn_cloud_security_posture_common.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture_graph.mdx b/api_docs/kbn_cloud_security_posture_graph.mdx index 5bdb2f2922367..0c4de1cb4f303 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture-graph'] --- import kbnCloudSecurityPostureGraphObj from './kbn_cloud_security_posture_graph.devdocs.json'; diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index 5f2d76f06ed33..4e2366ef40ef0 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: 2024-12-03 +date: 2024-12-05 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 4dfe3de38b27e..69f24d27ba3ed 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: 2024-12-03 +date: 2024-12-05 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 77f579431d482..a5d4ee78e778b 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: 2024-12-03 +date: 2024-12-05 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 040e0b7ca3ef8..18f3e55f51bce 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: 2024-12-03 +date: 2024-12-05 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 34eb1c16afdf9..0d610b960ae19 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: 2024-12-03 +date: 2024-12-05 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 afdf13e4fd5b1..2a9d3e05c72a4 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: 2024-12-03 +date: 2024-12-05 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 b7f38ac879ff8..e5bc89bc83666 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: 2024-12-03 +date: 2024-12-05 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 7cc97347d0956..3161c83420fab 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: 2024-12-03 +date: 2024-12-05 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 1c4b45969fae3..8d37ce7a9090d 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: 2024-12-03 +date: 2024-12-05 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 314fa216d2a1c..a161d2ea1d6db 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: 2024-12-03 +date: 2024-12-05 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 0d3aa9f0fb62a..73d3db4f243ab 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: 2024-12-03 +date: 2024-12-05 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 7e40607b21faa..001d4187cdb59 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: 2024-12-03 +date: 2024-12-05 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 052d931d97f90..422aa03144436 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: 2024-12-03 +date: 2024-12-05 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 95a87f1b9637e..8e6097f33c5c7 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: 2024-12-03 +date: 2024-12-05 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 ade0488c06679..88c4312a3f1fa 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: 2024-12-03 +date: 2024-12-05 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 824bf9224c814..759a66f28587b 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: 2024-12-03 +date: 2024-12-05 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 25ecb50b36872..cbe6712566e89 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: 2024-12-03 +date: 2024-12-05 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 f1aaaeba258f8..ef4957429848d 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: 2024-12-03 +date: 2024-12-05 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 658e6502f3e51..33a653d39a967 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: 2024-12-03 +date: 2024-12-05 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 bb1cb25cb2211..a3832c4febbaa 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: 2024-12-03 +date: 2024-12-05 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 1b61f04d13f19..cf3c7a9263d90 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: 2024-12-03 +date: 2024-12-05 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 bdc4764b131bd..617fa01449b91 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: 2024-12-03 +date: 2024-12-05 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 6e3572328aa38..59108e360bacc 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: 2024-12-03 +date: 2024-12-05 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 55c716c5195cf..4dbe3607886d8 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: 2024-12-03 +date: 2024-12-05 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 1dc3b7ced43b1..07430df9d07f2 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: 2024-12-03 +date: 2024-12-05 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.devdocs.json b/api_docs/kbn_core_application_browser.devdocs.json index a26570399596d..ebe47e7422312 100644 --- a/api_docs/kbn_core_application_browser.devdocs.json +++ b/api_docs/kbn_core_application_browser.devdocs.json @@ -1201,6 +1201,10 @@ "plugin": "@kbn/core-application-browser-mocks", "path": "packages/core/application/core-application-browser-mocks/src/application_service.mock.ts" }, + { + "plugin": "assetInventory", + "path": "x-pack/plugins/asset_inventory/public/application.tsx" + }, { "plugin": "fleet", "path": "x-pack/plugins/fleet/public/applications/integrations/index.tsx" diff --git a/api_docs/kbn_core_application_browser.mdx b/api_docs/kbn_core_application_browser.mdx index 385b70eab1822..fcb768fc96bad 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: 2024-12-03 +date: 2024-12-05 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 c93e1d6b36b2d..a40c22b14fbb6 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: 2024-12-03 +date: 2024-12-05 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 d2eee2647ac04..b584e1505faa2 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: 2024-12-03 +date: 2024-12-05 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 15b69d35fb423..94c96cb04f150 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: 2024-12-03 +date: 2024-12-05 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 f4a263b702009..d682dff24480c 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: 2024-12-03 +date: 2024-12-05 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 d11bf0ef25541..0b4146c285cc8 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: 2024-12-03 +date: 2024-12-05 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 9e6309e566ad9..77743705ed3a9 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: 2024-12-03 +date: 2024-12-05 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 e70df86ee3ed8..b1fc695a87a2c 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: 2024-12-03 +date: 2024-12-05 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 f4e6af94f0376..bf98cd68db054 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: 2024-12-03 +date: 2024-12-05 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 59b22026793ac..bae54f0339b9a 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: 2024-12-03 +date: 2024-12-05 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 227ed73b3c168..9b89a6db2d7f9 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: 2024-12-03 +date: 2024-12-05 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 ff91510acfaf3..b8bf30f841ca5 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: 2024-12-03 +date: 2024-12-05 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 6658412504cf0..eec671caf8033 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: 2024-12-03 +date: 2024-12-05 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 6f6f9b67f4714..953a27c63b3fd 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: 2024-12-03 +date: 2024-12-05 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 a0c45fad5a714..c560507ef80ea 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: 2024-12-03 +date: 2024-12-05 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 acc96d2631c68..113afb7d94fca 100644 --- a/api_docs/kbn_core_chrome_browser.devdocs.json +++ b/api_docs/kbn_core_chrome_browser.devdocs.json @@ -3765,7 +3765,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\" | \"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: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:pipelines\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"searchInferenceEndpoints\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"enterpriseSearchApplications:playground\" | \"appSearch:engines\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\" | \"observability-logs-explorer\" | \"last-used-logs-viewer\" | \"observabilityOnboarding\" | \"inventory\" | \"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: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\" | \"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\" | \"searchInferenceEndpoints\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"enterpriseSearchApplications:playground\" | \"appSearch:engines\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\" | \"observability-logs-explorer\" | \"last-used-logs-viewer\" | \"observabilityOnboarding\" | \"inventory\" | \"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: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 ae8118d69b160..b125a4e5e5fe9 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: 2024-12-03 +date: 2024-12-05 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 4d87b9bf64a04..2e071f814565d 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: 2024-12-03 +date: 2024-12-05 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 19132ba78af5c..81f63fae5fd40 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: 2024-12-03 +date: 2024-12-05 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 3e877454b83cd..ff2ef81681ee5 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: 2024-12-03 +date: 2024-12-05 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 bd98ce434b956..e759b5239a435 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: 2024-12-03 +date: 2024-12-05 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 6c9eff9988d3c..4861840b61679 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: 2024-12-03 +date: 2024-12-05 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 68beb9c6ae3d5..4a19096576956 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: 2024-12-03 +date: 2024-12-05 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 372cdd0b4ec53..8f6ef2a0bda5c 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: 2024-12-03 +date: 2024-12-05 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 7942915dc5971..673c8088714c0 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: 2024-12-03 +date: 2024-12-05 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 c259b64cbf3fe..5240f99dd403a 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: 2024-12-03 +date: 2024-12-05 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 90fe4f7840ccd..29ec68ba35d27 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: 2024-12-03 +date: 2024-12-05 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 60fbb36154474..84df54ab8e49e 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: 2024-12-03 +date: 2024-12-05 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 e3a4f3069d9d0..b589c715a6429 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: 2024-12-03 +date: 2024-12-05 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 175356815a82f..4c7c5678cea19 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: 2024-12-03 +date: 2024-12-05 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 b2daa0f917604..24078b4eea76e 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: 2024-12-03 +date: 2024-12-05 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 bd55fd32f8990..fb2be986c9134 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: 2024-12-03 +date: 2024-12-05 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 cfb99447d5ff4..32c1f425f8faf 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: 2024-12-03 +date: 2024-12-05 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 fa541c8101c46..b93e11588d665 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: 2024-12-03 +date: 2024-12-05 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 6abfb4f6ef16c..1763fc52fd0a0 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: 2024-12-03 +date: 2024-12-05 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 b8f98e965cf07..f93080392e2e1 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: 2024-12-03 +date: 2024-12-05 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 2a9917b2c125c..8eeb6aae2698e 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: 2024-12-03 +date: 2024-12-05 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 dd669241d943d..04c40d6fed6d3 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: 2024-12-03 +date: 2024-12-05 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 c9f33864366fc..207ebe5e5fdf9 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: 2024-12-03 +date: 2024-12-05 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.devdocs.json b/api_docs/kbn_core_elasticsearch_server.devdocs.json index 14c2183992b42..2a902c07e0969 100644 --- a/api_docs/kbn_core_elasticsearch_server.devdocs.json +++ b/api_docs/kbn_core_elasticsearch_server.devdocs.json @@ -1095,7 +1095,7 @@ "Headers used for authentication against Elasticsearch" ], "signature": [ - "{ date?: string | string[] | undefined; allow?: string | string[] | undefined; warning?: string | string[] | undefined; location?: string | string[] | undefined; from?: string | string[] | undefined; host?: string | string[] | undefined; range?: string | string[] | undefined; etag?: string | string[] | undefined; accept?: string | string[] | undefined; \"accept-language\"?: string | string[] | undefined; \"accept-patch\"?: string | string[] | undefined; \"accept-ranges\"?: string | string[] | undefined; \"access-control-allow-credentials\"?: string | string[] | undefined; \"access-control-allow-headers\"?: string | string[] | undefined; \"access-control-allow-methods\"?: string | string[] | undefined; \"access-control-allow-origin\"?: string | string[] | undefined; \"access-control-expose-headers\"?: string | string[] | undefined; \"access-control-max-age\"?: string | string[] | undefined; \"access-control-request-headers\"?: string | string[] | undefined; \"access-control-request-method\"?: string | string[] | undefined; age?: string | string[] | undefined; \"alt-svc\"?: string | string[] | undefined; authorization?: string | string[] | undefined; \"cache-control\"?: string | string[] | undefined; connection?: string | string[] | undefined; \"content-disposition\"?: string | string[] | undefined; \"content-encoding\"?: string | string[] | undefined; \"content-language\"?: string | string[] | undefined; \"content-length\"?: string | string[] | undefined; \"content-location\"?: string | string[] | undefined; \"content-range\"?: string | string[] | undefined; \"content-type\"?: string | string[] | undefined; cookie?: string | string[] | undefined; expect?: string | string[] | undefined; expires?: string | string[] | undefined; forwarded?: string | string[] | undefined; \"if-match\"?: string | string[] | undefined; \"if-modified-since\"?: string | string[] | undefined; \"if-none-match\"?: string | string[] | undefined; \"if-unmodified-since\"?: string | string[] | undefined; \"last-modified\"?: string | string[] | undefined; origin?: string | string[] | undefined; pragma?: string | string[] | undefined; \"proxy-authenticate\"?: string | string[] | undefined; \"proxy-authorization\"?: string | string[] | undefined; \"public-key-pins\"?: string | string[] | undefined; referer?: string | string[] | undefined; \"retry-after\"?: string | string[] | undefined; \"sec-websocket-accept\"?: string | string[] | undefined; \"sec-websocket-extensions\"?: string | string[] | undefined; \"sec-websocket-key\"?: string | string[] | undefined; \"sec-websocket-protocol\"?: string | string[] | undefined; \"sec-websocket-version\"?: string | string[] | undefined; \"set-cookie\"?: string | string[] | undefined; \"strict-transport-security\"?: string | string[] | undefined; tk?: string | string[] | undefined; trailer?: string | string[] | undefined; \"transfer-encoding\"?: string | string[] | undefined; upgrade?: string | string[] | undefined; \"user-agent\"?: string | string[] | undefined; vary?: string | string[] | undefined; via?: string | string[] | undefined; \"www-authenticate\"?: string | string[] | undefined; } & { [header: string]: string | string[] | undefined; }" + "{ date?: string | string[] | undefined; allow?: string | string[] | undefined; warning?: string | string[] | undefined; location?: string | string[] | undefined; authorization?: string | string[] | undefined; from?: string | string[] | undefined; host?: string | string[] | undefined; range?: string | string[] | undefined; etag?: string | string[] | undefined; accept?: string | string[] | undefined; \"accept-language\"?: string | string[] | undefined; \"accept-patch\"?: string | string[] | undefined; \"accept-ranges\"?: string | string[] | undefined; \"access-control-allow-credentials\"?: string | string[] | undefined; \"access-control-allow-headers\"?: string | string[] | undefined; \"access-control-allow-methods\"?: string | string[] | undefined; \"access-control-allow-origin\"?: string | string[] | undefined; \"access-control-expose-headers\"?: string | string[] | undefined; \"access-control-max-age\"?: string | string[] | undefined; \"access-control-request-headers\"?: string | string[] | undefined; \"access-control-request-method\"?: string | string[] | undefined; age?: string | string[] | undefined; \"alt-svc\"?: string | string[] | undefined; \"cache-control\"?: string | string[] | undefined; connection?: string | string[] | undefined; \"content-disposition\"?: string | string[] | undefined; \"content-encoding\"?: string | string[] | undefined; \"content-language\"?: string | string[] | undefined; \"content-length\"?: string | string[] | undefined; \"content-location\"?: string | string[] | undefined; \"content-range\"?: string | string[] | undefined; \"content-type\"?: string | string[] | undefined; cookie?: string | string[] | undefined; expect?: string | string[] | undefined; expires?: string | string[] | undefined; forwarded?: string | string[] | undefined; \"if-match\"?: string | string[] | undefined; \"if-modified-since\"?: string | string[] | undefined; \"if-none-match\"?: string | string[] | undefined; \"if-unmodified-since\"?: string | string[] | undefined; \"last-modified\"?: string | string[] | undefined; origin?: string | string[] | undefined; pragma?: string | string[] | undefined; \"proxy-authenticate\"?: string | string[] | undefined; \"proxy-authorization\"?: string | string[] | undefined; \"public-key-pins\"?: string | string[] | undefined; referer?: string | string[] | undefined; \"retry-after\"?: string | string[] | undefined; \"sec-websocket-accept\"?: string | string[] | undefined; \"sec-websocket-extensions\"?: string | string[] | undefined; \"sec-websocket-key\"?: string | string[] | undefined; \"sec-websocket-protocol\"?: string | string[] | undefined; \"sec-websocket-version\"?: string | string[] | undefined; \"set-cookie\"?: string | string[] | undefined; \"strict-transport-security\"?: string | string[] | undefined; tk?: string | string[] | undefined; trailer?: string | string[] | undefined; \"transfer-encoding\"?: string | string[] | undefined; upgrade?: string | string[] | undefined; \"user-agent\"?: string | string[] | undefined; vary?: string | string[] | undefined; via?: string | string[] | undefined; \"www-authenticate\"?: string | string[] | undefined; } & { [header: string]: string | string[] | undefined; }" ], "path": "packages/core/elasticsearch/core-elasticsearch-server/src/client/scopeable_request.ts", "deprecated": false, diff --git a/api_docs/kbn_core_elasticsearch_server.mdx b/api_docs/kbn_core_elasticsearch_server.mdx index 2a2f8f06c4a20..be3482fd4d8a2 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: 2024-12-03 +date: 2024-12-05 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 8893dc1cb951f..4f1cc7ed6f996 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: 2024-12-03 +date: 2024-12-05 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 79c5a37393840..372b62a1600fb 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: 2024-12-03 +date: 2024-12-05 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 e99acf6a3e672..e4907cb59999e 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: 2024-12-03 +date: 2024-12-05 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 96cd751aff25e..ce2c7c8a9d902 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: 2024-12-03 +date: 2024-12-05 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 cb4aca1b40993..554bb432d4406 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: 2024-12-03 +date: 2024-12-05 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 513da81629358..b215bc409d44b 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: 2024-12-03 +date: 2024-12-05 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 7967bb82da0db..b72ef85c3b93a 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: 2024-12-03 +date: 2024-12-05 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 0f608a0690c96..a2ca12f0d754c 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: 2024-12-03 +date: 2024-12-05 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 7328a307f1252..fa00ae4b9c8a7 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: 2024-12-03 +date: 2024-12-05 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 1fa7cfaf1d569..9a5e33f5a5b6c 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: 2024-12-03 +date: 2024-12-05 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 8209391797eb8..cccff5fe48058 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: 2024-12-03 +date: 2024-12-05 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 26e88146b34cb..030f53e0d5b2b 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: 2024-12-03 +date: 2024-12-05 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 a875baf15e78e..d3735a2615d17 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: 2024-12-03 +date: 2024-12-05 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 42fa72a883963..e6fc3ef698ccd 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: 2024-12-03 +date: 2024-12-05 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 d217d041e47f8..9614fcb0f9451 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: 2024-12-03 +date: 2024-12-05 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 f0e6419529cec..4216d28c0f163 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: 2024-12-03 +date: 2024-12-05 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 7407052fffac0..d42014a9d7d52 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: 2024-12-03 +date: 2024-12-05 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 8de24625d29c5..b012e68abc8e6 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: 2024-12-03 +date: 2024-12-05 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 8e1c60b0e1223..74ec68ae732b5 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: 2024-12-03 +date: 2024-12-05 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 4f05da87b338f..93317a929f573 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: 2024-12-03 +date: 2024-12-05 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 76025554376d3..b87b7069f235f 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: 2024-12-03 +date: 2024-12-05 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 2ed6505492725..85f080bef0e0d 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: 2024-12-03 +date: 2024-12-05 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 76e5bf1c26146..f43071f0b5ad4 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: 2024-12-03 +date: 2024-12-05 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 e5f33881d9b3d..7d2a5791a5542 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: 2024-12-03 +date: 2024-12-05 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 f4855ca0d6167..ebd3121542acb 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: 2024-12-03 +date: 2024-12-05 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 1997e4cc5eecc..304e9829906c0 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: 2024-12-03 +date: 2024-12-05 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 efbdec67cab4d..3777e8370cfb9 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: 2024-12-03 +date: 2024-12-05 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 c852a9402ddf3..b871c5844280a 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: 2024-12-03 +date: 2024-12-05 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 cbeafe319ddc0..65c2d797fd88e 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: 2024-12-03 +date: 2024-12-05 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 2b867d2b8ad3a..3b6d88a4848e5 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: 2024-12-03 +date: 2024-12-05 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 e00fe9fba4edb..dd55a6904231d 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -1160,7 +1160,7 @@ "The headers associated with the request." ], "signature": [ - "{ date?: string | string[] | undefined; allow?: string | string[] | undefined; warning?: string | string[] | undefined; location?: string | string[] | undefined; from?: string | string[] | undefined; host?: string | string[] | undefined; range?: string | string[] | undefined; etag?: string | string[] | undefined; accept?: string | string[] | undefined; \"accept-language\"?: string | string[] | undefined; \"accept-patch\"?: string | string[] | undefined; \"accept-ranges\"?: string | string[] | undefined; \"access-control-allow-credentials\"?: string | string[] | undefined; \"access-control-allow-headers\"?: string | string[] | undefined; \"access-control-allow-methods\"?: string | string[] | undefined; \"access-control-allow-origin\"?: string | string[] | undefined; \"access-control-expose-headers\"?: string | string[] | undefined; \"access-control-max-age\"?: string | string[] | undefined; \"access-control-request-headers\"?: string | string[] | undefined; \"access-control-request-method\"?: string | string[] | undefined; age?: string | string[] | undefined; \"alt-svc\"?: string | string[] | undefined; authorization?: string | string[] | undefined; \"cache-control\"?: string | string[] | undefined; connection?: string | string[] | undefined; \"content-disposition\"?: string | string[] | undefined; \"content-encoding\"?: string | string[] | undefined; \"content-language\"?: string | string[] | undefined; \"content-length\"?: string | string[] | undefined; \"content-location\"?: string | string[] | undefined; \"content-range\"?: string | string[] | undefined; \"content-type\"?: string | string[] | undefined; cookie?: string | string[] | undefined; expect?: string | string[] | undefined; expires?: string | string[] | undefined; forwarded?: string | string[] | undefined; \"if-match\"?: string | string[] | undefined; \"if-modified-since\"?: string | string[] | undefined; \"if-none-match\"?: string | string[] | undefined; \"if-unmodified-since\"?: string | string[] | undefined; \"last-modified\"?: string | string[] | undefined; origin?: string | string[] | undefined; pragma?: string | string[] | undefined; \"proxy-authenticate\"?: string | string[] | undefined; \"proxy-authorization\"?: string | string[] | undefined; \"public-key-pins\"?: string | string[] | undefined; referer?: string | string[] | undefined; \"retry-after\"?: string | string[] | undefined; \"sec-websocket-accept\"?: string | string[] | undefined; \"sec-websocket-extensions\"?: string | string[] | undefined; \"sec-websocket-key\"?: string | string[] | undefined; \"sec-websocket-protocol\"?: string | string[] | undefined; \"sec-websocket-version\"?: string | string[] | undefined; \"set-cookie\"?: string | string[] | undefined; \"strict-transport-security\"?: string | string[] | undefined; tk?: string | string[] | undefined; trailer?: string | string[] | undefined; \"transfer-encoding\"?: string | string[] | undefined; upgrade?: string | string[] | undefined; \"user-agent\"?: string | string[] | undefined; vary?: string | string[] | undefined; via?: string | string[] | undefined; \"www-authenticate\"?: string | string[] | undefined; } & { [header: string]: string | string[] | undefined; }" + "{ date?: string | string[] | undefined; allow?: string | string[] | undefined; warning?: string | string[] | undefined; location?: string | string[] | undefined; authorization?: string | string[] | undefined; from?: string | string[] | undefined; host?: string | string[] | undefined; range?: string | string[] | undefined; etag?: string | string[] | undefined; accept?: string | string[] | undefined; \"accept-language\"?: string | string[] | undefined; \"accept-patch\"?: string | string[] | undefined; \"accept-ranges\"?: string | string[] | undefined; \"access-control-allow-credentials\"?: string | string[] | undefined; \"access-control-allow-headers\"?: string | string[] | undefined; \"access-control-allow-methods\"?: string | string[] | undefined; \"access-control-allow-origin\"?: string | string[] | undefined; \"access-control-expose-headers\"?: string | string[] | undefined; \"access-control-max-age\"?: string | string[] | undefined; \"access-control-request-headers\"?: string | string[] | undefined; \"access-control-request-method\"?: string | string[] | undefined; age?: string | string[] | undefined; \"alt-svc\"?: string | string[] | undefined; \"cache-control\"?: string | string[] | undefined; connection?: string | string[] | undefined; \"content-disposition\"?: string | string[] | undefined; \"content-encoding\"?: string | string[] | undefined; \"content-language\"?: string | string[] | undefined; \"content-length\"?: string | string[] | undefined; \"content-location\"?: string | string[] | undefined; \"content-range\"?: string | string[] | undefined; \"content-type\"?: string | string[] | undefined; cookie?: string | string[] | undefined; expect?: string | string[] | undefined; expires?: string | string[] | undefined; forwarded?: string | string[] | undefined; \"if-match\"?: string | string[] | undefined; \"if-modified-since\"?: string | string[] | undefined; \"if-none-match\"?: string | string[] | undefined; \"if-unmodified-since\"?: string | string[] | undefined; \"last-modified\"?: string | string[] | undefined; origin?: string | string[] | undefined; pragma?: string | string[] | undefined; \"proxy-authenticate\"?: string | string[] | undefined; \"proxy-authorization\"?: string | string[] | undefined; \"public-key-pins\"?: string | string[] | undefined; referer?: string | string[] | undefined; \"retry-after\"?: string | string[] | undefined; \"sec-websocket-accept\"?: string | string[] | undefined; \"sec-websocket-extensions\"?: string | string[] | undefined; \"sec-websocket-key\"?: string | string[] | undefined; \"sec-websocket-protocol\"?: string | string[] | undefined; \"sec-websocket-version\"?: string | string[] | undefined; \"set-cookie\"?: string | string[] | undefined; \"strict-transport-security\"?: string | string[] | undefined; tk?: string | string[] | undefined; trailer?: string | string[] | undefined; \"transfer-encoding\"?: string | string[] | undefined; upgrade?: string | string[] | undefined; \"user-agent\"?: string | string[] | undefined; vary?: string | string[] | undefined; via?: string | string[] | undefined; \"www-authenticate\"?: string | string[] | undefined; } & { [header: string]: string | string[] | undefined; }" ], "path": "packages/core/http/core-http-server/src/router/raw_request.ts", "deprecated": false, @@ -4019,15 +4019,15 @@ }, { "plugin": "ruleRegistry", - "path": "x-pack/plugins/rule_registry/server/routes/get_feature_ids_by_registration_contexts.ts" + "path": "x-pack/plugins/rule_registry/server/routes/get_browser_fields_by_rule_type_ids.ts" }, { "plugin": "ruleRegistry", - "path": "x-pack/plugins/rule_registry/server/routes/get_browser_fields_by_feature_id.ts" + "path": "x-pack/plugins/rule_registry/server/routes/get_aad_fields_by_rule_type.ts" }, { - "plugin": "ruleRegistry", - "path": "x-pack/plugins/rule_registry/server/routes/get_aad_fields_by_rule_type.ts" + "plugin": "assetInventory", + "path": "x-pack/plugins/asset_inventory/server/routes/index.ts" }, { "plugin": "banners", @@ -4193,6 +4193,10 @@ "plugin": "inference", "path": "x-pack/plugins/inference/server/routes/connectors.ts" }, + { + "plugin": "productDocBase", + "path": "x-pack/plugins/ai_infra/product_doc_base/server/routes/installation.ts" + }, { "plugin": "globalSearch", "path": "x-pack/plugins/global_search/server/routes/get_searchable_types.ts" @@ -4789,6 +4793,10 @@ "plugin": "searchPlayground", "path": "x-pack/plugins/search_playground/server/routes.ts" }, + { + "plugin": "searchprofiler", + "path": "x-pack/plugins/searchprofiler/server/routes/profile.ts" + }, { "plugin": "serverlessSearch", "path": "x-pack/plugins/serverless_search/server/routes/api_key_routes.ts" @@ -4969,10 +4977,6 @@ "plugin": "watcher", "path": "x-pack/plugins/watcher/server/routes/api/register_load_history_route.ts" }, - { - "plugin": "productDocBase", - "path": "x-pack/plugins/ai_infra/product_doc_base/server/routes/installation.ts" - }, { "plugin": "customBranding", "path": "x-pack/plugins/custom_branding/server/routes/info.ts" @@ -5829,6 +5833,14 @@ "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/rule/apis/find/find_rules_route.test.ts" }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/rule/apis/find/find_rules_route.test.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/rule/apis/find/find_rules_route.test.ts" + }, { "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/rule/apis/get/get_rule_route.test.ts" @@ -6875,6 +6887,14 @@ "plugin": "inference", "path": "x-pack/plugins/inference/server/routes/chat_complete.ts" }, + { + "plugin": "productDocBase", + "path": "x-pack/plugins/ai_infra/product_doc_base/server/routes/installation.ts" + }, + { + "plugin": "productDocBase", + "path": "x-pack/plugins/ai_infra/product_doc_base/server/routes/installation.ts" + }, { "plugin": "globalSearch", "path": "x-pack/plugins/global_search/server/routes/find.ts" @@ -7551,14 +7571,6 @@ "plugin": "watcher", "path": "x-pack/plugins/watcher/server/routes/api/register_list_fields_route.ts" }, - { - "plugin": "productDocBase", - "path": "x-pack/plugins/ai_infra/product_doc_base/server/routes/installation.ts" - }, - { - "plugin": "productDocBase", - "path": "x-pack/plugins/ai_infra/product_doc_base/server/routes/installation.ts" - }, { "plugin": "grokdebugger", "path": "x-pack/plugins/grokdebugger/server/lib/kibana_framework.ts" @@ -8371,6 +8383,10 @@ "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/rule/apis/find/find_internal_rules_route.test.ts" }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/rule/apis/find/find_internal_rules_route.test.ts" + }, { "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/rule/apis/mute_alert/mute_alert.test.ts" @@ -11273,7 +11289,7 @@ "\nReadonly copy of incoming request headers." ], "signature": [ - "{ date?: string | string[] | undefined; allow?: string | string[] | undefined; warning?: string | string[] | undefined; location?: string | string[] | undefined; from?: string | string[] | undefined; host?: string | string[] | undefined; range?: string | string[] | undefined; etag?: string | string[] | undefined; accept?: string | string[] | undefined; \"accept-language\"?: string | string[] | undefined; \"accept-patch\"?: string | string[] | undefined; \"accept-ranges\"?: string | string[] | undefined; \"access-control-allow-credentials\"?: string | string[] | undefined; \"access-control-allow-headers\"?: string | string[] | undefined; \"access-control-allow-methods\"?: string | string[] | undefined; \"access-control-allow-origin\"?: string | string[] | undefined; \"access-control-expose-headers\"?: string | string[] | undefined; \"access-control-max-age\"?: string | string[] | undefined; \"access-control-request-headers\"?: string | string[] | undefined; \"access-control-request-method\"?: string | string[] | undefined; age?: string | string[] | undefined; \"alt-svc\"?: string | string[] | undefined; authorization?: string | string[] | undefined; \"cache-control\"?: string | string[] | undefined; connection?: string | string[] | undefined; \"content-disposition\"?: string | string[] | undefined; \"content-encoding\"?: string | string[] | undefined; \"content-language\"?: string | string[] | undefined; \"content-length\"?: string | string[] | undefined; \"content-location\"?: string | string[] | undefined; \"content-range\"?: string | string[] | undefined; \"content-type\"?: string | string[] | undefined; cookie?: string | string[] | undefined; expect?: string | string[] | undefined; expires?: string | string[] | undefined; forwarded?: string | string[] | undefined; \"if-match\"?: string | string[] | undefined; \"if-modified-since\"?: string | string[] | undefined; \"if-none-match\"?: string | string[] | undefined; \"if-unmodified-since\"?: string | string[] | undefined; \"last-modified\"?: string | string[] | undefined; origin?: string | string[] | undefined; pragma?: string | string[] | undefined; \"proxy-authenticate\"?: string | string[] | undefined; \"proxy-authorization\"?: string | string[] | undefined; \"public-key-pins\"?: string | string[] | undefined; referer?: string | string[] | undefined; \"retry-after\"?: string | string[] | undefined; \"sec-websocket-accept\"?: string | string[] | undefined; \"sec-websocket-extensions\"?: string | string[] | undefined; \"sec-websocket-key\"?: string | string[] | undefined; \"sec-websocket-protocol\"?: string | string[] | undefined; \"sec-websocket-version\"?: string | string[] | undefined; \"set-cookie\"?: string | string[] | undefined; \"strict-transport-security\"?: string | string[] | undefined; tk?: string | string[] | undefined; trailer?: string | string[] | undefined; \"transfer-encoding\"?: string | string[] | undefined; upgrade?: string | string[] | undefined; \"user-agent\"?: string | string[] | undefined; vary?: string | string[] | undefined; via?: string | string[] | undefined; \"www-authenticate\"?: string | string[] | undefined; } & { [header: string]: string | string[] | undefined; }" + "{ date?: string | string[] | undefined; allow?: string | string[] | undefined; warning?: string | string[] | undefined; location?: string | string[] | undefined; authorization?: string | string[] | undefined; from?: string | string[] | undefined; host?: string | string[] | undefined; range?: string | string[] | undefined; etag?: string | string[] | undefined; accept?: string | string[] | undefined; \"accept-language\"?: string | string[] | undefined; \"accept-patch\"?: string | string[] | undefined; \"accept-ranges\"?: string | string[] | undefined; \"access-control-allow-credentials\"?: string | string[] | undefined; \"access-control-allow-headers\"?: string | string[] | undefined; \"access-control-allow-methods\"?: string | string[] | undefined; \"access-control-allow-origin\"?: string | string[] | undefined; \"access-control-expose-headers\"?: string | string[] | undefined; \"access-control-max-age\"?: string | string[] | undefined; \"access-control-request-headers\"?: string | string[] | undefined; \"access-control-request-method\"?: string | string[] | undefined; age?: string | string[] | undefined; \"alt-svc\"?: string | string[] | undefined; \"cache-control\"?: string | string[] | undefined; connection?: string | string[] | undefined; \"content-disposition\"?: string | string[] | undefined; \"content-encoding\"?: string | string[] | undefined; \"content-language\"?: string | string[] | undefined; \"content-length\"?: string | string[] | undefined; \"content-location\"?: string | string[] | undefined; \"content-range\"?: string | string[] | undefined; \"content-type\"?: string | string[] | undefined; cookie?: string | string[] | undefined; expect?: string | string[] | undefined; expires?: string | string[] | undefined; forwarded?: string | string[] | undefined; \"if-match\"?: string | string[] | undefined; \"if-modified-since\"?: string | string[] | undefined; \"if-none-match\"?: string | string[] | undefined; \"if-unmodified-since\"?: string | string[] | undefined; \"last-modified\"?: string | string[] | undefined; origin?: string | string[] | undefined; pragma?: string | string[] | undefined; \"proxy-authenticate\"?: string | string[] | undefined; \"proxy-authorization\"?: string | string[] | undefined; \"public-key-pins\"?: string | string[] | undefined; referer?: string | string[] | undefined; \"retry-after\"?: string | string[] | undefined; \"sec-websocket-accept\"?: string | string[] | undefined; \"sec-websocket-extensions\"?: string | string[] | undefined; \"sec-websocket-key\"?: string | string[] | undefined; \"sec-websocket-protocol\"?: string | string[] | undefined; \"sec-websocket-version\"?: string | string[] | undefined; \"set-cookie\"?: string | string[] | undefined; \"strict-transport-security\"?: string | string[] | undefined; tk?: string | string[] | undefined; trailer?: string | string[] | undefined; \"transfer-encoding\"?: string | string[] | undefined; upgrade?: string | string[] | undefined; \"user-agent\"?: string | string[] | undefined; vary?: string | string[] | undefined; via?: string | string[] | undefined; \"www-authenticate\"?: string | string[] | undefined; } & { [header: string]: string | string[] | undefined; }" ], "path": "packages/core/http/core-http-server/src/router/request.ts", "deprecated": false, @@ -15475,31 +15491,31 @@ }, { "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/calendars.ts" + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" }, { "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/calendars.ts" + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" }, { "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/datafeeds.ts" + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" }, { "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/datafeeds.ts" + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" }, { "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/datafeeds.ts" + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" }, { "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/datafeeds.ts" + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" }, { "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/datafeeds.ts" + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" }, { "plugin": "ml", @@ -15515,27 +15531,31 @@ }, { "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + "path": "x-pack/plugins/ml/server/routes/calendars.ts" }, { "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + "path": "x-pack/plugins/ml/server/routes/calendars.ts" }, { "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + "path": "x-pack/plugins/ml/server/routes/datafeeds.ts" }, { "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + "path": "x-pack/plugins/ml/server/routes/datafeeds.ts" }, { "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + "path": "x-pack/plugins/ml/server/routes/datafeeds.ts" }, { "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + "path": "x-pack/plugins/ml/server/routes/datafeeds.ts" + }, + { + "plugin": "ml", + "path": "x-pack/plugins/ml/server/routes/datafeeds.ts" }, { "plugin": "ml", @@ -15997,6 +16017,10 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/read_alerts_index_exists_route.ts" }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/get_insights.ts" + }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_dev_tool_content/routes/read_prebuilt_dev_tool_content_route.ts" @@ -16101,6 +16125,10 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/stats.ts" }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/translation_stats.ts" + }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/stats_all.ts" @@ -16510,11 +16538,11 @@ }, { "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/annotations.ts" + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" }, { "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/calendars.ts" + "path": "x-pack/plugins/ml/server/routes/annotations.ts" }, { "plugin": "ml", @@ -16522,11 +16550,11 @@ }, { "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/datafeeds.ts" + "path": "x-pack/plugins/ml/server/routes/calendars.ts" }, { "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + "path": "x-pack/plugins/ml/server/routes/datafeeds.ts" }, { "plugin": "ml", @@ -16604,6 +16632,10 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/update_rule/route.ts" }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/update_insight.ts" + }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/lib/risk_score/indices/create_index_route.ts" @@ -16953,19 +16985,19 @@ }, { "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/annotations.ts" + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" }, { "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/datafeeds.ts" + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" }, { "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/datafeeds.ts" + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" }, { "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/datafeeds.ts" + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" }, { "plugin": "ml", @@ -16981,19 +17013,19 @@ }, { "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + "path": "x-pack/plugins/ml/server/routes/annotations.ts" }, { "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + "path": "x-pack/plugins/ml/server/routes/datafeeds.ts" }, { "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + "path": "x-pack/plugins/ml/server/routes/datafeeds.ts" }, { "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + "path": "x-pack/plugins/ml/server/routes/datafeeds.ts" }, { "plugin": "ml", @@ -17665,11 +17697,11 @@ }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/rules/install.ts" + "path": "x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/install.ts" }, { "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/rules/install_translated.ts" + "path": "x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/install_translated.ts" }, { "plugin": "securitySolution", @@ -18143,19 +18175,19 @@ }, { "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/annotations.ts" + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" }, { "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/calendars.ts" + "path": "x-pack/plugins/ml/server/routes/annotations.ts" }, { "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/datafeeds.ts" + "path": "x-pack/plugins/ml/server/routes/calendars.ts" }, { "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + "path": "x-pack/plugins/ml/server/routes/datafeeds.ts" }, { "plugin": "ml", @@ -19201,7 +19233,7 @@ "\nHttp request headers to read." ], "signature": [ - "{ date?: string | string[] | undefined; allow?: string | string[] | undefined; warning?: string | string[] | undefined; location?: string | string[] | undefined; from?: string | string[] | undefined; host?: string | string[] | undefined; range?: string | string[] | undefined; etag?: string | string[] | undefined; accept?: string | string[] | undefined; \"accept-language\"?: string | string[] | undefined; \"accept-patch\"?: string | string[] | undefined; \"accept-ranges\"?: string | string[] | undefined; \"access-control-allow-credentials\"?: string | string[] | undefined; \"access-control-allow-headers\"?: string | string[] | undefined; \"access-control-allow-methods\"?: string | string[] | undefined; \"access-control-allow-origin\"?: string | string[] | undefined; \"access-control-expose-headers\"?: string | string[] | undefined; \"access-control-max-age\"?: string | string[] | undefined; \"access-control-request-headers\"?: string | string[] | undefined; \"access-control-request-method\"?: string | string[] | undefined; age?: string | string[] | undefined; \"alt-svc\"?: string | string[] | undefined; authorization?: string | string[] | undefined; \"cache-control\"?: string | string[] | undefined; connection?: string | string[] | undefined; \"content-disposition\"?: string | string[] | undefined; \"content-encoding\"?: string | string[] | undefined; \"content-language\"?: string | string[] | undefined; \"content-length\"?: string | string[] | undefined; \"content-location\"?: string | string[] | undefined; \"content-range\"?: string | string[] | undefined; \"content-type\"?: string | string[] | undefined; cookie?: string | string[] | undefined; expect?: string | string[] | undefined; expires?: string | string[] | undefined; forwarded?: string | string[] | undefined; \"if-match\"?: string | string[] | undefined; \"if-modified-since\"?: string | string[] | undefined; \"if-none-match\"?: string | string[] | undefined; \"if-unmodified-since\"?: string | string[] | undefined; \"last-modified\"?: string | string[] | undefined; origin?: string | string[] | undefined; pragma?: string | string[] | undefined; \"proxy-authenticate\"?: string | string[] | undefined; \"proxy-authorization\"?: string | string[] | undefined; \"public-key-pins\"?: string | string[] | undefined; referer?: string | string[] | undefined; \"retry-after\"?: string | string[] | undefined; \"sec-websocket-accept\"?: string | string[] | undefined; \"sec-websocket-extensions\"?: string | string[] | undefined; \"sec-websocket-key\"?: string | string[] | undefined; \"sec-websocket-protocol\"?: string | string[] | undefined; \"sec-websocket-version\"?: string | string[] | undefined; \"set-cookie\"?: string | string[] | undefined; \"strict-transport-security\"?: string | string[] | undefined; tk?: string | string[] | undefined; trailer?: string | string[] | undefined; \"transfer-encoding\"?: string | string[] | undefined; upgrade?: string | string[] | undefined; \"user-agent\"?: string | string[] | undefined; vary?: string | string[] | undefined; via?: string | string[] | undefined; \"www-authenticate\"?: string | string[] | undefined; } & { [header: string]: string | string[] | undefined; }" + "{ date?: string | string[] | undefined; allow?: string | string[] | undefined; warning?: string | string[] | undefined; location?: string | string[] | undefined; authorization?: string | string[] | undefined; from?: string | string[] | undefined; host?: string | string[] | undefined; range?: string | string[] | undefined; etag?: string | string[] | undefined; accept?: string | string[] | undefined; \"accept-language\"?: string | string[] | undefined; \"accept-patch\"?: string | string[] | undefined; \"accept-ranges\"?: string | string[] | undefined; \"access-control-allow-credentials\"?: string | string[] | undefined; \"access-control-allow-headers\"?: string | string[] | undefined; \"access-control-allow-methods\"?: string | string[] | undefined; \"access-control-allow-origin\"?: string | string[] | undefined; \"access-control-expose-headers\"?: string | string[] | undefined; \"access-control-max-age\"?: string | string[] | undefined; \"access-control-request-headers\"?: string | string[] | undefined; \"access-control-request-method\"?: string | string[] | undefined; age?: string | string[] | undefined; \"alt-svc\"?: string | string[] | undefined; \"cache-control\"?: string | string[] | undefined; connection?: string | string[] | undefined; \"content-disposition\"?: string | string[] | undefined; \"content-encoding\"?: string | string[] | undefined; \"content-language\"?: string | string[] | undefined; \"content-length\"?: string | string[] | undefined; \"content-location\"?: string | string[] | undefined; \"content-range\"?: string | string[] | undefined; \"content-type\"?: string | string[] | undefined; cookie?: string | string[] | undefined; expect?: string | string[] | undefined; expires?: string | string[] | undefined; forwarded?: string | string[] | undefined; \"if-match\"?: string | string[] | undefined; \"if-modified-since\"?: string | string[] | undefined; \"if-none-match\"?: string | string[] | undefined; \"if-unmodified-since\"?: string | string[] | undefined; \"last-modified\"?: string | string[] | undefined; origin?: string | string[] | undefined; pragma?: string | string[] | undefined; \"proxy-authenticate\"?: string | string[] | undefined; \"proxy-authorization\"?: string | string[] | undefined; \"public-key-pins\"?: string | string[] | undefined; referer?: string | string[] | undefined; \"retry-after\"?: string | string[] | undefined; \"sec-websocket-accept\"?: string | string[] | undefined; \"sec-websocket-extensions\"?: string | string[] | undefined; \"sec-websocket-key\"?: string | string[] | undefined; \"sec-websocket-protocol\"?: string | string[] | undefined; \"sec-websocket-version\"?: string | string[] | undefined; \"set-cookie\"?: string | string[] | undefined; \"strict-transport-security\"?: string | string[] | undefined; tk?: string | string[] | undefined; trailer?: string | string[] | undefined; \"transfer-encoding\"?: string | string[] | undefined; upgrade?: string | string[] | undefined; \"user-agent\"?: string | string[] | undefined; vary?: string | string[] | undefined; via?: string | string[] | undefined; \"www-authenticate\"?: string | string[] | undefined; } & { [header: string]: string | string[] | undefined; }" ], "path": "packages/core/http/core-http-server/src/router/headers.ts", "deprecated": false, @@ -19569,7 +19601,7 @@ "\nSet of well-known HTTP headers." ], "signature": [ - "\"date\" | \"allow\" | \"warning\" | \"location\" | \"from\" | \"host\" | \"range\" | \"etag\" | \"accept\" | \"accept-language\" | \"accept-patch\" | \"accept-ranges\" | \"access-control-allow-credentials\" | \"access-control-allow-headers\" | \"access-control-allow-methods\" | \"access-control-allow-origin\" | \"access-control-expose-headers\" | \"access-control-max-age\" | \"access-control-request-headers\" | \"access-control-request-method\" | \"age\" | \"alt-svc\" | \"authorization\" | \"cache-control\" | \"connection\" | \"content-disposition\" | \"content-encoding\" | \"content-language\" | \"content-length\" | \"content-location\" | \"content-range\" | \"content-type\" | \"cookie\" | \"expect\" | \"expires\" | \"forwarded\" | \"if-match\" | \"if-modified-since\" | \"if-none-match\" | \"if-unmodified-since\" | \"last-modified\" | \"origin\" | \"pragma\" | \"proxy-authenticate\" | \"proxy-authorization\" | \"public-key-pins\" | \"referer\" | \"retry-after\" | \"sec-websocket-accept\" | \"sec-websocket-extensions\" | \"sec-websocket-key\" | \"sec-websocket-protocol\" | \"sec-websocket-version\" | \"set-cookie\" | \"strict-transport-security\" | \"tk\" | \"trailer\" | \"transfer-encoding\" | \"upgrade\" | \"user-agent\" | \"vary\" | \"via\" | \"www-authenticate\"" + "\"date\" | \"allow\" | \"warning\" | \"location\" | \"authorization\" | \"from\" | \"host\" | \"range\" | \"etag\" | \"accept\" | \"accept-language\" | \"accept-patch\" | \"accept-ranges\" | \"access-control-allow-credentials\" | \"access-control-allow-headers\" | \"access-control-allow-methods\" | \"access-control-allow-origin\" | \"access-control-expose-headers\" | \"access-control-max-age\" | \"access-control-request-headers\" | \"access-control-request-method\" | \"age\" | \"alt-svc\" | \"cache-control\" | \"connection\" | \"content-disposition\" | \"content-encoding\" | \"content-language\" | \"content-length\" | \"content-location\" | \"content-range\" | \"content-type\" | \"cookie\" | \"expect\" | \"expires\" | \"forwarded\" | \"if-match\" | \"if-modified-since\" | \"if-none-match\" | \"if-unmodified-since\" | \"last-modified\" | \"origin\" | \"pragma\" | \"proxy-authenticate\" | \"proxy-authorization\" | \"public-key-pins\" | \"referer\" | \"retry-after\" | \"sec-websocket-accept\" | \"sec-websocket-extensions\" | \"sec-websocket-key\" | \"sec-websocket-protocol\" | \"sec-websocket-version\" | \"set-cookie\" | \"strict-transport-security\" | \"tk\" | \"trailer\" | \"transfer-encoding\" | \"upgrade\" | \"user-agent\" | \"vary\" | \"via\" | \"www-authenticate\"" ], "path": "packages/core/http/core-http-server/src/router/headers.ts", "deprecated": false, @@ -20739,7 +20771,7 @@ "\nHttp response headers to set." ], "signature": [ - "Record | Record<\"date\" | \"allow\" | \"warning\" | \"location\" | \"from\" | \"host\" | \"range\" | \"etag\" | \"accept\" | \"accept-language\" | \"accept-patch\" | \"accept-ranges\" | \"access-control-allow-credentials\" | \"access-control-allow-headers\" | \"access-control-allow-methods\" | \"access-control-allow-origin\" | \"access-control-expose-headers\" | \"access-control-max-age\" | \"access-control-request-headers\" | \"access-control-request-method\" | \"age\" | \"alt-svc\" | \"authorization\" | \"cache-control\" | \"connection\" | \"content-disposition\" | \"content-encoding\" | \"content-language\" | \"content-length\" | \"content-location\" | \"content-range\" | \"content-type\" | \"cookie\" | \"expect\" | \"expires\" | \"forwarded\" | \"if-match\" | \"if-modified-since\" | \"if-none-match\" | \"if-unmodified-since\" | \"last-modified\" | \"origin\" | \"pragma\" | \"proxy-authenticate\" | \"proxy-authorization\" | \"public-key-pins\" | \"referer\" | \"retry-after\" | \"sec-websocket-accept\" | \"sec-websocket-extensions\" | \"sec-websocket-key\" | \"sec-websocket-protocol\" | \"sec-websocket-version\" | \"set-cookie\" | \"strict-transport-security\" | \"tk\" | \"trailer\" | \"transfer-encoding\" | \"upgrade\" | \"user-agent\" | \"vary\" | \"via\" | \"www-authenticate\", string | string[]>" + "Record<\"date\" | \"allow\" | \"warning\" | \"location\" | \"authorization\" | \"from\" | \"host\" | \"range\" | \"etag\" | \"accept\" | \"accept-language\" | \"accept-patch\" | \"accept-ranges\" | \"access-control-allow-credentials\" | \"access-control-allow-headers\" | \"access-control-allow-methods\" | \"access-control-allow-origin\" | \"access-control-expose-headers\" | \"access-control-max-age\" | \"access-control-request-headers\" | \"access-control-request-method\" | \"age\" | \"alt-svc\" | \"cache-control\" | \"connection\" | \"content-disposition\" | \"content-encoding\" | \"content-language\" | \"content-length\" | \"content-location\" | \"content-range\" | \"content-type\" | \"cookie\" | \"expect\" | \"expires\" | \"forwarded\" | \"if-match\" | \"if-modified-since\" | \"if-none-match\" | \"if-unmodified-since\" | \"last-modified\" | \"origin\" | \"pragma\" | \"proxy-authenticate\" | \"proxy-authorization\" | \"public-key-pins\" | \"referer\" | \"retry-after\" | \"sec-websocket-accept\" | \"sec-websocket-extensions\" | \"sec-websocket-key\" | \"sec-websocket-protocol\" | \"sec-websocket-version\" | \"set-cookie\" | \"strict-transport-security\" | \"tk\" | \"trailer\" | \"transfer-encoding\" | \"upgrade\" | \"user-agent\" | \"vary\" | \"via\" | \"www-authenticate\", string | string[]> | Record" ], "path": "packages/core/http/core-http-server/src/router/headers.ts", "deprecated": false, diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index b708669c2e294..d53c431bc997c 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: 2024-12-03 +date: 2024-12-05 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 d65f99fef2e36..9f7800f0c42ed 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: 2024-12-03 +date: 2024-12-05 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 d1ad90e098d70..eb5b1b4d22b1e 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: 2024-12-03 +date: 2024-12-05 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 6633aca139c15..6ae3c6c8bdc17 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: 2024-12-03 +date: 2024-12-05 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 5567e2a5af4c6..e635398eccc7a 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: 2024-12-03 +date: 2024-12-05 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 6cfea71eaffbd..3d0e8bb5c5054 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: 2024-12-03 +date: 2024-12-05 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 d743f16279ba3..3fec91b07b63c 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: 2024-12-03 +date: 2024-12-05 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 7adde615137c0..9c117c90e46e0 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: 2024-12-03 +date: 2024-12-05 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 0ac752131d67a..33cb92b0bbf4c 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: 2024-12-03 +date: 2024-12-05 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 d8926d7c3e3f8..197b20f5decf4 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: 2024-12-03 +date: 2024-12-05 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 8f9c96d1b0820..3dc7c57b7f83a 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: 2024-12-03 +date: 2024-12-05 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 e8c551ba6970c..c0ca84a0076f1 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: 2024-12-03 +date: 2024-12-05 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 2e3e60c740e8f..9c9397f5c0497 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: 2024-12-03 +date: 2024-12-05 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 2b98c841824ba..546bae9e59052 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: 2024-12-03 +date: 2024-12-05 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 81363e2d8c60e..8e3ca85eaeb44 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: 2024-12-03 +date: 2024-12-05 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 1efc5ce8cec4a..e6a888711379c 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: 2024-12-03 +date: 2024-12-05 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 6be2aa265a4a3..de4833fdf3a65 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: 2024-12-03 +date: 2024-12-05 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 b461602b7cf9c..e94c2b96f1186 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: 2024-12-03 +date: 2024-12-05 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 267c8ca7ec069..7c9076fd10e6c 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: 2024-12-03 +date: 2024-12-05 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 dd391bef61679..b01050d97c3a3 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: 2024-12-03 +date: 2024-12-05 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 2c1d89369c266..96472497405a0 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: 2024-12-03 +date: 2024-12-05 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 e92dbb42156e9..5d2e583a447b3 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: 2024-12-03 +date: 2024-12-05 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 7467c3c278ff9..58fe2c7c7688a 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: 2024-12-03 +date: 2024-12-05 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 f97db3c3c112a..654b4a5202382 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: 2024-12-03 +date: 2024-12-05 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 1091e8d8ae9ff..bc7bfdca9165d 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: 2024-12-03 +date: 2024-12-05 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 0b2667b4756aa..4f55d8999fe14 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: 2024-12-03 +date: 2024-12-05 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 97030cbe9deed..a68f2a7115f09 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: 2024-12-03 +date: 2024-12-05 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 aef8e3db6898f..5ffaad7010caa 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: 2024-12-03 +date: 2024-12-05 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 0159d8b222d29..a66d2379f3b7b 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: 2024-12-03 +date: 2024-12-05 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 ca934e7d7fc9f..307edfb975a03 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: 2024-12-03 +date: 2024-12-05 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 53e4db7c561b8..0386b6ac66e02 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: 2024-12-03 +date: 2024-12-05 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 b2e1537228ccf..444a44e81f75e 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: 2024-12-03 +date: 2024-12-05 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 23c2274e15a38..277b8c8c7a8f3 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: 2024-12-03 +date: 2024-12-05 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 50ac9d4b57cc5..852b22548654b 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: 2024-12-03 +date: 2024-12-05 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 d07a99390dc31..77a7444974c7b 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: 2024-12-03 +date: 2024-12-05 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 75124a902a562..56c9435e72204 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: 2024-12-03 +date: 2024-12-05 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 783da4ddb53f0..3da12cdd78ad2 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: 2024-12-03 +date: 2024-12-05 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 f92668accf930..7cd76f5393ac2 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: 2024-12-03 +date: 2024-12-05 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 3443582ec645b..542ec6f810c4d 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: 2024-12-03 +date: 2024-12-05 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 cafbdd0dbdfea..cd1e406d4ef22 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: 2024-12-03 +date: 2024-12-05 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 21b9b4a11bd16..c7815ec645a6d 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: 2024-12-03 +date: 2024-12-05 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 d1ddd23bcebac..e38218fc0d999 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: 2024-12-03 +date: 2024-12-05 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 d967299d7f003..93b2a3e0df091 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: 2024-12-03 +date: 2024-12-05 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 6651f38621fbc..df370cdc30d64 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: 2024-12-03 +date: 2024-12-05 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 40bc8f495cf72..d0fba64e00ba0 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: 2024-12-03 +date: 2024-12-05 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 45b2d207b2523..5771b78a30fa9 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: 2024-12-03 +date: 2024-12-05 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 67d55f3ecc1f5..a00f4a050123e 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: 2024-12-03 +date: 2024-12-05 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 d0577d2523b33..518bac917d8c7 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: 2024-12-03 +date: 2024-12-05 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 d9714266c585a..9ededd3289f77 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: 2024-12-03 +date: 2024-12-05 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 f3cbde1178c1a..c18b4d37b20c3 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: 2024-12-03 +date: 2024-12-05 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 f678ab1ec3d67..f6e8e8d522a41 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: 2024-12-03 +date: 2024-12-05 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 493afd439a826..fd07c7706410d 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: 2024-12-03 +date: 2024-12-05 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 aba0c61c2614d..1d54509a60e04 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: 2024-12-03 +date: 2024-12-05 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 d9ca3c27db3d2..d764dcb29ce2c 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: 2024-12-03 +date: 2024-12-05 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 75f59d3536485..4a5cfacbfe05a 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: 2024-12-03 +date: 2024-12-05 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 68a5fee7c6902..60087c614efa3 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: 2024-12-03 +date: 2024-12-05 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 e615bec13081b..356f860780c85 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: 2024-12-03 +date: 2024-12-05 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.devdocs.json b/api_docs/kbn_core_saved_objects_common.devdocs.json index 63ae4b1d1ff34..18aab13982006 100644 --- a/api_docs/kbn_core_saved_objects_common.devdocs.json +++ b/api_docs/kbn_core_saved_objects_common.devdocs.json @@ -1560,36 +1560,36 @@ "path": "src/core/types/index.ts" }, { - "plugin": "@kbn/alerts-ui-shared", - "path": "packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_item.tsx" + "plugin": "@kbn/response-ops-rule-form", + "path": "packages/response-ops/rule_form/src/rule_actions/rule_actions_item.tsx" }, { - "plugin": "@kbn/alerts-ui-shared", - "path": "packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_item.tsx" + "plugin": "@kbn/response-ops-rule-form", + "path": "packages/response-ops/rule_form/src/rule_actions/rule_actions_item.tsx" }, { - "plugin": "@kbn/alerts-ui-shared", - "path": "packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_item.tsx" + "plugin": "@kbn/response-ops-rule-form", + "path": "packages/response-ops/rule_form/src/rule_actions/rule_actions_item.tsx" }, { - "plugin": "@kbn/alerts-ui-shared", - "path": "packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_item.tsx" + "plugin": "@kbn/response-ops-rule-form", + "path": "packages/response-ops/rule_form/src/rule_actions/rule_actions_item.tsx" }, { - "plugin": "@kbn/alerts-ui-shared", - "path": "packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_system_actions_item.tsx" + "plugin": "@kbn/response-ops-rule-form", + "path": "packages/response-ops/rule_form/src/rule_actions/rule_actions_system_actions_item.tsx" }, { - "plugin": "@kbn/alerts-ui-shared", - "path": "packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_system_actions_item.tsx" + "plugin": "@kbn/response-ops-rule-form", + "path": "packages/response-ops/rule_form/src/rule_actions/rule_actions_system_actions_item.tsx" }, { - "plugin": "@kbn/alerts-ui-shared", - "path": "packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_system_actions_item.tsx" + "plugin": "@kbn/response-ops-rule-form", + "path": "packages/response-ops/rule_form/src/rule_actions/rule_actions_system_actions_item.tsx" }, { - "plugin": "@kbn/alerts-ui-shared", - "path": "packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_system_actions_item.tsx" + "plugin": "@kbn/response-ops-rule-form", + "path": "packages/response-ops/rule_form/src/rule_actions/rule_actions_system_actions_item.tsx" } ], "initialIsOpen": false diff --git a/api_docs/kbn_core_saved_objects_common.mdx b/api_docs/kbn_core_saved_objects_common.mdx index 4af0177f5296d..cf0cb5f060a53 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: 2024-12-03 +date: 2024-12-05 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 22704341fa3f5..a08d13c9ce455 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: 2024-12-03 +date: 2024-12-05 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 5137325e5f25a..582f622e8f24c 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: 2024-12-03 +date: 2024-12-05 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 9c1431826cd1e..1738eda766167 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: 2024-12-03 +date: 2024-12-05 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 43b6f9c7ca40c..e06c6ffc6ba35 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: 2024-12-03 +date: 2024-12-05 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 fb9b79f4816e4..f709e4cf3dcc8 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: 2024-12-03 +date: 2024-12-05 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 017493d5617a9..01cf64367b930 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: 2024-12-03 +date: 2024-12-05 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 9659a6fe1e225..2eb1b6207be4c 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: 2024-12-03 +date: 2024-12-05 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 ae7cb4a7add0a..c186fe40e4981 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: 2024-12-03 +date: 2024-12-05 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 08620be021693..b7c9af8be4dde 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: 2024-12-03 +date: 2024-12-05 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 6361b016784ad..819a604f933a0 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: 2024-12-03 +date: 2024-12-05 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 624b0a5d0b129..9ef6baeef9af5 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: 2024-12-03 +date: 2024-12-05 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 386ddb30bdac1..ade892a629634 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: 2024-12-03 +date: 2024-12-05 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 b2215891233ae..bbb402db93bb5 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: 2024-12-03 +date: 2024-12-05 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 a644a1c8d4081..5c8aae302f6c8 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: 2024-12-03 +date: 2024-12-05 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 b8afb11f52fa7..d4ebdd7093d4e 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: 2024-12-03 +date: 2024-12-05 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 e1475a8b1af0d..25d492eec2cea 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: 2024-12-03 +date: 2024-12-05 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 3ffe739dcf1a3..f8a6763467762 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: 2024-12-03 +date: 2024-12-05 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 2d0c5252744ca..72408f30f2a27 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: 2024-12-03 +date: 2024-12-05 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 f5b5471a7cbfc..91075bc408082 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: 2024-12-03 +date: 2024-12-05 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 21176f25ee98a..b7dc893f5e661 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: 2024-12-03 +date: 2024-12-05 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 affb67dfd35a9..89c3d76c580bc 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: 2024-12-03 +date: 2024-12-05 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 e1e74dd173f0f..76610bb39ebb2 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: 2024-12-03 +date: 2024-12-05 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 4ae54cd255a13..e0e62e3711a64 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: 2024-12-03 +date: 2024-12-05 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 b7360eaa5643d..f05defa4a9c15 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: 2024-12-03 +date: 2024-12-05 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 ef14e3924099c..6524d0dad75f6 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: 2024-12-03 +date: 2024-12-05 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 90c38d173feca..d050dd18c6903 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: 2024-12-03 +date: 2024-12-05 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_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index 6a69407ce5f0a..3b412c2e35f2b 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: 2024-12-03 +date: 2024-12-05 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 ec4e3e5b92bf7..55239a0925ac7 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: 2024-12-03 +date: 2024-12-05 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 1a262c962c2c3..a09e61f0614d9 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: 2024-12-03 +date: 2024-12-05 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 a7ee3280341a7..a23c8f2e760da 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: 2024-12-03 +date: 2024-12-05 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.devdocs.json b/api_docs/kbn_core_ui_settings_common.devdocs.json index 8c13ce99b607c..44c116985b70b 100644 --- a/api_docs/kbn_core_ui_settings_common.devdocs.json +++ b/api_docs/kbn_core_ui_settings_common.devdocs.json @@ -608,10 +608,6 @@ "plugin": "discover", "path": "src/plugins/discover/server/ui_settings.ts" }, - { - "plugin": "discover", - "path": "src/plugins/discover/server/ui_settings.ts" - }, { "plugin": "@kbn/management-settings-field-definition", "path": "packages/kbn-management/settings/field_definition/get_definition.ts" diff --git a/api_docs/kbn_core_ui_settings_common.mdx b/api_docs/kbn_core_ui_settings_common.mdx index 37d3a023d3fc3..f07c8635c04a5 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: 2024-12-03 +date: 2024-12-05 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 5ca0c3bf77fee..33c63a5136f77 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: 2024-12-03 +date: 2024-12-05 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 4cad5e0861586..e79c1e5558596 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: 2024-12-03 +date: 2024-12-05 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 d103bb0c7d6fd..1829385b680e2 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: 2024-12-03 +date: 2024-12-05 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 fdfe693586930..bfb317da8da3f 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: 2024-12-03 +date: 2024-12-05 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 cb8a524ee13c5..e77142009e897 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: 2024-12-03 +date: 2024-12-05 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 0d4fae499ec4e..7d34f39d430d3 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: 2024-12-03 +date: 2024-12-05 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 c1fcd5b094ccc..74273043edcf8 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: 2024-12-03 +date: 2024-12-05 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 bef6c0ea9803e..cdcf484a5773a 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: 2024-12-03 +date: 2024-12-05 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 4d890925ee072..f711c7728abba 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: 2024-12-03 +date: 2024-12-05 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 b39634e1c9b6a..5771840dd7fdc 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: 2024-12-03 +date: 2024-12-05 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 2c02b4fa2e39f..1b3748d7e396c 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: 2024-12-03 +date: 2024-12-05 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 198f309fb2a69..d537c7cc88adc 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: 2024-12-03 +date: 2024-12-05 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 c3fc8a4dca169..a3803242e9fcc 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: 2024-12-03 +date: 2024-12-05 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 7c4f2b3a3f3d0..3a80ee49393c9 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: 2024-12-03 +date: 2024-12-05 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 a33bf4c57ffed..bf6260a407bee 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: 2024-12-03 +date: 2024-12-05 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 3cb164f04dcb3..8434d24e33989 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: 2024-12-03 +date: 2024-12-05 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 d1979d3093040..66ed4410036aa 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: 2024-12-03 +date: 2024-12-05 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 af91c339c9053..751e134214d1a 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: 2024-12-03 +date: 2024-12-05 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 8655a577dea72..5edbcb21820aa 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: 2024-12-03 +date: 2024-12-05 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 3f621be4e2203..5c58ff51d786a 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: 2024-12-03 +date: 2024-12-05 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 2a3339618636f..7c9548979c262 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: 2024-12-03 +date: 2024-12-05 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 6551b2268ad04..db6539f65359b 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: 2024-12-03 +date: 2024-12-05 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 ebb7346d96d6d..a70a5c5713dd5 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: 2024-12-03 +date: 2024-12-05 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 79a9c2dbb7b0d..fff86f338f532 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: 2024-12-03 +date: 2024-12-05 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 1455bf677aff7..0a262e45d7b90 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: 2024-12-03 +date: 2024-12-05 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 b65be683d9a4c..d9efc3af68e78 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: 2024-12-03 +date: 2024-12-05 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 54539c3301c12..eb0611c880bc2 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: 2024-12-03 +date: 2024-12-05 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 d3b9bb051e83e..fa840d7e95990 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-fleet'] --- import kbnDeeplinksFleetObj from './kbn_deeplinks_fleet.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.devdocs.json b/api_docs/kbn_deeplinks_management.devdocs.json index 8279acbff8269..379adac0327dc 100644 --- a/api_docs/kbn_deeplinks_management.devdocs.json +++ b/api_docs/kbn_deeplinks_management.devdocs.json @@ -45,7 +45,7 @@ "label": "DeepLinkId", "description": [], "signature": [ - "\"fleet\" | \"monitoring\" | \"management\" | \"integrations\" | \"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: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:pipelines\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\"" + "\"fleet\" | \"monitoring\" | \"management\" | \"integrations\" | \"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\"" ], "path": "packages/deeplinks/management/deep_links.ts", "deprecated": false, @@ -60,7 +60,7 @@ "label": "LinkId", "description": [], "signature": [ - "\"transform\" | \"watcher\" | \"cases\" | \"tags\" | \"maintenanceWindows\" | \"cross_cluster_replication\" | \"dataViews\" | \"spaces\" | \"settings\" | \"users\" | \"migrate_data\" | \"search_sessions\" | \"data_quality\" | \"filesManagement\" | \"roles\" | \"reporting\" | \"aiAssistantManagementSelection\" | \"securityAiAssistantManagement\" | \"observabilityAiAssistantManagement\" | \"api_keys\" | \"license_management\" | \"index_lifecycle_management\" | \"index_management\" | \"ingest_pipelines\" | \"jobsListLink\" | \"objects\" | \"pipelines\" | \"remote_clusters\" | \"role_mappings\" | \"rollup_jobs\" | \"snapshot_restore\" | \"triggersActions\" | \"triggersActionsConnectors\" | \"upgrade_assistant\"" + "\"transform\" | \"watcher\" | \"cases\" | \"tags\" | \"maintenanceWindows\" | \"cross_cluster_replication\" | \"dataViews\" | \"spaces\" | \"settings\" | \"users\" | \"migrate_data\" | \"search_sessions\" | \"data_quality\" | \"filesManagement\" | \"pipelines\" | \"roles\" | \"reporting\" | \"aiAssistantManagementSelection\" | \"securityAiAssistantManagement\" | \"observabilityAiAssistantManagement\" | \"api_keys\" | \"license_management\" | \"index_lifecycle_management\" | \"index_management\" | \"ingest_pipelines\" | \"jobsListLink\" | \"objects\" | \"remote_clusters\" | \"role_mappings\" | \"rollup_jobs\" | \"snapshot_restore\" | \"triggersActions\" | \"triggersActionsConnectors\" | \"upgrade_assistant\"" ], "path": "packages/deeplinks/management/deep_links.ts", "deprecated": false, diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index 7ae3d99853bde..eed1cf6cf5816 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: 2024-12-03 +date: 2024-12-05 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 a6b5fa3abb5b7..f76c4832b8bdd 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: 2024-12-03 +date: 2024-12-05 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 af6d377e013d9..86d8cb02fb077 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-observability'] --- import kbnDeeplinksObservabilityObj from './kbn_deeplinks_observability.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_search.mdx b/api_docs/kbn_deeplinks_search.mdx index 1a2a2cd9ef0ce..0c5aa89e27bac 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: 2024-12-03 +date: 2024-12-05 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 c54c298706262..0afa887c2cfa2 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: 2024-12-03 +date: 2024-12-05 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 1539a457301ec..d310a678a3511 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: 2024-12-03 +date: 2024-12-05 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 a504eacb588bf..fb757ed168867 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: 2024-12-03 +date: 2024-12-05 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 d3b5f84e66789..3b66a3d944e06 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: 2024-12-03 +date: 2024-12-05 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 c3a20a08c0dd5..a1fef9959cf2a 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: 2024-12-03 +date: 2024-12-05 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 f24a7c9a93bf8..246e0bd5e365e 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: 2024-12-03 +date: 2024-12-05 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 54aa8ae5d2c5c..16fe3b1ab4428 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: 2024-12-03 +date: 2024-12-05 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 3883f9059ea02..715be8b8e72a6 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: 2024-12-03 +date: 2024-12-05 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 2701e447f13f2..04a4817f24048 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: 2024-12-03 +date: 2024-12-05 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 c20cd17c10d5d..b628230f9ab44 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: 2024-12-03 +date: 2024-12-05 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 399c8f63e9e85..dd540f89dd994 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: 2024-12-03 +date: 2024-12-05 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.devdocs.json b/api_docs/kbn_discover_utils.devdocs.json index 3d5f8e6ae0a3b..e16d23d1e7c14 100644 --- a/api_docs/kbn_discover_utils.devdocs.json +++ b/api_docs/kbn_discover_utils.devdocs.json @@ -285,7 +285,7 @@ "tags": [], "label": "buildDataTableRecord", "description": [ - "\nBuild a record for data table, explorer + classic one" + "\nBuild a record for data grid" ], "signature": [ "(doc: ", @@ -2069,76 +2069,6 @@ "returnComment": [], "initialIsOpen": false }, - { - "parentPluginId": "@kbn/discover-utils", - "id": "def-common.isLegacyTableEnabled", - "type": "Function", - "tags": [], - "label": "isLegacyTableEnabled", - "description": [], - "signature": [ - "({\n uiSettings,\n isEsqlMode,\n}: { uiSettings: ", - { - "pluginId": "@kbn/core-ui-settings-browser", - "scope": "public", - "docId": "kibKbnCoreUiSettingsBrowserPluginApi", - "section": "def-public.IUiSettingsClient", - "text": "IUiSettingsClient" - }, - "; isEsqlMode: boolean; }) => boolean" - ], - "path": "packages/kbn-discover-utils/src/utils/is_legacy_table_enabled.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/discover-utils", - "id": "def-common.isLegacyTableEnabled.$1", - "type": "Object", - "tags": [], - "label": "{\n uiSettings,\n isEsqlMode,\n}", - "description": [], - "path": "packages/kbn-discover-utils/src/utils/is_legacy_table_enabled.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/discover-utils", - "id": "def-common.isLegacyTableEnabled.$1.uiSettings", - "type": "Object", - "tags": [], - "label": "uiSettings", - "description": [], - "signature": [ - { - "pluginId": "@kbn/core-ui-settings-browser", - "scope": "public", - "docId": "kibKbnCoreUiSettingsBrowserPluginApi", - "section": "def-public.IUiSettingsClient", - "text": "IUiSettingsClient" - } - ], - "path": "packages/kbn-discover-utils/src/utils/is_legacy_table_enabled.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/discover-utils", - "id": "def-common.isLegacyTableEnabled.$1.isEsqlMode", - "type": "boolean", - "tags": [], - "label": "isEsqlMode", - "description": [], - "path": "packages/kbn-discover-utils/src/utils/is_legacy_table_enabled.ts", - "deprecated": false, - "trackAdoption": false - } - ] - } - ], - "returnComment": [], - "initialIsOpen": false - }, { "parentPluginId": "@kbn/discover-utils", "id": "def-common.isNestedFieldParent", @@ -4703,21 +4633,6 @@ "trackAdoption": false, "initialIsOpen": false }, - { - "parentPluginId": "@kbn/discover-utils", - "id": "def-common.DOC_TABLE_LEGACY", - "type": "string", - "tags": [], - "label": "DOC_TABLE_LEGACY", - "description": [], - "signature": [ - "\"doc_table:legacy\"" - ], - "path": "packages/kbn-discover-utils/src/constants.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, { "parentPluginId": "@kbn/discover-utils", "id": "def-common.ERROR_EXCEPTION_STACKTRACE", @@ -5342,36 +5257,6 @@ "deprecated": false, "trackAdoption": false, "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/discover-utils", - "id": "def-common.TRUNCATE_MAX_HEIGHT", - "type": "string", - "tags": [], - "label": "TRUNCATE_MAX_HEIGHT", - "description": [], - "signature": [ - "\"truncate:maxHeight\"" - ], - "path": "packages/kbn-discover-utils/src/constants.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/discover-utils", - "id": "def-common.TRUNCATE_MAX_HEIGHT_DEFAULT_VALUE", - "type": "number", - "tags": [], - "label": "TRUNCATE_MAX_HEIGHT_DEFAULT_VALUE", - "description": [], - "signature": [ - "115" - ], - "path": "packages/kbn-discover-utils/src/constants.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false } ], "objects": [ diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx index 575c61a63f7bc..832e2bd9dd49e 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils'] --- import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 284 | 0 | 234 | 4 | +| 277 | 0 | 227 | 4 | ## Common diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index 35e2126df6ab7..a336c7d7355f4 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: 2024-12-03 +date: 2024-12-05 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 c986a79cd2119..ed2d5bbe7b9d2 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: 2024-12-03 +date: 2024-12-05 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 b8416c3ddc464..c542c802d674c 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: 2024-12-03 +date: 2024-12-05 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 1c566e0da9228..c00fa59b7a85c 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: 2024-12-03 +date: 2024-12-05 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 db839b71d28b8..25d1c1927ad9d 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: 2024-12-03 +date: 2024-12-05 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 f9337eea4a0ef..1bb3be1d94a6d 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: 2024-12-03 +date: 2024-12-05 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 96a0ddcc59cf9..80756ca060356 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: 2024-12-03 +date: 2024-12-05 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 7d8c4aca6ae58..dcbda49d0549b 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: 2024-12-03 +date: 2024-12-05 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 44f3602c6853b..87e334ffee10d 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: 2024-12-03 +date: 2024-12-05 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 a5b21a5246807..06c36e7e3a0d7 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: 2024-12-03 +date: 2024-12-05 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 08056225d1035..f68c178f31a6a 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: 2024-12-03 +date: 2024-12-05 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 103cdb4662ab2..0a3bb4f9da1bc 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: 2024-12-03 +date: 2024-12-05 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 0a2ccb86bd955..f6eb9a88e57d7 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: 2024-12-03 +date: 2024-12-05 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 91d3926517788..a78417d27f38b 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: 2024-12-03 +date: 2024-12-05 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 7d28e5b2815ff..117463c4c3437 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: 2024-12-03 +date: 2024-12-05 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.devdocs.json b/api_docs/kbn_esql_ast.devdocs.json index bf0442c6badd7..3a850ab7e31f6 100644 --- a/api_docs/kbn_esql_ast.devdocs.json +++ b/api_docs/kbn_esql_ast.devdocs.json @@ -1001,6 +1001,28 @@ "deprecated": false, "trackAdoption": false, "isRequired": true + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.EsqlQuery.Unnamed.$4", + "type": "Array", + "tags": [], + "label": "errors", + "description": [], + "signature": [ + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.EditorError", + "text": "EditorError" + }, + "[]" + ], + "path": "packages/kbn-esql-ast/src/query/query.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true } ], "returnComment": [] @@ -14434,6 +14456,22 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.ESQLCommand.commandType", + "type": "string", + "tags": [], + "label": "commandType", + "description": [ + "\nThe subtype of the command. For example, the `JOIN` command can be: (1)\nLOOKUP JOIN, (2) LEFT JOIN, (3) RIGHT JOIN." + ], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-esql-ast/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/esql-ast", "id": "def-common.ESQLCommand.args", diff --git a/api_docs/kbn_esql_ast.mdx b/api_docs/kbn_esql_ast.mdx index 4a5f0a3e7bec0..3dc114d5d9bbe 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-ast'] --- import kbnEsqlAstObj from './kbn_esql_ast.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 283 | 1 | 222 | 36 | +| 285 | 1 | 223 | 36 | ## Common diff --git a/api_docs/kbn_esql_editor.mdx b/api_docs/kbn_esql_editor.mdx index e248e4ea11ebb..98f677db84a6f 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: 2024-12-03 +date: 2024-12-05 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 b0514fa934b3f..3b81e50c906a7 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: 2024-12-03 +date: 2024-12-05 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 88c2ac9e48182..64da979683dab 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: 2024-12-03 +date: 2024-12-05 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 87e1d520171bc..2abeaca9ad9bb 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: 2024-12-03 +date: 2024-12-05 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 c19339435c2a2..a2051c6e8dbaf 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: 2024-12-03 +date: 2024-12-05 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 9000c27e42bba..08a91bd2c969b 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: 2024-12-03 +date: 2024-12-05 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 918a1fcb1ab0b..a9a414ef15111 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: 2024-12-03 +date: 2024-12-05 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 ffc55a9cb0d60..2d9af29fd67e3 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: 2024-12-03 +date: 2024-12-05 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 d735227da336a..edd29b5401904 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: 2024-12-03 +date: 2024-12-05 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 28d8b3a1038a2..862287ce98b76 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: 2024-12-03 +date: 2024-12-05 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 dc63d68701864..614beb41db6a4 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: 2024-12-03 +date: 2024-12-05 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 0265a519eb55a..b07c5ad9f2edb 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: 2024-12-03 +date: 2024-12-05 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.devdocs.json b/api_docs/kbn_gen_ai_functional_testing.devdocs.json new file mode 100644 index 0000000000000..af7da09a371a7 --- /dev/null +++ b/api_docs/kbn_gen_ai_functional_testing.devdocs.json @@ -0,0 +1,205 @@ +{ + "id": "@kbn/gen-ai-functional-testing", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [ + { + "parentPluginId": "@kbn/gen-ai-functional-testing", + "id": "def-common.getAvailableConnectors", + "type": "Function", + "tags": [], + "label": "getAvailableConnectors", + "description": [], + "signature": [ + "() => ", + { + "pluginId": "@kbn/gen-ai-functional-testing", + "scope": "common", + "docId": "kibKbnGenAiFunctionalTestingPluginApi", + "section": "def-common.AvailableConnectorWithId", + "text": "AvailableConnectorWithId" + }, + "[]" + ], + "path": "packages/kbn-gen-ai-functional-testing/src/connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/gen-ai-functional-testing", + "id": "def-common.getPreconfiguredConnectorConfig", + "type": "Function", + "tags": [], + "label": "getPreconfiguredConnectorConfig", + "description": [ + "\nRetrieve the list of preconfigured connectors that should be used when defining the\nFTR configuration of suites using the connectors.\n" + ], + "signature": [ + "() => Record" + ], + "path": "packages/kbn-gen-ai-functional-testing/src/connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [ + { + "parentPluginId": "@kbn/gen-ai-functional-testing", + "id": "def-common.AvailableConnector", + "type": "Interface", + "tags": [], + "label": "AvailableConnector", + "description": [], + "path": "packages/kbn-gen-ai-functional-testing/src/connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/gen-ai-functional-testing", + "id": "def-common.AvailableConnector.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "packages/kbn-gen-ai-functional-testing/src/connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/gen-ai-functional-testing", + "id": "def-common.AvailableConnector.actionTypeId", + "type": "string", + "tags": [], + "label": "actionTypeId", + "description": [], + "path": "packages/kbn-gen-ai-functional-testing/src/connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/gen-ai-functional-testing", + "id": "def-common.AvailableConnector.config", + "type": "Object", + "tags": [], + "label": "config", + "description": [], + "signature": [ + "{ [x: string]: unknown; }" + ], + "path": "packages/kbn-gen-ai-functional-testing/src/connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/gen-ai-functional-testing", + "id": "def-common.AvailableConnector.secrets", + "type": "Object", + "tags": [], + "label": "secrets", + "description": [], + "signature": [ + "{ [x: string]: unknown; }" + ], + "path": "packages/kbn-gen-ai-functional-testing/src/connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/gen-ai-functional-testing", + "id": "def-common.AvailableConnectorWithId", + "type": "Interface", + "tags": [], + "label": "AvailableConnectorWithId", + "description": [], + "signature": [ + { + "pluginId": "@kbn/gen-ai-functional-testing", + "scope": "common", + "docId": "kibKbnGenAiFunctionalTestingPluginApi", + "section": "def-common.AvailableConnectorWithId", + "text": "AvailableConnectorWithId" + }, + " extends ", + { + "pluginId": "@kbn/gen-ai-functional-testing", + "scope": "common", + "docId": "kibKbnGenAiFunctionalTestingPluginApi", + "section": "def-common.AvailableConnector", + "text": "AvailableConnector" + } + ], + "path": "packages/kbn-gen-ai-functional-testing/src/connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/gen-ai-functional-testing", + "id": "def-common.AvailableConnectorWithId.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "path": "packages/kbn-gen-ai-functional-testing/src/connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "enums": [], + "misc": [ + { + "parentPluginId": "@kbn/gen-ai-functional-testing", + "id": "def-common.AI_CONNECTORS_VAR_ENV", + "type": "string", + "tags": [], + "label": "AI_CONNECTORS_VAR_ENV", + "description": [ + "\nThe environment variable that is used by the CI to load the connectors configuration" + ], + "signature": [ + "\"KIBANA_TESTING_AI_CONNECTORS\"" + ], + "path": "packages/kbn-gen-ai-functional-testing/src/connectors.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_gen_ai_functional_testing.mdx b/api_docs/kbn_gen_ai_functional_testing.mdx new file mode 100644 index 0000000000000..408ba16a232ed --- /dev/null +++ b/api_docs/kbn_gen_ai_functional_testing.mdx @@ -0,0 +1,36 @@ +--- +#### +#### 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: kibKbnGenAiFunctionalTestingPluginApi +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: 2024-12-05 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/gen-ai-functional-testing'] +--- +import kbnGenAiFunctionalTestingObj from './kbn_gen_ai_functional_testing.devdocs.json'; + + + +Contact [@elastic/appex-ai-infra](https://github.com/orgs/elastic/teams/appex-ai-infra) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 10 | 0 | 8 | 0 | + +## Common + +### Functions + + +### Interfaces + + +### Consts, variables and types + + diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index 257c25cd2d4a3..18972f01cb745 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: 2024-12-03 +date: 2024-12-05 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 c5dc8ad3d6c02..d8f624eb028bc 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: 2024-12-03 +date: 2024-12-05 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 a607f6fda20b6..574b2ac6320fc 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: 2024-12-03 +date: 2024-12-05 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 3b5b2d38d288d..51592ebbbbfbc 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: 2024-12-03 +date: 2024-12-05 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 0afb988a87149..c55abd4f399af 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: 2024-12-03 +date: 2024-12-05 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 07ab2aac3453d..cb2167a5e2c8f 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: 2024-12-03 +date: 2024-12-05 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 b0f23a50a30b6..9335d3b1dfd3c 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: 2024-12-03 +date: 2024-12-05 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 47a3a083c8eff..8fbc998187d48 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: 2024-12-03 +date: 2024-12-05 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 1960482ce1873..74d54eb01052f 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: 2024-12-03 +date: 2024-12-05 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 6f993df67f97b..5e53efa31efb2 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: 2024-12-03 +date: 2024-12-05 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 85a33135ef8af..4eb5e1615f19c 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: 2024-12-03 +date: 2024-12-05 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 7e04c4bc64410..c77e95de4cf00 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: 2024-12-03 +date: 2024-12-05 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 3a1018ad2270e..a6c639049514d 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: 2024-12-03 +date: 2024-12-05 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 6ef15ebfbb5d6..d74ee2e04c1cb 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: 2024-12-03 +date: 2024-12-05 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 d879aa0fd368d..608ed7e6fae0c 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: 2024-12-03 +date: 2024-12-05 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 f1dde434829d9..1e83e617cefc0 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: 2024-12-03 +date: 2024-12-05 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 245bfbb2b8883..741fb28236fec 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: 2024-12-03 +date: 2024-12-05 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 94da9c77efb54..8fea2dcf8433f 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference-common'] --- import kbnInferenceCommonObj from './kbn_inference_common.devdocs.json'; diff --git a/api_docs/kbn_inference_integration_flyout.mdx b/api_docs/kbn_inference_integration_flyout.mdx index afbe1bbccd177..f54206eb31cdd 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: 2024-12-03 +date: 2024-12-05 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 37563b02dbf1c..fa0333569364a 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: 2024-12-03 +date: 2024-12-05 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 a1cf8e0625a76..1d1336e746dcc 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: 2024-12-03 +date: 2024-12-05 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 e15da2052ee4f..4d5858c688a5b 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: 2024-12-03 +date: 2024-12-05 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 7b4d6cb76c62c..93b98e6f037cf 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: 2024-12-03 +date: 2024-12-05 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 db11da137ee74..b1ff1a9a64209 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: 2024-12-03 +date: 2024-12-05 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 2271ae79bfd84..b40672091ca60 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: 2024-12-03 +date: 2024-12-05 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 313c3d90e615c..83de93d67d40d 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: 2024-12-03 +date: 2024-12-05 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 cb52b76f3e656..f45e580d9e8c8 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: 2024-12-03 +date: 2024-12-05 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 0bc116461cd9f..e298af26ffe87 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: 2024-12-03 +date: 2024-12-05 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 76f1da98e7202..40672c6fca2e2 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: 2024-12-03 +date: 2024-12-05 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 5b12795dee994..80f91463cb1ed 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: 2024-12-03 +date: 2024-12-05 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 b73082cc05537..c23569c5d0f07 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: 2024-12-03 +date: 2024-12-05 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 4b939509b4c1b..e2bcd3824e403 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: 2024-12-03 +date: 2024-12-05 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 7112c1008157e..eac1fb96d8855 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: 2024-12-03 +date: 2024-12-05 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 8fb3be8864c78..01ad495fe83ef 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: 2024-12-03 +date: 2024-12-05 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 837ac4721ebce..29ce476c33b4b 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: 2024-12-03 +date: 2024-12-05 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 dde5ec6d1a50e..210f36e7874d7 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: 2024-12-03 +date: 2024-12-05 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 55eea305678c4..c68b643a6b519 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: 2024-12-03 +date: 2024-12-05 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.devdocs.json b/api_docs/kbn_management_cards_navigation.devdocs.json index 09bcfb00d4e2d..761cfc57d721c 100644 --- a/api_docs/kbn_management_cards_navigation.devdocs.json +++ b/api_docs/kbn_management_cards_navigation.devdocs.json @@ -145,7 +145,7 @@ "label": "hideLinksTo", "description": [], "signature": [ - "(\"transform\" | \"tags\" | \"maintenanceWindows\" | \"dataViews\" | \"spaces\" | \"settings\" | \"data_quality\" | \"data_usage\" | \"filesManagement\" | \"roles\" | \"reporting\" | \"api_keys\" | \"index_management\" | \"ingest_pipelines\" | \"jobsListLink\" | \"objects\" | \"pipelines\" | \"triggersActions\" | \"triggersActionsConnectors\")[] | undefined" + "(\"transform\" | \"tags\" | \"maintenanceWindows\" | \"dataViews\" | \"spaces\" | \"settings\" | \"data_quality\" | \"data_usage\" | \"filesManagement\" | \"pipelines\" | \"roles\" | \"reporting\" | \"api_keys\" | \"index_management\" | \"ingest_pipelines\" | \"jobsListLink\" | \"objects\" | \"triggersActions\" | \"triggersActionsConnectors\")[] | undefined" ], "path": "packages/kbn-management/cards_navigation/src/types.ts", "deprecated": false, @@ -202,7 +202,7 @@ "label": "AppId", "description": [], "signature": [ - "\"transform\" | \"tags\" | \"maintenanceWindows\" | \"dataViews\" | \"spaces\" | \"settings\" | \"data_quality\" | \"data_usage\" | \"filesManagement\" | \"roles\" | \"reporting\" | \"api_keys\" | \"index_management\" | \"ingest_pipelines\" | \"jobsListLink\" | \"objects\" | \"pipelines\" | \"triggersActions\" | \"triggersActionsConnectors\"" + "\"transform\" | \"tags\" | \"maintenanceWindows\" | \"dataViews\" | \"spaces\" | \"settings\" | \"data_quality\" | \"data_usage\" | \"filesManagement\" | \"pipelines\" | \"roles\" | \"reporting\" | \"api_keys\" | \"index_management\" | \"ingest_pipelines\" | \"jobsListLink\" | \"objects\" | \"triggersActions\" | \"triggersActionsConnectors\"" ], "path": "packages/kbn-management/cards_navigation/src/types.ts", "deprecated": false, diff --git a/api_docs/kbn_management_cards_navigation.mdx b/api_docs/kbn_management_cards_navigation.mdx index 2db4f527e160e..0e12559aa6b2f 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: 2024-12-03 +date: 2024-12-05 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 5479db788c684..1397355486a34 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: 2024-12-03 +date: 2024-12-05 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 dc68e598b6d5e..d1227bf640b28 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: 2024-12-03 +date: 2024-12-05 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 a1cb7fde56bb7..6f07b3f85b9fc 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: 2024-12-03 +date: 2024-12-05 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 903896f47ab4a..709af981d90b5 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: 2024-12-03 +date: 2024-12-05 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 23f6c111f9358..537ac2789f12d 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: 2024-12-03 +date: 2024-12-05 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 775a385a0c4fb..e0f15b7a14a07 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-field-definition'] --- import kbnManagementSettingsFieldDefinitionObj from './kbn_management_settings_field_definition.devdocs.json'; diff --git a/api_docs/kbn_management_settings_ids.devdocs.json b/api_docs/kbn_management_settings_ids.devdocs.json index f46ff2faa9694..5e248ad3ff958 100644 --- a/api_docs/kbn_management_settings_ids.devdocs.json +++ b/api_docs/kbn_management_settings_ids.devdocs.json @@ -592,21 +592,6 @@ "trackAdoption": false, "initialIsOpen": false }, - { - "parentPluginId": "@kbn/management-settings-ids", - "id": "def-common.DOC_TABLE_LEGACY_ID", - "type": "string", - "tags": [], - "label": "DOC_TABLE_LEGACY_ID", - "description": [], - "signature": [ - "\"doc_table:legacy\"" - ], - "path": "packages/kbn-management/settings/setting_ids/index.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, { "parentPluginId": "@kbn/management-settings-ids", "id": "def-common.ENABLE_ESQL_ID", @@ -2004,21 +1989,6 @@ "trackAdoption": false, "initialIsOpen": false }, - { - "parentPluginId": "@kbn/management-settings-ids", - "id": "def-common.TRUNCATE_MAX_HEIGHT_ID", - "type": "string", - "tags": [], - "label": "TRUNCATE_MAX_HEIGHT_ID", - "description": [], - "signature": [ - "\"truncate:maxHeight\"" - ], - "path": "packages/kbn-management/settings/setting_ids/index.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, { "parentPluginId": "@kbn/management-settings-ids", "id": "def-common.VISUALIZATION_COLOR_MAPPING_ID", diff --git a/api_docs/kbn_management_settings_ids.mdx b/api_docs/kbn_management_settings_ids.mdx index 68f7d07837e9a..a1517ceda355b 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-ids'] --- import kbnManagementSettingsIdsObj from './kbn_management_settings_ids.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 140 | 0 | 139 | 0 | +| 138 | 0 | 137 | 0 | ## Common diff --git a/api_docs/kbn_management_settings_section_registry.mdx b/api_docs/kbn_management_settings_section_registry.mdx index 302b3f5520e86..7b1132020715e 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: 2024-12-03 +date: 2024-12-05 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 be056860418a8..d6a59dfc0e5fc 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: 2024-12-03 +date: 2024-12-05 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 a0dd4ed2bfaca..f371c43a002c1 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: 2024-12-03 +date: 2024-12-05 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 58f02befefd12..b81bff14d9060 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: 2024-12-03 +date: 2024-12-05 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 b4c1a7d344d99..ac85da019b97a 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: 2024-12-03 +date: 2024-12-05 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 417cef0255309..62a82581c0345 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: 2024-12-03 +date: 2024-12-05 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 aa7a2b00efa36..edcbbba797d26 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: 2024-12-03 +date: 2024-12-05 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 c798d2a14dbf1..492bace27e304 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: 2024-12-03 +date: 2024-12-05 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 5c04c5bf3c7e8..23ddc848ffcff 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: 2024-12-03 +date: 2024-12-05 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 bccf9871bb700..c867ea0c8370c 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: 2024-12-03 +date: 2024-12-05 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 7049fb1c993cb..b12336ef55a6b 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: 2024-12-03 +date: 2024-12-05 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 c7a672f0a9bf8..0d5b6e09e5fc8 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: 2024-12-03 +date: 2024-12-05 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 a510a28e70f18..8df28c43af3cf 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: 2024-12-03 +date: 2024-12-05 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 328d8ab43cad0..9e18b7177161c 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: 2024-12-03 +date: 2024-12-05 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 20ed3d344ff0c..ad86bbf3c2559 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: 2024-12-03 +date: 2024-12-05 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 2ccc1a8d0ca3e..3d0abf5f4b708 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: 2024-12-03 +date: 2024-12-05 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 0f14619eea8d5..d9e898c21aec7 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: 2024-12-03 +date: 2024-12-05 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 7ca2933d42708..1cf3cb5fab097 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: 2024-12-03 +date: 2024-12-05 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 fca65dac63dcc..a528653c4b40f 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: 2024-12-03 +date: 2024-12-05 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 67d0e11795de5..d7954e63c4ddd 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: 2024-12-03 +date: 2024-12-05 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 eb3713848a0b7..0e4cb2194bcf5 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: 2024-12-03 +date: 2024-12-05 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 0432c75446ce3..4e9a5aba92786 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: 2024-12-03 +date: 2024-12-05 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 0c03b4334e57e..78da0cb7c0339 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: 2024-12-03 +date: 2024-12-05 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 383213651c64b..e02ec4051f518 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: 2024-12-03 +date: 2024-12-05 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 4e51d1d0009d9..c8fd3d29090a7 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: 2024-12-03 +date: 2024-12-05 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 79776bb90c849..b58eeacbf3e6d 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: 2024-12-03 +date: 2024-12-05 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 f70ee2016d1f5..7d1fcc26425af 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: 2024-12-03 +date: 2024-12-05 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 41c0612f70e10..2c2627b325f36 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: 2024-12-03 +date: 2024-12-05 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 a77f77c57730e..4c26e21e0ee7c 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: 2024-12-03 +date: 2024-12-05 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 96cac2b534741..9ff6f48174d9c 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: 2024-12-03 +date: 2024-12-05 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 645d4beed457c..6b2eb5ad119f1 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: 2024-12-03 +date: 2024-12-05 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 fbc302a9d09dd..4c0a167702c2d 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-time-buckets'] --- import kbnMlTimeBucketsObj from './kbn_ml_time_buckets.devdocs.json'; diff --git a/api_docs/kbn_ml_trained_models_utils.devdocs.json b/api_docs/kbn_ml_trained_models_utils.devdocs.json index f3065fd30c25c..e3c63f83892f7 100644 --- a/api_docs/kbn_ml_trained_models_utils.devdocs.json +++ b/api_docs/kbn_ml_trained_models_utils.devdocs.json @@ -522,7 +522,8 @@ "label": "InferenceAPIConfigResponse", "description": [], "signature": [ - "{ inference_id: string; task_type: \"sparse_embedding\" | \"text_embedding\"; task_settings: { model?: string | undefined; }; } & ", + "InferenceInferenceEndpointInfo", + " & ", "InferenceServiceSettings" ], "path": "x-pack/packages/ml/trained_models_utils/src/constants/trained_models.ts", @@ -650,7 +651,7 @@ "label": "TrainedModelType", "description": [], "signature": [ - "\"tree_ensemble\" | \"lang_ident\" | \"pytorch\"" + "\"pytorch\" | \"tree_ensemble\" | \"lang_ident\"" ], "path": "x-pack/packages/ml/trained_models_utils/src/constants/trained_models.ts", "deprecated": false, diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index 817cc7be8687c..c31fd63e7703f 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: 2024-12-03 +date: 2024-12-05 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 0eeb89193d1b0..31deb90048027 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: 2024-12-03 +date: 2024-12-05 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 dee866819cc94..b53472793003b 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: 2024-12-03 +date: 2024-12-05 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 89da130184b69..ad55ccd0b8a1a 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: 2024-12-03 +date: 2024-12-05 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 61bab08535a8f..bb6286ad771ca 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: 2024-12-03 +date: 2024-12-05 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 ed9d2f96307ed..8a8bc6fac69f3 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: 2024-12-03 +date: 2024-12-05 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 c9172a194bb92..174f331a19a3f 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: 2024-12-03 +date: 2024-12-05 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 bcf44cf3f807a..957da727cba47 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: 2024-12-03 +date: 2024-12-05 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.devdocs.json b/api_docs/kbn_observability_alert_details.devdocs.json index 3c81625eeaff7..b1c6297dead23 100644 --- a/api_docs/kbn_observability_alert_details.devdocs.json +++ b/api_docs/kbn_observability_alert_details.devdocs.json @@ -159,7 +159,7 @@ "label": "useAlertsHistory", "description": [], "signature": [ - "({\n featureIds,\n ruleId,\n dateRange,\n http,\n instanceId,\n}: ", + "({\n ruleTypeIds,\n consumers,\n ruleId,\n dateRange,\n http,\n instanceId,\n}: ", "Props", ") => ", "UseAlertsHistory" @@ -173,7 +173,7 @@ "id": "def-common.useAlertsHistory.$1", "type": "Object", "tags": [], - "label": "{\n featureIds,\n ruleId,\n dateRange,\n http,\n instanceId,\n}", + "label": "{\n ruleTypeIds,\n consumers,\n ruleId,\n dateRange,\n http,\n instanceId,\n}", "description": [], "signature": [ "Props" diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx index 78a482ad69844..e86c08a9c2caa 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: 2024-12-03 +date: 2024-12-05 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 d50cc46632056..fea47baeb6880 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: 2024-12-03 +date: 2024-12-05 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 ad1f805afb938..32e0165f932eb 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: 2024-12-03 +date: 2024-12-05 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 0f54b2e88fe49..a55eb6a2fa253 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: 2024-12-03 +date: 2024-12-05 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 736523bbd1b83..2bb54a2dccf67 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: 2024-12-03 +date: 2024-12-05 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 af1fe17052224..6c9fe9e705352 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: 2024-12-03 +date: 2024-12-05 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 f1bbdfac697b8..93e21b43bd6ce 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: 2024-12-03 +date: 2024-12-05 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 5626be167782e..55c1eeed3cfdf 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: 2024-12-03 +date: 2024-12-05 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 84b58776b775f..10ec9d427b92e 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: 2024-12-03 +date: 2024-12-05 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 959b2ad430261..ad63194371c64 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: 2024-12-03 +date: 2024-12-05 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 95aabcc3d4074..230a3fe62b3a4 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: 2024-12-03 +date: 2024-12-05 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_panel_loader.mdx b/api_docs/kbn_panel_loader.mdx index 37e99b6c8f23c..3ce840271de91 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: 2024-12-03 +date: 2024-12-05 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 01143124a8119..72e3da7872478 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: 2024-12-03 +date: 2024-12-05 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 a8529cd3e4b91..f90d77eec7cbb 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: 2024-12-03 +date: 2024-12-05 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 cd46b3b93b5a3..5998e3f932fc1 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: 2024-12-03 +date: 2024-12-05 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 d209418616b10..a6c31f6114c32 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: 2024-12-03 +date: 2024-12-05 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 45859f56729f0..ad615f5265036 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-containers'] --- import kbnPresentationContainersObj from './kbn_presentation_containers.devdocs.json'; diff --git a/api_docs/kbn_presentation_publishing.devdocs.json b/api_docs/kbn_presentation_publishing.devdocs.json index 46dd41e293a4c..f631ed6e70da3 100644 --- a/api_docs/kbn_presentation_publishing.devdocs.json +++ b/api_docs/kbn_presentation_publishing.devdocs.json @@ -7992,7 +7992,7 @@ "section": "def-public.PublishesFilters", "text": "PublishesFilters" }, - " & { isCompatibleWithUnifiedSearch?: (() => boolean) | undefined; query$: ", + " & { isCompatibleWithUnifiedSearch?: (() => boolean) | undefined; canEditUnifiedSearch?: (() => boolean) | undefined; query$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -8120,7 +8120,7 @@ "section": "def-public.PublishesFilters", "text": "PublishesFilters" }, - " & { isCompatibleWithUnifiedSearch?: (() => boolean) | undefined; query$: ", + " & { isCompatibleWithUnifiedSearch?: (() => boolean) | undefined; canEditUnifiedSearch?: (() => boolean) | undefined; query$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", diff --git a/api_docs/kbn_presentation_publishing.mdx b/api_docs/kbn_presentation_publishing.mdx index 55e3be661aca6..8bed87f5c802f 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: 2024-12-03 +date: 2024-12-05 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 1d145c2963921..418593a1d8087 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: 2024-12-03 +date: 2024-12-05 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 ff9efa88f98b0..9f116a29a743f 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: 2024-12-03 +date: 2024-12-05 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 32ba388ea4293..ef52f5664e5d6 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: 2024-12-03 +date: 2024-12-05 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 c19773b55d58c..ca703801378e0 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: 2024-12-03 +date: 2024-12-05 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 6e6c4e356054b..b3e283c5e3f64 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: 2024-12-03 +date: 2024-12-05 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 3499369aa5cc3..6091507c022d5 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: 2024-12-03 +date: 2024-12-05 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 42b1829b1a1fd..1446fedf9a793 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: 2024-12-03 +date: 2024-12-05 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 b87aca0b8cc8d..5a6091df5eddb 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: 2024-12-03 +date: 2024-12-05 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 caf56b307d1ce..2f7ff52dc7544 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: 2024-12-03 +date: 2024-12-05 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 9459e13934e85..e52f54db570ce 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: 2024-12-03 +date: 2024-12-05 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 a81f9b215954e..a463bc58ecc6b 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: 2024-12-03 +date: 2024-12-05 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 7aedab1a9b11d..ebb8a88be3839 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_recently_accessed.mdx b/api_docs/kbn_recently_accessed.mdx index 78d6597cdca31..9c8ff5d44ee45 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/recently-accessed'] --- import kbnRecentlyAccessedObj from './kbn_recently_accessed.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 9fed1ad6757a8..102cae640dc02 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: 2024-12-03 +date: 2024-12-05 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 b9f838f9b0769..e569773a34515 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: 2024-12-03 +date: 2024-12-05 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 e557cff63b8dd..d75b1e2ddfb81 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: 2024-12-03 +date: 2024-12-05 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 beb73cf75b9e5..4d8a4007410a9 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: 2024-12-03 +date: 2024-12-05 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 f093fe90c5b87..72382f1d90f2c 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: 2024-12-03 +date: 2024-12-05 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.devdocs.json b/api_docs/kbn_reporting_csv_share_panel.devdocs.json index ef9cac6807088..529dd32169094 100644 --- a/api_docs/kbn_reporting_csv_share_panel.devdocs.json +++ b/api_docs/kbn_reporting_csv_share_panel.devdocs.json @@ -86,7 +86,7 @@ "id": "def-public.ReportingCsvPanelAction.Unnamed.$1", "type": "Object", "tags": [], - "label": "{ core, csvConfig, apiClient, startServices$, usesUiCapabilities }", + "label": "{ core, apiClient, startServices$ }", "description": [], "signature": [ "Params" diff --git a/api_docs/kbn_reporting_csv_share_panel.mdx b/api_docs/kbn_reporting_csv_share_panel.mdx index 82e042aef1c85..d292282a22f73 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: 2024-12-03 +date: 2024-12-05 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.devdocs.json b/api_docs/kbn_reporting_export_types_csv.devdocs.json index 9e4bdaccb78ca..56748215d9395 100644 --- a/api_docs/kbn_reporting_export_types_csv.devdocs.json +++ b/api_docs/kbn_reporting_export_types_csv.devdocs.json @@ -168,7 +168,7 @@ "section": "def-server.CoreSetup", "text": "CoreSetup" }, - ", config: Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + ", config: Readonly<{ roles?: Readonly<{} & { enabled: boolean; allow: string[]; }> | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -176,7 +176,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, logger: ", + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, logger: ", { "pluginId": "@kbn/logging", "scope": "common", @@ -192,7 +192,7 @@ "section": "def-server.PluginInitializerContext", "text": "PluginInitializerContext" }, - "; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + " | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -200,7 +200,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>]" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>]" ], "path": "packages/kbn-reporting/export_types/csv/csv_searchsource.ts", "deprecated": false, @@ -565,7 +565,7 @@ "section": "def-server.CoreSetup", "text": "CoreSetup" }, - ", config: Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + ", config: Readonly<{ roles?: Readonly<{} & { enabled: boolean; allow: string[]; }> | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -573,7 +573,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, logger: ", + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, logger: ", { "pluginId": "@kbn/logging", "scope": "common", @@ -589,7 +589,7 @@ "section": "def-server.PluginInitializerContext", "text": "PluginInitializerContext" }, - "; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + " | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -597,7 +597,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>]" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>]" ], "path": "packages/kbn-reporting/export_types/csv/csv_v2.ts", "deprecated": false, diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx index 3f70bdb817dcb..dc38c6c3651fb 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: 2024-12-03 +date: 2024-12-05 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 3cc02580d869f..45bc0829b4beb 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: 2024-12-03 +date: 2024-12-05 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.devdocs.json b/api_docs/kbn_reporting_export_types_pdf.devdocs.json index f0fb7f203f946..a3f6183280b45 100644 --- a/api_docs/kbn_reporting_export_types_pdf.devdocs.json +++ b/api_docs/kbn_reporting_export_types_pdf.devdocs.json @@ -176,7 +176,7 @@ "section": "def-server.CoreSetup", "text": "CoreSetup" }, - ", config: Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + ", config: Readonly<{ roles?: Readonly<{} & { enabled: boolean; allow: string[]; }> | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -184,7 +184,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, logger: ", + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, logger: ", { "pluginId": "@kbn/logging", "scope": "common", @@ -200,7 +200,7 @@ "section": "def-server.PluginInitializerContext", "text": "PluginInitializerContext" }, - "; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + " | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -208,7 +208,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>]" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>]" ], "path": "packages/kbn-reporting/export_types/pdf/printable_pdf_v2.ts", "deprecated": false, @@ -597,7 +597,7 @@ "section": "def-server.CoreSetup", "text": "CoreSetup" }, - ", config: Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + ", config: Readonly<{ roles?: Readonly<{} & { enabled: boolean; allow: string[]; }> | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -605,7 +605,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, logger: ", + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, logger: ", { "pluginId": "@kbn/logging", "scope": "common", @@ -621,7 +621,7 @@ "section": "def-server.PluginInitializerContext", "text": "PluginInitializerContext" }, - "; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + " | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -629,7 +629,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>]" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>]" ], "path": "packages/kbn-reporting/export_types/pdf/printable_pdf.ts", "deprecated": false, diff --git a/api_docs/kbn_reporting_export_types_pdf.mdx b/api_docs/kbn_reporting_export_types_pdf.mdx index fc4a512b1afaa..d660d1b5a78d6 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: 2024-12-03 +date: 2024-12-05 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 ef46224ef48f1..610546d2d5c1b 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: 2024-12-03 +date: 2024-12-05 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.devdocs.json b/api_docs/kbn_reporting_export_types_png.devdocs.json index 99fb9ba2966b3..022be1c0e97c3 100644 --- a/api_docs/kbn_reporting_export_types_png.devdocs.json +++ b/api_docs/kbn_reporting_export_types_png.devdocs.json @@ -176,7 +176,7 @@ "section": "def-server.CoreSetup", "text": "CoreSetup" }, - ", config: Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + ", config: Readonly<{ roles?: Readonly<{} & { enabled: boolean; allow: string[]; }> | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -184,7 +184,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, logger: ", + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, logger: ", { "pluginId": "@kbn/logging", "scope": "common", @@ -200,7 +200,7 @@ "section": "def-server.PluginInitializerContext", "text": "PluginInitializerContext" }, - "; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + " | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -208,7 +208,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>]" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>]" ], "path": "packages/kbn-reporting/export_types/png/png_v2.ts", "deprecated": false, diff --git a/api_docs/kbn_reporting_export_types_png.mdx b/api_docs/kbn_reporting_export_types_png.mdx index 16a17ea81b44c..77eed3e73b29a 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: 2024-12-03 +date: 2024-12-05 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 6ae5fbbc4999b..b3006c504bc4b 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: 2024-12-03 +date: 2024-12-05 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.devdocs.json b/api_docs/kbn_reporting_mocks_server.devdocs.json index 2ad48d68483b0..9fd240d87c90e 100644 --- a/api_docs/kbn_reporting_mocks_server.devdocs.json +++ b/api_docs/kbn_reporting_mocks_server.devdocs.json @@ -29,7 +29,7 @@ "signature": [ "(overrides?: ", "_DeepPartialObject", - "; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + " | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -37,7 +37,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>) => Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>) => Readonly<{ roles?: Readonly<{} & { enabled: boolean; allow: string[]; }> | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -45,7 +45,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>" ], "path": "packages/kbn-reporting/mocks_server/index.ts", "deprecated": false, @@ -60,7 +60,7 @@ "description": [], "signature": [ "_DeepPartialObject", - "; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + " | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -68,7 +68,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>" ], "path": "packages/kbn-reporting/mocks_server/index.ts", "deprecated": false, diff --git a/api_docs/kbn_reporting_mocks_server.mdx b/api_docs/kbn_reporting_mocks_server.mdx index d2db28bae21bd..69bb64193e5b3 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: 2024-12-03 +date: 2024-12-05 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.devdocs.json b/api_docs/kbn_reporting_public.devdocs.json index a57898a72dd7b..474ecf1139f3e 100644 --- a/api_docs/kbn_reporting_public.devdocs.json +++ b/api_docs/kbn_reporting_public.devdocs.json @@ -1710,20 +1710,6 @@ "deprecated": false, "trackAdoption": false }, - { - "parentPluginId": "@kbn/reporting-public", - "id": "def-public.ClientConfigType.roles", - "type": "Object", - "tags": [], - "label": "roles", - "description": [], - "signature": [ - "{ enabled: boolean; }" - ], - "path": "packages/kbn-reporting/public/types.ts", - "deprecated": false, - "trackAdoption": false - }, { "parentPluginId": "@kbn/reporting-public", "id": "def-public.ClientConfigType.export_types", diff --git a/api_docs/kbn_reporting_public.mdx b/api_docs/kbn_reporting_public.mdx index 58115068d6d1c..77353bf28dc64 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-public'] --- import kbnReportingPublicObj from './kbn_reporting_public.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 111 | 0 | 104 | 2 | +| 110 | 0 | 103 | 2 | ## Client diff --git a/api_docs/kbn_reporting_server.devdocs.json b/api_docs/kbn_reporting_server.devdocs.json index 29373857cb9db..0a7505bde41b5 100644 --- a/api_docs/kbn_reporting_server.devdocs.json +++ b/api_docs/kbn_reporting_server.devdocs.json @@ -416,7 +416,7 @@ "label": "config", "description": [], "signature": [ - "Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + "Readonly<{ roles?: Readonly<{} & { enabled: boolean; allow: string[]; }> | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -424,7 +424,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>" ], "path": "packages/kbn-reporting/server/export_type.ts", "deprecated": false, @@ -467,7 +467,7 @@ "section": "def-server.PluginInitializerContext", "text": "PluginInitializerContext" }, - "; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + " | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -475,7 +475,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>" ], "path": "packages/kbn-reporting/server/export_type.ts", "deprecated": false, @@ -949,7 +949,7 @@ "label": "getFullRedirectAppUrl", "description": [], "signature": [ - "(config: Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + "(config: Readonly<{ roles?: Readonly<{} & { enabled: boolean; allow: string[]; }> | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -957,7 +957,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, serverInfo: ", + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, serverInfo: ", "ReportingServerInfo", ", spaceId: string | undefined, forceNow: string | undefined) => string" ], @@ -973,7 +973,7 @@ "label": "config", "description": [], "signature": [ - "Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + "Readonly<{ roles?: Readonly<{} & { enabled: boolean; allow: string[]; }> | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -981,7 +981,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>" ], "path": "packages/kbn-reporting/server/get_full_redirect_app_url.ts", "deprecated": false, @@ -1320,24 +1320,6 @@ } ], "returnComment": [] - }, - { - "parentPluginId": "@kbn/reporting-server", - "id": "def-server.ReportingServerPluginSetup.usesUiCapabilities", - "type": "Function", - "tags": [], - "label": "usesUiCapabilities", - "description": [ - "\nUsed to inform plugins if Reporting config is compatible with UI Capabilities / Application Sub-Feature Controls" - ], - "signature": [ - "() => boolean" - ], - "path": "packages/kbn-reporting/server/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] } ], "initialIsOpen": false @@ -1661,7 +1643,7 @@ "label": "ReportingConfigType", "description": [], "signature": [ - "{ readonly encryptionKey?: string | undefined; readonly enabled: boolean; readonly csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + "{ readonly roles?: Readonly<{} & { enabled: boolean; allow: string[]; }> | undefined; readonly encryptionKey?: string | undefined; readonly enabled: boolean; readonly csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -1669,7 +1651,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; readonly capture: Readonly<{} & { maxAttempts: number; }>; readonly roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; readonly kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; readonly queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; readonly poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; readonly export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; readonly statefulSettings: Readonly<{} & { enabled: boolean; }>; }" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; readonly capture: Readonly<{} & { maxAttempts: number; }>; readonly kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; readonly queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; readonly poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; readonly export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; readonly statefulSettings: Readonly<{} & { enabled: boolean; }>; }" ], "path": "packages/kbn-reporting/server/types.ts", "deprecated": false, @@ -2026,26 +2008,10 @@ "pluginId": "@kbn/config-schema", "scope": "common", "docId": "kibKbnConfigSchemaPluginApi", - "section": "def-common.ObjectType", - "text": "ObjectType" - }, - "<{ enabled: ", - { - "pluginId": "@kbn/config-schema", - "scope": "common", - "docId": "kibKbnConfigSchemaPluginApi", - "section": "def-common.ConditionalType", - "text": "ConditionalType" - }, - "; allow: ", - { - "pluginId": "@kbn/config-schema", - "scope": "common", - "docId": "kibKbnConfigSchemaPluginApi", - "section": "def-common.ConditionalType", - "text": "ConditionalType" + "section": "def-common.Type", + "text": "Type" }, - "; }>; poll: ", + " | undefined>; poll: ", { "pluginId": "@kbn/config-schema", "scope": "common", diff --git a/api_docs/kbn_reporting_server.mdx b/api_docs/kbn_reporting_server.mdx index e4078c796b5cf..ef3d16faa98a0 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-server'] --- import kbnReportingServerObj from './kbn_reporting_server.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 92 | 0 | 91 | 0 | +| 91 | 0 | 91 | 0 | ## Server diff --git a/api_docs/kbn_resizable_layout.mdx b/api_docs/kbn_resizable_layout.mdx index b69b31c42766c..97c54324476a5 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: 2024-12-03 +date: 2024-12-05 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 323a53ab8beb8..c327a15a73770 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: 2024-12-03 +date: 2024-12-05 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.devdocs.json b/api_docs/kbn_response_ops_rule_form.devdocs.json new file mode 100644 index 0000000000000..b163e043f7950 --- /dev/null +++ b/api_docs/kbn_response_ops_rule_form.devdocs.json @@ -0,0 +1,3095 @@ +{ + "id": "@kbn/response-ops-rule-form", + "client": { + "classes": [], + "functions": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.createRule", + "type": "Function", + "tags": [], + "label": "createRule", + "description": [], + "signature": [ + "({\n http,\n rule,\n}: { http: ", + { + "pluginId": "@kbn/core-http-browser", + "scope": "public", + "docId": "kibKbnCoreHttpBrowserPluginApi", + "section": "def-public.HttpSetup", + "text": "HttpSetup" + }, + "; rule: ", + { + "pluginId": "@kbn/response-ops-rule-form", + "scope": "public", + "docId": "kibKbnResponseOpsRuleFormPluginApi", + "section": "def-public.CreateRuleBody", + "text": "CreateRuleBody" + }, + "<", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleTypeParams", + "text": "RuleTypeParams" + }, + ">; }) => Promise<", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.Rule", + "text": "Rule" + }, + "<", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleTypeParams", + "text": "RuleTypeParams" + }, + ">>" + ], + "path": "packages/response-ops/rule_form/src/common/apis/create_rule/create_rule.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.createRule.$1", + "type": "Object", + "tags": [], + "label": "{\n http,\n rule,\n}", + "description": [], + "path": "packages/response-ops/rule_form/src/common/apis/create_rule/create_rule.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.createRule.$1.http", + "type": "Object", + "tags": [], + "label": "http", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-http-browser", + "scope": "public", + "docId": "kibKbnCoreHttpBrowserPluginApi", + "section": "def-public.HttpSetup", + "text": "HttpSetup" + } + ], + "path": "packages/response-ops/rule_form/src/common/apis/create_rule/create_rule.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.createRule.$1.rule", + "type": "Object", + "tags": [], + "label": "rule", + "description": [], + "signature": [ + { + "pluginId": "@kbn/response-ops-rule-form", + "scope": "public", + "docId": "kibKbnResponseOpsRuleFormPluginApi", + "section": "def-public.CreateRuleBody", + "text": "CreateRuleBody" + }, + "<", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleTypeParams", + "text": "RuleTypeParams" + }, + ">" + ], + "path": "packages/response-ops/rule_form/src/common/apis/create_rule/create_rule.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.fetchUiConfig", + "type": "Function", + "tags": [], + "label": "fetchUiConfig", + "description": [], + "signature": [ + "({ http }: { http: ", + { + "pluginId": "@kbn/core-http-browser", + "scope": "public", + "docId": "kibKbnCoreHttpBrowserPluginApi", + "section": "def-public.HttpSetup", + "text": "HttpSetup" + }, + "; }) => Promise<", + "UiConfig", + ">" + ], + "path": "packages/response-ops/rule_form/src/common/apis/fetch_ui_config/fetch_ui_config.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.fetchUiConfig.$1", + "type": "Object", + "tags": [], + "label": "{ http }", + "description": [], + "path": "packages/response-ops/rule_form/src/common/apis/fetch_ui_config/fetch_ui_config.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.fetchUiConfig.$1.http", + "type": "Object", + "tags": [], + "label": "http", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-http-browser", + "scope": "public", + "docId": "kibKbnCoreHttpBrowserPluginApi", + "section": "def-public.HttpSetup", + "text": "HttpSetup" + } + ], + "path": "packages/response-ops/rule_form/src/common/apis/fetch_ui_config/fetch_ui_config.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.resolveRule", + "type": "Function", + "tags": [], + "label": "resolveRule", + "description": [], + "signature": [ + "({\n http,\n id,\n}: { http: ", + { + "pluginId": "@kbn/core-http-browser", + "scope": "public", + "docId": "kibKbnCoreHttpBrowserPluginApi", + "section": "def-public.HttpSetup", + "text": "HttpSetup" + }, + "; id: string; }) => Promise<", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.ResolvedRule", + "text": "ResolvedRule" + }, + ">" + ], + "path": "packages/response-ops/rule_form/src/common/apis/resolve_rule/resolve_rule.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.resolveRule.$1", + "type": "Object", + "tags": [], + "label": "{\n http,\n id,\n}", + "description": [], + "path": "packages/response-ops/rule_form/src/common/apis/resolve_rule/resolve_rule.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.resolveRule.$1.http", + "type": "Object", + "tags": [], + "label": "http", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-http-browser", + "scope": "public", + "docId": "kibKbnCoreHttpBrowserPluginApi", + "section": "def-public.HttpSetup", + "text": "HttpSetup" + } + ], + "path": "packages/response-ops/rule_form/src/common/apis/resolve_rule/resolve_rule.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.resolveRule.$1.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "path": "packages/response-ops/rule_form/src/common/apis/resolve_rule/resolve_rule.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleActionsAlertsFilter", + "type": "Function", + "tags": [], + "label": "RuleActionsAlertsFilter", + "description": [], + "signature": [ + "({ action, onChange, appName, ruleTypeId, plugins: propsPlugins, }: ", + "RuleActionsAlertsFilterProps", + ") => React.JSX.Element" + ], + "path": "packages/response-ops/rule_form/src/rule_actions/rule_actions_alerts_filter.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleActionsAlertsFilter.$1", + "type": "Object", + "tags": [], + "label": "{\n action,\n onChange,\n appName,\n ruleTypeId,\n plugins: propsPlugins,\n}", + "description": [], + "signature": [ + "RuleActionsAlertsFilterProps" + ], + "path": "packages/response-ops/rule_form/src/rule_actions/rule_actions_alerts_filter.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleActionsAlertsFilterTimeframe", + "type": "Function", + "tags": [], + "label": "RuleActionsAlertsFilterTimeframe", + "description": [], + "signature": [ + "({ action, settings, onChange, }: ", + "RuleActionsAlertsFilterTimeframeProps", + ") => React.JSX.Element" + ], + "path": "packages/response-ops/rule_form/src/rule_actions/rule_actions_alerts_filter_timeframe.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleActionsAlertsFilterTimeframe.$1", + "type": "Object", + "tags": [], + "label": "{\n action,\n settings,\n onChange,\n}", + "description": [], + "signature": [ + "RuleActionsAlertsFilterTimeframeProps" + ], + "path": "packages/response-ops/rule_form/src/rule_actions/rule_actions_alerts_filter_timeframe.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleActionsNotifyWhen", + "type": "Function", + "tags": [], + "label": "RuleActionsNotifyWhen", + "description": [], + "signature": [ + "({ hasAlertsMappings, frequency, throttle, throttleUnit, showMinimumThrottleWarning, showMinimumThrottleUnitWarning, notifyWhenSelectOptions, onChange, onUseDefaultMessage, }: ", + "RuleActionsNotifyWhenProps", + ") => React.JSX.Element" + ], + "path": "packages/response-ops/rule_form/src/rule_actions/rule_actions_notify_when.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleActionsNotifyWhen.$1", + "type": "Object", + "tags": [], + "label": "{\n hasAlertsMappings,\n frequency = DEFAULT_FREQUENCY,\n throttle,\n throttleUnit,\n showMinimumThrottleWarning,\n showMinimumThrottleUnitWarning,\n notifyWhenSelectOptions = NOTIFY_WHEN_OPTIONS,\n onChange,\n onUseDefaultMessage,\n}", + "description": [], + "signature": [ + "RuleActionsNotifyWhenProps" + ], + "path": "packages/response-ops/rule_form/src/rule_actions/rule_actions_notify_when.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleForm", + "type": "Function", + "tags": [], + "label": "RuleForm", + "description": [], + "signature": [ + "(props: ", + "RuleFormProps", + ") => React.JSX.Element" + ], + "path": "packages/response-ops/rule_form/src/rule_form.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleForm.$1", + "type": "Object", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "RuleFormProps" + ], + "path": "packages/response-ops/rule_form/src/rule_form.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeModalComponent", + "type": "Function", + "tags": [], + "label": "RuleTypeModalComponent", + "description": [], + "signature": [ + "({ http, toasts, filteredRuleTypes, registeredRuleTypes, ...rest }: ", + "RuleTypeModalComponentProps", + ") => React.JSX.Element" + ], + "path": "packages/response-ops/rule_form/src/rule_type_modal/components/index.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeModalComponent.$1", + "type": "Object", + "tags": [], + "label": "{\n http,\n toasts,\n filteredRuleTypes = EMPTY_ARRAY,\n registeredRuleTypes,\n ...rest\n}", + "description": [], + "signature": [ + "RuleTypeModalComponentProps" + ], + "path": "packages/response-ops/rule_form/src/rule_type_modal/components/index.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.transformCreateRuleBody", + "type": "Function", + "tags": [], + "label": "transformCreateRuleBody", + "description": [], + "signature": [ + "({ ruleTypeId, actions, alertDelay, flapping, ...res }: ", + { + "pluginId": "@kbn/response-ops-rule-form", + "scope": "public", + "docId": "kibKbnResponseOpsRuleFormPluginApi", + "section": "def-public.CreateRuleBody", + "text": "CreateRuleBody" + }, + "<", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleTypeParams", + "text": "RuleTypeParams" + }, + ">) => any" + ], + "path": "packages/response-ops/rule_form/src/common/apis/create_rule/transform_create_rule_body.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.transformCreateRuleBody.$1", + "type": "Object", + "tags": [], + "label": "{\n ruleTypeId,\n actions = [],\n alertDelay,\n flapping,\n ...res\n}", + "description": [], + "signature": [ + { + "pluginId": "@kbn/response-ops-rule-form", + "scope": "public", + "docId": "kibKbnResponseOpsRuleFormPluginApi", + "section": "def-public.CreateRuleBody", + "text": "CreateRuleBody" + }, + "<", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleTypeParams", + "text": "RuleTypeParams" + }, + ">" + ], + "path": "packages/response-ops/rule_form/src/common/apis/create_rule/transform_create_rule_body.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.transformUpdateRuleBody", + "type": "Function", + "tags": [], + "label": "transformUpdateRuleBody", + "description": [], + "signature": [ + "({ actions, alertDelay, flapping, ...res }: ", + "UpdateRuleBody", + "<", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleTypeParams", + "text": "RuleTypeParams" + }, + ">) => any" + ], + "path": "packages/response-ops/rule_form/src/common/apis/update_rule/transform_update_rule_body.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.transformUpdateRuleBody.$1", + "type": "Object", + "tags": [], + "label": "{\n actions = [],\n alertDelay,\n flapping,\n ...res\n}", + "description": [], + "signature": [ + "UpdateRuleBody", + "<", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleTypeParams", + "text": "RuleTypeParams" + }, + ">" + ], + "path": "packages/response-ops/rule_form/src/common/apis/update_rule/transform_update_rule_body.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.updateRule", + "type": "Function", + "tags": [], + "label": "updateRule", + "description": [], + "signature": [ + "({\n http,\n rule,\n id,\n}: { http: ", + { + "pluginId": "@kbn/core-http-browser", + "scope": "public", + "docId": "kibKbnCoreHttpBrowserPluginApi", + "section": "def-public.HttpSetup", + "text": "HttpSetup" + }, + "; rule: ", + "UpdateRuleBody", + "<", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleTypeParams", + "text": "RuleTypeParams" + }, + ">; id: string; }) => Promise<", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.Rule", + "text": "Rule" + }, + "<", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleTypeParams", + "text": "RuleTypeParams" + }, + ">>" + ], + "path": "packages/response-ops/rule_form/src/common/apis/update_rule/update_rule.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.updateRule.$1", + "type": "Object", + "tags": [], + "label": "{\n http,\n rule,\n id,\n}", + "description": [], + "path": "packages/response-ops/rule_form/src/common/apis/update_rule/update_rule.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.updateRule.$1.http", + "type": "Object", + "tags": [], + "label": "http", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-http-browser", + "scope": "public", + "docId": "kibKbnCoreHttpBrowserPluginApi", + "section": "def-public.HttpSetup", + "text": "HttpSetup" + } + ], + "path": "packages/response-ops/rule_form/src/common/apis/update_rule/update_rule.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.updateRule.$1.rule", + "type": "Object", + "tags": [], + "label": "rule", + "description": [], + "signature": [ + "UpdateRuleBody", + "<", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleTypeParams", + "text": "RuleTypeParams" + }, + ">" + ], + "path": "packages/response-ops/rule_form/src/common/apis/update_rule/update_rule.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.updateRule.$1.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "path": "packages/response-ops/rule_form/src/common/apis/update_rule/update_rule.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.CreateRuleBody", + "type": "Interface", + "tags": [], + "label": "CreateRuleBody", + "description": [], + "signature": [ + { + "pluginId": "@kbn/response-ops-rule-form", + "scope": "public", + "docId": "kibKbnResponseOpsRuleFormPluginApi", + "section": "def-public.CreateRuleBody", + "text": "CreateRuleBody" + }, + "" + ], + "path": "packages/response-ops/rule_form/src/common/apis/create_rule/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.CreateRuleBody.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "packages/response-ops/rule_form/src/common/apis/create_rule/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.CreateRuleBody.ruleTypeId", + "type": "string", + "tags": [], + "label": "ruleTypeId", + "description": [], + "path": "packages/response-ops/rule_form/src/common/apis/create_rule/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.CreateRuleBody.enabled", + "type": "boolean", + "tags": [], + "label": "enabled", + "description": [], + "path": "packages/response-ops/rule_form/src/common/apis/create_rule/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.CreateRuleBody.consumer", + "type": "string", + "tags": [], + "label": "consumer", + "description": [], + "path": "packages/response-ops/rule_form/src/common/apis/create_rule/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.CreateRuleBody.tags", + "type": "Array", + "tags": [], + "label": "tags", + "description": [], + "signature": [ + "string[]" + ], + "path": "packages/response-ops/rule_form/src/common/apis/create_rule/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.CreateRuleBody.params", + "type": "Uncategorized", + "tags": [], + "label": "params", + "description": [], + "signature": [ + "Params" + ], + "path": "packages/response-ops/rule_form/src/common/apis/create_rule/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.CreateRuleBody.schedule", + "type": "Object", + "tags": [], + "label": "schedule", + "description": [], + "signature": [ + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.IntervalSchedule", + "text": "IntervalSchedule" + } + ], + "path": "packages/response-ops/rule_form/src/common/apis/create_rule/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.CreateRuleBody.actions", + "type": "Array", + "tags": [], + "label": "actions", + "description": [], + "signature": [ + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleUiAction", + "text": "RuleUiAction" + }, + "[]" + ], + "path": "packages/response-ops/rule_form/src/common/apis/create_rule/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.CreateRuleBody.throttle", + "type": "CompoundType", + "tags": [], + "label": "throttle", + "description": [], + "signature": [ + "string | null | undefined" + ], + "path": "packages/response-ops/rule_form/src/common/apis/create_rule/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.CreateRuleBody.notifyWhen", + "type": "CompoundType", + "tags": [], + "label": "notifyWhen", + "description": [], + "signature": [ + "\"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\" | null | undefined" + ], + "path": "packages/response-ops/rule_form/src/common/apis/create_rule/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.CreateRuleBody.alertDelay", + "type": "CompoundType", + "tags": [], + "label": "alertDelay", + "description": [], + "signature": [ + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.AlertDelay", + "text": "AlertDelay" + }, + " | null | undefined" + ], + "path": "packages/response-ops/rule_form/src/common/apis/create_rule/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.CreateRuleBody.flapping", + "type": "CompoundType", + "tags": [], + "label": "flapping", + "description": [], + "signature": [ + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.Flapping", + "text": "Flapping" + }, + " | null | undefined" + ], + "path": "packages/response-ops/rule_form/src/common/apis/create_rule/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.MinimumScheduleInterval", + "type": "Interface", + "tags": [], + "label": "MinimumScheduleInterval", + "description": [], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.MinimumScheduleInterval.value", + "type": "string", + "tags": [], + "label": "value", + "description": [], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.MinimumScheduleInterval.enforce", + "type": "boolean", + "tags": [], + "label": "enforce", + "description": [], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormActionsErrors", + "type": "Interface", + "tags": [], + "label": "RuleFormActionsErrors", + "description": [], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormActionsErrors.filterQuery", + "type": "Array", + "tags": [], + "label": "filterQuery", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormBaseErrors", + "type": "Interface", + "tags": [], + "label": "RuleFormBaseErrors", + "description": [], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormBaseErrors.name", + "type": "Array", + "tags": [], + "label": "name", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormBaseErrors.interval", + "type": "Array", + "tags": [], + "label": "interval", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormBaseErrors.consumer", + "type": "Array", + "tags": [], + "label": "consumer", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormBaseErrors.ruleTypeId", + "type": "Array", + "tags": [], + "label": "ruleTypeId", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormBaseErrors.actionConnectors", + "type": "Array", + "tags": [], + "label": "actionConnectors", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormBaseErrors.alertDelay", + "type": "Array", + "tags": [], + "label": "alertDelay", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormBaseErrors.tags", + "type": "Array", + "tags": [], + "label": "tags", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormData", + "type": "Interface", + "tags": [], + "label": "RuleFormData", + "description": [], + "signature": [ + { + "pluginId": "@kbn/response-ops-rule-form", + "scope": "public", + "docId": "kibKbnResponseOpsRuleFormPluginApi", + "section": "def-public.RuleFormData", + "text": "RuleFormData" + }, + "" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormData.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormData.tags", + "type": "Array", + "tags": [], + "label": "tags", + "description": [], + "signature": [ + "string[]" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormData.params", + "type": "Uncategorized", + "tags": [], + "label": "params", + "description": [], + "signature": [ + "Params" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormData.schedule", + "type": "Object", + "tags": [], + "label": "schedule", + "description": [], + "signature": [ + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.IntervalSchedule", + "text": "IntervalSchedule" + } + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormData.consumer", + "type": "string", + "tags": [], + "label": "consumer", + "description": [], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormData.actions", + "type": "Array", + "tags": [], + "label": "actions", + "description": [], + "signature": [ + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleUiAction", + "text": "RuleUiAction" + }, + "[]" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormData.alertDelay", + "type": "CompoundType", + "tags": [], + "label": "alertDelay", + "description": [], + "signature": [ + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.AlertDelay", + "text": "AlertDelay" + }, + " | null | undefined" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormData.notifyWhen", + "type": "CompoundType", + "tags": [], + "label": "notifyWhen", + "description": [], + "signature": [ + "\"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\" | null | undefined" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormData.ruleTypeId", + "type": "string", + "tags": [], + "label": "ruleTypeId", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormData.flapping", + "type": "CompoundType", + "tags": [], + "label": "flapping", + "description": [], + "signature": [ + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.Flapping", + "text": "Flapping" + }, + " | null | undefined" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormParamsErrors", + "type": "Interface", + "tags": [], + "label": "RuleFormParamsErrors", + "description": [], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormParamsErrors.Unnamed", + "type": "IndexSignature", + "tags": [], + "label": "[key: string]: string | string[] | RuleFormParamsErrors", + "description": [], + "signature": [ + "[key: string]: string | string[] | ", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleFormParamsErrors", + "text": "RuleFormParamsErrors" + } + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormPlugins", + "type": "Interface", + "tags": [], + "label": "RuleFormPlugins", + "description": [], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormPlugins.http", + "type": "Object", + "tags": [], + "label": "http", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-http-browser", + "scope": "public", + "docId": "kibKbnCoreHttpBrowserPluginApi", + "section": "def-public.HttpSetup", + "text": "HttpSetup" + } + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormPlugins.i18n", + "type": "Object", + "tags": [], + "label": "i18n", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-i18n-browser", + "scope": "public", + "docId": "kibKbnCoreI18nBrowserPluginApi", + "section": "def-public.I18nStart", + "text": "I18nStart" + } + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormPlugins.theme", + "type": "Object", + "tags": [], + "label": "theme", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-theme-browser", + "scope": "public", + "docId": "kibKbnCoreThemeBrowserPluginApi", + "section": "def-public.ThemeServiceSetup", + "text": "ThemeServiceSetup" + } + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormPlugins.application", + "type": "Object", + "tags": [], + "label": "application", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-application-browser", + "scope": "public", + "docId": "kibKbnCoreApplicationBrowserPluginApi", + "section": "def-public.ApplicationStart", + "text": "ApplicationStart" + } + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormPlugins.notifications", + "type": "Object", + "tags": [], + "label": "notifications", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-notifications-browser", + "scope": "public", + "docId": "kibKbnCoreNotificationsBrowserPluginApi", + "section": "def-public.NotificationsStart", + "text": "NotificationsStart" + } + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormPlugins.charts", + "type": "Object", + "tags": [], + "label": "charts", + "description": [], + "signature": [ + { + "pluginId": "charts", + "scope": "public", + "docId": "kibChartsPluginApi", + "section": "def-public.ChartsPluginSetup", + "text": "ChartsPluginSetup" + } + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormPlugins.settings", + "type": "Object", + "tags": [], + "label": "settings", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-ui-settings-browser", + "scope": "public", + "docId": "kibKbnCoreUiSettingsBrowserPluginApi", + "section": "def-public.SettingsStart", + "text": "SettingsStart" + } + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormPlugins.data", + "type": "Object", + "tags": [], + "label": "data", + "description": [], + "signature": [ + { + "pluginId": "data", + "scope": "public", + "docId": "kibDataPluginApi", + "section": "def-public.DataPublicPluginStart", + "text": "DataPublicPluginStart" + } + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormPlugins.dataViews", + "type": "Object", + "tags": [], + "label": "dataViews", + "description": [], + "signature": [ + { + "pluginId": "dataViews", + "scope": "public", + "docId": "kibDataViewsPluginApi", + "section": "def-public.DataViewsServicePublic", + "text": "DataViewsServicePublic" + } + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormPlugins.unifiedSearch", + "type": "Object", + "tags": [], + "label": "unifiedSearch", + "description": [], + "signature": [ + { + "pluginId": "unifiedSearch", + "scope": "public", + "docId": "kibUnifiedSearchPluginApi", + "section": "def-public.UnifiedSearchPublicPluginStart", + "text": "UnifiedSearchPublicPluginStart" + } + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormPlugins.docLinks", + "type": "Object", + "tags": [], + "label": "docLinks", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-doc-links-browser", + "scope": "public", + "docId": "kibKbnCoreDocLinksBrowserPluginApi", + "section": "def-public.DocLinksStart", + "text": "DocLinksStart" + } + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormPlugins.ruleTypeRegistry", + "type": "Object", + "tags": [], + "label": "ruleTypeRegistry", + "description": [], + "signature": [ + "{ get: (id: string) => ", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleTypeModel", + "text": "RuleTypeModel" + }, + "<", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleTypeParams", + "text": "RuleTypeParams" + }, + ">; list: () => ", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleTypeModel", + "text": "RuleTypeModel" + }, + "<", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleTypeParams", + "text": "RuleTypeParams" + }, + ">[]; register: (objectType: ", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleTypeModel", + "text": "RuleTypeModel" + }, + "<", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleTypeParams", + "text": "RuleTypeParams" + }, + ">) => void; has: (id: string) => boolean; }" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormPlugins.actionTypeRegistry", + "type": "Object", + "tags": [], + "label": "actionTypeRegistry", + "description": [], + "signature": [ + "{ get: (id: string) => ", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.ActionTypeModel", + "text": "ActionTypeModel" + }, + "; list: () => ", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.ActionTypeModel", + "text": "ActionTypeModel" + }, + "[]; register: (objectType: ", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.ActionTypeModel", + "text": "ActionTypeModel" + }, + ") => void; has: (id: string) => boolean; }" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormState", + "type": "Interface", + "tags": [], + "label": "RuleFormState", + "description": [], + "signature": [ + { + "pluginId": "@kbn/response-ops-rule-form", + "scope": "public", + "docId": "kibKbnResponseOpsRuleFormPluginApi", + "section": "def-public.RuleFormState", + "text": "RuleFormState" + }, + "" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormState.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormState.formData", + "type": "Object", + "tags": [], + "label": "formData", + "description": [], + "signature": [ + { + "pluginId": "@kbn/response-ops-rule-form", + "scope": "public", + "docId": "kibKbnResponseOpsRuleFormPluginApi", + "section": "def-public.RuleFormData", + "text": "RuleFormData" + }, + "" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormState.plugins", + "type": "Object", + "tags": [], + "label": "plugins", + "description": [], + "signature": [ + { + "pluginId": "@kbn/response-ops-rule-form", + "scope": "public", + "docId": "kibKbnResponseOpsRuleFormPluginApi", + "section": "def-public.RuleFormPlugins", + "text": "RuleFormPlugins" + } + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormState.connectors", + "type": "Array", + "tags": [], + "label": "connectors", + "description": [], + "signature": [ + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.ActionConnector", + "text": "ActionConnector" + }, + ", Record>[]" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormState.connectorTypes", + "type": "Array", + "tags": [], + "label": "connectorTypes", + "description": [], + "signature": [ + { + "pluginId": "@kbn/actions-types", + "scope": "common", + "docId": "kibKbnActionsTypesPluginApi", + "section": "def-common.ActionType", + "text": "ActionType" + }, + "[]" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormState.aadTemplateFields", + "type": "Array", + "tags": [], + "label": "aadTemplateFields", + "description": [], + "signature": [ + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionVariable", + "text": "ActionVariable" + }, + "[]" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormState.availableRuleTypes", + "type": "Array", + "tags": [], + "label": "availableRuleTypes", + "description": [], + "signature": [ + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleTypeWithDescription", + "text": "RuleTypeWithDescription" + }, + "[]" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormState.baseErrors", + "type": "Object", + "tags": [], + "label": "baseErrors", + "description": [], + "signature": [ + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleFormBaseErrors", + "text": "RuleFormBaseErrors" + }, + " | undefined" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormState.paramsErrors", + "type": "Object", + "tags": [], + "label": "paramsErrors", + "description": [], + "signature": [ + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleFormParamsErrors", + "text": "RuleFormParamsErrors" + }, + " | undefined" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormState.actionsErrors", + "type": "Object", + "tags": [], + "label": "actionsErrors", + "description": [], + "signature": [ + "Record | undefined" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormState.actionsParamsErrors", + "type": "Object", + "tags": [], + "label": "actionsParamsErrors", + "description": [], + "signature": [ + "Record | undefined" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormState.selectedRuleType", + "type": "CompoundType", + "tags": [], + "label": "selectedRuleType", + "description": [], + "signature": [ + { + "pluginId": "@kbn/triggers-actions-ui-types", + "scope": "common", + "docId": "kibKbnTriggersActionsUiTypesPluginApi", + "section": "def-common.RuleType", + "text": "RuleType" + }, + " & { description?: string | undefined; }" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormState.selectedRuleTypeModel", + "type": "Object", + "tags": [], + "label": "selectedRuleTypeModel", + "description": [], + "signature": [ + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleTypeModel", + "text": "RuleTypeModel" + }, + "" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormState.multiConsumerSelection", + "type": "CompoundType", + "tags": [], + "label": "multiConsumerSelection", + "description": [], + "signature": [ + { + "pluginId": "@kbn/rule-data-utils", + "scope": "common", + "docId": "kibKbnRuleDataUtilsPluginApi", + "section": "def-common.RuleCreationValidConsumer", + "text": "RuleCreationValidConsumer" + }, + " | null | undefined" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormState.showMustacheAutocompleteSwitch", + "type": "CompoundType", + "tags": [], + "label": "showMustacheAutocompleteSwitch", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormState.metadata", + "type": "Object", + "tags": [], + "label": "metadata", + "description": [], + "signature": [ + "Record | undefined" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormState.minimumScheduleInterval", + "type": "Object", + "tags": [], + "label": "minimumScheduleInterval", + "description": [], + "signature": [ + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.MinimumScheduleInterval", + "text": "MinimumScheduleInterval" + }, + " | undefined" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormState.canShowConsumerSelection", + "type": "CompoundType", + "tags": [], + "label": "canShowConsumerSelection", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormState.validConsumers", + "type": "Array", + "tags": [], + "label": "validConsumers", + "description": [], + "signature": [ + { + "pluginId": "@kbn/rule-data-utils", + "scope": "common", + "docId": "kibKbnRuleDataUtilsPluginApi", + "section": "def-common.RuleCreationValidConsumer", + "text": "RuleCreationValidConsumer" + }, + "[]" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormState.flappingSettings", + "type": "CompoundType", + "tags": [], + "label": "flappingSettings", + "description": [], + "signature": [ + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.RulesSettingsFlapping", + "text": "RulesSettingsFlapping" + }, + " | undefined" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleFormState.touched", + "type": "CompoundType", + "tags": [], + "label": "touched", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeModel", + "type": "Interface", + "tags": [], + "label": "RuleTypeModel", + "description": [], + "signature": [ + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleTypeModel", + "text": "RuleTypeModel" + }, + "" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeModel.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeModel.description", + "type": "string", + "tags": [], + "label": "description", + "description": [], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeModel.iconClass", + "type": "string", + "tags": [], + "label": "iconClass", + "description": [], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeModel.documentationUrl", + "type": "CompoundType", + "tags": [], + "label": "documentationUrl", + "description": [], + "signature": [ + "string | ((docLinks: ", + { + "pluginId": "@kbn/core-doc-links-browser", + "scope": "public", + "docId": "kibKbnCoreDocLinksBrowserPluginApi", + "section": "def-public.DocLinksStart", + "text": "DocLinksStart" + }, + ") => string) | null" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeModel.validate", + "type": "Function", + "tags": [], + "label": "validate", + "description": [], + "signature": [ + "(ruleParams: Params, isServerless?: boolean | undefined) => ", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.ValidationResult", + "text": "ValidationResult" + } + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeModel.validate.$1", + "type": "Uncategorized", + "tags": [], + "label": "ruleParams", + "description": [], + "signature": [ + "Params" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeModel.validate.$2", + "type": "CompoundType", + "tags": [], + "label": "isServerless", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeModel.ruleParamsExpression", + "type": "Function", + "tags": [], + "label": "ruleParamsExpression", + "description": [], + "signature": [ + "React.FunctionComponent | React.LazyExoticComponent, string>>>" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeModel.ruleParamsExpression.$1", + "type": "Uncategorized", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "P" + ], + "path": "node_modules/@types/react/ts5.0/index.d.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeModel.requiresAppContext", + "type": "boolean", + "tags": [], + "label": "requiresAppContext", + "description": [], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeModel.defaultActionMessage", + "type": "string", + "tags": [], + "label": "defaultActionMessage", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeModel.defaultRecoveryMessage", + "type": "string", + "tags": [], + "label": "defaultRecoveryMessage", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeModel.defaultSummaryMessage", + "type": "string", + "tags": [], + "label": "defaultSummaryMessage", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeModel.alertDetailsAppSection", + "type": "CompoundType", + "tags": [], + "label": "alertDetailsAppSection", + "description": [], + "signature": [ + "React.FunctionComponent | React.LazyExoticComponent> | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeParamsExpressionProps", + "type": "Interface", + "tags": [], + "label": "RuleTypeParamsExpressionProps", + "description": [], + "signature": [ + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleTypeParamsExpressionProps", + "text": "RuleTypeParamsExpressionProps" + }, + "" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeParamsExpressionProps.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeParamsExpressionProps.ruleParams", + "type": "Uncategorized", + "tags": [], + "label": "ruleParams", + "description": [], + "signature": [ + "Params" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeParamsExpressionProps.ruleInterval", + "type": "string", + "tags": [], + "label": "ruleInterval", + "description": [], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeParamsExpressionProps.ruleThrottle", + "type": "string", + "tags": [], + "label": "ruleThrottle", + "description": [], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeParamsExpressionProps.alertNotifyWhen", + "type": "CompoundType", + "tags": [], + "label": "alertNotifyWhen", + "description": [], + "signature": [ + "\"onActionGroupChange\" | \"onActiveAlert\" | \"onThrottleInterval\"" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeParamsExpressionProps.setRuleParams", + "type": "Function", + "tags": [], + "label": "setRuleParams", + "description": [], + "signature": [ + "(property: Key, value: Params[Key] | undefined) => void" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeParamsExpressionProps.setRuleParams.$1", + "type": "Uncategorized", + "tags": [], + "label": "property", + "description": [], + "signature": [ + "Key" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeParamsExpressionProps.setRuleParams.$2", + "type": "Uncategorized", + "tags": [], + "label": "value", + "description": [], + "signature": [ + "Params[Key] | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeParamsExpressionProps.setRuleProperty", + "type": "Function", + "tags": [], + "label": "setRuleProperty", + "description": [], + "signature": [ + "(key: Prop, value: ", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.SanitizedRule", + "text": "SanitizedRule" + }, + "[Prop] | null) => void" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeParamsExpressionProps.setRuleProperty.$1", + "type": "Uncategorized", + "tags": [], + "label": "key", + "description": [], + "signature": [ + "Prop" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeParamsExpressionProps.setRuleProperty.$2", + "type": "CompoundType", + "tags": [], + "label": "value", + "description": [], + "signature": [ + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.SanitizedRule", + "text": "SanitizedRule" + }, + "[Prop] | null" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeParamsExpressionProps.onChangeMetaData", + "type": "Function", + "tags": [], + "label": "onChangeMetaData", + "description": [], + "signature": [ + "(metadata: MetaData) => void" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeParamsExpressionProps.onChangeMetaData.$1", + "type": "Uncategorized", + "tags": [], + "label": "metadata", + "description": [], + "signature": [ + "MetaData" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeParamsExpressionProps.errors", + "type": "Object", + "tags": [], + "label": "errors", + "description": [], + "signature": [ + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleFormParamsErrors", + "text": "RuleFormParamsErrors" + } + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeParamsExpressionProps.defaultActionGroupId", + "type": "string", + "tags": [], + "label": "defaultActionGroupId", + "description": [], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeParamsExpressionProps.actionGroups", + "type": "Array", + "tags": [], + "label": "actionGroups", + "description": [], + "signature": [ + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ActionGroup", + "text": "ActionGroup" + }, + "[]" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeParamsExpressionProps.metadata", + "type": "Uncategorized", + "tags": [], + "label": "metadata", + "description": [], + "signature": [ + "MetaData | undefined" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeParamsExpressionProps.charts", + "type": "Object", + "tags": [], + "label": "charts", + "description": [], + "signature": [ + { + "pluginId": "charts", + "scope": "public", + "docId": "kibChartsPluginApi", + "section": "def-public.ChartsPluginSetup", + "text": "ChartsPluginSetup" + } + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeParamsExpressionProps.data", + "type": "Object", + "tags": [], + "label": "data", + "description": [], + "signature": [ + { + "pluginId": "data", + "scope": "public", + "docId": "kibDataPluginApi", + "section": "def-public.DataPublicPluginStart", + "text": "DataPublicPluginStart" + } + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeParamsExpressionProps.dataViews", + "type": "Object", + "tags": [], + "label": "dataViews", + "description": [], + "signature": [ + { + "pluginId": "dataViews", + "scope": "public", + "docId": "kibDataViewsPluginApi", + "section": "def-public.DataViewsServicePublic", + "text": "DataViewsServicePublic" + } + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeParamsExpressionProps.unifiedSearch", + "type": "Object", + "tags": [], + "label": "unifiedSearch", + "description": [], + "signature": [ + { + "pluginId": "unifiedSearch", + "scope": "public", + "docId": "kibUnifiedSearchPluginApi", + "section": "def-public.UnifiedSearchPublicPluginStart", + "text": "UnifiedSearchPublicPluginStart" + } + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.ValidationResult", + "type": "Interface", + "tags": [], + "label": "ValidationResult", + "description": [], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.ValidationResult.errors", + "type": "Object", + "tags": [], + "label": "errors", + "description": [], + "signature": [ + "{ [x: string]: any; }" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "enums": [], + "misc": [ + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.CREATE_RULE_ROUTE", + "type": "string", + "tags": [], + "label": "CREATE_RULE_ROUTE", + "description": [], + "signature": [ + "\"/rule/create/:ruleTypeId\"" + ], + "path": "packages/response-ops/rule_form/src/constants/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.EDIT_RULE_ROUTE", + "type": "string", + "tags": [], + "label": "EDIT_RULE_ROUTE", + "description": [], + "signature": [ + "\"/rule/edit/:id\"" + ], + "path": "packages/response-ops/rule_form/src/constants/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.InitialRule", + "type": "Type", + "tags": [], + "label": "InitialRule", + "description": [], + "signature": [ + "Partial<", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.Rule", + "text": "Rule" + }, + "<", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleTypeParams", + "text": "RuleTypeParams" + }, + ">> & Pick<", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.Rule", + "text": "Rule" + }, + "<", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleTypeParams", + "text": "RuleTypeParams" + }, + ">, \"params\" | \"consumer\" | \"actions\" | \"tags\" | \"schedule\">" + ], + "path": "packages/response-ops/rule_form/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.ResolvedRule", + "type": "Type", + "tags": [], + "label": "ResolvedRule", + "description": [], + "signature": [ + "Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.ResolvedSanitizedRule", + "text": "ResolvedSanitizedRule" + }, + "<", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleTypeParams", + "text": "RuleTypeParams" + }, + ">, \"actions\" | \"alertTypeId\" | \"systemActions\"> & { ruleTypeId: string; actions: ", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleUiAction", + "text": "RuleUiAction" + }, + "[]; }" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.Rule", + "type": "Type", + "tags": [], + "label": "Rule", + "description": [], + "signature": [ + "Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.SanitizedRule", + "text": "SanitizedRule" + }, + ", \"actions\" | \"alertTypeId\" | \"systemActions\"> & { ruleTypeId: string; actions: ", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleUiAction", + "text": "RuleUiAction" + }, + "[]; }" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeIndexWithDescriptions", + "type": "Type", + "tags": [], + "label": "RuleTypeIndexWithDescriptions", + "description": [], + "signature": [ + "Map" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeParams", + "type": "Type", + "tags": [], + "label": "RuleTypeParams", + "description": [], + "signature": [ + "{ [x: string]: unknown; }" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeRegistryContract", + "type": "Type", + "tags": [], + "label": "RuleTypeRegistryContract", + "description": [], + "signature": [ + "{ get: (id: string) => ", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleTypeModel", + "text": "RuleTypeModel" + }, + "<", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleTypeParams", + "text": "RuleTypeParams" + }, + ">; list: () => ", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleTypeModel", + "text": "RuleTypeModel" + }, + "<", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleTypeParams", + "text": "RuleTypeParams" + }, + ">[]; register: (objectType: ", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleTypeModel", + "text": "RuleTypeModel" + }, + "<", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleTypeParams", + "text": "RuleTypeParams" + }, + ">) => void; has: (id: string) => boolean; }" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleTypeWithDescription", + "type": "Type", + "tags": [], + "label": "RuleTypeWithDescription", + "description": [], + "signature": [ + { + "pluginId": "@kbn/triggers-actions-ui-types", + "scope": "common", + "docId": "kibKbnTriggersActionsUiTypesPluginApi", + "section": "def-common.RuleType", + "text": "RuleType" + }, + " & { description?: string | undefined; }" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.RuleUiAction", + "type": "Type", + "tags": [], + "label": "RuleUiAction", + "description": [], + "signature": [ + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.SanitizedRuleAction", + "text": "SanitizedRuleAction" + }, + " | ", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.RuleSystemAction", + "text": "RuleSystemAction" + } + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.SanitizedRule", + "type": "Type", + "tags": [], + "label": "SanitizedRule", + "description": [], + "signature": [ + "Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.SanitizedRule", + "text": "SanitizedRule" + }, + ", \"actions\" | \"alertTypeId\" | \"systemActions\"> & { ruleTypeId: string; actions: ", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleUiAction", + "text": "RuleUiAction" + }, + "[]; }" + ], + "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.SanitizedRuleAction", + "type": "Type", + "tags": [], + "label": "SanitizedRuleAction", + "description": [], + "signature": [ + "Omit<", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.RuleAction", + "text": "RuleAction" + }, + ", \"alertsFilter\"> & { alertsFilter?: ", + { + "pluginId": "@kbn/alerting-types", + "scope": "common", + "docId": "kibKbnAlertingTypesPluginApi", + "section": "def-common.SanitizedAlertsFilter", + "text": "SanitizedAlertsFilter" + }, + " | undefined; }" + ], + "path": "packages/kbn-alerting-types/rule_types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/response-ops-rule-form", + "id": "def-public.UPDATE_FIELDS_WITH_ACTIONS", + "type": "Array", + "tags": [], + "label": "UPDATE_FIELDS_WITH_ACTIONS", + "description": [], + "signature": [ + "(keyof ", + "UpdateRuleBody", + "<", + { + "pluginId": "@kbn/alerts-ui-shared", + "scope": "public", + "docId": "kibKbnAlertsUiSharedPluginApi", + "section": "def-public.RuleTypeParams", + "text": "RuleTypeParams" + }, + ">)[]" + ], + "path": "packages/response-ops/rule_form/src/common/apis/update_rule/update_rule.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_response_ops_rule_form.mdx b/api_docs/kbn_response_ops_rule_form.mdx new file mode 100644 index 0000000000000..50104b165a34e --- /dev/null +++ b/api_docs/kbn_response_ops_rule_form.mdx @@ -0,0 +1,36 @@ +--- +#### +#### 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: kibKbnResponseOpsRuleFormPluginApi +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: 2024-12-05 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-rule-form'] +--- +import kbnResponseOpsRuleFormObj from './kbn_response_ops_rule_form.devdocs.json'; + + + +Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 157 | 0 | 156 | 7 | + +## Client + +### Functions + + +### Interfaces + + +### Consts, variables and types + + diff --git a/api_docs/kbn_response_ops_rule_params.mdx b/api_docs/kbn_response_ops_rule_params.mdx index c3e71da7ac36f..00169434f6cfb 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: 2024-12-03 +date: 2024-12-05 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 fe5fd4236fe4b..67baf7e906292 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: 2024-12-03 +date: 2024-12-05 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 2f7a740e3cbfe..acbc7bc7652da 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: 2024-12-03 +date: 2024-12-05 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 7157417647b2f..4a1b01ceb6fba 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: 2024-12-03 +date: 2024-12-05 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 a916eba9f065c..29bdd119be031 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: 2024-12-03 +date: 2024-12-05 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 7d311e0e8872d..acc5865ce9ba1 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rrule'] --- import kbnRruleObj from './kbn_rrule.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.devdocs.json b/api_docs/kbn_rule_data_utils.devdocs.json index 20d8ad66f520a..4bf841aff9435 100644 --- a/api_docs/kbn_rule_data_utils.devdocs.json +++ b/api_docs/kbn_rule_data_utils.devdocs.json @@ -200,6 +200,41 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/rule-data-utils", + "id": "def-common.isSiemRuleType", + "type": "Function", + "tags": [], + "label": "isSiemRuleType", + "description": [ + "\nTODO: Remove when checks for specific rule type ids is not needed\nin the codebase." + ], + "signature": [ + "(ruleTypeId: string) => boolean" + ], + "path": "packages/kbn-rule-data-utils/src/alerts_as_data_rbac.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/rule-data-utils", + "id": "def-common.isSiemRuleType.$1", + "type": "string", + "tags": [], + "label": "ruleTypeId", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-rule-data-utils/src/alerts_as_data_rbac.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/rule-data-utils", "id": "def-common.isValidFeatureId", @@ -249,7 +284,23 @@ "type": "Enum", "tags": [], "label": "ApmRuleType", - "description": [], + "description": [ + "\nAPM rule types" + ], + "path": "packages/kbn-rule-data-utils/src/rule_types/o11y_rules.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/rule-data-utils", + "id": "def-common.InfraRuleType", + "type": "Enum", + "tags": [], + "label": "InfraRuleType", + "description": [ + "\nInfra rule types" + ], "path": "packages/kbn-rule-data-utils/src/rule_types/o11y_rules.ts", "deprecated": false, "trackAdoption": false, @@ -1615,7 +1666,7 @@ "label": "AlertConsumers", "description": [], "signature": [ - "\"ml\" | \"monitoring\" | \"uptime\" | \"siem\" | \"observability\" | \"stackAlerts\" | \"apm\" | \"logs\" | \"infrastructure\" | \"slo\" | \"AlertingExample\"" + "\"ml\" | \"monitoring\" | \"uptime\" | \"siem\" | \"observability\" | \"stackAlerts\" | \"alerts\" | \"apm\" | \"logs\" | \"infrastructure\" | \"slo\" | \"discover\" | \"AlertingExample\"" ], "path": "packages/kbn-rule-data-utils/src/alerts_as_data_rbac.ts", "deprecated": false, @@ -1652,6 +1703,28 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/rule-data-utils", + "id": "def-common.APM_RULE_TYPE_IDS", + "type": "Array", + "tags": [], + "label": "APM_RULE_TYPE_IDS", + "description": [], + "signature": [ + { + "pluginId": "@kbn/rule-data-utils", + "scope": "common", + "docId": "kibKbnRuleDataUtilsPluginApi", + "section": "def-common.ApmRuleType", + "text": "ApmRuleType" + }, + "[]" + ], + "path": "packages/kbn-rule-data-utils/src/rule_types/o11y_rules.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/rule-data-utils", "id": "def-common.createRuleRoute", @@ -1787,6 +1860,29 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/rule-data-utils", + "id": "def-common.INFRA_RULE_TYPE_IDS", + "type": "Array", + "tags": [], + "label": "INFRA_RULE_TYPE_IDS", + "description": [], + "signature": [ + "(string | ", + { + "pluginId": "@kbn/rule-data-utils", + "scope": "common", + "docId": "kibKbnRuleDataUtilsPluginApi", + "section": "def-common.InfraRuleType", + "text": "InfraRuleType" + }, + ")[]" + ], + "path": "packages/kbn-rule-data-utils/src/rule_types/o11y_rules.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/rule-data-utils", "id": "def-common.KIBANA_NAMESPACE", @@ -1802,13 +1898,30 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/rule-data-utils", + "id": "def-common.LOG_RULE_TYPE_IDS", + "type": "Array", + "tags": [], + "label": "LOG_RULE_TYPE_IDS", + "description": [], + "signature": [ + "string[]" + ], + "path": "packages/kbn-rule-data-utils/src/rule_types/o11y_rules.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/rule-data-utils", "id": "def-common.LOG_THRESHOLD_ALERT_TYPE_ID", "type": "string", "tags": [], "label": "LOG_THRESHOLD_ALERT_TYPE_ID", - "description": [], + "description": [ + "\nLogs rule types" + ], "signature": [ "\"logs.alert.document.count\"" ], @@ -1838,7 +1951,9 @@ "type": "string", "tags": [], "label": "METRIC_INVENTORY_THRESHOLD_ALERT_TYPE_ID", - "description": [], + "description": [ + "\nMetrics rule types" + ], "signature": [ "\"metrics.alert.inventory.threshold\"" ], @@ -1877,6 +1992,29 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/rule-data-utils", + "id": "def-common.OBSERVABILITY_RULE_TYPE_IDS", + "type": "Array", + "tags": [], + "label": "OBSERVABILITY_RULE_TYPE_IDS", + "description": [], + "signature": [ + "(string | ", + { + "pluginId": "@kbn/rule-data-utils", + "scope": "common", + "docId": "kibKbnRuleDataUtilsPluginApi", + "section": "def-common.InfraRuleType", + "text": "InfraRuleType" + }, + ")[]" + ], + "path": "packages/kbn-rule-data-utils/src/rule_types/o11y_rules.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/rule-data-utils", "id": "def-common.OBSERVABILITY_THRESHOLD_RULE_TYPE_ID", @@ -1928,7 +2066,9 @@ "type": "string", "tags": [], "label": "SLO_BURN_RATE_RULE_TYPE_ID", - "description": [], + "description": [ + "\nSLO rule types" + ], "signature": [ "\"slo.rules.burnRate\"" ], @@ -1937,6 +2077,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/rule-data-utils", + "id": "def-common.SLO_RULE_TYPE_IDS", + "type": "Array", + "tags": [], + "label": "SLO_RULE_TYPE_IDS", + "description": [], + "signature": [ + "string[]" + ], + "path": "packages/kbn-rule-data-utils/src/rule_types/o11y_rules.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/rule-data-utils", "id": "def-common.SPACE_IDS", @@ -1967,6 +2122,23 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/rule-data-utils", + "id": "def-common.STACK_RULE_TYPE_IDS_SUPPORTED_BY_OBSERVABILITY", + "type": "Array", + "tags": [], + "label": "STACK_RULE_TYPE_IDS_SUPPORTED_BY_OBSERVABILITY", + "description": [ + "\nThese rule types are not the only stack rules. There are more.\nThe variable holds all stack rule types that support multiple\nconsumers aka the \"Role visibility\" UX dropdown." + ], + "signature": [ + "string[]" + ], + "path": "packages/kbn-rule-data-utils/src/rule_types/stack_rules.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/rule-data-utils", "id": "def-common.STATUS_VALUES", @@ -1982,13 +2154,30 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/rule-data-utils", + "id": "def-common.SYNTHETICS_RULE_TYPE_IDS", + "type": "Array", + "tags": [], + "label": "SYNTHETICS_RULE_TYPE_IDS", + "description": [], + "signature": [ + "string[]" + ], + "path": "packages/kbn-rule-data-utils/src/rule_types/o11y_rules.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/rule-data-utils", "id": "def-common.SYNTHETICS_STATUS_RULE", "type": "string", "tags": [], "label": "SYNTHETICS_STATUS_RULE", - "description": [], + "description": [ + "\nSynthetics ryle types" + ], "signature": [ "\"xpack.synthetics.alerts.monitorStatus\"" ], @@ -2072,6 +2261,23 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/rule-data-utils", + "id": "def-common.UPTIME_RULE_TYPE_IDS", + "type": "Array", + "tags": [], + "label": "UPTIME_RULE_TYPE_IDS", + "description": [ + "\nUptime rule types" + ], + "signature": [ + "string[]" + ], + "path": "packages/kbn-rule-data-utils/src/rule_types/o11y_rules.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/rule-data-utils", "id": "def-common.ValidFeatureId", @@ -2080,7 +2286,7 @@ "label": "ValidFeatureId", "description": [], "signature": [ - "\"ml\" | \"monitoring\" | \"uptime\" | \"siem\" | \"observability\" | \"stackAlerts\" | \"apm\" | \"logs\" | \"infrastructure\" | \"slo\" | \"AlertingExample\"" + "\"ml\" | \"monitoring\" | \"uptime\" | \"siem\" | \"observability\" | \"stackAlerts\" | \"alerts\" | \"apm\" | \"logs\" | \"infrastructure\" | \"slo\" | \"discover\" | \"AlertingExample\"" ], "path": "packages/kbn-rule-data-utils/src/alerts_as_data_rbac.ts", "deprecated": false, @@ -2129,12 +2335,48 @@ "\nregistering a new instance of the rule data client\nin a new plugin will require updating the below data structure\nto include the index name where the alerts as data will be written to." ], "signature": [ - "{ readonly APM: \"apm\"; readonly LOGS: \"logs\"; readonly INFRASTRUCTURE: \"infrastructure\"; readonly OBSERVABILITY: \"observability\"; readonly SLO: \"slo\"; readonly SIEM: \"siem\"; readonly UPTIME: \"uptime\"; readonly ML: \"ml\"; readonly STACK_ALERTS: \"stackAlerts\"; readonly EXAMPLE: \"AlertingExample\"; readonly MONITORING: \"monitoring\"; }" + "{ readonly APM: \"apm\"; readonly LOGS: \"logs\"; readonly INFRASTRUCTURE: \"infrastructure\"; readonly OBSERVABILITY: \"observability\"; readonly SLO: \"slo\"; readonly SIEM: \"siem\"; readonly UPTIME: \"uptime\"; readonly ML: \"ml\"; readonly STACK_ALERTS: \"stackAlerts\"; readonly EXAMPLE: \"AlertingExample\"; readonly MONITORING: \"monitoring\"; readonly ALERTS: \"alerts\"; readonly DISCOVER: \"discover\"; }" ], "path": "packages/kbn-rule-data-utils/src/alerts_as_data_rbac.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/rule-data-utils", + "id": "def-common.SYNTHETICS_ALERT_RULE_TYPES", + "type": "Object", + "tags": [], + "label": "SYNTHETICS_ALERT_RULE_TYPES", + "description": [], + "path": "packages/kbn-rule-data-utils/src/rule_types/o11y_rules.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/rule-data-utils", + "id": "def-common.SYNTHETICS_ALERT_RULE_TYPES.MONITOR_STATUS", + "type": "string", + "tags": [], + "label": "MONITOR_STATUS", + "description": [], + "path": "packages/kbn-rule-data-utils/src/rule_types/o11y_rules.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/rule-data-utils", + "id": "def-common.SYNTHETICS_ALERT_RULE_TYPES.TLS", + "type": "string", + "tags": [], + "label": "TLS", + "description": [], + "path": "packages/kbn-rule-data-utils/src/rule_types/o11y_rules.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false } ] } diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index 3899d5cc19efc..082a217ee7599 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] --- import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-detections-response](https://github.com/orgs/elastic/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 138 | 0 | 135 | 0 | +| 152 | 0 | 140 | 0 | ## Common diff --git a/api_docs/kbn_saved_objects_settings.mdx b/api_docs/kbn_saved_objects_settings.mdx index e6c7e1e08ae1e..fe24e1ae6c654 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: 2024-12-03 +date: 2024-12-05 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 6d72787f6d76a..2b115579f37e4 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: 2024-12-03 +date: 2024-12-05 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.devdocs.json b/api_docs/kbn_scout.devdocs.json index 8d2b4e60a782d..2ff2ea1d3c0d5 100644 --- a/api_docs/kbn_scout.devdocs.json +++ b/api_docs/kbn_scout.devdocs.json @@ -1541,7 +1541,7 @@ "label": "expect", "description": [], "signature": [ - "{ (actual: T, messageOrOptions?: string | { message?: string | undefined; } | undefined): MakeMatchers; soft: (actual: T, messageOrOptions?: string | { message?: string | undefined; } | undefined) => MakeMatchers; poll: (actual: () => T | Promise, messageOrOptions?: string | { message?: string | undefined; timeout?: number | undefined; intervals?: number[] | undefined; } | undefined) => GenericAssertions> & PlaywrightTest.Matchers, T> & SnapshotAssertions & { not: BaseMatchers, T>; }; extend(actual: T, messageOrOptions?: string | { message?: string | undefined; } | undefined): MakeMatchers; soft: (actual: T, messageOrOptions?: string | { message?: string | undefined; } | undefined) => MakeMatchers; poll: (actual: () => T | Promise, messageOrOptions?: string | { message?: string | undefined; timeout?: number | undefined; intervals?: number[] | undefined; } | undefined) => PollMatchers, T, {}>; extend ", "MatcherReturnType", @@ -1642,22 +1642,6 @@ "PlaywrightTestOptions", " & { browserAuth: ", "LoginFixture", - "; } & { page: ", - { - "pluginId": "@kbn/scout", - "scope": "common", - "docId": "kibKbnScoutPluginApi", - "section": "def-common.ScoutPage", - "text": "ScoutPage" - }, - "; kbnUrl: ", - { - "pluginId": "@kbn/scout", - "scope": "common", - "docId": "kibKbnScoutPluginApi", - "section": "def-common.KibanaUrl", - "text": "KibanaUrl" - }, "; } & ", { "pluginId": "@kbn/scout", diff --git a/api_docs/kbn_scout.mdx b/api_docs/kbn_scout.mdx index b868c759fe850..9e77b255f4883 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/scout'] --- import kbnScoutObj from './kbn_scout.devdocs.json'; diff --git a/api_docs/kbn_screenshotting_server.mdx b/api_docs/kbn_screenshotting_server.mdx index be432e83d6061..d0c8c99189985 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: 2024-12-03 +date: 2024-12-05 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 4f4ef836fc8d5..ddb0cbe006837 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: 2024-12-03 +date: 2024-12-05 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 d065d49232bdc..37429f7642573 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: 2024-12-03 +date: 2024-12-05 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 0cf7b6a852222..9528ef4986c2a 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: 2024-12-03 +date: 2024-12-05 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 5ba6722443d61..6f04f0a51eb80 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: 2024-12-03 +date: 2024-12-05 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 ed60763f601ef..fd29730175a6b 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: 2024-12-03 +date: 2024-12-05 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 f5d8aa98d839e..e7d280a88f7a2 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: 2024-12-03 +date: 2024-12-05 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 2171084dde531..ca9d429f1b1c2 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: 2024-12-03 +date: 2024-12-05 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 ebad34cd2bd63..628c66d36a652 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: 2024-12-03 +date: 2024-12-05 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 4ead6d8c9968a..56e46027490e8 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: 2024-12-03 +date: 2024-12-05 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 3b3612d40743d..8728b332fd669 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: 2024-12-03 +date: 2024-12-05 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 c9ed463683ca7..1ad9916845546 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: 2024-12-03 +date: 2024-12-05 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 74f2c37abcd95..2228b9d8c4085 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: 2024-12-03 +date: 2024-12-05 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 b7cf6dbe337d9..42499bf8d897f 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: 2024-12-03 +date: 2024-12-05 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 59150e002d372..26d23c3b97258 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: 2024-12-03 +date: 2024-12-05 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 7860df573efe2..7b40a5f741eb0 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: 2024-12-03 +date: 2024-12-05 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 a80602c8ca044..0cec768d41108 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: 2024-12-03 +date: 2024-12-05 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 dacb26ea39d3c..12a9ecb5b889e 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: 2024-12-03 +date: 2024-12-05 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 0227136a820fe..8fba07b3a26e8 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: 2024-12-03 +date: 2024-12-05 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 6db68ac78df81..60a31b402b494 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: 2024-12-03 +date: 2024-12-05 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.devdocs.json b/api_docs/kbn_security_solution_features.devdocs.json index 8549994fd336f..f77d52c6d9ffa 100644 --- a/api_docs/kbn_security_solution_features.devdocs.json +++ b/api_docs/kbn_security_solution_features.devdocs.json @@ -57,7 +57,9 @@ "section": "def-common.KibanaFeatureScope", "text": "KibanaFeatureScope" }, - "[] | undefined; order?: number | undefined; name: string; alerting?: readonly string[] | undefined; cases?: readonly string[] | undefined; hidden?: boolean | undefined; description?: string | undefined; category: ", + "[] | undefined; order?: number | undefined; name: string; alerting?: ", + "AlertingKibanaPrivilege", + " | undefined; cases?: readonly string[] | undefined; hidden?: boolean | undefined; description?: string | undefined; category: ", { "pluginId": "@kbn/core-application-common", "scope": "common", @@ -170,7 +172,9 @@ "section": "def-common.KibanaFeatureScope", "text": "KibanaFeatureScope" }, - "[] | undefined; order?: number | undefined; name: string; alerting?: readonly string[] | undefined; cases?: readonly string[] | undefined; hidden?: boolean | undefined; description?: string | undefined; category: ", + "[] | undefined; order?: number | undefined; name: string; alerting?: ", + "AlertingKibanaPrivilege", + " | undefined; cases?: readonly string[] | undefined; hidden?: boolean | undefined; description?: string | undefined; category: ", { "pluginId": "@kbn/core-application-common", "scope": "common", @@ -469,7 +473,15 @@ "section": "def-common.RecursivePartial", "text": "RecursivePartial" }, - "<{ rule?: { all?: readonly string[] | undefined; read?: readonly string[] | undefined; } | undefined; alert?: { all?: readonly string[] | undefined; read?: readonly string[] | undefined; } | undefined; } | undefined>; cases?: ", + "<{ rule?: { all?: ", + "AlertingKibanaPrivilege", + " | undefined; read?: ", + "AlertingKibanaPrivilege", + " | undefined; } | undefined; alert?: { all?: ", + "AlertingKibanaPrivilege", + " | undefined; read?: ", + "AlertingKibanaPrivilege", + " | undefined; } | undefined; } | undefined>; cases?: ", { "pluginId": "@kbn/utility-types", "scope": "common", diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index cfae5b98640c1..aece765ae9702 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: 2024-12-03 +date: 2024-12-05 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 a6c6a0bc8b4cc..b22b550d202de 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: 2024-12-03 +date: 2024-12-05 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 b59dc38d0d65f..83256bbb60a35 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: 2024-12-03 +date: 2024-12-05 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 51a54e68c6d39..051a0883deae2 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: 2024-12-03 +date: 2024-12-05 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 995a86bd52251..d58b0b0dfe47c 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: 2024-12-03 +date: 2024-12-05 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 375acf6485700..8015bb4fed32e 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: 2024-12-03 +date: 2024-12-05 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 c8fbe41adc821..518de5069f5c7 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: 2024-12-03 +date: 2024-12-05 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 29c7acff0d35b..10872029fe051 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: 2024-12-03 +date: 2024-12-05 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 7c918c80d9e82..30fe1092ae20c 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: 2024-12-03 +date: 2024-12-05 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 ea26ddab6a94d..18cc1d9824859 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: 2024-12-03 +date: 2024-12-05 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 3c9d620a2b6fd..59813dd16ca85 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: 2024-12-03 +date: 2024-12-05 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 1cadbad642b59..cac972b0d625c 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: 2024-12-03 +date: 2024-12-05 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 c97c65e926681..e3488134e926b 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: 2024-12-03 +date: 2024-12-05 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 475670953a925..573a0af403027 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: 2024-12-03 +date: 2024-12-05 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 35eabcf16f602..f4d2902f71b7f 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: 2024-12-03 +date: 2024-12-05 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 5acbde47bdf9a..532c4aff3e698 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: 2024-12-03 +date: 2024-12-05 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 65cd4a1e4db0d..a9330d8e5dbd0 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: 2024-12-03 +date: 2024-12-05 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 47034d9238fd1..105b3e4540180 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: 2024-12-03 +date: 2024-12-05 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 f3596fe402d03..2d50a210666ee 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: 2024-12-03 +date: 2024-12-05 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.devdocs.json b/api_docs/kbn_securitysolution_rules.devdocs.json index 15c7914511c23..fe9b23ae17e99 100644 --- a/api_docs/kbn_securitysolution_rules.devdocs.json +++ b/api_docs/kbn_securitysolution_rules.devdocs.json @@ -296,6 +296,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/securitysolution-rules", + "id": "def-common.SECURITY_SOLUTION_RULE_TYPE_IDS", + "type": "Array", + "tags": [], + "label": "SECURITY_SOLUTION_RULE_TYPE_IDS", + "description": [], + "signature": [ + "(\"siem.eqlRule\" | \"siem.esqlRule\" | \"siem.indicatorRule\" | \"siem.mlRule\" | \"siem.queryRule\" | \"siem.savedQueryRule\" | \"siem.thresholdRule\" | \"siem.newTermsRule\")[]" + ], + "path": "packages/kbn-securitysolution-rules/src/rule_type_constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/securitysolution-rules", "id": "def-common.SIGNALS_ID", diff --git a/api_docs/kbn_securitysolution_rules.mdx b/api_docs/kbn_securitysolution_rules.mdx index 796441a88f2fb..af93af1c2bd6c 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-rules'] --- import kbnSecuritysolutionRulesObj from './kbn_securitysolution_rules.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-detection-engine](https://github.com/orgs/elastic/tea | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 28 | 0 | 25 | 0 | +| 29 | 0 | 26 | 0 | ## Common diff --git a/api_docs/kbn_securitysolution_t_grid.mdx b/api_docs/kbn_securitysolution_t_grid.mdx index b69ebb507b467..7cbb5cfcf4b21 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: 2024-12-03 +date: 2024-12-05 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 3bd451984fd2e..c370f29498099 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: 2024-12-03 +date: 2024-12-05 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 e321b98542f9f..ded0e09e5950b 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: 2024-12-03 +date: 2024-12-05 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 c7f27f9b9f5b5..8981034abc16c 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: 2024-12-03 +date: 2024-12-05 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 38a373079d662..99ec9eff9f1c9 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: 2024-12-03 +date: 2024-12-05 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 e439098ba3498..3c63f400f5f7c 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: 2024-12-03 +date: 2024-12-05 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 7f064985631c8..bf17fda265bd3 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: 2024-12-03 +date: 2024-12-05 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 d22ce4172aa69..34b950278519e 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: 2024-12-03 +date: 2024-12-05 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 5963967d8bcf7..235ddb8346826 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: 2024-12-03 +date: 2024-12-05 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 f8a1e6cc37fdc..da738e6cd2cbe 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: 2024-12-03 +date: 2024-12-05 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 3442c34bdbb85..858f9f7085f3b 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: 2024-12-03 +date: 2024-12-05 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 a174fe461afa2..4ed5c69136af7 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: 2024-12-03 +date: 2024-12-05 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 75eddfcf4e298..69c620329d44d 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: 2024-12-03 +date: 2024-12-05 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 07f0127523f52..dd0363c7f94d2 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: 2024-12-03 +date: 2024-12-05 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 a4aa5096b5024..f041d73864106 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: 2024-12-03 +date: 2024-12-05 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 28ae6716f3ee9..7dfdc999d217e 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: 2024-12-03 +date: 2024-12-05 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 e0021c7cc2165..6d0bc5b47d195 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: 2024-12-03 +date: 2024-12-05 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 9ec03f02229b8..ae1c36ad0bf38 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: 2024-12-03 +date: 2024-12-05 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 76154e77fe208..f2faffce46eef 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: 2024-12-03 +date: 2024-12-05 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 a17e903b64496..afafdbe01cf52 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: 2024-12-03 +date: 2024-12-05 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 d9b5c7ee64b38..74f76c42410cf 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: 2024-12-03 +date: 2024-12-05 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 7dd85fe4f2e9b..c114b1c7c1242 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: 2024-12-03 +date: 2024-12-05 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 fe89aed708712..56fb65d18e823 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: 2024-12-03 +date: 2024-12-05 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 6db103816744f..dc14e663bb265 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: 2024-12-03 +date: 2024-12-05 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 db98855c73e14..c3ec414139b13 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: 2024-12-03 +date: 2024-12-05 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 5aaa50af518fd..0a4f1ce0882d7 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: 2024-12-03 +date: 2024-12-05 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 900dd0cc61236..c2ef00151dc26 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: 2024-12-03 +date: 2024-12-05 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 c165fada0a6b8..fe233ec6c9b79 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: 2024-12-03 +date: 2024-12-05 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 fb041bb4b4dff..cb1e518b57172 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: 2024-12-03 +date: 2024-12-05 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 64c89f8895884..b0a8ca2a55028 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: 2024-12-03 +date: 2024-12-05 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 45b634682af66..3e147a88ba27e 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: 2024-12-03 +date: 2024-12-05 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 99b41b41931c3..59d33903bd7b9 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: 2024-12-03 +date: 2024-12-05 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 c5b24bded152a..d128f233ffb51 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: 2024-12-03 +date: 2024-12-05 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 2c2fc5d749455..c7ab3578cfa55 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: 2024-12-03 +date: 2024-12-05 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 1de155e2e8a79..104b73f31f044 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: 2024-12-03 +date: 2024-12-05 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 1283451195537..d8e0bea30a87a 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: 2024-12-03 +date: 2024-12-05 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 8827e97e3052b..2b5efee386948 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: 2024-12-03 +date: 2024-12-05 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 69a3478aed4b7..2acdcc173320c 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: 2024-12-03 +date: 2024-12-05 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 be2cff9d73bd0..482004a4a91a8 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: 2024-12-03 +date: 2024-12-05 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 81784c4767202..8f3bfae7f219d 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: 2024-12-03 +date: 2024-12-05 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 a57150fe66db4..c56fcbdc80657 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: 2024-12-03 +date: 2024-12-05 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 079c87c939d2c..c41e6bd415dc1 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: 2024-12-03 +date: 2024-12-05 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 6d4583ce83a9b..cf40558b1d07d 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: 2024-12-03 +date: 2024-12-05 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 18b7993305585..78afcc9ac763d 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: 2024-12-03 +date: 2024-12-05 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 97f657a264c89..8e0d9562d314a 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: 2024-12-03 +date: 2024-12-05 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 7e4a649020b6d..a52b1fe929535 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: 2024-12-03 +date: 2024-12-05 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 e0fad918bab42..c446cbcb35a8e 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: 2024-12-03 +date: 2024-12-05 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 c90d09d43a625..ac4c69658a6eb 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: 2024-12-03 +date: 2024-12-05 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 820ab7568a2fb..bbbb33e24c127 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: 2024-12-03 +date: 2024-12-05 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 f19e0a6f0d20b..6e2f9a0d7edf0 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: 2024-12-03 +date: 2024-12-05 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 96f5752bb324e..2ab9a355f339f 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: 2024-12-03 +date: 2024-12-05 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 0263713730b97..4a1be765fae64 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: 2024-12-03 +date: 2024-12-05 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 2a99930e98c06..c474cfa289d3b 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: 2024-12-03 +date: 2024-12-05 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 acb6a8173eebd..c9640e76e5b91 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: 2024-12-03 +date: 2024-12-05 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 1c0edd62e378a..1147c8628b73b 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: 2024-12-03 +date: 2024-12-05 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 92284a5b23c21..59288860028b0 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: 2024-12-03 +date: 2024-12-05 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 59a5694310014..d9c6dc6a006e0 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: 2024-12-03 +date: 2024-12-05 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 938c72543d30f..b011596f89319 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: 2024-12-03 +date: 2024-12-05 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.devdocs.json b/api_docs/kbn_sse_utils_server.devdocs.json index add589a703b5e..dbf75dfc2083a 100644 --- a/api_docs/kbn_sse_utils_server.devdocs.json +++ b/api_docs/kbn_sse_utils_server.devdocs.json @@ -55,6 +55,45 @@ ], "returnComment": [], "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/sse-utils-server", + "id": "def-common.supertestToObservable", + "type": "Function", + "tags": [], + "label": "supertestToObservable", + "description": [ + "\nConvert a supertest response to an SSE observable.\n\nNote: the supertest response should *NOT* be awaited when using that utility,\nor at least not before calling it.\n" + ], + "signature": [ + "(response: ", + "Test", + ") => ", + "Observable", + "" + ], + "path": "packages/kbn-sse-utils-server/src/supertest_to_observable.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/sse-utils-server", + "id": "def-common.supertestToObservable.$1", + "type": "Object", + "tags": [], + "label": "response", + "description": [], + "signature": [ + "Test" + ], + "path": "packages/kbn-sse-utils-server/src/supertest_to_observable.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false } ], "interfaces": [], diff --git a/api_docs/kbn_sse_utils_server.mdx b/api_docs/kbn_sse_utils_server.mdx index b644dd00225be..cebfa7235f064 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils-server'] --- import kbnSseUtilsServerObj from './kbn_sse_utils_server.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs- | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 2 | 0 | 2 | 0 | +| 4 | 0 | 3 | 0 | ## Common diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index 381a352aa0af6..cacd4078dc9f0 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: 2024-12-03 +date: 2024-12-05 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 a6775c662e9ba..14ded0c87e2f6 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: 2024-12-03 +date: 2024-12-05 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 1fc5797c7af79..3837fd10aba3e 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_synthetics_e2e.mdx b/api_docs/kbn_synthetics_e2e.mdx index 711deb91b9bbe..596a8d5f9ede5 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: 2024-12-03 +date: 2024-12-05 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 af24792bd8bfd..c706181bdbeea 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: 2024-12-03 +date: 2024-12-05 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 334f1857e3fa4..188bdf4c20e5e 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/telemetry-tools'] --- import kbnTelemetryToolsObj from './kbn_telemetry_tools.devdocs.json'; diff --git a/api_docs/kbn_test.devdocs.json b/api_docs/kbn_test.devdocs.json index d06c2234a316d..85e09a0c2b0bc 100644 --- a/api_docs/kbn_test.devdocs.json +++ b/api_docs/kbn_test.devdocs.json @@ -2167,6 +2167,112 @@ } ], "functions": [ + { + "parentPluginId": "@kbn/test", + "id": "def-common.cleanupElasticsearch", + "type": "Function", + "tags": [], + "label": "cleanupElasticsearch", + "description": [], + "signature": [ + "(node: ", + { + "pluginId": "@kbn/test", + "scope": "common", + "docId": "kibKbnTestPluginApi", + "section": "def-common.ICluster", + "text": "ICluster" + }, + ", isServerless: boolean, logsDir: string | undefined, log: ", + { + "pluginId": "@kbn/tooling-log", + "scope": "common", + "docId": "kibKbnToolingLogPluginApi", + "section": "def-common.ToolingLog", + "text": "ToolingLog" + }, + ") => Promise" + ], + "path": "packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/test", + "id": "def-common.cleanupElasticsearch.$1", + "type": "Object", + "tags": [], + "label": "node", + "description": [], + "signature": [ + { + "pluginId": "@kbn/test", + "scope": "common", + "docId": "kibKbnTestPluginApi", + "section": "def-common.ICluster", + "text": "ICluster" + } + ], + "path": "packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/test", + "id": "def-common.cleanupElasticsearch.$2", + "type": "boolean", + "tags": [], + "label": "isServerless", + "description": [], + "signature": [ + "boolean" + ], + "path": "packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/test", + "id": "def-common.cleanupElasticsearch.$3", + "type": "string", + "tags": [], + "label": "logsDir", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "@kbn/test", + "id": "def-common.cleanupElasticsearch.$4", + "type": "Object", + "tags": [], + "label": "log", + "description": [], + "signature": [ + { + "pluginId": "@kbn/tooling-log", + "scope": "common", + "docId": "kibKbnToolingLogPluginApi", + "section": "def-common.ToolingLog", + "text": "ToolingLog" + } + ], + "path": "packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/test", "id": "def-common.createAsyncInstance", diff --git a/api_docs/kbn_test.mdx b/api_docs/kbn_test.mdx index 7d2f6d15b2500..caaa930e0b2e5 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kiban | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 353 | 4 | 298 | 14 | +| 358 | 4 | 303 | 14 | ## Common diff --git a/api_docs/kbn_test_eui_helpers.mdx b/api_docs/kbn_test_eui_helpers.mdx index f7625b6d00353..49443b0f2b540 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: 2024-12-03 +date: 2024-12-05 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 fb69f623ea84d..5f86aedaeaa0c 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: 2024-12-03 +date: 2024-12-05 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 02c286b503a3c..bcf8c08d96cb0 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: 2024-12-03 +date: 2024-12-05 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 acc61504485a3..e9c51c80bff42 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: 2024-12-03 +date: 2024-12-05 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 edf7f58b4bdac..c3c19c6e2707f 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: 2024-12-03 +date: 2024-12-05 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 6c930f1bafb85..7ba5f027e9993 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: 2024-12-03 +date: 2024-12-05 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.devdocs.json b/api_docs/kbn_triggers_actions_ui_types.devdocs.json index 2f521b77ee6ce..1801bba9a5515 100644 --- a/api_docs/kbn_triggers_actions_ui_types.devdocs.json +++ b/api_docs/kbn_triggers_actions_ui_types.devdocs.json @@ -110,7 +110,7 @@ "section": "def-common.RuleType", "text": "RuleType" }, - ", \"id\" | \"name\" | \"recoveryActionGroup\" | \"actionGroups\" | \"defaultActionGroupId\" | \"producer\" | \"minimumLicenseRequired\" | \"defaultScheduleInterval\" | \"ruleTaskTimeout\" | \"doesSetRecoveryContext\">" + ", \"id\" | \"name\" | \"recoveryActionGroup\" | \"actionGroups\" | \"defaultActionGroupId\" | \"category\" | \"producer\" | \"minimumLicenseRequired\" | \"defaultScheduleInterval\" | \"ruleTaskTimeout\" | \"doesSetRecoveryContext\">" ], "path": "packages/kbn-triggers-actions-ui-types/rule_types.ts", "deprecated": false, @@ -241,6 +241,51 @@ "deprecated": false, "trackAdoption": false, "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/triggers-actions-ui-types", + "id": "def-common.RuleTypeIndexWithDescriptions", + "type": "Type", + "tags": [], + "label": "RuleTypeIndexWithDescriptions", + "description": [], + "signature": [ + "Map" + ], + "path": "packages/kbn-triggers-actions-ui-types/rule_types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/triggers-actions-ui-types", + "id": "def-common.RuleTypeWithDescription", + "type": "Type", + "tags": [], + "label": "RuleTypeWithDescription", + "description": [], + "signature": [ + { + "pluginId": "@kbn/triggers-actions-ui-types", + "scope": "common", + "docId": "kibKbnTriggersActionsUiTypesPluginApi", + "section": "def-common.RuleType", + "text": "RuleType" + }, + " & { description?: string | undefined; }" + ], + "path": "packages/kbn-triggers-actions-ui-types/rule_types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false } ], "objects": [ diff --git a/api_docs/kbn_triggers_actions_ui_types.mdx b/api_docs/kbn_triggers_actions_ui_types.mdx index f7d11a0f01fc7..7a76b37e5528a 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/triggers-actions-ui-types'] --- import kbnTriggersActionsUiTypesObj from './kbn_triggers_actions_ui_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 | |-------------------|-----------|------------------------|-----------------| -| 15 | 0 | 15 | 0 | +| 17 | 0 | 17 | 0 | ## Common diff --git a/api_docs/kbn_try_in_console.mdx b/api_docs/kbn_try_in_console.mdx index 0783a6380f402..8f523be047a8b 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: 2024-12-03 +date: 2024-12-05 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 e0587ede01cf2..88edc70deb634 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: 2024-12-03 +date: 2024-12-05 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 4c60563b2291f..fe9ba6657fdbf 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: 2024-12-03 +date: 2024-12-05 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 dad32cac09d53..c1d1d422c7b0a 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: 2024-12-03 +date: 2024-12-05 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 a340b03cf1a98..c91d8bd2183b3 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: 2024-12-03 +date: 2024-12-05 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 9dabec875b0bb..9fdc78b1aa38c 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: 2024-12-03 +date: 2024-12-05 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 b8313c9fd1fd6..6c63158f5fc69 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: 2024-12-03 +date: 2024-12-05 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 a0b82df40b47f..b22ae3bb364a9 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: 2024-12-03 +date: 2024-12-05 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 c1f54be675e47..7b4012feffc81 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: 2024-12-03 +date: 2024-12-05 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 1db7abc927de5..59baf075fb9b4 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: 2024-12-03 +date: 2024-12-05 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 56383bcf3c70b..44f992677f2cd 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: 2024-12-03 +date: 2024-12-05 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 5222c704661ab..2af23d5eb7500 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: 2024-12-03 +date: 2024-12-05 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 cd218a070b837..700263df9d6ca 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: 2024-12-03 +date: 2024-12-05 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 87ecf211ccc4c..df388be4045c2 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: 2024-12-03 +date: 2024-12-05 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 4b49518487ea0..6894218660cc3 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: 2024-12-03 +date: 2024-12-05 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 3dec60b9418d8..b201178f04fad 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: 2024-12-03 +date: 2024-12-05 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 c68e7f789a972..ec8f70b04abb0 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: 2024-12-03 +date: 2024-12-05 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 c2fcf6978f621..c131b146a79f2 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: 2024-12-03 +date: 2024-12-05 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 231e5ddd1e1a5..a00cd4de5c0f6 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: 2024-12-03 +date: 2024-12-05 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 0517fbdcc6409..2b3655b4f7c96 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: 2024-12-03 +date: 2024-12-05 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 086e598844ac2..02522cb4a61a6 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: 2024-12-03 +date: 2024-12-05 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 963af679b9ae0..3ef344eace2f1 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: 2024-12-03 +date: 2024-12-05 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 5aa289d152798..056ea08798a46 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: 2024-12-03 +date: 2024-12-05 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 5d988082e379e..3702555c30403 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: 2024-12-03 +date: 2024-12-05 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 6787003f78943..f8771aa0535f7 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: 2024-12-03 +date: 2024-12-05 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 5c57711ffd9d7..0d2731a0a307c 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] --- import kubernetesSecurityObj from './kubernetes_security.devdocs.json'; diff --git a/api_docs/lens.devdocs.json b/api_docs/lens.devdocs.json index 013522ad1bafa..2aafc998767a6 100644 --- a/api_docs/lens.devdocs.json +++ b/api_docs/lens.devdocs.json @@ -665,7 +665,7 @@ "section": "def-common.Filter", "text": "Filter" }, - "[] | undefined>; isCompatibleWithUnifiedSearch?: (() => boolean) | undefined; query$: ", + "[] | undefined>; isCompatibleWithUnifiedSearch?: (() => boolean) | undefined; canEditUnifiedSearch?: (() => boolean) | undefined; query$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -18289,7 +18289,7 @@ "section": "def-common.Filter", "text": "Filter" }, - "[] | undefined>; isCompatibleWithUnifiedSearch?: (() => boolean) | undefined; query$: ", + "[] | undefined>; isCompatibleWithUnifiedSearch?: (() => boolean) | undefined; canEditUnifiedSearch?: (() => boolean) | undefined; query$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -20843,7 +20843,7 @@ "section": "def-common.Filter", "text": "Filter" }, - "[] | undefined>; isCompatibleWithUnifiedSearch?: (() => boolean) | undefined; query$: ", + "[] | undefined>; isCompatibleWithUnifiedSearch?: (() => boolean) | undefined; canEditUnifiedSearch?: (() => boolean) | undefined; query$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index 2a0fa0fac8df9..e6bdcac40ce95 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: 2024-12-03 +date: 2024-12-05 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 50c415af42cc7..d286697bfc3e6 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: 2024-12-03 +date: 2024-12-05 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 4bb9d046ea56c..fae5d1b6a1044 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: 2024-12-03 +date: 2024-12-05 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 8e4aa9179672c..d71b97ac74c87 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: 2024-12-03 +date: 2024-12-05 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 3666a3ae56f0b..2b05c97edcd09 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: 2024-12-03 +date: 2024-12-05 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 03c4dff3ed058..4963030c351da 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: 2024-12-03 +date: 2024-12-05 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 d8ce2477322ab..51dfe4c0368bc 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: 2024-12-03 +date: 2024-12-05 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 583d6c438c7a4..9430af534ee97 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: 2024-12-03 +date: 2024-12-05 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 baefde7680169..b21975a42075f 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: 2024-12-03 +date: 2024-12-05 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 86875b5059324..f806e45f3c9cd 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: 2024-12-03 +date: 2024-12-05 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 2a0acf38e95f9..52c6c65034c3a 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management'] --- import managementObj from './management.devdocs.json'; diff --git a/api_docs/maps.devdocs.json b/api_docs/maps.devdocs.json index c26fbbab46075..9fc15f88d570b 100644 --- a/api_docs/maps.devdocs.json +++ b/api_docs/maps.devdocs.json @@ -3017,7 +3017,7 @@ "section": "def-public.PublishesFilters", "text": "PublishesFilters" }, - " & { isCompatibleWithUnifiedSearch?: (() => boolean) | undefined; query$: ", + " & { isCompatibleWithUnifiedSearch?: (() => boolean) | undefined; canEditUnifiedSearch?: (() => boolean) | undefined; query$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx index 7b7896bf2a386..542cc753ed5e5 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: 2024-12-03 +date: 2024-12-05 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 fa7e566583a8f..eada5bc1fbbcd 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: 2024-12-03 +date: 2024-12-05 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 7d48db8921317..709fe37157f55 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'metricsDataAccess'] --- import metricsDataAccessObj from './metrics_data_access.devdocs.json'; diff --git a/api_docs/ml.devdocs.json b/api_docs/ml.devdocs.json index 4133d3000fca3..484e9c66925f6 100644 --- a/api_docs/ml.devdocs.json +++ b/api_docs/ml.devdocs.json @@ -996,7 +996,7 @@ "section": "def-public.PublishesFilters", "text": "PublishesFilters" }, - " & { isCompatibleWithUnifiedSearch?: (() => boolean) | undefined; query$: ", + " & { isCompatibleWithUnifiedSearch?: (() => boolean) | undefined; canEditUnifiedSearch?: (() => boolean) | undefined; query$: ", { "pluginId": "@kbn/presentation-publishing", "scope": "public", @@ -1092,9 +1092,9 @@ "description": [], "signature": [ "MlTrainedModelConfig", - " & { pipelines?: Record | null | undefined; origin_job_exists?: boolean | undefined; metadata?: ({ analytics_config: ", + " & { metadata?: (", + "MlTrainedModelConfigMetadata", + " & { analytics_config?: ", { "pluginId": "@kbn/ml-data-frame-analytics-utils", "scope": "common", @@ -1102,7 +1102,7 @@ "section": "def-common.DataFrameAnalyticsConfig", "text": "DataFrameAnalyticsConfig" }, - "; input: unknown; total_feature_importance?: ", + " | undefined; input: unknown; total_feature_importance?: ", { "pluginId": "@kbn/ml-data-frame-analytics-utils", "scope": "common", @@ -1118,25 +1118,7 @@ "section": "def-common.FeatureImportanceBaseline", "text": "FeatureImportanceBaseline" }, - " | undefined; model_aliases?: string[] | undefined; } & Record) | undefined; model_id: string; model_type: ", - { - "pluginId": "@kbn/ml-trained-models-utils", - "scope": "common", - "docId": "kibKbnMlTrainedModelsUtilsPluginApi", - "section": "def-common.TrainedModelType", - "text": "TrainedModelType" - }, - "; tags: string[]; version: string; inference_config?: Record | undefined; indices?: Record[] | undefined; hasInferenceServices?: boolean | undefined; inference_apis?: ", - { - "pluginId": "@kbn/ml-trained-models-utils", - "scope": "common", - "docId": "kibKbnMlTrainedModelsUtilsPluginApi", - "section": "def-common.InferenceAPIConfigResponse", - "text": "InferenceAPIConfigResponse" - }, - "[] | undefined; }" + " | undefined; } & Record) | undefined; }" ], "path": "x-pack/plugins/ml/common/types/trained_models.ts", "deprecated": false, @@ -1643,6 +1625,8 @@ "InferenceQueryParams", " | undefined): Promise<", "TrainedModelConfigResponse", + "[]>; getTrainedModelsList(): Promise<", + "TrainedModelUIItem", "[]>; getTrainedModelStats(modelId?: string | string[] | undefined, params?: ", "InferenceStatsQueryParams", " | undefined): Promise<", @@ -3186,6 +3170,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "ml", + "id": "def-common.ML_RULE_TYPE_IDS", + "type": "Array", + "tags": [], + "label": "ML_RULE_TYPE_IDS", + "description": [], + "signature": [ + "(\"xpack.ml.anomaly_detection_alert\" | \"xpack.ml.anomaly_detection_jobs_health\")[]" + ], + "path": "x-pack/plugins/ml/common/constants/alerts.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "ml", "id": "def-common.SummaryJobState", diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index 7f436ec133229..16ba0339dc6b2 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) for questi | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 148 | 3 | 63 | 104 | +| 149 | 3 | 64 | 104 | ## Client diff --git a/api_docs/mock_idp_plugin.mdx b/api_docs/mock_idp_plugin.mdx index db1d4898b1296..7597824780235 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: 2024-12-03 +date: 2024-12-05 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 23ecf827b250f..48163e5eb5a95 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: 2024-12-03 +date: 2024-12-05 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 e761debc4aa24..00a3703e00386 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoringCollection'] --- import monitoringCollectionObj from './monitoring_collection.devdocs.json'; diff --git a/api_docs/navigation.devdocs.json b/api_docs/navigation.devdocs.json index be99b3dfc8165..066ea166d2c12 100644 --- a/api_docs/navigation.devdocs.json +++ b/api_docs/navigation.devdocs.json @@ -554,7 +554,7 @@ "ToolTipPositions", " | undefined; anchorProps?: (", "CommonProps", - " & React.HTMLAttributes) | undefined; title?: string | undefined; color?: \"subdued\" | \"accent\" | \"accentSecondary\" | \"hollow\" | undefined; size?: \"m\" | \"s\" | undefined; alignment?: \"middle\" | \"baseline\" | undefined; } & ", + " & React.HTMLAttributes) | undefined; title?: string | undefined; color?: \"warning\" | \"subdued\" | \"accent\" | \"accentSecondary\" | \"hollow\" | undefined; size?: \"m\" | \"s\" | undefined; alignment?: \"middle\" | \"baseline\" | undefined; } & ", "DisambiguateSet", " & LabelAsString) | (", "CommonProps", @@ -570,7 +570,7 @@ "ToolTipPositions", " | undefined; anchorProps?: (", "CommonProps", - " & React.HTMLAttributes) | undefined; title?: string | undefined; color?: \"subdued\" | \"accent\" | \"accentSecondary\" | \"hollow\" | undefined; size?: \"m\" | \"s\" | undefined; alignment?: \"middle\" | \"baseline\" | undefined; } & ", + " & React.HTMLAttributes) | undefined; title?: string | undefined; color?: \"warning\" | \"subdued\" | \"accent\" | \"accentSecondary\" | \"hollow\" | undefined; size?: \"m\" | \"s\" | undefined; alignment?: \"middle\" | \"baseline\" | undefined; } & ", "DisambiguateSet", " & ", "DisambiguateSet", @@ -590,7 +590,7 @@ "ToolTipPositions", " | undefined; anchorProps?: (", "CommonProps", - " & React.HTMLAttributes) | undefined; title?: string | undefined; color?: \"subdued\" | \"accent\" | \"accentSecondary\" | \"hollow\" | undefined; size?: \"m\" | \"s\" | undefined; alignment?: \"middle\" | \"baseline\" | undefined; } & ", + " & React.HTMLAttributes) | undefined; title?: string | undefined; color?: \"warning\" | \"subdued\" | \"accent\" | \"accentSecondary\" | \"hollow\" | undefined; size?: \"m\" | \"s\" | undefined; alignment?: \"middle\" | \"baseline\" | undefined; } & ", "DisambiguateSet", " & LabelAsString) | (", "CommonProps", @@ -608,7 +608,7 @@ "ToolTipPositions", " | undefined; anchorProps?: (", "CommonProps", - " & React.HTMLAttributes) | undefined; title?: string | undefined; color?: \"subdued\" | \"accent\" | \"accentSecondary\" | \"hollow\" | undefined; size?: \"m\" | \"s\" | undefined; alignment?: \"middle\" | \"baseline\" | undefined; } & ", + " & React.HTMLAttributes) | undefined; title?: string | undefined; color?: \"warning\" | \"subdued\" | \"accent\" | \"accentSecondary\" | \"hollow\" | undefined; size?: \"m\" | \"s\" | undefined; alignment?: \"middle\" | \"baseline\" | undefined; } & ", "DisambiguateSet", " & ", "DisambiguateSet", @@ -628,7 +628,7 @@ "ToolTipPositions", " | undefined; anchorProps?: (", "CommonProps", - " & React.HTMLAttributes) | undefined; title?: string | undefined; color?: \"subdued\" | \"accent\" | \"accentSecondary\" | \"hollow\" | undefined; size?: \"m\" | \"s\" | undefined; alignment?: \"middle\" | \"baseline\" | undefined; } & ", + " & React.HTMLAttributes) | undefined; title?: string | undefined; color?: \"warning\" | \"subdued\" | \"accent\" | \"accentSecondary\" | \"hollow\" | undefined; size?: \"m\" | \"s\" | undefined; alignment?: \"middle\" | \"baseline\" | undefined; } & ", "DisambiguateSet", " & ", "DisambiguateSet", @@ -648,7 +648,7 @@ "ToolTipPositions", " | undefined; anchorProps?: (", "CommonProps", - " & React.HTMLAttributes) | undefined; title?: string | undefined; color?: \"subdued\" | \"accent\" | \"accentSecondary\" | \"hollow\" | undefined; size?: \"m\" | \"s\" | undefined; alignment?: \"middle\" | \"baseline\" | undefined; } & ", + " & React.HTMLAttributes) | undefined; title?: string | undefined; color?: \"warning\" | \"subdued\" | \"accent\" | \"accentSecondary\" | \"hollow\" | undefined; size?: \"m\" | \"s\" | undefined; alignment?: \"middle\" | \"baseline\" | undefined; } & ", "DisambiguateSet", " & LabelAsString) | (", "CommonProps", @@ -666,7 +666,7 @@ "ToolTipPositions", " | undefined; anchorProps?: (", "CommonProps", - " & React.HTMLAttributes) | undefined; title?: string | undefined; color?: \"subdued\" | \"accent\" | \"accentSecondary\" | \"hollow\" | undefined; size?: \"m\" | \"s\" | undefined; alignment?: \"middle\" | \"baseline\" | undefined; } & ", + " & React.HTMLAttributes) | undefined; title?: string | undefined; color?: \"warning\" | \"subdued\" | \"accent\" | \"accentSecondary\" | \"hollow\" | undefined; size?: \"m\" | \"s\" | undefined; alignment?: \"middle\" | \"baseline\" | undefined; } & ", "DisambiguateSet", " & ", "DisambiguateSet", @@ -686,7 +686,7 @@ "ToolTipPositions", " | undefined; anchorProps?: (", "CommonProps", - " & React.HTMLAttributes) | undefined; title?: string | undefined; color?: \"subdued\" | \"accent\" | \"accentSecondary\" | \"hollow\" | undefined; size?: \"m\" | \"s\" | undefined; alignment?: \"middle\" | \"baseline\" | undefined; } & ", + " & React.HTMLAttributes) | undefined; title?: string | undefined; color?: \"warning\" | \"subdued\" | \"accent\" | \"accentSecondary\" | \"hollow\" | undefined; size?: \"m\" | \"s\" | undefined; alignment?: \"middle\" | \"baseline\" | undefined; } & ", "DisambiguateSet", " & ", "DisambiguateSet", diff --git a/api_docs/navigation.mdx b/api_docs/navigation.mdx index 699697eb251b3..1fbb7cef1ed2c 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: 2024-12-03 +date: 2024-12-05 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 245a48893309c..706b2d7175277 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: 2024-12-03 +date: 2024-12-05 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 cabc113dcef80..f2f3ba21b0499 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: 2024-12-03 +date: 2024-12-05 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 6fffbb0d80b3e..1ff8e8763a00f 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: 2024-12-03 +date: 2024-12-05 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 e41db59251190..76fe12c04e84a 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: 2024-12-03 +date: 2024-12-05 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 70d5cc9a5c0be..ac398a6a63ff6 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: 2024-12-03 +date: 2024-12-05 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 41bb15ce4fe02..64b91c74f67e5 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: 2024-12-03 +date: 2024-12-05 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 39d707158fee5..b9de9b86b93a4 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: 2024-12-03 +date: 2024-12-05 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 9a8534c58aea4..748111ef2e697 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: 2024-12-03 +date: 2024-12-05 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 0446c0eb1c386..9637ce0f978ea 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: 2024-12-03 +date: 2024-12-05 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 3784f6203d55b..8eb7b713ce5d5 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: 2024-12-03 +date: 2024-12-05 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 bf64f7fd4fd91..7fb8c83b4ca75 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: 2024-12-03 +date: 2024-12-05 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 3916ebb5cb959..1df633c972a10 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: 2024-12-03 +date: 2024-12-05 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 d321ce8d8ca21..64cf6c4638b13 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -15,13 +15,13 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Count | Plugins or Packages with a
public API | Number of teams | |--------------|----------|------------------------| -| 895 | 762 | 43 | +| 898 | 765 | 43 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 54810 | 240 | 41195 | 2033 | +| 54976 | 240 | 41347 | 2038 | ## Plugin Directory @@ -31,9 +31,10 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@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 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 880 | 1 | 848 | 50 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 872 | 1 | 839 | 50 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | The user interface for Elastic APM | 29 | 0 | 29 | 119 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 93 | 0 | 93 | 3 | +| | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | Centralized asset inventory experience within the Elastic Security solution. A central place for users to view and manage all their assets from different environments | 6 | 0 | 6 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 9 | 0 | 9 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Considering using bfetch capabilities when fetching large amounts of data. This services supports batching HTTP requests and streaming responses back. | 60 | 1 | 59 | 2 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds Canvas application to Kibana | 9 | 0 | 8 | 3 | @@ -53,7 +54,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | crossClusterReplication | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 0 | 0 | 0 | 0 | | customBranding | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Enables customization of Kibana | 0 | 0 | 0 | 0 | | | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | Add custom data integrations so they can be displayed in the Fleet integrations app | 268 | 0 | 249 | 1 | -| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds the Dashboard app to Kibana | 114 | 0 | 111 | 13 | +| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds the Dashboard app to Kibana | 114 | 0 | 111 | 14 | | | [@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. | 3209 | 31 | 2594 | 24 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 6 | 0 | 6 | 0 | @@ -69,13 +70,13 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 35 | 0 | 33 | 2 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | A stateful layer to register shared features and provide an access point to discover without a direct dependency | 26 | 0 | 23 | 2 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | APIs used to assess the quality of data in Elasticsearch indexes | 2 | 0 | 0 | 0 | -| | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | Server APIs for the Elastic AI Assistant | 53 | 0 | 38 | 2 | +| | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | Server APIs for the Elastic AI Assistant | 56 | 0 | 41 | 2 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds embeddables service to Kibana | 578 | 1 | 468 | 9 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Extends embeddable plugin with more functionality | 19 | 0 | 19 | 2 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides encryption and decryption utilities for saved objects containing sensitive information. | 54 | 0 | 47 | 1 | | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | Adds dashboards for discovering and managing Enterprise Search products. | 5 | 0 | 5 | 0 | | | [@elastic/obs-entities](https://github.com/orgs/elastic/teams/obs-entities) | - | 2 | 0 | 2 | 0 | -| | [@elastic/obs-entities](https://github.com/orgs/elastic/teams/obs-entities) | Entity manager plugin for entity assets (inventory, topology, etc) | 37 | 0 | 37 | 3 | +| | [@elastic/obs-entities](https://github.com/orgs/elastic/teams/obs-entities) | Entity manager plugin for entity assets (inventory, topology, etc) | 42 | 0 | 42 | 3 | | entityManagerApp | [@elastic/obs-entities](https://github.com/orgs/elastic/teams/obs-entities) | Entity manager plugin for entity assets (inventory, topology, etc) | 0 | 0 | 0 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 99 | 3 | 97 | 3 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 25 | 0 | 9 | 0 | @@ -98,7 +99,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Expression Tagcloud plugin adds a `tagcloud` renderer and function to the expression plugin. The renderer will display the `Wordcloud` chart. | 6 | 0 | 6 | 2 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Expression XY plugin adds a `xy` renderer and function to the expression plugin. The renderer will display the `xy` chart. | 182 | 0 | 171 | 13 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Adds expression runtime to Kibana | 2241 | 17 | 1769 | 6 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 270 | 0 | 110 | 2 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 270 | 0 | 110 | 3 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Index pattern fields and ambiguous values formatters | 292 | 5 | 253 | 3 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | Exposes services for async usage and search of fields metadata. | 45 | 0 | 45 | 9 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The file upload plugin contains components and services for uploading a file, analyzing its data, and then importing the data into an Elasticsearch index. Supported file types include CSV, TSV, newline-delimited JSON and GeoJSON. | 89 | 0 | 89 | 8 | @@ -146,7 +147,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 213 | 0 | 207 | 28 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 60 | 0 | 60 | 0 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | Exposes utilities for accessing metrics data | 135 | 6 | 135 | 5 | -| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the machine learning features provided by Elastic. | 148 | 3 | 63 | 104 | +| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the machine learning features provided by Elastic. | 149 | 3 | 64 | 104 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 2 | 0 | 2 | 0 | | | [@elastic/stack-monitoring](https://github.com/orgs/elastic/teams/stack-monitoring) | - | 15 | 3 | 13 | 1 | | | [@elastic/stack-monitoring](https://github.com/orgs/elastic/teams/stack-monitoring) | - | 9 | 0 | 9 | 0 | @@ -169,9 +170,9 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 16 | 1 | 16 | 0 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 22 | 0 | 22 | 7 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 23 | 0 | 23 | 0 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Reporting Services enables applications to feature reports that the user can automate with Watcher and download later. | 9 | 0 | 2 | 0 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Reporting Services enables applications to feature reports that the user can automate with Watcher and download later. | 7 | 0 | 2 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 21 | 0 | 21 | 0 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 263 | 0 | 226 | 10 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 259 | 0 | 222 | 10 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 24 | 0 | 19 | 2 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 97 | 2 | 96 | 3 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 26 | 0 | 26 | 1 | @@ -199,13 +200,13 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | Serverless customizations for search. | 7 | 0 | 7 | 0 | | | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 134 | 0 | 134 | 8 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Adds URL Service and sharing capabilities to Kibana | 136 | 0 | 73 | 15 | -| | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 47 | 0 | 47 | 2 | +| | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 48 | 0 | 48 | 2 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 22 | 1 | 22 | 1 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides the Spaces feature, which allows saved objects to be organized into meaningful categories. | 269 | 0 | 73 | 1 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 25 | 0 | 25 | 3 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 10 | 0 | 10 | 0 | -| | @simianhacker @flash1293 @dgieselaar | A manager for Streams | 13 | 0 | 13 | 4 | -| | @simianhacker @flash1293 @dgieselaar | - | 8 | 0 | 8 | 0 | +| | [@elastic/streams-program-team](https://github.com/orgs/elastic/teams/streams-program-team) | A manager for Streams | 13 | 0 | 13 | 4 | +| | [@elastic/streams-program-team](https://github.com/orgs/elastic/teams/streams-program-team) | - | 8 | 0 | 8 | 0 | | synthetics | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | This plugin visualizes data from Synthetics and Heartbeat, and integrates with other Observability solutions. | 0 | 0 | 0 | 1 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 108 | 0 | 64 | 7 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 45 | 0 | 1 | 0 | @@ -223,7 +224,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | The `unifiedHistogram` plugin provides UI components to create a layout including a resizable histogram and a main display. | 69 | 0 | 35 | 6 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Contains all the key functionality of Kibana's unified search experience.Contains all the key functionality of Kibana's unified search experience. | 149 | 2 | 112 | 21 | | upgradeAssistant | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 0 | 0 | 0 | 0 | -| | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | This plugin visualizes data from Heartbeat, and integrates with other Observability solutions. | 1 | 0 | 1 | 0 | +| | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | This plugin visualizes data from Heartbeat, and integrates with other Observability solutions. | 1 | 0 | 0 | 0 | | urlDrilldown | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Adds drilldown implementations to Kibana | 0 | 0 | 0 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 12 | 0 | 12 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 52 | 0 | 14 | 5 | @@ -259,8 +260,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 23 | 0 | 22 | 0 | | | [@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) | - | 31 | 0 | 15 | 1 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 321 | 0 | 305 | 8 | +| | [@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/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 | @@ -512,7 +513,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 15 | 0 | 9 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 38 | 2 | 33 | 0 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 37 | 0 | 34 | 2 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 284 | 0 | 234 | 4 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 277 | 0 | 227 | 4 | | | [@elastic/docs](https://github.com/orgs/elastic/teams/docs) | - | 80 | 0 | 80 | 2 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 5 | 0 | 5 | 1 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 57 | 0 | 30 | 6 | @@ -528,7 +529,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 271 | 1 | 210 | 14 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 30 | 0 | 30 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 1 | 0 | -| | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 283 | 1 | 222 | 36 | +| | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 285 | 1 | 223 | 36 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 29 | 0 | 12 | 0 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 83 | 0 | 74 | 0 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 205 | 0 | 193 | 12 | @@ -541,6 +542,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 3 | 0 | 3 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 111 | 2 | 86 | 1 | | | [@elastic/appex-qa](https://github.com/orgs/elastic/teams/appex-qa) | - | 560 | 6 | 520 | 7 | +| | [@elastic/appex-ai-infra](https://github.com/orgs/elastic/teams/appex-ai-infra) | - | 10 | 0 | 8 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 1 | 0 | 0 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 1 | 0 | 1 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 26 | 0 | 26 | 1 | @@ -585,7 +587,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 23 | 0 | 7 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 8 | 0 | 2 | 3 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 45 | 0 | 0 | 0 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 140 | 0 | 139 | 0 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 138 | 0 | 137 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 20 | 0 | 11 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 88 | 0 | 10 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 56 | 0 | 6 | 0 | @@ -670,17 +672,18 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 17 | 0 | 16 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 11 | 0 | 9 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 111 | 0 | 104 | 2 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 92 | 0 | 91 | 0 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 110 | 0 | 103 | 2 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 91 | 0 | 91 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | A component for creating resizable layouts containing a fixed width panel and a flexible panel, with support for horizontal and vertical layouts. | 18 | 0 | 5 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 3 | 0 | 3 | 0 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 157 | 0 | 156 | 7 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 8 | 0 | 8 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 13 | 2 | 8 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 3 | 0 | 3 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 10 | 0 | 10 | 1 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 2 | 0 | 1 | 1 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 16 | 0 | 16 | 1 | -| | [@elastic/security-detections-response](https://github.com/orgs/elastic/teams/security-detections-response) | - | 138 | 0 | 135 | 0 | +| | [@elastic/security-detections-response](https://github.com/orgs/elastic/teams/security-detections-response) | - | 152 | 0 | 140 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 15 | 0 | 14 | 0 | | | [@elastic/appex-qa](https://github.com/orgs/elastic/teams/appex-qa) | - | 119 | 0 | 86 | 8 | @@ -723,7 +726,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/security-detection-engine](https://github.com/orgs/elastic/teams/security-detection-engine) | - | 35 | 0 | 23 | 0 | | | [@elastic/security-detection-engine](https://github.com/orgs/elastic/teams/security-detection-engine) | - | 94 | 0 | 81 | 0 | | | [@elastic/security-detection-engine](https://github.com/orgs/elastic/teams/security-detection-engine) | - | 211 | 0 | 162 | 0 | -| | [@elastic/security-detection-engine](https://github.com/orgs/elastic/teams/security-detection-engine) | - | 28 | 0 | 25 | 0 | +| | [@elastic/security-detection-engine](https://github.com/orgs/elastic/teams/security-detection-engine) | - | 29 | 0 | 26 | 0 | | | [@elastic/security-detection-engine](https://github.com/orgs/elastic/teams/security-detection-engine) | - | 120 | 0 | 116 | 0 | | | [@elastic/security-detection-engine](https://github.com/orgs/elastic/teams/security-detection-engine) | - | 63 | 0 | 55 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 69 | 0 | 64 | 0 | @@ -782,21 +785,21 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 4 | 0 | 4 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 19 | 0 | 19 | 3 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 1 | 0 | 1 | 1 | -| | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 2 | 0 | 2 | 0 | +| | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 4 | 0 | 3 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 108 | 2 | 70 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 4 | 0 | 2 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 41 | 2 | 21 | 0 | | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 32 | 2 | 32 | 0 | | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 19 | 0 | 19 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 7 | 0 | 5 | 1 | -| | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 353 | 4 | 298 | 14 | +| | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 358 | 4 | 303 | 14 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 37 | 1 | 19 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 131 | 3 | 98 | 2 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 1 | 0 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 8 | 0 | 8 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 74 | 0 | 55 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 9 | 0 | 7 | 0 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 15 | 0 | 15 | 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) | - | 2 | 0 | 2 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 40 | 0 | 25 | 1 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 92 | 0 | 92 | 2 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index ba7ad19e35c1a..01414e90ef48f 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: 2024-12-03 +date: 2024-12-05 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 608ee8ec6052a..a78dd1125b6fa 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: 2024-12-03 +date: 2024-12-05 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 b4d5a3abd7bbd..5b32c12174e0b 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: 2024-12-03 +date: 2024-12-05 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 e483cfd96c659..0acc2ff44bf6a 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: 2024-12-03 +date: 2024-12-05 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 acc71b8508e7f..7912783a48de0 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: 2024-12-03 +date: 2024-12-05 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 0c8f1c61f827d..2b63fa1ba1ae6 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: 2024-12-03 +date: 2024-12-05 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 35957e03e59f3..6804d5935dd9f 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'reporting'] --- import reportingObj from './reporting.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 9 | 0 | 2 | 0 | +| 7 | 0 | 2 | 0 | ## Client diff --git a/api_docs/rollup.mdx b/api_docs/rollup.mdx index 774258153466e..fb070eb291b15 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup'] --- import rollupObj from './rollup.devdocs.json'; diff --git a/api_docs/rule_registry.devdocs.json b/api_docs/rule_registry.devdocs.json index 17ebe064cea2a..c8b4ab490604b 100644 --- a/api_docs/rule_registry.devdocs.json +++ b/api_docs/rule_registry.devdocs.json @@ -139,7 +139,7 @@ "label": "getAlertSummary", "description": [], "signature": [ - "({ gte, lte, featureIds, filter, fixedInterval, }: GetAlertSummaryParams) => Promise<{ activeAlertCount: number; recoveredAlertCount: number; activeAlerts: ", + "({ gte, lte, ruleTypeIds, consumers, filter, fixedInterval, }: GetAlertSummaryParams) => Promise<{ activeAlertCount: number; recoveredAlertCount: number; activeAlerts: ", "AggregationsBuckets", "<", "AggregationsDateHistogramBucket", @@ -158,7 +158,7 @@ "id": "def-server.AlertsClient.getAlertSummary.$1", "type": "Object", "tags": [], - "label": "{\n gte,\n lte,\n featureIds,\n filter,\n fixedInterval = '1m',\n }", + "label": "{\n gte,\n lte,\n ruleTypeIds,\n consumers,\n filter,\n fixedInterval = '1m',\n }", "description": [], "signature": [ "GetAlertSummaryParams" @@ -401,7 +401,7 @@ }, " = never, TAggregations = Record>({ aggs, featureIds, index, query, search_after: searchAfter, size, sort, track_total_hits: trackTotalHits, _source, runtimeMappings, }: { aggs?: object | undefined; featureIds?: string[] | undefined; index?: string | undefined; query?: object | undefined; search_after?: (string | number)[] | undefined; size?: number | undefined; sort?: ", + ">>({ aggs, ruleTypeIds, consumers, index, query, search_after: searchAfter, size, sort, track_total_hits: trackTotalHits, _source, runtimeMappings, }: { aggs?: object | undefined; ruleTypeIds?: string[] | undefined; consumers?: string[] | undefined; index?: string | undefined; query?: object | undefined; search_after?: (string | number)[] | undefined; size?: number | undefined; sort?: ", "SortOptions", "[] | undefined; track_total_hits?: number | boolean | undefined; _source?: false | string[] | undefined; runtimeMappings?: ", "MappingRuntimeFields", @@ -426,7 +426,7 @@ "id": "def-server.AlertsClient.find.$1", "type": "Object", "tags": [], - "label": "{\n aggs,\n featureIds,\n index,\n query,\n search_after: searchAfter,\n size,\n sort,\n track_total_hits: trackTotalHits,\n _source,\n runtimeMappings,\n }", + "label": "{\n aggs,\n ruleTypeIds,\n consumers,\n index,\n query,\n search_after: searchAfter,\n size,\n sort,\n track_total_hits: trackTotalHits,\n _source,\n runtimeMappings,\n }", "description": [], "path": "x-pack/plugins/rule_registry/server/alert_data_client/alerts_client.ts", "deprecated": false, @@ -448,10 +448,24 @@ }, { "parentPluginId": "ruleRegistry", - "id": "def-server.AlertsClient.find.$1.featureIds", + "id": "def-server.AlertsClient.find.$1.ruleTypeIds", "type": "Array", "tags": [], - "label": "featureIds", + "label": "ruleTypeIds", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "x-pack/plugins/rule_registry/server/alert_data_client/alerts_client.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "ruleRegistry", + "id": "def-server.AlertsClient.find.$1.consumers", + "type": "Array", + "tags": [], + "label": "consumers", "description": [], "signature": [ "string[] | undefined" @@ -589,7 +603,7 @@ "\nPerforms a `find` query to extract aggregations on alert groups" ], "signature": [ - "({ featureIds, groupByField, aggregations, filters, pageIndex, pageSize, sort, }: { featureIds: string[]; groupByField: string; aggregations?: { [x: string]: { avg?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; cardinality?: { field?: string | undefined; precision_threshold?: number | undefined; rehash?: boolean | undefined; missing?: string | number | boolean | undefined; } | undefined; min?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; max?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; sum?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; top_hits?: { explain?: boolean | undefined; docvalue_fields?: string | string[] | undefined; stored_fields?: string | string[] | undefined; from?: number | undefined; size?: number | undefined; sort?: string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"max\" | \"sum\" | \"avg\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; } | (string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"max\" | \"sum\" | \"avg\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; })[] | undefined; seq_no_primary_term?: boolean | undefined; version?: boolean | undefined; track_scores?: boolean | undefined; highlight?: any; _source?: string | boolean | string[] | undefined; } | undefined; weighted_avg?: { format?: string | undefined; value_type?: string | undefined; value?: { field?: string | undefined; missing?: number | undefined; } | undefined; weight?: { field?: string | undefined; missing?: number | undefined; } | undefined; } | undefined; } & BucketAggsSchemas & { aggs?: { [x: string]: BucketAggsSchemas & { avg?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; cardinality?: { field?: string | undefined; precision_threshold?: number | undefined; rehash?: boolean | undefined; missing?: string | number | boolean | undefined; } | undefined; min?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; max?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; sum?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; top_hits?: { explain?: boolean | undefined; docvalue_fields?: string | string[] | undefined; stored_fields?: string | string[] | undefined; from?: number | undefined; size?: number | undefined; sort?: string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"max\" | \"sum\" | \"avg\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; } | (string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"max\" | \"sum\" | \"avg\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; })[] | undefined; seq_no_primary_term?: boolean | undefined; version?: boolean | undefined; track_scores?: boolean | undefined; highlight?: any; _source?: string | boolean | string[] | undefined; } | undefined; weighted_avg?: { format?: string | undefined; value_type?: string | undefined; value?: { field?: string | undefined; missing?: number | undefined; } | undefined; weight?: { field?: string | undefined; missing?: number | undefined; } | undefined; } | undefined; }; } | undefined; aggregations?: { [x: string]: BucketAggsSchemas & { avg?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; cardinality?: { field?: string | undefined; precision_threshold?: number | undefined; rehash?: boolean | undefined; missing?: string | number | boolean | undefined; } | undefined; min?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; max?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; sum?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; top_hits?: { explain?: boolean | undefined; docvalue_fields?: string | string[] | undefined; stored_fields?: string | string[] | undefined; from?: number | undefined; size?: number | undefined; sort?: string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"max\" | \"sum\" | \"avg\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; } | (string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"max\" | \"sum\" | \"avg\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; })[] | undefined; seq_no_primary_term?: boolean | undefined; version?: boolean | undefined; track_scores?: boolean | undefined; highlight?: any; _source?: string | boolean | string[] | undefined; } | undefined; weighted_avg?: { format?: string | undefined; value_type?: string | undefined; value?: { field?: string | undefined; missing?: number | undefined; } | undefined; weight?: { field?: string | undefined; missing?: number | undefined; } | undefined; } | undefined; }; } | undefined; }; } | undefined; filters?: ", + "({ ruleTypeIds, consumers, groupByField, aggregations, filters, pageIndex, pageSize, sort, }: { ruleTypeIds: string[]; consumers?: string[] | undefined; groupByField: string; aggregations?: { [x: string]: { avg?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; cardinality?: { field?: string | undefined; precision_threshold?: number | undefined; rehash?: boolean | undefined; missing?: string | number | boolean | undefined; } | undefined; min?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; max?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; sum?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; top_hits?: { explain?: boolean | undefined; docvalue_fields?: string | string[] | undefined; stored_fields?: string | string[] | undefined; from?: number | undefined; size?: number | undefined; sort?: string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"max\" | \"sum\" | \"avg\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; } | (string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"max\" | \"sum\" | \"avg\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; })[] | undefined; seq_no_primary_term?: boolean | undefined; version?: boolean | undefined; track_scores?: boolean | undefined; highlight?: any; _source?: string | boolean | string[] | undefined; } | undefined; weighted_avg?: { format?: string | undefined; value_type?: string | undefined; value?: { field?: string | undefined; missing?: number | undefined; } | undefined; weight?: { field?: string | undefined; missing?: number | undefined; } | undefined; } | undefined; } & BucketAggsSchemas & { aggs?: { [x: string]: BucketAggsSchemas & { avg?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; cardinality?: { field?: string | undefined; precision_threshold?: number | undefined; rehash?: boolean | undefined; missing?: string | number | boolean | undefined; } | undefined; min?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; max?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; sum?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; top_hits?: { explain?: boolean | undefined; docvalue_fields?: string | string[] | undefined; stored_fields?: string | string[] | undefined; from?: number | undefined; size?: number | undefined; sort?: string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"max\" | \"sum\" | \"avg\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; } | (string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"max\" | \"sum\" | \"avg\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; })[] | undefined; seq_no_primary_term?: boolean | undefined; version?: boolean | undefined; track_scores?: boolean | undefined; highlight?: any; _source?: string | boolean | string[] | undefined; } | undefined; weighted_avg?: { format?: string | undefined; value_type?: string | undefined; value?: { field?: string | undefined; missing?: number | undefined; } | undefined; weight?: { field?: string | undefined; missing?: number | undefined; } | undefined; } | undefined; }; } | undefined; aggregations?: { [x: string]: BucketAggsSchemas & { avg?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; cardinality?: { field?: string | undefined; precision_threshold?: number | undefined; rehash?: boolean | undefined; missing?: string | number | boolean | undefined; } | undefined; min?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; max?: { field?: string | undefined; missing?: string | number | boolean | undefined; format?: string | undefined; } | undefined; sum?: { field?: string | undefined; missing?: string | number | boolean | undefined; } | undefined; top_hits?: { explain?: boolean | undefined; docvalue_fields?: string | string[] | undefined; stored_fields?: string | string[] | undefined; from?: number | undefined; size?: number | undefined; sort?: string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"max\" | \"sum\" | \"avg\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; } | (string | { [x: string]: \"asc\" | \"desc\" | \"_doc\" | { missing?: string | number | boolean | undefined; mode?: \"min\" | \"max\" | \"sum\" | \"avg\" | \"median\" | undefined; order?: \"asc\" | \"desc\" | \"_doc\" | undefined; }; })[] | undefined; seq_no_primary_term?: boolean | undefined; version?: boolean | undefined; track_scores?: boolean | undefined; highlight?: any; _source?: string | boolean | string[] | undefined; } | undefined; weighted_avg?: { format?: string | undefined; value_type?: string | undefined; value?: { field?: string | undefined; missing?: number | undefined; } | undefined; weight?: { field?: string | undefined; missing?: number | undefined; } | undefined; } | undefined; }; } | undefined; }; } | undefined; filters?: ", "QueryDslQueryContainer", "[] | undefined; sort?: ", "SortCombinations", @@ -616,7 +630,7 @@ "id": "def-server.AlertsClient.getGroupAggregations.$1", "type": "Object", "tags": [], - "label": "{\n featureIds,\n groupByField,\n aggregations,\n filters,\n pageIndex,\n pageSize,\n sort = [{ unitsCount: { order: 'desc' } }],\n }", + "label": "{\n ruleTypeIds,\n consumers,\n groupByField,\n aggregations,\n filters,\n pageIndex,\n pageSize,\n sort = [{ unitsCount: { order: 'desc' } }],\n }", "description": [], "path": "x-pack/plugins/rule_registry/server/alert_data_client/alerts_client.ts", "deprecated": false, @@ -624,12 +638,12 @@ "children": [ { "parentPluginId": "ruleRegistry", - "id": "def-server.AlertsClient.getGroupAggregations.$1.featureIds", + "id": "def-server.AlertsClient.getGroupAggregations.$1.ruleTypeIds", "type": "Array", "tags": [], - "label": "featureIds", + "label": "ruleTypeIds", "description": [ - "\nThe feature ids the alerts belong to, used for authorization" + "\nThe rule type IDs the alerts belong to.\nUsed for filtering." ], "signature": [ "string[]" @@ -638,6 +652,22 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "ruleRegistry", + "id": "def-server.AlertsClient.getGroupAggregations.$1.consumers", + "type": "Array", + "tags": [], + "label": "consumers", + "description": [ + "\nThe consumers the alerts belong to.\nUsed for filtering." + ], + "signature": [ + "string[] | undefined" + ], + "path": "x-pack/plugins/rule_registry/server/alert_data_client/alerts_client.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "ruleRegistry", "id": "def-server.AlertsClient.getGroupAggregations.$1.groupByField", @@ -740,7 +770,7 @@ "label": "getAuthorizedAlertsIndices", "description": [], "signature": [ - "(featureIds: string[]) => Promise" + "(ruleTypeIds?: string[] | undefined) => Promise" ], "path": "x-pack/plugins/rule_registry/server/alert_data_client/alerts_client.ts", "deprecated": false, @@ -751,47 +781,15 @@ "id": "def-server.AlertsClient.getAuthorizedAlertsIndices.$1", "type": "Array", "tags": [], - "label": "featureIds", - "description": [], - "signature": [ - "string[]" - ], - "path": "x-pack/plugins/rule_registry/server/alert_data_client/alerts_client.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "ruleRegistry", - "id": "def-server.AlertsClient.getFeatureIdsByRegistrationContexts", - "type": "Function", - "tags": [], - "label": "getFeatureIdsByRegistrationContexts", - "description": [], - "signature": [ - "(RegistrationContexts: string[]) => Promise" - ], - "path": "x-pack/plugins/rule_registry/server/alert_data_client/alerts_client.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "ruleRegistry", - "id": "def-server.AlertsClient.getFeatureIdsByRegistrationContexts.$1", - "type": "Array", - "tags": [], - "label": "RegistrationContexts", + "label": "ruleTypeIds", "description": [], "signature": [ - "string[]" + "string[] | undefined" ], "path": "x-pack/plugins/rule_registry/server/alert_data_client/alerts_client.ts", "deprecated": false, "trackAdoption": false, - "isRequired": true + "isRequired": false } ], "returnComment": [] @@ -804,7 +802,7 @@ "label": "getBrowserFields", "description": [], "signature": [ - "({ featureIds, indices, metaFields, allowNoIndex, }: { featureIds: string[]; indices: string[]; metaFields: string[]; allowNoIndex: boolean; }) => Promise<{ browserFields: ", + "({ ruleTypeIds, indices, metaFields, allowNoIndex, }: { ruleTypeIds: string[]; indices: string[]; metaFields: string[]; allowNoIndex: boolean; }) => Promise<{ browserFields: ", { "pluginId": "@kbn/alerting-types", "scope": "common", @@ -831,7 +829,7 @@ "id": "def-server.AlertsClient.getBrowserFields.$1", "type": "Object", "tags": [], - "label": "{\n featureIds,\n indices,\n metaFields,\n allowNoIndex,\n }", + "label": "{\n ruleTypeIds,\n indices,\n metaFields,\n allowNoIndex,\n }", "description": [], "path": "x-pack/plugins/rule_registry/server/alert_data_client/alerts_client.ts", "deprecated": false, @@ -839,10 +837,10 @@ "children": [ { "parentPluginId": "ruleRegistry", - "id": "def-server.AlertsClient.getBrowserFields.$1.featureIds", + "id": "def-server.AlertsClient.getBrowserFields.$1.ruleTypeIds", "type": "Array", "tags": [], - "label": "featureIds", + "label": "ruleTypeIds", "description": [], "signature": [ "string[]" @@ -1529,38 +1527,6 @@ ], "returnComment": [] }, - { - "parentPluginId": "ruleRegistry", - "id": "def-server.RuleDataService.findFeatureIdsByRegistrationContexts", - "type": "Function", - "tags": [], - "label": "findFeatureIdsByRegistrationContexts", - "description": [], - "signature": [ - "(registrationContexts: string[]) => string[]" - ], - "path": "x-pack/plugins/rule_registry/server/rule_data_plugin_service/rule_data_plugin_service.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "ruleRegistry", - "id": "def-server.RuleDataService.findFeatureIdsByRegistrationContexts.$1", - "type": "Array", - "tags": [], - "label": "registrationContexts", - "description": [], - "signature": [ - "string[]" - ], - "path": "x-pack/plugins/rule_registry/server/rule_data_plugin_service/rule_data_plugin_service.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, { "parentPluginId": "ruleRegistry", "id": "def-server.RuleDataService.findIndexByFeature", @@ -2225,7 +2191,7 @@ "\nID of the Kibana feature associated with the index.\nUsed by alerts-as-data RBAC.\n\nNote from @dhurley14\nThe purpose of the `feature` param is to force the user to update\nthe data structure which contains the mapping of consumers to alerts\nas data indices. The idea is it is typed such that it forces the\nuser to go to the code and modify it. At least until a better system\nis put in place or we move the alerts as data client out of rule registry.\n" ], "signature": [ - "\"ml\" | \"monitoring\" | \"uptime\" | \"siem\" | \"observability\" | \"stackAlerts\" | \"apm\" | \"logs\" | \"infrastructure\" | \"slo\" | \"AlertingExample\"" + "\"ml\" | \"monitoring\" | \"uptime\" | \"siem\" | \"observability\" | \"stackAlerts\" | \"alerts\" | \"apm\" | \"logs\" | \"infrastructure\" | \"slo\" | \"discover\" | \"AlertingExample\"" ], "path": "x-pack/plugins/rule_registry/server/rule_data_plugin_service/index_options.ts", "deprecated": false, @@ -3063,40 +3029,6 @@ } ], "returnComment": [] - }, - { - "parentPluginId": "ruleRegistry", - "id": "def-server.IRuleDataService.findFeatureIdsByRegistrationContexts", - "type": "Function", - "tags": [], - "label": "findFeatureIdsByRegistrationContexts", - "description": [ - "\nLooks up Kibana \"feature\" associated with the given registration context.\nNote: features are used in RBAC." - ], - "signature": [ - "(registrationContexts: string[]) => string[]" - ], - "path": "x-pack/plugins/rule_registry/server/rule_data_plugin_service/rule_data_plugin_service.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "ruleRegistry", - "id": "def-server.IRuleDataService.findFeatureIdsByRegistrationContexts.$1", - "type": "Array", - "tags": [], - "label": "registrationContexts", - "description": [], - "signature": [ - "string[]" - ], - "path": "x-pack/plugins/rule_registry/server/rule_data_plugin_service/rule_data_plugin_service.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] } ], "initialIsOpen": false @@ -3322,8 +3254,8 @@ "description": [], "signature": [ "(alerts: { _id: string; _source: T; }[], suppressionWindow: string, enrichAlerts?: ((alerts: { _id: string; _source: T; }[], params: { spaceId: string; }) => Promise<{ _id: string; _source: T; }[]>) | undefined, currentTimeOverride?: Date | undefined, isRuleExecutionOnly?: boolean | undefined, maxAlerts?: number | undefined) => Promise<", + "SuppressionFields8170", + ">(alerts: { _id: string; _source: T; subAlerts?: { _id: string; _source: T; }[] | undefined; }[], suppressionWindow: string, enrichAlerts?: ((alerts: { _id: string; _source: T; }[], params: { spaceId: string; }) => Promise<{ _id: string; _source: T; }[]>) | undefined, currentTimeOverride?: Date | undefined, isRuleExecutionOnly?: boolean | undefined, maxAlerts?: number | undefined) => Promise<", { "pluginId": "ruleRegistry", "scope": "server", @@ -3346,7 +3278,7 @@ "label": "alerts", "description": [], "signature": [ - "{ _id: string; _source: T; }[]" + "{ _id: string; _source: T; subAlerts?: { _id: string; _source: T; }[] | undefined; }[]" ], "path": "x-pack/plugins/rule_registry/server/utils/persistence_types.ts", "deprecated": false, @@ -4058,8 +3990,8 @@ "description": [], "signature": [ "(alerts: { _id: string; _source: T; }[], suppressionWindow: string, enrichAlerts?: ((alerts: { _id: string; _source: T; }[], params: { spaceId: string; }) => Promise<{ _id: string; _source: T; }[]>) | undefined, currentTimeOverride?: Date | undefined, isRuleExecutionOnly?: boolean | undefined, maxAlerts?: number | undefined) => Promise<", + "SuppressionFields8170", + ">(alerts: { _id: string; _source: T; subAlerts?: { _id: string; _source: T; }[] | undefined; }[], suppressionWindow: string, enrichAlerts?: ((alerts: { _id: string; _source: T; }[], params: { spaceId: string; }) => Promise<{ _id: string; _source: T; }[]>) | undefined, currentTimeOverride?: Date | undefined, isRuleExecutionOnly?: boolean | undefined, maxAlerts?: number | undefined) => Promise<", { "pluginId": "ruleRegistry", "scope": "server", @@ -4082,7 +4014,7 @@ "label": "alerts", "description": [], "signature": [ - "{ _id: string; _source: T; }[]" + "{ _id: string; _source: T; subAlerts?: { _id: string; _source: T; }[] | undefined; }[]" ], "path": "x-pack/plugins/rule_registry/server/utils/persistence_types.ts", "deprecated": false, @@ -4410,8 +4342,8 @@ "pluginId": "alerting", "scope": "server", "docId": "kibAlertingPluginApi", - "section": "def-server.PluginStartContract", - "text": "PluginStartContract" + "section": "def-server.AlertingServerStart", + "text": "AlertingServerStart" } ], "path": "x-pack/plugins/rule_registry/server/plugin.ts", @@ -4897,15 +4829,7 @@ "section": "def-common.ISearchRequestParams", "text": "ISearchRequestParams" }, - "> & { featureIds: ", - { - "pluginId": "@kbn/rule-data-utils", - "scope": "common", - "docId": "kibKbnRuleDataUtilsPluginApi", - "section": "def-common.AlertConsumers", - "text": "AlertConsumers" - }, - "[]; fields?: ", + "> & { ruleTypeIds: string[]; consumers?: string[] | undefined; fields?: ", "QueryDslFieldAndFormat", "[] | undefined; query?: Pick<", "QueryDslQueryContainer", diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx index a2312f45d5df3..3dbb8c0e6a810 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ruleRegistry'] --- import ruleRegistryObj from './rule_registry.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 | |-------------------|-----------|------------------------|-----------------| -| 263 | 0 | 226 | 10 | +| 259 | 0 | 222 | 10 | ## Server diff --git a/api_docs/runtime_fields.mdx b/api_docs/runtime_fields.mdx index 4e8cb4f0a32f2..bc1b863e8305d 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: 2024-12-03 +date: 2024-12-05 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 bb90830dba62f..9c871b27e32dc 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: 2024-12-03 +date: 2024-12-05 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 0d9cdee95f93a..9add26b265187 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: 2024-12-03 +date: 2024-12-05 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 15bd21d5b6d18..f002a09248e93 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: 2024-12-03 +date: 2024-12-05 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 ec1638958e02a..21ea11b39b58f 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: 2024-12-03 +date: 2024-12-05 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 a613566c60776..3d80815e812b7 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: 2024-12-03 +date: 2024-12-05 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 56a59050b9058..2046dd4fea9b5 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: 2024-12-03 +date: 2024-12-05 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 0086b8cb10a91..eb8517c03e3a4 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: 2024-12-03 +date: 2024-12-05 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 c06d70c38dd90..80059588c47ab 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: 2024-12-03 +date: 2024-12-05 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 30858fc27f43b..b82bd5f8e4fda 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: 2024-12-03 +date: 2024-12-05 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 72f4f46714b77..72bab57150441 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: 2024-12-03 +date: 2024-12-05 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 c90944ba62182..1349d9178902d 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: 2024-12-03 +date: 2024-12-05 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 8446bc09cbb0d..c2b13298b2e18 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\" | \"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: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:pipelines\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"searchInferenceEndpoints\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"enterpriseSearchApplications:playground\" | \"appSearch:engines\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\" | \"observability-logs-explorer\" | \"last-used-logs-viewer\" | \"observabilityOnboarding\" | \"inventory\" | \"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: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\" | \"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\" | \"searchInferenceEndpoints\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"enterpriseSearchApplications:playground\" | \"appSearch:engines\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\" | \"observability-logs-explorer\" | \"last-used-logs-viewer\" | \"observabilityOnboarding\" | \"inventory\" | \"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: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/plugins/search_indices/public/types.ts", "deprecated": false, diff --git a/api_docs/search_indices.mdx b/api_docs/search_indices.mdx index fd27a066f0051..78d8ce1c1713e 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: 2024-12-03 +date: 2024-12-05 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 56b3db801e11a..6f67f4d4b6efd 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: 2024-12-03 +date: 2024-12-05 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 9f9ff7e4294c4..2abd5573472a1 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\" | \"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: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:pipelines\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"searchInferenceEndpoints\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"enterpriseSearchApplications:playground\" | \"appSearch:engines\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\" | \"observability-logs-explorer\" | \"last-used-logs-viewer\" | \"observabilityOnboarding\" | \"inventory\" | \"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: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\" | \"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\" | \"searchInferenceEndpoints\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"enterpriseSearchApplications:playground\" | \"appSearch:engines\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\" | \"observability-logs-explorer\" | \"last-used-logs-viewer\" | \"observabilityOnboarding\" | \"inventory\" | \"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: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/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 13ec3c71cb616..e0c890e57baff 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: 2024-12-03 +date: 2024-12-05 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 87e79557b6d02..134a0e12f368f 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: 2024-12-03 +date: 2024-12-05 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 25725925c071e..5754dd1df1c80 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchPlayground'] --- import searchPlaygroundObj from './search_playground.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index 202af84020403..86094ac61c79d 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.devdocs.json b/api_docs/security_solution.devdocs.json index 8320b9f633933..ff8b79974b7b8 100644 --- a/api_docs/security_solution.devdocs.json +++ b/api_docs/security_solution.devdocs.json @@ -522,7 +522,7 @@ "\nExperimental flag needed to enable the link" ], "signature": [ - "\"assistantModelEvaluation\" | \"defendInsights\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"responseActionsSentinelOneKillProcessEnabled\" | \"responseActionsSentinelOneProcessesEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"endpointManagementSpaceAwarenessEnabled\" | \"securitySolutionNotesDisabled\" | \"entityAlertPreviewDisabled\" | \"newUserDetailsFlyoutManagedUser\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"responseActionsTelemetryEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"timelineEsqlTabDisabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"graphVisualizationInFlyoutEnabled\" | \"prebuiltRulesCustomizationEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"valueListItemsModalEnabled\" | \"filterProcessDescendantsForEventFiltersEnabled\" | \"dataIngestionHubEnabled\" | \"entityStoreDisabled\" | \"siemMigrationsEnabled\" | undefined" + "\"assistantModelEvaluation\" | \"defendInsights\" | \"alertSuppressionForSequenceEqlRuleEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"responseActionsSentinelOneKillProcessEnabled\" | \"responseActionsSentinelOneProcessesEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"endpointManagementSpaceAwarenessEnabled\" | \"securitySolutionNotesDisabled\" | \"entityAlertPreviewDisabled\" | \"newUserDetailsFlyoutManagedUser\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"responseActionsTelemetryEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"timelineEsqlTabDisabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"graphVisualizationInFlyoutEnabled\" | \"prebuiltRulesCustomizationEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"valueListItemsModalEnabled\" | \"filterProcessDescendantsForEventFiltersEnabled\" | \"dataIngestionHubEnabled\" | \"entityStoreDisabled\" | \"siemMigrationsEnabled\" | undefined" ], "path": "x-pack/plugins/security_solution/public/common/links/types.ts", "deprecated": false, @@ -602,7 +602,7 @@ "\nExperimental flag needed to disable the link. Opposite of experimentalKey" ], "signature": [ - "\"assistantModelEvaluation\" | \"defendInsights\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"responseActionsSentinelOneKillProcessEnabled\" | \"responseActionsSentinelOneProcessesEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"endpointManagementSpaceAwarenessEnabled\" | \"securitySolutionNotesDisabled\" | \"entityAlertPreviewDisabled\" | \"newUserDetailsFlyoutManagedUser\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"responseActionsTelemetryEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"timelineEsqlTabDisabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"graphVisualizationInFlyoutEnabled\" | \"prebuiltRulesCustomizationEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"valueListItemsModalEnabled\" | \"filterProcessDescendantsForEventFiltersEnabled\" | \"dataIngestionHubEnabled\" | \"entityStoreDisabled\" | \"siemMigrationsEnabled\" | undefined" + "\"assistantModelEvaluation\" | \"defendInsights\" | \"alertSuppressionForSequenceEqlRuleEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"responseActionsSentinelOneKillProcessEnabled\" | \"responseActionsSentinelOneProcessesEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"endpointManagementSpaceAwarenessEnabled\" | \"securitySolutionNotesDisabled\" | \"entityAlertPreviewDisabled\" | \"newUserDetailsFlyoutManagedUser\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"responseActionsTelemetryEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"timelineEsqlTabDisabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"graphVisualizationInFlyoutEnabled\" | \"prebuiltRulesCustomizationEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"valueListItemsModalEnabled\" | \"filterProcessDescendantsForEventFiltersEnabled\" | \"dataIngestionHubEnabled\" | \"entityStoreDisabled\" | \"siemMigrationsEnabled\" | undefined" ], "path": "x-pack/plugins/security_solution/public/common/links/types.ts", "deprecated": false, @@ -1882,7 +1882,7 @@ "label": "experimentalFeatures", "description": [], "signature": [ - "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly endpointManagementSpaceAwarenessEnabled: boolean; readonly securitySolutionNotesDisabled: boolean; readonly entityAlertPreviewDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly responseActionsTelemetryEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly graphVisualizationInFlyoutEnabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; readonly entityStoreDisabled: boolean; readonly siemMigrationsEnabled: boolean; readonly defendInsights: boolean; }" + "{ readonly alertSuppressionForSequenceEqlRuleEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly endpointManagementSpaceAwarenessEnabled: boolean; readonly securitySolutionNotesDisabled: boolean; readonly entityAlertPreviewDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly responseActionsTelemetryEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly graphVisualizationInFlyoutEnabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; readonly entityStoreDisabled: boolean; readonly siemMigrationsEnabled: boolean; readonly defendInsights: boolean; }" ], "path": "x-pack/plugins/security_solution/public/types.ts", "deprecated": false, @@ -3130,7 +3130,7 @@ "\nThe security solution generic experimental features" ], "signature": [ - "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly endpointManagementSpaceAwarenessEnabled: boolean; readonly securitySolutionNotesDisabled: boolean; readonly entityAlertPreviewDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly responseActionsTelemetryEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly graphVisualizationInFlyoutEnabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; readonly entityStoreDisabled: boolean; readonly siemMigrationsEnabled: boolean; readonly defendInsights: boolean; }" + "{ readonly alertSuppressionForSequenceEqlRuleEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly endpointManagementSpaceAwarenessEnabled: boolean; readonly securitySolutionNotesDisabled: boolean; readonly entityAlertPreviewDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly responseActionsTelemetryEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly graphVisualizationInFlyoutEnabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; readonly entityStoreDisabled: boolean; readonly siemMigrationsEnabled: boolean; readonly defendInsights: boolean; }" ], "path": "x-pack/plugins/security_solution/server/plugin_contract.ts", "deprecated": false, @@ -3303,7 +3303,7 @@ "label": "ExperimentalFeatures", "description": [], "signature": [ - "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly endpointManagementSpaceAwarenessEnabled: boolean; readonly securitySolutionNotesDisabled: boolean; readonly entityAlertPreviewDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly responseActionsTelemetryEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly graphVisualizationInFlyoutEnabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; readonly entityStoreDisabled: boolean; readonly siemMigrationsEnabled: boolean; readonly defendInsights: boolean; }" + "{ readonly alertSuppressionForSequenceEqlRuleEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly endpointManagementSpaceAwarenessEnabled: boolean; readonly securitySolutionNotesDisabled: boolean; readonly entityAlertPreviewDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly responseActionsTelemetryEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly graphVisualizationInFlyoutEnabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; readonly entityStoreDisabled: boolean; readonly siemMigrationsEnabled: boolean; readonly defendInsights: boolean; }" ], "path": "x-pack/plugins/security_solution/common/experimental_features.ts", "deprecated": false, @@ -3369,7 +3369,7 @@ "\nA list of allowed values that can be used in `xpack.securitySolution.enableExperimental`.\nThis object is then used to validate and parse the value entered." ], "signature": [ - "{ readonly excludePoliciesInFilterEnabled: false; readonly kubernetesEnabled: false; readonly donutChartEmbeddablesEnabled: false; readonly previewTelemetryUrlEnabled: false; readonly extendedRuleExecutionLoggingEnabled: false; readonly socTrendsEnabled: false; readonly responseActionUploadEnabled: true; readonly automatedProcessActionsEnabled: true; readonly responseActionsSentinelOneV1Enabled: true; readonly responseActionsSentinelOneV2Enabled: true; readonly responseActionsSentinelOneGetFileEnabled: true; readonly responseActionsSentinelOneKillProcessEnabled: true; readonly responseActionsSentinelOneProcessesEnabled: true; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: true; readonly endpointManagementSpaceAwarenessEnabled: false; readonly securitySolutionNotesDisabled: false; readonly entityAlertPreviewDisabled: false; readonly assistantModelEvaluation: false; readonly newUserDetailsFlyoutManagedUser: false; readonly riskScoringPersistence: true; readonly riskScoringRoutesEnabled: true; readonly esqlRulesDisabled: false; readonly protectionUpdatesEnabled: true; readonly disableTimelineSaveTour: false; readonly riskEnginePrivilegesRouteEnabled: true; readonly sentinelOneDataInAnalyzerEnabled: true; readonly sentinelOneManualHostActionsEnabled: true; readonly crowdstrikeDataInAnalyzerEnabled: true; readonly responseActionsTelemetryEnabled: false; readonly jamfDataInAnalyzerEnabled: true; readonly timelineEsqlTabDisabled: false; readonly analyzerDatePickersAndSourcererDisabled: false; readonly graphVisualizationInFlyoutEnabled: false; readonly prebuiltRulesCustomizationEnabled: false; readonly malwareOnWriteScanOptionAvailable: true; readonly unifiedManifestEnabled: true; readonly valueListItemsModalEnabled: true; readonly filterProcessDescendantsForEventFiltersEnabled: true; readonly dataIngestionHubEnabled: false; readonly entityStoreDisabled: false; readonly siemMigrationsEnabled: false; readonly defendInsights: false; }" + "{ readonly alertSuppressionForSequenceEqlRuleEnabled: true; readonly excludePoliciesInFilterEnabled: false; readonly kubernetesEnabled: false; readonly donutChartEmbeddablesEnabled: false; readonly previewTelemetryUrlEnabled: false; readonly extendedRuleExecutionLoggingEnabled: false; readonly socTrendsEnabled: false; readonly responseActionUploadEnabled: true; readonly automatedProcessActionsEnabled: true; readonly responseActionsSentinelOneV1Enabled: true; readonly responseActionsSentinelOneV2Enabled: true; readonly responseActionsSentinelOneGetFileEnabled: true; readonly responseActionsSentinelOneKillProcessEnabled: true; readonly responseActionsSentinelOneProcessesEnabled: true; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: true; readonly endpointManagementSpaceAwarenessEnabled: false; readonly securitySolutionNotesDisabled: false; readonly entityAlertPreviewDisabled: false; readonly assistantModelEvaluation: false; readonly newUserDetailsFlyoutManagedUser: false; readonly riskScoringPersistence: true; readonly riskScoringRoutesEnabled: true; readonly esqlRulesDisabled: false; readonly protectionUpdatesEnabled: true; readonly disableTimelineSaveTour: false; readonly riskEnginePrivilegesRouteEnabled: true; readonly sentinelOneDataInAnalyzerEnabled: true; readonly sentinelOneManualHostActionsEnabled: true; readonly crowdstrikeDataInAnalyzerEnabled: true; readonly responseActionsTelemetryEnabled: false; readonly jamfDataInAnalyzerEnabled: true; readonly timelineEsqlTabDisabled: false; readonly analyzerDatePickersAndSourcererDisabled: false; readonly graphVisualizationInFlyoutEnabled: false; readonly prebuiltRulesCustomizationEnabled: false; readonly malwareOnWriteScanOptionAvailable: true; readonly unifiedManifestEnabled: true; readonly valueListItemsModalEnabled: true; readonly filterProcessDescendantsForEventFiltersEnabled: true; readonly dataIngestionHubEnabled: false; readonly entityStoreDisabled: false; readonly siemMigrationsEnabled: false; readonly defendInsights: false; }" ], "path": "x-pack/plugins/security_solution/common/experimental_features.ts", "deprecated": false, diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index 1568e2234ad23..fa48cda70fba1 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: 2024-12-03 +date: 2024-12-05 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 37360609c9b10..4a58a37c33a08 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: 2024-12-03 +date: 2024-12-05 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 21ecd0fdc8eec..3b87510bbab9a 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: 2024-12-03 +date: 2024-12-05 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 6d3ac863fa09d..1bce5689dd94b 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: 2024-12-03 +date: 2024-12-05 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 868a24e2392bb..d8d823181a96e 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: 2024-12-03 +date: 2024-12-05 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 9ff4dc7b3e9e1..24a3beb0fe69c 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: 2024-12-03 +date: 2024-12-05 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 4065f8ed52a9c..592b08ffaa0ca 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: 2024-12-03 +date: 2024-12-05 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 922d5c624d3a0..b5d7cec902506 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/slo.devdocs.json b/api_docs/slo.devdocs.json index 9c7a930086fa6..2aa0b68399118 100644 --- a/api_docs/slo.devdocs.json +++ b/api_docs/slo.devdocs.json @@ -665,6 +665,27 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "slo", + "id": "def-public.SLOPublicPluginsStart.embeddableEnhanced", + "type": "Object", + "tags": [], + "label": "embeddableEnhanced", + "description": [], + "signature": [ + { + "pluginId": "embeddableEnhanced", + "scope": "public", + "docId": "kibEmbeddableEnhancedPluginApi", + "section": "def-public.StartContract", + "text": "StartContract" + }, + " | undefined" + ], + "path": "x-pack/plugins/observability_solution/slo/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "slo", "id": "def-public.SLOPublicPluginsStart.fieldFormats", diff --git a/api_docs/slo.mdx b/api_docs/slo.mdx index dd266c0213c99..689806fa24559 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'slo'] --- import sloObj from './slo.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 47 | 0 | 47 | 2 | +| 48 | 0 | 48 | 2 | ## Client diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index a7b3818f4a82d..289ef73971b1f 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: 2024-12-03 +date: 2024-12-05 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 635c21d795899..7f3dbaebd92cf 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: 2024-12-03 +date: 2024-12-05 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 c787e7566524d..3626aafe3a713 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: 2024-12-03 +date: 2024-12-05 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 abd4c2df3a8da..cf11b8e102cc2 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors'] --- import stackConnectorsObj from './stack_connectors.devdocs.json'; diff --git a/api_docs/streams.devdocs.json b/api_docs/streams.devdocs.json index bf552dc47d88d..095b9b87cb116 100644 --- a/api_docs/streams.devdocs.json +++ b/api_docs/streams.devdocs.json @@ -63,7 +63,29 @@ "section": "def-common.RouteRepositoryClient", "text": "RouteRepositoryClient" }, - "<{ \"POST /api/streams/_disable\": ", + "<{ \"POST /api/streams/{id}/_sample\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"POST /api/streams/{id}/_sample\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodObject<{ condition: Zod.ZodOptional>; start: Zod.ZodOptional; end: Zod.ZodOptional; number: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { number?: number | undefined; start?: number | undefined; end?: number | undefined; condition?: ", + "Condition", + "; }, { number?: number | undefined; start?: number | undefined; end?: number | undefined; condition?: ", + "Condition", + "; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { number?: number | undefined; start?: number | undefined; end?: number | undefined; condition?: ", + "Condition", + "; }; }, { path: { id: string; }; body: { number?: number | undefined; start?: number | undefined; end?: number | undefined; condition?: ", + "Condition", + "; }; }>, ", + "StreamsRouteHandlerResources", + ", { documents: unknown[]; }, undefined>; \"POST /api/streams/_disable\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -177,7 +199,7 @@ "Condition", "; }[]; fields: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; }[]; managed: boolean; processing: { config: { type: \"grok\"; field: string; patterns: string[]; pattern_definitions?: Record | undefined; } | { type: \"dissect\"; field: string; pattern: string; }; condition?: ", "Condition", - "; }[]; unmanaged_elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } & { inheritedFields: ({ type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; } & { from: string; })[]; }, undefined>; \"POST /api/streams/{id}/_fork\": ", + "; }[]; inheritedFields: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; from: string; }[]; unmanaged_elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, undefined>; \"POST /api/streams/{id}/_fork\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -290,17 +312,6 @@ "deprecated": false, "trackAdoption": false, "children": [ - { - "parentPluginId": "streams", - "id": "def-server.ListStreamResponse.total", - "type": "number", - "tags": [], - "label": "total", - "description": [], - "path": "x-pack/plugins/streams/server/lib/streams/stream_crud.ts", - "deprecated": false, - "trackAdoption": false - }, { "parentPluginId": "streams", "id": "def-server.ListStreamResponse.definitions", @@ -348,7 +359,29 @@ "label": "StreamsRouteRepository", "description": [], "signature": [ - "{ \"POST /api/streams/_disable\": ", + "{ \"POST /api/streams/{id}/_sample\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"POST /api/streams/{id}/_sample\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodObject<{ condition: Zod.ZodOptional>; start: Zod.ZodOptional; end: Zod.ZodOptional; number: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { number?: number | undefined; start?: number | undefined; end?: number | undefined; condition?: ", + "Condition", + "; }, { number?: number | undefined; start?: number | undefined; end?: number | undefined; condition?: ", + "Condition", + "; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { number?: number | undefined; start?: number | undefined; end?: number | undefined; condition?: ", + "Condition", + "; }; }, { path: { id: string; }; body: { number?: number | undefined; start?: number | undefined; end?: number | undefined; condition?: ", + "Condition", + "; }; }>, ", + "StreamsRouteHandlerResources", + ", { documents: unknown[]; }, undefined>; \"POST /api/streams/_disable\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -462,7 +495,7 @@ "Condition", "; }[]; fields: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; }[]; managed: boolean; processing: { config: { type: \"grok\"; field: string; patterns: string[]; pattern_definitions?: Record | undefined; } | { type: \"dissect\"; field: string; pattern: string; }; condition?: ", "Condition", - "; }[]; unmanaged_elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } & { inheritedFields: ({ type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; } & { from: string; })[]; }, undefined>; \"POST /api/streams/{id}/_fork\": ", + "; }[]; inheritedFields: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; from: string; }[]; unmanaged_elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, undefined>; \"POST /api/streams/{id}/_fork\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -576,6 +609,25 @@ "interfaces": [], "enums": [], "misc": [ + { + "parentPluginId": "streams", + "id": "def-common.ReadStreamDefinition", + "type": "Type", + "tags": [], + "label": "ReadStreamDefinition", + "description": [], + "signature": [ + "{ id: string; children: { id: string; condition?: ", + "Condition", + "; }[]; fields: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; }[]; managed: boolean; processing: { config: { type: \"grok\"; field: string; patterns: string[]; pattern_definitions?: Record | undefined; } | { type: \"dissect\"; field: string; pattern: string; }; condition?: ", + "Condition", + "; }[]; inheritedFields: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; from: string; }[]; unmanaged_elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }" + ], + "path": "x-pack/plugins/streams/common/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "streams", "id": "def-common.StreamDefinition", diff --git a/api_docs/streams.mdx b/api_docs/streams.mdx index 9c4865f7f286f..003aade7cc175 100644 --- a/api_docs/streams.mdx +++ b/api_docs/streams.mdx @@ -8,14 +8,14 @@ slug: /kibana-dev-docs/api/streams title: "streams" image: https://source.unsplash.com/400x175/?github description: API docs for the streams plugin -date: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'streams'] --- import streamsObj from './streams.devdocs.json'; A manager for Streams -Contact @simianhacker @flash1293 @dgieselaar for questions regarding this plugin. +Contact [@elastic/streams-program-team](https://github.com/orgs/elastic/teams/streams-program-team) for questions regarding this plugin. **Code health stats** diff --git a/api_docs/streams_app.mdx b/api_docs/streams_app.mdx index 629a0ca065115..329525ae787fa 100644 --- a/api_docs/streams_app.mdx +++ b/api_docs/streams_app.mdx @@ -8,14 +8,14 @@ slug: /kibana-dev-docs/api/streamsApp title: "streamsApp" image: https://source.unsplash.com/400x175/?github description: API docs for the streamsApp plugin -date: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'streamsApp'] --- import streamsAppObj from './streams_app.devdocs.json'; -Contact @simianhacker @flash1293 @dgieselaar for questions regarding this plugin. +Contact [@elastic/streams-program-team](https://github.com/orgs/elastic/teams/streams-program-team) for questions regarding this plugin. **Code health stats** diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index 3a338e11eac2a..703d8351735c7 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: 2024-12-03 +date: 2024-12-05 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 ed12ad96ade80..a866c7d3850ee 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: 2024-12-03 +date: 2024-12-05 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 ade6bf4aa32f0..d539948409e38 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: 2024-12-03 +date: 2024-12-05 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 cb5728a3d59f2..65a50a0688cdc 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: 2024-12-03 +date: 2024-12-05 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 3a2034cece75a..ec46a182fa48e 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: 2024-12-03 +date: 2024-12-05 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 8b41d13110bf2..2386818bb1276 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: 2024-12-03 +date: 2024-12-05 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 fe7f7d34d99c8..8b0b38ff27c69 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: 2024-12-03 +date: 2024-12-05 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 7521fa286a980..745d84311216c 100644 --- a/api_docs/triggers_actions_ui.devdocs.json +++ b/api_docs/triggers_actions_ui.devdocs.json @@ -1261,7 +1261,7 @@ "label": "loadRuleAggregations", "description": [], "signature": [ - "({\n http,\n searchText,\n typesFilter,\n actionTypesFilter,\n ruleExecutionStatusesFilter,\n ruleStatusesFilter,\n tagsFilter,\n filterConsumers,\n}: ", + "({\n http,\n searchText,\n actionTypesFilter,\n ruleExecutionStatusesFilter,\n ruleStatusesFilter,\n tagsFilter,\n ruleTypeIds,\n consumers,\n}: ", "LoadRuleAggregationsProps", ") => Promise<", "AggregateRulesResponse", @@ -1276,7 +1276,7 @@ "id": "def-public.loadRuleAggregations.$1", "type": "Object", "tags": [], - "label": "{\n http,\n searchText,\n typesFilter,\n actionTypesFilter,\n ruleExecutionStatusesFilter,\n ruleStatusesFilter,\n tagsFilter,\n filterConsumers,\n}", + "label": "{\n http,\n searchText,\n actionTypesFilter,\n ruleExecutionStatusesFilter,\n ruleStatusesFilter,\n tagsFilter,\n ruleTypeIds,\n consumers,\n}", "description": [], "signature": [ "LoadRuleAggregationsProps" @@ -4602,7 +4602,7 @@ "section": "def-common.RuleType", "text": "RuleType" }, - ", \"id\" | \"name\" | \"recoveryActionGroup\" | \"actionGroups\" | \"defaultActionGroupId\" | \"producer\" | \"minimumLicenseRequired\" | \"defaultScheduleInterval\" | \"ruleTaskTimeout\" | \"doesSetRecoveryContext\">" + ", \"id\" | \"name\" | \"recoveryActionGroup\" | \"actionGroups\" | \"defaultActionGroupId\" | \"category\" | \"producer\" | \"minimumLicenseRequired\" | \"defaultScheduleInterval\" | \"ruleTaskTimeout\" | \"doesSetRecoveryContext\">" ], "path": "packages/kbn-triggers-actions-ui-types/rule_types.ts", "deprecated": false, @@ -4764,9 +4764,9 @@ "signature": [ "(ruleParams: Params, isServerless?: boolean | undefined) => ", { - "pluginId": "@kbn/alerts-ui-shared", + "pluginId": "@kbn/response-ops-rule-form", "scope": "public", - "docId": "kibKbnAlertsUiSharedPluginApi", + "docId": "kibKbnResponseOpsRuleFormPluginApi", "section": "def-public.ValidationResult", "text": "ValidationResult" } @@ -5963,7 +5963,7 @@ "tags": [], "label": "ValidationResult", "description": [], - "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "path": "packages/response-ops/rule_form/src/types.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -5977,7 +5977,7 @@ "signature": [ "{ [x: string]: any; }" ], - "path": "packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts", + "path": "packages/response-ops/rule_form/src/types.ts", "deprecated": false, "trackAdoption": false } @@ -6274,15 +6274,7 @@ "section": "def-common.Alert", "text": "Alert" }, - ") => boolean) | undefined; dynamicRowHeight?: boolean | undefined; featureIds?: ", - { - "pluginId": "@kbn/rule-data-utils", - "scope": "common", - "docId": "kibKbnRuleDataUtilsPluginApi", - "section": "def-common.AlertConsumers", - "text": "AlertConsumers" - }, - "[] | undefined; pageIndex: number; pageSize: number; sort: ", + ") => boolean) | undefined; dynamicRowHeight?: boolean | undefined; ruleTypeIds?: string[] | undefined; pageIndex: number; pageSize: number; sort: ", "SortCombinations", "[]; isLoading: boolean; alerts: ", "Alerts", @@ -7906,7 +7898,7 @@ }, ">(props: Omit<", "RuleAddProps", - ", \"actionTypeRegistry\" | \"ruleTypeRegistry\">) => React.ReactElement<", + ", \"ruleTypeRegistry\" | \"actionTypeRegistry\">) => React.ReactElement<", "RuleAddProps", ", string | React.JSXElementConstructor>" ], @@ -7924,7 +7916,7 @@ "signature": [ "Omit<", "RuleAddProps", - ", \"actionTypeRegistry\" | \"ruleTypeRegistry\">" + ", \"ruleTypeRegistry\" | \"actionTypeRegistry\">" ], "path": "x-pack/plugins/triggers_actions_ui/public/plugin.ts", "deprecated": false, @@ -7976,7 +7968,7 @@ }, ">(props: Omit<", "RuleEditProps", - ", \"actionTypeRegistry\" | \"ruleTypeRegistry\">) => React.ReactElement<", + ", \"ruleTypeRegistry\" | \"actionTypeRegistry\">) => React.ReactElement<", "RuleEditProps", ", string | React.JSXElementConstructor>" ], @@ -7994,7 +7986,7 @@ "signature": [ "Omit<", "RuleEditProps", - ", \"actionTypeRegistry\" | \"ruleTypeRegistry\">" + ", \"ruleTypeRegistry\" | \"actionTypeRegistry\">" ], "path": "x-pack/plugins/triggers_actions_ui/public/plugin.ts", "deprecated": false, @@ -8110,15 +8102,7 @@ "section": "def-public.AlertsTableConfigurationRegistryContract", "text": "AlertsTableConfigurationRegistryContract" }, - "; configurationId: string; id: string; featureIds: ", - { - "pluginId": "@kbn/rule-data-utils", - "scope": "common", - "docId": "kibKbnRuleDataUtilsPluginApi", - "section": "def-common.AlertConsumers", - "text": "AlertConsumers" - }, - "[]; query: Pick<", + "; configurationId: string; id: string; ruleTypeIds: string[]; consumers?: string[] | undefined; query: Pick<", "QueryDslQueryContainer", ", \"ids\" | \"bool\">; initialPageSize?: number | undefined; browserFields?: ", { @@ -8182,15 +8166,7 @@ "section": "def-public.AlertsTableConfigurationRegistryContract", "text": "AlertsTableConfigurationRegistryContract" }, - "; configurationId: string; id: string; featureIds: ", - { - "pluginId": "@kbn/rule-data-utils", - "scope": "common", - "docId": "kibKbnRuleDataUtilsPluginApi", - "section": "def-common.AlertConsumers", - "text": "AlertConsumers" - }, - "[]; query: Pick<", + "; configurationId: string; id: string; ruleTypeIds: string[]; consumers?: string[] | undefined; query: Pick<", "QueryDslQueryContainer", ", \"ids\" | \"bool\">; initialPageSize?: number | undefined; browserFields?: ", { diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index 9585065993bd3..82a0e67444e37 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] --- import triggersActionsUiObj from './triggers_actions_ui.devdocs.json'; diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index 923384e4c2600..c19d33faafb53 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: 2024-12-03 +date: 2024-12-05 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 76c339e7a7e3a..c7f6e59a5cfae 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: 2024-12-03 +date: 2024-12-05 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 3327549edae03..fb7e58deb13fa 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: 2024-12-03 +date: 2024-12-05 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 cb762669e1fe6..3189130e339ba 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: 2024-12-03 +date: 2024-12-05 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 4a7b6b6a93256..ed1eaebaba5d5 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: 2024-12-03 +date: 2024-12-05 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 e390173873794..344f79ae663cb 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/uptime.devdocs.json b/api_docs/uptime.devdocs.json index 2472612c7dcdf..7bfe1796ff507 100644 --- a/api_docs/uptime.devdocs.json +++ b/api_docs/uptime.devdocs.json @@ -24,15 +24,17 @@ "misc": [ { "parentPluginId": "uptime", - "id": "def-common.UPTIME_RULE_TYPES", + "id": "def-common.UPTIME_RULE_TYPE_IDS", "type": "Array", "tags": [], - "label": "UPTIME_RULE_TYPES", - "description": [], + "label": "UPTIME_RULE_TYPE_IDS", + "description": [ + "\nUptime rule types" + ], "signature": [ "string[]" ], - "path": "x-pack/plugins/observability_solution/uptime/common/constants/uptime_alerts.ts", + "path": "packages/kbn-rule-data-utils/src/rule_types/o11y_rules.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false diff --git a/api_docs/uptime.mdx b/api_docs/uptime.mdx index 67b588c31ea63..47377ce873102 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uptime'] --- import uptimeObj from './uptime.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 1 | 0 | 1 | 0 | +| 1 | 0 | 0 | 0 | ## Common diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index 9918c9f120844..6293673e8efce 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: 2024-12-03 +date: 2024-12-05 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 f9b10099d1e72..2959756858a34 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: 2024-12-03 +date: 2024-12-05 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 40dfc1020e700..1849f153beb16 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: 2024-12-03 +date: 2024-12-05 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 1c52c77a9c374..cb30d696b8d47 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: 2024-12-03 +date: 2024-12-05 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 e6d4660542074..fe5200e40449e 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: 2024-12-03 +date: 2024-12-05 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 d582a5d36f3b7..ac5c387a931f1 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: 2024-12-03 +date: 2024-12-05 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 58bf93a187797..63309102a77df 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: 2024-12-03 +date: 2024-12-05 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 868a64d7ea529..1bdaadadee3ed 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: 2024-12-03 +date: 2024-12-05 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 46f5b63e4c4ca..71b3830f68f21 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: 2024-12-03 +date: 2024-12-05 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 0b7d0f0020d77..e99c9c96e2108 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: 2024-12-03 +date: 2024-12-05 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 edbc75b2fa1a3..7a2f0e25bc075 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: 2024-12-03 +date: 2024-12-05 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 f0e417c66112d..668daa2023afb 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: 2024-12-03 +date: 2024-12-05 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 61634c53a811a..66222fd332344 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: 2024-12-03 +date: 2024-12-05 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 ac0e737f773a2..36b81ccc0ae54 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: 2024-12-03 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; diff --git a/config/serverless.oblt.yml b/config/serverless.oblt.yml index 55e7fec7a3d39..4f2e5a0883b52 100644 --- a/config/serverless.oblt.yml +++ b/config/serverless.oblt.yml @@ -157,11 +157,20 @@ xpack.fleet.internal.registry.excludePackages: [ 'cloud_defend', 'security_detection_engine', - # Removed in 8.11 integrations + # Deprecated security integrations + 'bluecoat', 'cisco', + 'cyberark', + 'cylance', + 'f5', + 'fortinet_forticlient', + 'juniper_junos', + 'juniper_netscreen', 'microsoft', + 'netscout', + 'radware', 'symantec', - 'cyberark', + 'tomcat', # ML integrations 'dga', diff --git a/config/serverless.security.yml b/config/serverless.security.yml index d7c1a13822ccf..d92075fbb3fdc 100644 --- a/config/serverless.security.yml +++ b/config/serverless.security.yml @@ -84,11 +84,20 @@ xpack.fleet.internal.registry.excludePackages: [ 'synthetics', 'synthetics_dashboards', - # Removed in 8.11 integrations + # Deprecated security integrations + 'bluecoat', 'cisco', + 'cyberark', + 'cylance', + 'f5', + 'fortinet_forticlient', + 'juniper_junos', + 'juniper_netscreen', 'microsoft', + 'netscout', + 'radware', 'symantec', - 'cyberark', + 'tomcat', # ML integrations 'dga', diff --git a/config/serverless.yml b/config/serverless.yml index d62f26a4642eb..6c7125d0e47f0 100644 --- a/config/serverless.yml +++ b/config/serverless.yml @@ -215,7 +215,6 @@ xpack.task_manager.metrics_reset_interval: 120000 # Reporting feature xpack.screenshotting.enabled: false xpack.reporting.queue.pollInterval: 3m -xpack.reporting.roles.enabled: false xpack.reporting.statefulSettings.enabled: false xpack.reporting.csv.maxConcurrentShardRequests: 0 diff --git a/docs/settings/reporting-settings.asciidoc b/docs/settings/reporting-settings.asciidoc index b43f3b268e438..5dda6bf81954f 100644 --- a/docs/settings/reporting-settings.asciidoc +++ b/docs/settings/reporting-settings.asciidoc @@ -61,29 +61,8 @@ xpack.reporting.encryptionKey: "something_secret" [[reporting-advanced-settings]] === Security settings -Reporting has two forms of access control: each user can only access their own reports, -and custom roles determine who has the privilege to generate reports. When Reporting is configured with -<>, you can control the spaces and applications where users -are allowed to generate reports. - -[NOTE] -============================================================================ -The `xpack.reporting.roles` settings are for a deprecated system of access control in Reporting. Turning off -this feature allows API keys to generate reports, and allows reporting access through {kib} application -privileges. We recommend that you explicitly turn off reporting's deprecated access control feature by adding -`xpack.reporting.roles.enabled: false` to kibana.yml. This will enable you to create custom roles that provide -application privileges for reporting, as described in <>. -============================================================================ - -[[xpack-reporting-roles-enabled]] `xpack.reporting.roles.enabled`:: -deprecated:[7.14.0,The default for this setting will be `false` in an upcoming version of {kib}.] Sets access -control to a set of assigned reporting roles, specified by `xpack.reporting.roles.allow`. Defaults to `true`. - -`xpack.reporting.roles.allow`:: -deprecated:[7.14.0] In addition to superusers, specifies the roles that can generate reports using the -{ref}/security-api.html#security-role-apis[{es} role management APIs]. Requires `xpack.reporting.roles.enabled` -to be `true`. Defaults to `[ "reporting_user" ]`. +Reporting privileges are configured with <>. You can control +the spaces and applications where users are allowed to generate reports. [float] [[reporting-job-queue-settings]] diff --git a/docs/settings/task-manager-settings.asciidoc b/docs/settings/task-manager-settings.asciidoc index 1311974e27342..7200500a2bf06 100644 --- a/docs/settings/task-manager-settings.asciidoc +++ b/docs/settings/task-manager-settings.asciidoc @@ -17,7 +17,7 @@ Task Manager runs background tasks by polling for work on an interval. You can The maximum number of times a task will be attempted before being abandoned as failed. Defaults to 3. `xpack.task_manager.poll_interval`:: -How often, in milliseconds, the task manager will look for more work. Defaults to 3000 and cannot be lower than 100. +How often, in milliseconds, the task manager will look for more work. Defaults to 500 and cannot be lower than 100. `xpack.task_manager.request_capacity`:: How many requests can Task Manager buffer before it rejects new requests. Defaults to 1000. diff --git a/docs/setup/configuring-reporting.asciidoc b/docs/setup/configuring-reporting.asciidoc index 61ef028d1504f..bcef6a0266251 100644 --- a/docs/setup/configuring-reporting.asciidoc +++ b/docs/setup/configuring-reporting.asciidoc @@ -37,15 +37,6 @@ to enable the {kib} server to have screenshotting capabilities. === Grant users access to reporting When security is enabled, you grant users access to {report-features} with <>, which allow you to create custom roles that control the spaces and applications where users generate reports. -. Enable application privileges in Reporting. To enable, turn off the default user access control features in `kibana.yml`: -+ -[source,yaml] ------------------------------------- -xpack.reporting.roles.enabled: false ------------------------------------- -+ -NOTE: If you use the default settings, you can still create a custom role that grants reporting privileges. The default role is `reporting_user`. This behavior is being deprecated and does not allow application-level access controls for {report-features}, and does not allow API keys or authentication tokens to authorize report generation. Refer to <> for information and caveats about the deprecated access control features. - . Create the reporting role. .. Go to the *Roles* management page using the navigation menu or the @@ -79,7 +70,7 @@ NOTE: If you have a Basic license, sub-feature privileges are unavailable. For d [role="screenshot"] image::user/reporting/images/kibana-privileges-with-reporting.png["Kibana privileges with Reporting options, Gold or higher license"] + -NOTE: If the *Reporting* options for application features are unavailable, and the cluster license is higher than Basic, contact your administrator, or <>. +NOTE: If the *Reporting* options for application features are unavailable, and the cluster license is higher than Basic, contact your administrator. .. Click *Add {kib} privilege*. @@ -101,7 +92,7 @@ Granting the privilege to generate reports also grants the user the privilege to [float] [[reporting-roles-user-api]] ==== Grant access with the role API -With <> enabled in Reporting, you can also use the {api-kibana}/group/endpoint-roles[role APIs] to grant access to the {report-features}, using *All* privileges, or sub-feature privileges. +With <>, you can use the {api-kibana}/group/endpoint-roles[role APIs] to grant access to the {report-features}, using *All* privileges, or sub-feature privileges. NOTE: This API request needs to be run against the <>. diff --git a/docs/user/alerting/create-and-manage-rules.asciidoc b/docs/user/alerting/create-and-manage-rules.asciidoc index 1caae10ead421..28c31c6844d42 100644 --- a/docs/user/alerting/create-and-manage-rules.asciidoc +++ b/docs/user/alerting/create-and-manage-rules.asciidoc @@ -8,17 +8,21 @@ The *{stack-manage-app}* > *{rules-ui}* UI provides a cross-app view of alerting. Different {kib} apps like {observability-guide}/create-alerts.html[*{observability}*], {security-guide}/prebuilt-rules.html[*Security*], <> and -<> can offer their own rules. *{rules-ui}* provides a +<> can offer their own rules. + +You can find **Rules** in *Stack Management* > *Alerts and insights* > *Rules* in {kib} or by using +the <>. + +[role="screenshot"] +image:images/stack-management-rules.png[Rules page navigation] + +*{rules-ui}* provides a central place to: * <> rules * <> including enabling/disabling, muting/unmuting, and deleting * Drill down to <> -* Configure settings that apply to all rules in the space - -[role="screenshot"] -image:images/rules-ui.png[Example rule listing in {rules-ui}] -// NOTE: This is an autogenerated screenshot. Do not edit it directly. +* Configure rule settings For more information on alerting concepts and the types of rules and connectors available, go to <>. diff --git a/docs/user/images/stack-management-rules.png b/docs/user/images/stack-management-rules.png new file mode 100644 index 0000000000000..2cab8200ee6d8 Binary files /dev/null and b/docs/user/images/stack-management-rules.png differ diff --git a/oas_docs/bundle.json b/oas_docs/bundle.json index b96aaa3a3ce00..210ecb6fa266f 100644 --- a/oas_docs/bundle.json +++ b/oas_docs/bundle.json @@ -5644,6 +5644,3244 @@ ] } }, + "/api/dashboards/dashboard": { + "get": { + "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.", + "operationId": "get-dashboards-dashboard", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "The page number to return. Default is \"1\".", + "in": "query", + "name": "page", + "required": false, + "schema": { + "default": 1, + "minimum": 1, + "type": "number" + } + }, + { + "description": "The number of dashboards to display on each page (max 1000). Default is \"20\".", + "in": "query", + "name": "perPage", + "required": false, + "schema": { + "maximum": 1000, + "minimum": 1, + "type": "number" + } + } + ], + "responses": { + "200": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "items": { + "items": { + "additionalProperties": true, + "properties": { + "attributes": { + "additionalProperties": false, + "properties": { + "description": { + "default": "", + "description": "A short description.", + "type": "string" + }, + "timeRestore": { + "default": false, + "description": "Whether to restore time upon viewing this dashboard", + "type": "boolean" + }, + "title": { + "description": "A human-readable title for the dashboard", + "type": "string" + } + }, + "required": [ + "title" + ], + "type": "object" + }, + "createdAt": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "error": { + "additionalProperties": false, + "properties": { + "error": { + "type": "string" + }, + "message": { + "type": "string" + }, + "metadata": { + "additionalProperties": true, + "properties": {}, + "type": "object" + }, + "statusCode": { + "type": "number" + } + }, + "required": [ + "error", + "message", + "statusCode" + ], + "type": "object" + }, + "id": { + "type": "string" + }, + "managed": { + "type": "boolean" + }, + "namespaces": { + "items": { + "type": "string" + }, + "type": "array" + }, + "originId": { + "type": "string" + }, + "references": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name", + "type", + "id" + ], + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "id", + "type", + "attributes", + "references" + ], + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + } + }, + "required": [ + "items", + "total" + ], + "type": "object" + } + } + } + } + }, + "summary": "Get a list of dashboards", + "tags": [ + "Dashboards" + ], + "x-state": "Technical Preview" + } + }, + "/api/dashboards/dashboard/{id}": { + "delete": { + "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.", + "operationId": "delete-dashboards-dashboard-id", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "description": "A unique identifier for the dashboard.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": {}, + "summary": "Delete a dashboard", + "tags": [ + "Dashboards" + ], + "x-state": "Technical Preview" + }, + "get": { + "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.", + "operationId": "get-dashboards-dashboard-id", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A unique identifier for the dashboard.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "item": { + "additionalProperties": true, + "properties": { + "attributes": { + "additionalProperties": false, + "properties": { + "controlGroupInput": { + "additionalProperties": false, + "properties": { + "autoApplySelections": { + "default": true, + "description": "Show apply selections button in controls.", + "type": "boolean" + }, + "chainingSystem": { + "default": "HIERARCHICAL", + "description": "The chaining strategy for multiple controls. For example, \"HIERARCHICAL\" or \"NONE\".", + "enum": [ + "NONE", + "HIERARCHICAL" + ], + "type": "string" + }, + "controls": { + "default": [], + "description": "An array of control panels and their state in the control group.", + "items": { + "additionalProperties": true, + "properties": { + "controlConfig": { + "additionalProperties": {}, + "type": "object" + }, + "grow": { + "default": false, + "description": "Expand width of the control panel to fit available space.", + "type": "boolean" + }, + "id": { + "description": "The unique ID of the control.", + "type": "string" + }, + "order": { + "description": "The order of the control panel in the control group.", + "type": "number" + }, + "type": { + "description": "The type of the control panel.", + "type": "string" + }, + "width": { + "default": "medium", + "description": "Minimum width of the control panel in the control group.", + "enum": [ + "small", + "medium", + "large" + ], + "type": "string" + } + }, + "required": [ + "type", + "order" + ], + "type": "object" + }, + "type": "array" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "ignoreParentSettings": { + "additionalProperties": false, + "properties": { + "ignoreFilters": { + "default": false, + "description": "Ignore global filters in controls.", + "type": "boolean" + }, + "ignoreQuery": { + "default": false, + "description": "Ignore the global query bar in controls.", + "type": "boolean" + }, + "ignoreTimerange": { + "default": false, + "description": "Ignore the global time range in controls.", + "type": "boolean" + }, + "ignoreValidations": { + "default": false, + "description": "Ignore validations in controls.", + "type": "boolean" + } + }, + "type": "object" + }, + "labelPosition": { + "default": "oneLine", + "description": "Position of the labels for controls. For example, \"oneLine\", \"twoLine\".", + "enum": [ + "oneLine", + "twoLine" + ], + "type": "string" + } + }, + "required": [ + "ignoreParentSettings" + ], + "type": "object" + }, + "description": { + "default": "", + "description": "A short description.", + "type": "string" + }, + "kibanaSavedObjectMeta": { + "additionalProperties": false, + "default": {}, + "description": "A container for various metadata", + "properties": { + "searchSource": { + "additionalProperties": true, + "properties": { + "filter": { + "items": { + "additionalProperties": false, + "description": "A filter for the search source.", + "properties": { + "$state": { + "additionalProperties": false, + "properties": { + "store": { + "description": "Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState').", + "enum": [ + "appState", + "globalState" + ], + "type": "string" + } + }, + "required": [ + "store" + ], + "type": "object" + }, + "meta": { + "additionalProperties": true, + "properties": { + "alias": { + "nullable": true, + "type": "string" + }, + "controlledBy": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "field": { + "type": "string" + }, + "group": { + "type": "string" + }, + "index": { + "type": "string" + }, + "isMultiIndex": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "negate": { + "type": "boolean" + }, + "params": {}, + "type": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "params" + ], + "type": "object" + }, + "query": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "meta" + ], + "type": "object" + }, + "type": "array" + }, + "query": { + "additionalProperties": false, + "properties": { + "language": { + "description": "The query language such as KQL or Lucene.", + "type": "string" + }, + "query": { + "anyOf": [ + { + "description": "A text-based query such as Kibana Query Language (KQL) or Lucene query language.", + "type": "string" + }, + { + "additionalProperties": {}, + "type": "object" + } + ] + } + }, + "required": [ + "query", + "language" + ], + "type": "object" + }, + "sort": { + "items": { + "additionalProperties": { + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "format": { + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "numeric_type": { + "enum": [ + "double", + "long", + "date", + "date_nanos" + ], + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + } + ] + }, + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "options": { + "additionalProperties": false, + "properties": { + "hidePanelTitles": { + "default": false, + "description": "Hide the panel titles in the dashboard.", + "type": "boolean" + }, + "syncColors": { + "default": true, + "description": "Synchronize colors between related panels in the dashboard.", + "type": "boolean" + }, + "syncCursor": { + "default": true, + "description": "Synchronize cursor position between related panels in the dashboard.", + "type": "boolean" + }, + "syncTooltips": { + "default": true, + "description": "Synchronize tooltips between related panels in the dashboard.", + "type": "boolean" + }, + "useMargins": { + "default": true, + "description": "Show margins between panels in the dashboard layout.", + "type": "boolean" + } + }, + "type": "object" + }, + "panels": { + "default": [], + "items": { + "additionalProperties": false, + "properties": { + "gridData": { + "additionalProperties": false, + "properties": { + "h": { + "default": 15, + "description": "The height of the panel in grid units", + "minimum": 1, + "type": "number" + }, + "i": { + "type": "string" + }, + "w": { + "default": 24, + "description": "The width of the panel in grid units", + "maximum": 48, + "minimum": 1, + "type": "number" + }, + "x": { + "description": "The x coordinate of the panel in grid units", + "type": "number" + }, + "y": { + "description": "The y coordinate of the panel in grid units", + "type": "number" + } + }, + "required": [ + "x", + "y", + "i" + ], + "type": "object" + }, + "id": { + "description": "The saved object id for by reference panels", + "type": "string" + }, + "panelConfig": { + "additionalProperties": true, + "properties": { + "description": { + "description": "The description of the panel", + "type": "string" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "hidePanelTitles": { + "description": "Set to true to hide the panel title in its container.", + "type": "boolean" + }, + "savedObjectId": { + "description": "The unique id of the library item to construct the embeddable.", + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "version": { + "description": "The version of the embeddable in the panel.", + "type": "string" + } + }, + "type": "object" + }, + "panelIndex": { + "type": "string" + }, + "panelRefName": { + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "type": { + "description": "The embeddable type", + "type": "string" + }, + "version": { + "deprecated": true, + "description": "The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type).", + "type": "string" + } + }, + "required": [ + "panelConfig", + "type", + "gridData", + "panelIndex" + ], + "type": "object" + }, + "type": "array" + }, + "refreshInterval": { + "additionalProperties": false, + "description": "A container for various refresh interval settings", + "properties": { + "display": { + "deprecated": true, + "description": "A human-readable string indicating the refresh frequency. No longer used.", + "type": "string" + }, + "pause": { + "description": "Whether the refresh interval is set to be paused while viewing the dashboard.", + "type": "boolean" + }, + "section": { + "deprecated": true, + "description": "No longer used.", + "type": "number" + }, + "value": { + "description": "A numeric value indicating refresh frequency in milliseconds.", + "type": "number" + } + }, + "required": [ + "pause", + "value" + ], + "type": "object" + }, + "timeFrom": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "timeRestore": { + "default": false, + "description": "Whether to restore time upon viewing this dashboard", + "type": "boolean" + }, + "timeTo": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "title": { + "description": "A human-readable title for the dashboard", + "type": "string" + }, + "version": { + "deprecated": true, + "type": "number" + } + }, + "required": [ + "title", + "options" + ], + "type": "object" + }, + "createdAt": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "error": { + "additionalProperties": false, + "properties": { + "error": { + "type": "string" + }, + "message": { + "type": "string" + }, + "metadata": { + "additionalProperties": true, + "properties": {}, + "type": "object" + }, + "statusCode": { + "type": "number" + } + }, + "required": [ + "error", + "message", + "statusCode" + ], + "type": "object" + }, + "id": { + "type": "string" + }, + "managed": { + "type": "boolean" + }, + "namespaces": { + "items": { + "type": "string" + }, + "type": "array" + }, + "originId": { + "type": "string" + }, + "references": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name", + "type", + "id" + ], + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "id", + "type", + "attributes", + "references" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "aliasPurpose": { + "enum": [ + "savedObjectConversion", + "savedObjectImport" + ], + "type": "string" + }, + "aliasTargetId": { + "type": "string" + }, + "outcome": { + "enum": [ + "exactMatch", + "aliasMatch", + "conflict" + ], + "type": "string" + } + }, + "required": [ + "outcome" + ], + "type": "object" + } + }, + "required": [ + "item", + "meta" + ], + "type": "object" + } + } + } + } + }, + "summary": "Get a dashboard", + "tags": [ + "Dashboards" + ], + "x-state": "Technical Preview" + }, + "post": { + "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.", + "operationId": "post-dashboards-dashboard-id", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "description": "A unique identifier for the dashboard.", + "in": "path", + "name": "id", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "attributes": { + "additionalProperties": false, + "properties": { + "controlGroupInput": { + "additionalProperties": false, + "properties": { + "autoApplySelections": { + "default": true, + "description": "Show apply selections button in controls.", + "type": "boolean" + }, + "chainingSystem": { + "default": "HIERARCHICAL", + "description": "The chaining strategy for multiple controls. For example, \"HIERARCHICAL\" or \"NONE\".", + "enum": [ + "NONE", + "HIERARCHICAL" + ], + "type": "string" + }, + "controls": { + "default": [], + "description": "An array of control panels and their state in the control group.", + "items": { + "additionalProperties": true, + "properties": { + "controlConfig": { + "additionalProperties": {}, + "type": "object" + }, + "grow": { + "default": false, + "description": "Expand width of the control panel to fit available space.", + "type": "boolean" + }, + "id": { + "description": "The unique ID of the control.", + "type": "string" + }, + "order": { + "description": "The order of the control panel in the control group.", + "type": "number" + }, + "type": { + "description": "The type of the control panel.", + "type": "string" + }, + "width": { + "default": "medium", + "description": "Minimum width of the control panel in the control group.", + "enum": [ + "small", + "medium", + "large" + ], + "type": "string" + } + }, + "required": [ + "type", + "order" + ], + "type": "object" + }, + "type": "array" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "ignoreParentSettings": { + "additionalProperties": false, + "properties": { + "ignoreFilters": { + "default": false, + "description": "Ignore global filters in controls.", + "type": "boolean" + }, + "ignoreQuery": { + "default": false, + "description": "Ignore the global query bar in controls.", + "type": "boolean" + }, + "ignoreTimerange": { + "default": false, + "description": "Ignore the global time range in controls.", + "type": "boolean" + }, + "ignoreValidations": { + "default": false, + "description": "Ignore validations in controls.", + "type": "boolean" + } + }, + "type": "object" + }, + "labelPosition": { + "default": "oneLine", + "description": "Position of the labels for controls. For example, \"oneLine\", \"twoLine\".", + "enum": [ + "oneLine", + "twoLine" + ], + "type": "string" + } + }, + "required": [ + "ignoreParentSettings" + ], + "type": "object" + }, + "description": { + "default": "", + "description": "A short description.", + "type": "string" + }, + "kibanaSavedObjectMeta": { + "additionalProperties": false, + "default": {}, + "description": "A container for various metadata", + "properties": { + "searchSource": { + "additionalProperties": true, + "properties": { + "filter": { + "items": { + "additionalProperties": false, + "description": "A filter for the search source.", + "properties": { + "$state": { + "additionalProperties": false, + "properties": { + "store": { + "description": "Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState').", + "enum": [ + "appState", + "globalState" + ], + "type": "string" + } + }, + "required": [ + "store" + ], + "type": "object" + }, + "meta": { + "additionalProperties": true, + "properties": { + "alias": { + "nullable": true, + "type": "string" + }, + "controlledBy": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "field": { + "type": "string" + }, + "group": { + "type": "string" + }, + "index": { + "type": "string" + }, + "isMultiIndex": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "negate": { + "type": "boolean" + }, + "params": {}, + "type": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "params" + ], + "type": "object" + }, + "query": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "meta" + ], + "type": "object" + }, + "type": "array" + }, + "query": { + "additionalProperties": false, + "properties": { + "language": { + "description": "The query language such as KQL or Lucene.", + "type": "string" + }, + "query": { + "anyOf": [ + { + "description": "A text-based query such as Kibana Query Language (KQL) or Lucene query language.", + "type": "string" + }, + { + "additionalProperties": {}, + "type": "object" + } + ] + } + }, + "required": [ + "query", + "language" + ], + "type": "object" + }, + "sort": { + "items": { + "additionalProperties": { + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "format": { + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "numeric_type": { + "enum": [ + "double", + "long", + "date", + "date_nanos" + ], + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + } + ] + }, + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "options": { + "additionalProperties": false, + "properties": { + "hidePanelTitles": { + "default": false, + "description": "Hide the panel titles in the dashboard.", + "type": "boolean" + }, + "syncColors": { + "default": true, + "description": "Synchronize colors between related panels in the dashboard.", + "type": "boolean" + }, + "syncCursor": { + "default": true, + "description": "Synchronize cursor position between related panels in the dashboard.", + "type": "boolean" + }, + "syncTooltips": { + "default": true, + "description": "Synchronize tooltips between related panels in the dashboard.", + "type": "boolean" + }, + "useMargins": { + "default": true, + "description": "Show margins between panels in the dashboard layout.", + "type": "boolean" + } + }, + "type": "object" + }, + "panels": { + "default": [], + "items": { + "additionalProperties": false, + "properties": { + "gridData": { + "additionalProperties": false, + "properties": { + "h": { + "default": 15, + "description": "The height of the panel in grid units", + "minimum": 1, + "type": "number" + }, + "i": { + "description": "The unique identifier of the panel", + "type": "string" + }, + "w": { + "default": 24, + "description": "The width of the panel in grid units", + "maximum": 48, + "minimum": 1, + "type": "number" + }, + "x": { + "description": "The x coordinate of the panel in grid units", + "type": "number" + }, + "y": { + "description": "The y coordinate of the panel in grid units", + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": "object" + }, + "id": { + "description": "The saved object id for by reference panels", + "type": "string" + }, + "panelConfig": { + "additionalProperties": true, + "properties": { + "description": { + "description": "The description of the panel", + "type": "string" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "hidePanelTitles": { + "description": "Set to true to hide the panel title in its container.", + "type": "boolean" + }, + "savedObjectId": { + "description": "The unique id of the library item to construct the embeddable.", + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "version": { + "description": "The version of the embeddable in the panel.", + "type": "string" + } + }, + "type": "object" + }, + "panelIndex": { + "description": "The unique ID of the panel.", + "type": "string" + }, + "panelRefName": { + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "type": { + "description": "The embeddable type", + "type": "string" + }, + "version": { + "deprecated": true, + "description": "The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type).", + "type": "string" + } + }, + "required": [ + "panelConfig", + "type", + "gridData" + ], + "type": "object" + }, + "type": "array" + }, + "refreshInterval": { + "additionalProperties": false, + "description": "A container for various refresh interval settings", + "properties": { + "display": { + "deprecated": true, + "description": "A human-readable string indicating the refresh frequency. No longer used.", + "type": "string" + }, + "pause": { + "description": "Whether the refresh interval is set to be paused while viewing the dashboard.", + "type": "boolean" + }, + "section": { + "deprecated": true, + "description": "No longer used.", + "type": "number" + }, + "value": { + "description": "A numeric value indicating refresh frequency in milliseconds.", + "type": "number" + } + }, + "required": [ + "pause", + "value" + ], + "type": "object" + }, + "timeFrom": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "timeRestore": { + "default": false, + "description": "Whether to restore time upon viewing this dashboard", + "type": "boolean" + }, + "timeTo": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "title": { + "description": "A human-readable title for the dashboard", + "type": "string" + }, + "version": { + "deprecated": true, + "type": "number" + } + }, + "required": [ + "title", + "options" + ], + "type": "object" + }, + "references": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name", + "type", + "id" + ], + "type": "object" + }, + "type": "array" + }, + "spaces": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "attributes" + ], + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "item": { + "additionalProperties": true, + "properties": { + "attributes": { + "additionalProperties": false, + "properties": { + "controlGroupInput": { + "additionalProperties": false, + "properties": { + "autoApplySelections": { + "default": true, + "description": "Show apply selections button in controls.", + "type": "boolean" + }, + "chainingSystem": { + "default": "HIERARCHICAL", + "description": "The chaining strategy for multiple controls. For example, \"HIERARCHICAL\" or \"NONE\".", + "enum": [ + "NONE", + "HIERARCHICAL" + ], + "type": "string" + }, + "controls": { + "default": [], + "description": "An array of control panels and their state in the control group.", + "items": { + "additionalProperties": true, + "properties": { + "controlConfig": { + "additionalProperties": {}, + "type": "object" + }, + "grow": { + "default": false, + "description": "Expand width of the control panel to fit available space.", + "type": "boolean" + }, + "id": { + "description": "The unique ID of the control.", + "type": "string" + }, + "order": { + "description": "The order of the control panel in the control group.", + "type": "number" + }, + "type": { + "description": "The type of the control panel.", + "type": "string" + }, + "width": { + "default": "medium", + "description": "Minimum width of the control panel in the control group.", + "enum": [ + "small", + "medium", + "large" + ], + "type": "string" + } + }, + "required": [ + "type", + "order" + ], + "type": "object" + }, + "type": "array" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "ignoreParentSettings": { + "additionalProperties": false, + "properties": { + "ignoreFilters": { + "default": false, + "description": "Ignore global filters in controls.", + "type": "boolean" + }, + "ignoreQuery": { + "default": false, + "description": "Ignore the global query bar in controls.", + "type": "boolean" + }, + "ignoreTimerange": { + "default": false, + "description": "Ignore the global time range in controls.", + "type": "boolean" + }, + "ignoreValidations": { + "default": false, + "description": "Ignore validations in controls.", + "type": "boolean" + } + }, + "type": "object" + }, + "labelPosition": { + "default": "oneLine", + "description": "Position of the labels for controls. For example, \"oneLine\", \"twoLine\".", + "enum": [ + "oneLine", + "twoLine" + ], + "type": "string" + } + }, + "required": [ + "ignoreParentSettings" + ], + "type": "object" + }, + "description": { + "default": "", + "description": "A short description.", + "type": "string" + }, + "kibanaSavedObjectMeta": { + "additionalProperties": false, + "default": {}, + "description": "A container for various metadata", + "properties": { + "searchSource": { + "additionalProperties": true, + "properties": { + "filter": { + "items": { + "additionalProperties": false, + "description": "A filter for the search source.", + "properties": { + "$state": { + "additionalProperties": false, + "properties": { + "store": { + "description": "Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState').", + "enum": [ + "appState", + "globalState" + ], + "type": "string" + } + }, + "required": [ + "store" + ], + "type": "object" + }, + "meta": { + "additionalProperties": true, + "properties": { + "alias": { + "nullable": true, + "type": "string" + }, + "controlledBy": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "field": { + "type": "string" + }, + "group": { + "type": "string" + }, + "index": { + "type": "string" + }, + "isMultiIndex": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "negate": { + "type": "boolean" + }, + "params": {}, + "type": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "params" + ], + "type": "object" + }, + "query": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "meta" + ], + "type": "object" + }, + "type": "array" + }, + "query": { + "additionalProperties": false, + "properties": { + "language": { + "description": "The query language such as KQL or Lucene.", + "type": "string" + }, + "query": { + "anyOf": [ + { + "description": "A text-based query such as Kibana Query Language (KQL) or Lucene query language.", + "type": "string" + }, + { + "additionalProperties": {}, + "type": "object" + } + ] + } + }, + "required": [ + "query", + "language" + ], + "type": "object" + }, + "sort": { + "items": { + "additionalProperties": { + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "format": { + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "numeric_type": { + "enum": [ + "double", + "long", + "date", + "date_nanos" + ], + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + } + ] + }, + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "options": { + "additionalProperties": false, + "properties": { + "hidePanelTitles": { + "default": false, + "description": "Hide the panel titles in the dashboard.", + "type": "boolean" + }, + "syncColors": { + "default": true, + "description": "Synchronize colors between related panels in the dashboard.", + "type": "boolean" + }, + "syncCursor": { + "default": true, + "description": "Synchronize cursor position between related panels in the dashboard.", + "type": "boolean" + }, + "syncTooltips": { + "default": true, + "description": "Synchronize tooltips between related panels in the dashboard.", + "type": "boolean" + }, + "useMargins": { + "default": true, + "description": "Show margins between panels in the dashboard layout.", + "type": "boolean" + } + }, + "type": "object" + }, + "panels": { + "default": [], + "items": { + "additionalProperties": false, + "properties": { + "gridData": { + "additionalProperties": false, + "properties": { + "h": { + "default": 15, + "description": "The height of the panel in grid units", + "minimum": 1, + "type": "number" + }, + "i": { + "type": "string" + }, + "w": { + "default": 24, + "description": "The width of the panel in grid units", + "maximum": 48, + "minimum": 1, + "type": "number" + }, + "x": { + "description": "The x coordinate of the panel in grid units", + "type": "number" + }, + "y": { + "description": "The y coordinate of the panel in grid units", + "type": "number" + } + }, + "required": [ + "x", + "y", + "i" + ], + "type": "object" + }, + "id": { + "description": "The saved object id for by reference panels", + "type": "string" + }, + "panelConfig": { + "additionalProperties": true, + "properties": { + "description": { + "description": "The description of the panel", + "type": "string" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "hidePanelTitles": { + "description": "Set to true to hide the panel title in its container.", + "type": "boolean" + }, + "savedObjectId": { + "description": "The unique id of the library item to construct the embeddable.", + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "version": { + "description": "The version of the embeddable in the panel.", + "type": "string" + } + }, + "type": "object" + }, + "panelIndex": { + "type": "string" + }, + "panelRefName": { + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "type": { + "description": "The embeddable type", + "type": "string" + }, + "version": { + "deprecated": true, + "description": "The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type).", + "type": "string" + } + }, + "required": [ + "panelConfig", + "type", + "gridData", + "panelIndex" + ], + "type": "object" + }, + "type": "array" + }, + "refreshInterval": { + "additionalProperties": false, + "description": "A container for various refresh interval settings", + "properties": { + "display": { + "deprecated": true, + "description": "A human-readable string indicating the refresh frequency. No longer used.", + "type": "string" + }, + "pause": { + "description": "Whether the refresh interval is set to be paused while viewing the dashboard.", + "type": "boolean" + }, + "section": { + "deprecated": true, + "description": "No longer used.", + "type": "number" + }, + "value": { + "description": "A numeric value indicating refresh frequency in milliseconds.", + "type": "number" + } + }, + "required": [ + "pause", + "value" + ], + "type": "object" + }, + "timeFrom": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "timeRestore": { + "default": false, + "description": "Whether to restore time upon viewing this dashboard", + "type": "boolean" + }, + "timeTo": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "title": { + "description": "A human-readable title for the dashboard", + "type": "string" + }, + "version": { + "deprecated": true, + "type": "number" + } + }, + "required": [ + "title", + "options" + ], + "type": "object" + }, + "createdAt": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "error": { + "additionalProperties": false, + "properties": { + "error": { + "type": "string" + }, + "message": { + "type": "string" + }, + "metadata": { + "additionalProperties": true, + "properties": {}, + "type": "object" + }, + "statusCode": { + "type": "number" + } + }, + "required": [ + "error", + "message", + "statusCode" + ], + "type": "object" + }, + "id": { + "type": "string" + }, + "managed": { + "type": "boolean" + }, + "namespaces": { + "items": { + "type": "string" + }, + "type": "array" + }, + "originId": { + "type": "string" + }, + "references": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name", + "type", + "id" + ], + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "id", + "type", + "attributes", + "references" + ], + "type": "object" + } + }, + "required": [ + "item" + ], + "type": "object" + } + } + } + } + }, + "summary": "Create a dashboard", + "tags": [ + "Dashboards" + ], + "x-state": "Technical Preview" + }, + "put": { + "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.", + "operationId": "put-dashboards-dashboard-id", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "description": "A unique identifier for the dashboard.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "attributes": { + "additionalProperties": false, + "properties": { + "controlGroupInput": { + "additionalProperties": false, + "properties": { + "autoApplySelections": { + "default": true, + "description": "Show apply selections button in controls.", + "type": "boolean" + }, + "chainingSystem": { + "default": "HIERARCHICAL", + "description": "The chaining strategy for multiple controls. For example, \"HIERARCHICAL\" or \"NONE\".", + "enum": [ + "NONE", + "HIERARCHICAL" + ], + "type": "string" + }, + "controls": { + "default": [], + "description": "An array of control panels and their state in the control group.", + "items": { + "additionalProperties": true, + "properties": { + "controlConfig": { + "additionalProperties": {}, + "type": "object" + }, + "grow": { + "default": false, + "description": "Expand width of the control panel to fit available space.", + "type": "boolean" + }, + "id": { + "description": "The unique ID of the control.", + "type": "string" + }, + "order": { + "description": "The order of the control panel in the control group.", + "type": "number" + }, + "type": { + "description": "The type of the control panel.", + "type": "string" + }, + "width": { + "default": "medium", + "description": "Minimum width of the control panel in the control group.", + "enum": [ + "small", + "medium", + "large" + ], + "type": "string" + } + }, + "required": [ + "type", + "order" + ], + "type": "object" + }, + "type": "array" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "ignoreParentSettings": { + "additionalProperties": false, + "properties": { + "ignoreFilters": { + "default": false, + "description": "Ignore global filters in controls.", + "type": "boolean" + }, + "ignoreQuery": { + "default": false, + "description": "Ignore the global query bar in controls.", + "type": "boolean" + }, + "ignoreTimerange": { + "default": false, + "description": "Ignore the global time range in controls.", + "type": "boolean" + }, + "ignoreValidations": { + "default": false, + "description": "Ignore validations in controls.", + "type": "boolean" + } + }, + "type": "object" + }, + "labelPosition": { + "default": "oneLine", + "description": "Position of the labels for controls. For example, \"oneLine\", \"twoLine\".", + "enum": [ + "oneLine", + "twoLine" + ], + "type": "string" + } + }, + "required": [ + "ignoreParentSettings" + ], + "type": "object" + }, + "description": { + "default": "", + "description": "A short description.", + "type": "string" + }, + "kibanaSavedObjectMeta": { + "additionalProperties": false, + "default": {}, + "description": "A container for various metadata", + "properties": { + "searchSource": { + "additionalProperties": true, + "properties": { + "filter": { + "items": { + "additionalProperties": false, + "description": "A filter for the search source.", + "properties": { + "$state": { + "additionalProperties": false, + "properties": { + "store": { + "description": "Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState').", + "enum": [ + "appState", + "globalState" + ], + "type": "string" + } + }, + "required": [ + "store" + ], + "type": "object" + }, + "meta": { + "additionalProperties": true, + "properties": { + "alias": { + "nullable": true, + "type": "string" + }, + "controlledBy": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "field": { + "type": "string" + }, + "group": { + "type": "string" + }, + "index": { + "type": "string" + }, + "isMultiIndex": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "negate": { + "type": "boolean" + }, + "params": {}, + "type": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "params" + ], + "type": "object" + }, + "query": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "meta" + ], + "type": "object" + }, + "type": "array" + }, + "query": { + "additionalProperties": false, + "properties": { + "language": { + "description": "The query language such as KQL or Lucene.", + "type": "string" + }, + "query": { + "anyOf": [ + { + "description": "A text-based query such as Kibana Query Language (KQL) or Lucene query language.", + "type": "string" + }, + { + "additionalProperties": {}, + "type": "object" + } + ] + } + }, + "required": [ + "query", + "language" + ], + "type": "object" + }, + "sort": { + "items": { + "additionalProperties": { + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "format": { + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "numeric_type": { + "enum": [ + "double", + "long", + "date", + "date_nanos" + ], + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + } + ] + }, + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "options": { + "additionalProperties": false, + "properties": { + "hidePanelTitles": { + "default": false, + "description": "Hide the panel titles in the dashboard.", + "type": "boolean" + }, + "syncColors": { + "default": true, + "description": "Synchronize colors between related panels in the dashboard.", + "type": "boolean" + }, + "syncCursor": { + "default": true, + "description": "Synchronize cursor position between related panels in the dashboard.", + "type": "boolean" + }, + "syncTooltips": { + "default": true, + "description": "Synchronize tooltips between related panels in the dashboard.", + "type": "boolean" + }, + "useMargins": { + "default": true, + "description": "Show margins between panels in the dashboard layout.", + "type": "boolean" + } + }, + "type": "object" + }, + "panels": { + "default": [], + "items": { + "additionalProperties": false, + "properties": { + "gridData": { + "additionalProperties": false, + "properties": { + "h": { + "default": 15, + "description": "The height of the panel in grid units", + "minimum": 1, + "type": "number" + }, + "i": { + "description": "The unique identifier of the panel", + "type": "string" + }, + "w": { + "default": 24, + "description": "The width of the panel in grid units", + "maximum": 48, + "minimum": 1, + "type": "number" + }, + "x": { + "description": "The x coordinate of the panel in grid units", + "type": "number" + }, + "y": { + "description": "The y coordinate of the panel in grid units", + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": "object" + }, + "id": { + "description": "The saved object id for by reference panels", + "type": "string" + }, + "panelConfig": { + "additionalProperties": true, + "properties": { + "description": { + "description": "The description of the panel", + "type": "string" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "hidePanelTitles": { + "description": "Set to true to hide the panel title in its container.", + "type": "boolean" + }, + "savedObjectId": { + "description": "The unique id of the library item to construct the embeddable.", + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "version": { + "description": "The version of the embeddable in the panel.", + "type": "string" + } + }, + "type": "object" + }, + "panelIndex": { + "description": "The unique ID of the panel.", + "type": "string" + }, + "panelRefName": { + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "type": { + "description": "The embeddable type", + "type": "string" + }, + "version": { + "deprecated": true, + "description": "The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type).", + "type": "string" + } + }, + "required": [ + "panelConfig", + "type", + "gridData" + ], + "type": "object" + }, + "type": "array" + }, + "refreshInterval": { + "additionalProperties": false, + "description": "A container for various refresh interval settings", + "properties": { + "display": { + "deprecated": true, + "description": "A human-readable string indicating the refresh frequency. No longer used.", + "type": "string" + }, + "pause": { + "description": "Whether the refresh interval is set to be paused while viewing the dashboard.", + "type": "boolean" + }, + "section": { + "deprecated": true, + "description": "No longer used.", + "type": "number" + }, + "value": { + "description": "A numeric value indicating refresh frequency in milliseconds.", + "type": "number" + } + }, + "required": [ + "pause", + "value" + ], + "type": "object" + }, + "timeFrom": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "timeRestore": { + "default": false, + "description": "Whether to restore time upon viewing this dashboard", + "type": "boolean" + }, + "timeTo": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "title": { + "description": "A human-readable title for the dashboard", + "type": "string" + }, + "version": { + "deprecated": true, + "type": "number" + } + }, + "required": [ + "title", + "options" + ], + "type": "object" + }, + "references": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name", + "type", + "id" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "attributes" + ], + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "item": { + "additionalProperties": true, + "properties": { + "attributes": { + "additionalProperties": false, + "properties": { + "controlGroupInput": { + "additionalProperties": false, + "properties": { + "autoApplySelections": { + "default": true, + "description": "Show apply selections button in controls.", + "type": "boolean" + }, + "chainingSystem": { + "default": "HIERARCHICAL", + "description": "The chaining strategy for multiple controls. For example, \"HIERARCHICAL\" or \"NONE\".", + "enum": [ + "NONE", + "HIERARCHICAL" + ], + "type": "string" + }, + "controls": { + "default": [], + "description": "An array of control panels and their state in the control group.", + "items": { + "additionalProperties": true, + "properties": { + "controlConfig": { + "additionalProperties": {}, + "type": "object" + }, + "grow": { + "default": false, + "description": "Expand width of the control panel to fit available space.", + "type": "boolean" + }, + "id": { + "description": "The unique ID of the control.", + "type": "string" + }, + "order": { + "description": "The order of the control panel in the control group.", + "type": "number" + }, + "type": { + "description": "The type of the control panel.", + "type": "string" + }, + "width": { + "default": "medium", + "description": "Minimum width of the control panel in the control group.", + "enum": [ + "small", + "medium", + "large" + ], + "type": "string" + } + }, + "required": [ + "type", + "order" + ], + "type": "object" + }, + "type": "array" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "ignoreParentSettings": { + "additionalProperties": false, + "properties": { + "ignoreFilters": { + "default": false, + "description": "Ignore global filters in controls.", + "type": "boolean" + }, + "ignoreQuery": { + "default": false, + "description": "Ignore the global query bar in controls.", + "type": "boolean" + }, + "ignoreTimerange": { + "default": false, + "description": "Ignore the global time range in controls.", + "type": "boolean" + }, + "ignoreValidations": { + "default": false, + "description": "Ignore validations in controls.", + "type": "boolean" + } + }, + "type": "object" + }, + "labelPosition": { + "default": "oneLine", + "description": "Position of the labels for controls. For example, \"oneLine\", \"twoLine\".", + "enum": [ + "oneLine", + "twoLine" + ], + "type": "string" + } + }, + "required": [ + "ignoreParentSettings" + ], + "type": "object" + }, + "description": { + "default": "", + "description": "A short description.", + "type": "string" + }, + "kibanaSavedObjectMeta": { + "additionalProperties": false, + "default": {}, + "description": "A container for various metadata", + "properties": { + "searchSource": { + "additionalProperties": true, + "properties": { + "filter": { + "items": { + "additionalProperties": false, + "description": "A filter for the search source.", + "properties": { + "$state": { + "additionalProperties": false, + "properties": { + "store": { + "description": "Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState').", + "enum": [ + "appState", + "globalState" + ], + "type": "string" + } + }, + "required": [ + "store" + ], + "type": "object" + }, + "meta": { + "additionalProperties": true, + "properties": { + "alias": { + "nullable": true, + "type": "string" + }, + "controlledBy": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "field": { + "type": "string" + }, + "group": { + "type": "string" + }, + "index": { + "type": "string" + }, + "isMultiIndex": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "negate": { + "type": "boolean" + }, + "params": {}, + "type": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "params" + ], + "type": "object" + }, + "query": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "meta" + ], + "type": "object" + }, + "type": "array" + }, + "query": { + "additionalProperties": false, + "properties": { + "language": { + "description": "The query language such as KQL or Lucene.", + "type": "string" + }, + "query": { + "anyOf": [ + { + "description": "A text-based query such as Kibana Query Language (KQL) or Lucene query language.", + "type": "string" + }, + { + "additionalProperties": {}, + "type": "object" + } + ] + } + }, + "required": [ + "query", + "language" + ], + "type": "object" + }, + "sort": { + "items": { + "additionalProperties": { + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "format": { + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "numeric_type": { + "enum": [ + "double", + "long", + "date", + "date_nanos" + ], + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + } + ] + }, + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "options": { + "additionalProperties": false, + "properties": { + "hidePanelTitles": { + "default": false, + "description": "Hide the panel titles in the dashboard.", + "type": "boolean" + }, + "syncColors": { + "default": true, + "description": "Synchronize colors between related panels in the dashboard.", + "type": "boolean" + }, + "syncCursor": { + "default": true, + "description": "Synchronize cursor position between related panels in the dashboard.", + "type": "boolean" + }, + "syncTooltips": { + "default": true, + "description": "Synchronize tooltips between related panels in the dashboard.", + "type": "boolean" + }, + "useMargins": { + "default": true, + "description": "Show margins between panels in the dashboard layout.", + "type": "boolean" + } + }, + "type": "object" + }, + "panels": { + "default": [], + "items": { + "additionalProperties": false, + "properties": { + "gridData": { + "additionalProperties": false, + "properties": { + "h": { + "default": 15, + "description": "The height of the panel in grid units", + "minimum": 1, + "type": "number" + }, + "i": { + "type": "string" + }, + "w": { + "default": 24, + "description": "The width of the panel in grid units", + "maximum": 48, + "minimum": 1, + "type": "number" + }, + "x": { + "description": "The x coordinate of the panel in grid units", + "type": "number" + }, + "y": { + "description": "The y coordinate of the panel in grid units", + "type": "number" + } + }, + "required": [ + "x", + "y", + "i" + ], + "type": "object" + }, + "id": { + "description": "The saved object id for by reference panels", + "type": "string" + }, + "panelConfig": { + "additionalProperties": true, + "properties": { + "description": { + "description": "The description of the panel", + "type": "string" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "hidePanelTitles": { + "description": "Set to true to hide the panel title in its container.", + "type": "boolean" + }, + "savedObjectId": { + "description": "The unique id of the library item to construct the embeddable.", + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "version": { + "description": "The version of the embeddable in the panel.", + "type": "string" + } + }, + "type": "object" + }, + "panelIndex": { + "type": "string" + }, + "panelRefName": { + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "type": { + "description": "The embeddable type", + "type": "string" + }, + "version": { + "deprecated": true, + "description": "The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type).", + "type": "string" + } + }, + "required": [ + "panelConfig", + "type", + "gridData", + "panelIndex" + ], + "type": "object" + }, + "type": "array" + }, + "refreshInterval": { + "additionalProperties": false, + "description": "A container for various refresh interval settings", + "properties": { + "display": { + "deprecated": true, + "description": "A human-readable string indicating the refresh frequency. No longer used.", + "type": "string" + }, + "pause": { + "description": "Whether the refresh interval is set to be paused while viewing the dashboard.", + "type": "boolean" + }, + "section": { + "deprecated": true, + "description": "No longer used.", + "type": "number" + }, + "value": { + "description": "A numeric value indicating refresh frequency in milliseconds.", + "type": "number" + } + }, + "required": [ + "pause", + "value" + ], + "type": "object" + }, + "timeFrom": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "timeRestore": { + "default": false, + "description": "Whether to restore time upon viewing this dashboard", + "type": "boolean" + }, + "timeTo": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "title": { + "description": "A human-readable title for the dashboard", + "type": "string" + }, + "version": { + "deprecated": true, + "type": "number" + } + }, + "required": [ + "title", + "options" + ], + "type": "object" + }, + "createdAt": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "error": { + "additionalProperties": false, + "properties": { + "error": { + "type": "string" + }, + "message": { + "type": "string" + }, + "metadata": { + "additionalProperties": true, + "properties": {}, + "type": "object" + }, + "statusCode": { + "type": "number" + } + }, + "required": [ + "error", + "message", + "statusCode" + ], + "type": "object" + }, + "id": { + "type": "string" + }, + "managed": { + "type": "boolean" + }, + "namespaces": { + "items": { + "type": "string" + }, + "type": "array" + }, + "originId": { + "type": "string" + }, + "references": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name", + "type", + "id" + ], + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "id", + "type", + "attributes", + "references" + ], + "type": "object" + } + }, + "required": [ + "item" + ], + "type": "object" + } + } + } + } + }, + "summary": "Update an existing dashboard", + "tags": [ + "Dashboards" + ], + "x-state": "Technical Preview" + } + }, "/api/fleet/agent_download_sources": { "get": { "operationId": "get-fleet-agent-download-sources", @@ -6547,9 +9785,6 @@ "type": "number" } }, - "required": [ - "enabled" - ], "type": "object" }, "monitoring_output_id": { @@ -7316,9 +10551,6 @@ "type": "number" } }, - "required": [ - "enabled" - ], "type": "object" }, "monitoring_output_id": { @@ -7577,9 +10809,6 @@ "type": "number" } }, - "required": [ - "enabled" - ], "type": "object" }, "monitoring_output_id": { @@ -8376,9 +11605,6 @@ "type": "number" } }, - "required": [ - "enabled" - ], "type": "object" }, "monitoring_output_id": { @@ -9436,9 +12662,6 @@ "type": "number" } }, - "required": [ - "enabled" - ], "type": "object" }, "monitoring_output_id": { @@ -10204,9 +13427,6 @@ "type": "number" } }, - "required": [ - "enabled" - ], "type": "object" }, "monitoring_output_id": { @@ -10465,9 +13685,6 @@ "type": "number" } }, - "required": [ - "enabled" - ], "type": "object" }, "monitoring_output_id": { @@ -11265,9 +14482,6 @@ "type": "number" } }, - "required": [ - "enabled" - ], "type": "object" }, "monitoring_output_id": { @@ -13278,6 +16492,7 @@ }, "upgrade_details": { "additionalProperties": false, + "nullable": true, "properties": { "action_id": { "type": "string" @@ -15470,494 +18685,496 @@ }, "upgrade_details": { "additionalProperties": false, - "properties": { - "action_id": { - "type": "string" - }, - "metadata": { - "additionalProperties": false, - "properties": { - "download_percent": { - "type": "number" - }, - "download_rate": { - "type": "number" - }, - "error_msg": { - "type": "string" - }, - "failed_state": { - "enum": [ - "UPG_REQUESTED", - "UPG_SCHEDULED", - "UPG_DOWNLOADING", - "UPG_EXTRACTING", - "UPG_REPLACING", - "UPG_RESTARTING", - "UPG_FAILED", - "UPG_WATCHING", - "UPG_ROLLBACK" - ], - "type": "string" - }, - "retry_error_msg": { - "type": "string" - }, - "retry_until": { - "type": "string" - }, - "scheduled_at": { - "type": "string" - } - }, - "type": "object" - }, - "state": { - "enum": [ - "UPG_REQUESTED", - "UPG_SCHEDULED", - "UPG_DOWNLOADING", - "UPG_EXTRACTING", - "UPG_REPLACING", - "UPG_RESTARTING", - "UPG_FAILED", - "UPG_WATCHING", - "UPG_ROLLBACK" - ], - "type": "string" - }, - "target_version": { - "type": "string" - } - }, - "required": [ - "target_version", - "action_id", - "state" - ], - "type": "object" - }, - "upgrade_started_at": { - "nullable": true, - "type": "string" - }, - "upgraded_at": { "nullable": true, - "type": "string" - }, - "user_provided_metadata": { - "additionalProperties": {}, - "type": "object" - } - }, - "required": [ - "id", - "packages", - "type", - "active", - "enrolled_at", - "local_metadata" - ], - "type": "object" - } - }, - "required": [ - "item" - ], - "type": "object" - } - } - } - }, - "400": { - "content": { - "application/json; Elastic-Api-Version=2023-10-31": { - "schema": { - "additionalProperties": false, - "description": "Generic Error", - "properties": { - "error": { - "type": "string" - }, - "message": { - "type": "string" - }, - "statusCode": { - "type": "number" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "summary": "Get an agent", - "tags": [ - "Elastic Agents" - ] - }, - "put": { - "description": "Update an agent by ID.", - "operationId": "put-fleet-agents-agentid", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, - { - "description": "A required header to protect against CSRF attacks", - "in": "header", - "name": "kbn-xsrf", - "required": true, - "schema": { - "example": "true", - "type": "string" - } - }, - { - "in": "path", - "name": "agentId", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json; Elastic-Api-Version=2023-10-31": { - "schema": { - "additionalProperties": false, - "properties": { - "tags": { - "items": { - "type": "string" - }, - "type": "array" - }, - "user_provided_metadata": { - "additionalProperties": {}, - "type": "object" - } - }, - "type": "object" - } - } - } - }, - "responses": { - "200": { - "content": { - "application/json; Elastic-Api-Version=2023-10-31": { - "schema": { - "additionalProperties": false, - "properties": { - "item": { - "additionalProperties": false, - "properties": { - "access_api_key": { - "type": "string" - }, - "access_api_key_id": { - "type": "string" - }, - "active": { - "type": "boolean" - }, - "agent": { - "additionalProperties": true, - "properties": { - "id": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "id", - "version" - ], - "type": "object" - }, - "components": { - "items": { - "additionalProperties": false, - "properties": { - "id": { - "type": "string" - }, - "message": { - "type": "string" - }, - "status": { - "enum": [ - "STARTING", - "CONFIGURING", - "HEALTHY", - "DEGRADED", - "FAILED", - "STOPPING", - "STOPPED" - ], - "type": "string" - }, - "type": { - "type": "string" - }, - "units": { - "items": { - "additionalProperties": false, - "properties": { - "id": { - "type": "string" - }, - "message": { - "type": "string" - }, - "payload": { - "additionalProperties": {}, - "type": "object" - }, - "status": { - "enum": [ - "STARTING", - "CONFIGURING", - "HEALTHY", - "DEGRADED", - "FAILED", - "STOPPING", - "STOPPED" - ], - "type": "string" - }, - "type": { - "enum": [ - "input", - "output" - ], - "type": "string" - } - }, - "required": [ - "id", - "type", - "status", - "message" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "id", - "type", - "status", - "message" - ], - "type": "object" - }, - "type": "array" - }, - "default_api_key": { - "type": "string" - }, - "default_api_key_history": { - "items": { - "additionalProperties": false, - "deprecated": true, - "properties": { - "id": { - "type": "string" - }, - "retired_at": { - "type": "string" - } - }, - "required": [ - "id", - "retired_at" - ], - "type": "object" - }, - "type": "array" - }, - "default_api_key_id": { - "type": "string" - }, - "enrolled_at": { - "type": "string" - }, - "id": { - "type": "string" - }, - "last_checkin": { - "type": "string" - }, - "last_checkin_message": { - "type": "string" - }, - "last_checkin_status": { - "enum": [ - "error", - "online", - "degraded", - "updating", - "starting" - ], - "type": "string" - }, - "local_metadata": { - "additionalProperties": {}, - "type": "object" - }, - "metrics": { - "additionalProperties": false, - "properties": { - "cpu_avg": { - "type": "number" - }, - "memory_size_byte_avg": { - "type": "number" - } - }, - "type": "object" - }, - "namespaces": { - "items": { - "type": "string" - }, - "type": "array" - }, - "outputs": { - "additionalProperties": { - "additionalProperties": false, - "properties": { - "api_key_id": { - "type": "string" - }, - "to_retire_api_key_ids": { - "items": { - "additionalProperties": false, - "properties": { - "id": { - "type": "string" - }, - "retired_at": { - "type": "string" - } - }, - "required": [ - "id", - "retired_at" - ], - "type": "object" - }, - "type": "array" - }, - "type": { - "type": "string" - } - }, - "required": [ - "api_key_id", - "type" - ], - "type": "object" - }, - "type": "object" - }, - "packages": { - "items": { - "type": "string" - }, - "type": "array" - }, - "policy_id": { - "type": "string" - }, - "policy_revision": { - "nullable": true, - "type": "number" - }, - "sort": { - "items": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - }, - { - "enum": [], - "nullable": true - } - ] - }, - "type": "array" - }, - "status": { - "enum": [ - "offline", - "error", - "online", - "inactive", - "enrolling", - "unenrolling", - "unenrolled", - "updating", - "degraded" - ], - "type": "string" - }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" - }, - "type": { - "enum": [ - "PERMANENT", - "EPHEMERAL", - "TEMPORARY" - ], - "type": "string" - }, - "unenrolled_at": { - "type": "string" - }, - "unenrollment_started_at": { - "type": "string" - }, - "unhealthy_reason": { - "items": { - "enum": [ - "input", - "output", - "other" - ], - "type": "string" - }, - "nullable": true, - "type": "array" - }, - "upgrade_details": { - "additionalProperties": false, + "properties": { + "action_id": { + "type": "string" + }, + "metadata": { + "additionalProperties": false, + "properties": { + "download_percent": { + "type": "number" + }, + "download_rate": { + "type": "number" + }, + "error_msg": { + "type": "string" + }, + "failed_state": { + "enum": [ + "UPG_REQUESTED", + "UPG_SCHEDULED", + "UPG_DOWNLOADING", + "UPG_EXTRACTING", + "UPG_REPLACING", + "UPG_RESTARTING", + "UPG_FAILED", + "UPG_WATCHING", + "UPG_ROLLBACK" + ], + "type": "string" + }, + "retry_error_msg": { + "type": "string" + }, + "retry_until": { + "type": "string" + }, + "scheduled_at": { + "type": "string" + } + }, + "type": "object" + }, + "state": { + "enum": [ + "UPG_REQUESTED", + "UPG_SCHEDULED", + "UPG_DOWNLOADING", + "UPG_EXTRACTING", + "UPG_REPLACING", + "UPG_RESTARTING", + "UPG_FAILED", + "UPG_WATCHING", + "UPG_ROLLBACK" + ], + "type": "string" + }, + "target_version": { + "type": "string" + } + }, + "required": [ + "target_version", + "action_id", + "state" + ], + "type": "object" + }, + "upgrade_started_at": { + "nullable": true, + "type": "string" + }, + "upgraded_at": { + "nullable": true, + "type": "string" + }, + "user_provided_metadata": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "id", + "packages", + "type", + "active", + "enrolled_at", + "local_metadata" + ], + "type": "object" + } + }, + "required": [ + "item" + ], + "type": "object" + } + } + } + }, + "400": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "description": "Generic Error", + "properties": { + "error": { + "type": "string" + }, + "message": { + "type": "string" + }, + "statusCode": { + "type": "number" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + } + } + }, + "summary": "Get an agent", + "tags": [ + "Elastic Agents" + ] + }, + "put": { + "description": "Update an agent by ID.", + "operationId": "put-fleet-agents-agentid", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "in": "path", + "name": "agentId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "user_provided_metadata": { + "additionalProperties": {}, + "type": "object" + } + }, + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "item": { + "additionalProperties": false, + "properties": { + "access_api_key": { + "type": "string" + }, + "access_api_key_id": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "agent": { + "additionalProperties": true, + "properties": { + "id": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "id", + "version" + ], + "type": "object" + }, + "components": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "message": { + "type": "string" + }, + "status": { + "enum": [ + "STARTING", + "CONFIGURING", + "HEALTHY", + "DEGRADED", + "FAILED", + "STOPPING", + "STOPPED" + ], + "type": "string" + }, + "type": { + "type": "string" + }, + "units": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "message": { + "type": "string" + }, + "payload": { + "additionalProperties": {}, + "type": "object" + }, + "status": { + "enum": [ + "STARTING", + "CONFIGURING", + "HEALTHY", + "DEGRADED", + "FAILED", + "STOPPING", + "STOPPED" + ], + "type": "string" + }, + "type": { + "enum": [ + "input", + "output" + ], + "type": "string" + } + }, + "required": [ + "id", + "type", + "status", + "message" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "id", + "type", + "status", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "default_api_key": { + "type": "string" + }, + "default_api_key_history": { + "items": { + "additionalProperties": false, + "deprecated": true, + "properties": { + "id": { + "type": "string" + }, + "retired_at": { + "type": "string" + } + }, + "required": [ + "id", + "retired_at" + ], + "type": "object" + }, + "type": "array" + }, + "default_api_key_id": { + "type": "string" + }, + "enrolled_at": { + "type": "string" + }, + "id": { + "type": "string" + }, + "last_checkin": { + "type": "string" + }, + "last_checkin_message": { + "type": "string" + }, + "last_checkin_status": { + "enum": [ + "error", + "online", + "degraded", + "updating", + "starting" + ], + "type": "string" + }, + "local_metadata": { + "additionalProperties": {}, + "type": "object" + }, + "metrics": { + "additionalProperties": false, + "properties": { + "cpu_avg": { + "type": "number" + }, + "memory_size_byte_avg": { + "type": "number" + } + }, + "type": "object" + }, + "namespaces": { + "items": { + "type": "string" + }, + "type": "array" + }, + "outputs": { + "additionalProperties": { + "additionalProperties": false, + "properties": { + "api_key_id": { + "type": "string" + }, + "to_retire_api_key_ids": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "retired_at": { + "type": "string" + } + }, + "required": [ + "id", + "retired_at" + ], + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "required": [ + "api_key_id", + "type" + ], + "type": "object" + }, + "type": "object" + }, + "packages": { + "items": { + "type": "string" + }, + "type": "array" + }, + "policy_id": { + "type": "string" + }, + "policy_revision": { + "nullable": true, + "type": "number" + }, + "sort": { + "items": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "enum": [], + "nullable": true + } + ] + }, + "type": "array" + }, + "status": { + "enum": [ + "offline", + "error", + "online", + "inactive", + "enrolling", + "unenrolling", + "unenrolled", + "updating", + "degraded" + ], + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "enum": [ + "PERMANENT", + "EPHEMERAL", + "TEMPORARY" + ], + "type": "string" + }, + "unenrolled_at": { + "type": "string" + }, + "unenrollment_started_at": { + "type": "string" + }, + "unhealthy_reason": { + "items": { + "enum": [ + "input", + "output", + "other" + ], + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "upgrade_details": { + "additionalProperties": false, + "nullable": true, "properties": { "action_id": { "type": "string" @@ -39075,6 +42292,9 @@ { "name": "connectors" }, + { + "name": "Dashboards" + }, { "name": "Data streams" }, diff --git a/oas_docs/bundle.serverless.json b/oas_docs/bundle.serverless.json index 9115670ecb313..ff2a4b17661b9 100644 --- a/oas_docs/bundle.serverless.json +++ b/oas_docs/bundle.serverless.json @@ -5644,6 +5644,3244 @@ ] } }, + "/api/dashboards/dashboard": { + "get": { + "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.", + "operationId": "get-dashboards-dashboard", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "The page number to return. Default is \"1\".", + "in": "query", + "name": "page", + "required": false, + "schema": { + "default": 1, + "minimum": 1, + "type": "number" + } + }, + { + "description": "The number of dashboards to display on each page (max 1000). Default is \"20\".", + "in": "query", + "name": "perPage", + "required": false, + "schema": { + "maximum": 1000, + "minimum": 1, + "type": "number" + } + } + ], + "responses": { + "200": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "items": { + "items": { + "additionalProperties": true, + "properties": { + "attributes": { + "additionalProperties": false, + "properties": { + "description": { + "default": "", + "description": "A short description.", + "type": "string" + }, + "timeRestore": { + "default": false, + "description": "Whether to restore time upon viewing this dashboard", + "type": "boolean" + }, + "title": { + "description": "A human-readable title for the dashboard", + "type": "string" + } + }, + "required": [ + "title" + ], + "type": "object" + }, + "createdAt": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "error": { + "additionalProperties": false, + "properties": { + "error": { + "type": "string" + }, + "message": { + "type": "string" + }, + "metadata": { + "additionalProperties": true, + "properties": {}, + "type": "object" + }, + "statusCode": { + "type": "number" + } + }, + "required": [ + "error", + "message", + "statusCode" + ], + "type": "object" + }, + "id": { + "type": "string" + }, + "managed": { + "type": "boolean" + }, + "namespaces": { + "items": { + "type": "string" + }, + "type": "array" + }, + "originId": { + "type": "string" + }, + "references": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name", + "type", + "id" + ], + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "id", + "type", + "attributes", + "references" + ], + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + } + }, + "required": [ + "items", + "total" + ], + "type": "object" + } + } + } + } + }, + "summary": "Get a list of dashboards", + "tags": [ + "Dashboards" + ], + "x-state": "Technical Preview" + } + }, + "/api/dashboards/dashboard/{id}": { + "delete": { + "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.", + "operationId": "delete-dashboards-dashboard-id", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "description": "A unique identifier for the dashboard.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": {}, + "summary": "Delete a dashboard", + "tags": [ + "Dashboards" + ], + "x-state": "Technical Preview" + }, + "get": { + "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.", + "operationId": "get-dashboards-dashboard-id", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A unique identifier for the dashboard.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "item": { + "additionalProperties": true, + "properties": { + "attributes": { + "additionalProperties": false, + "properties": { + "controlGroupInput": { + "additionalProperties": false, + "properties": { + "autoApplySelections": { + "default": true, + "description": "Show apply selections button in controls.", + "type": "boolean" + }, + "chainingSystem": { + "default": "HIERARCHICAL", + "description": "The chaining strategy for multiple controls. For example, \"HIERARCHICAL\" or \"NONE\".", + "enum": [ + "NONE", + "HIERARCHICAL" + ], + "type": "string" + }, + "controls": { + "default": [], + "description": "An array of control panels and their state in the control group.", + "items": { + "additionalProperties": true, + "properties": { + "controlConfig": { + "additionalProperties": {}, + "type": "object" + }, + "grow": { + "default": false, + "description": "Expand width of the control panel to fit available space.", + "type": "boolean" + }, + "id": { + "description": "The unique ID of the control.", + "type": "string" + }, + "order": { + "description": "The order of the control panel in the control group.", + "type": "number" + }, + "type": { + "description": "The type of the control panel.", + "type": "string" + }, + "width": { + "default": "medium", + "description": "Minimum width of the control panel in the control group.", + "enum": [ + "small", + "medium", + "large" + ], + "type": "string" + } + }, + "required": [ + "type", + "order" + ], + "type": "object" + }, + "type": "array" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "ignoreParentSettings": { + "additionalProperties": false, + "properties": { + "ignoreFilters": { + "default": false, + "description": "Ignore global filters in controls.", + "type": "boolean" + }, + "ignoreQuery": { + "default": false, + "description": "Ignore the global query bar in controls.", + "type": "boolean" + }, + "ignoreTimerange": { + "default": false, + "description": "Ignore the global time range in controls.", + "type": "boolean" + }, + "ignoreValidations": { + "default": false, + "description": "Ignore validations in controls.", + "type": "boolean" + } + }, + "type": "object" + }, + "labelPosition": { + "default": "oneLine", + "description": "Position of the labels for controls. For example, \"oneLine\", \"twoLine\".", + "enum": [ + "oneLine", + "twoLine" + ], + "type": "string" + } + }, + "required": [ + "ignoreParentSettings" + ], + "type": "object" + }, + "description": { + "default": "", + "description": "A short description.", + "type": "string" + }, + "kibanaSavedObjectMeta": { + "additionalProperties": false, + "default": {}, + "description": "A container for various metadata", + "properties": { + "searchSource": { + "additionalProperties": true, + "properties": { + "filter": { + "items": { + "additionalProperties": false, + "description": "A filter for the search source.", + "properties": { + "$state": { + "additionalProperties": false, + "properties": { + "store": { + "description": "Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState').", + "enum": [ + "appState", + "globalState" + ], + "type": "string" + } + }, + "required": [ + "store" + ], + "type": "object" + }, + "meta": { + "additionalProperties": true, + "properties": { + "alias": { + "nullable": true, + "type": "string" + }, + "controlledBy": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "field": { + "type": "string" + }, + "group": { + "type": "string" + }, + "index": { + "type": "string" + }, + "isMultiIndex": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "negate": { + "type": "boolean" + }, + "params": {}, + "type": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "params" + ], + "type": "object" + }, + "query": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "meta" + ], + "type": "object" + }, + "type": "array" + }, + "query": { + "additionalProperties": false, + "properties": { + "language": { + "description": "The query language such as KQL or Lucene.", + "type": "string" + }, + "query": { + "anyOf": [ + { + "description": "A text-based query such as Kibana Query Language (KQL) or Lucene query language.", + "type": "string" + }, + { + "additionalProperties": {}, + "type": "object" + } + ] + } + }, + "required": [ + "query", + "language" + ], + "type": "object" + }, + "sort": { + "items": { + "additionalProperties": { + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "format": { + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "numeric_type": { + "enum": [ + "double", + "long", + "date", + "date_nanos" + ], + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + } + ] + }, + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "options": { + "additionalProperties": false, + "properties": { + "hidePanelTitles": { + "default": false, + "description": "Hide the panel titles in the dashboard.", + "type": "boolean" + }, + "syncColors": { + "default": true, + "description": "Synchronize colors between related panels in the dashboard.", + "type": "boolean" + }, + "syncCursor": { + "default": true, + "description": "Synchronize cursor position between related panels in the dashboard.", + "type": "boolean" + }, + "syncTooltips": { + "default": true, + "description": "Synchronize tooltips between related panels in the dashboard.", + "type": "boolean" + }, + "useMargins": { + "default": true, + "description": "Show margins between panels in the dashboard layout.", + "type": "boolean" + } + }, + "type": "object" + }, + "panels": { + "default": [], + "items": { + "additionalProperties": false, + "properties": { + "gridData": { + "additionalProperties": false, + "properties": { + "h": { + "default": 15, + "description": "The height of the panel in grid units", + "minimum": 1, + "type": "number" + }, + "i": { + "type": "string" + }, + "w": { + "default": 24, + "description": "The width of the panel in grid units", + "maximum": 48, + "minimum": 1, + "type": "number" + }, + "x": { + "description": "The x coordinate of the panel in grid units", + "type": "number" + }, + "y": { + "description": "The y coordinate of the panel in grid units", + "type": "number" + } + }, + "required": [ + "x", + "y", + "i" + ], + "type": "object" + }, + "id": { + "description": "The saved object id for by reference panels", + "type": "string" + }, + "panelConfig": { + "additionalProperties": true, + "properties": { + "description": { + "description": "The description of the panel", + "type": "string" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "hidePanelTitles": { + "description": "Set to true to hide the panel title in its container.", + "type": "boolean" + }, + "savedObjectId": { + "description": "The unique id of the library item to construct the embeddable.", + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "version": { + "description": "The version of the embeddable in the panel.", + "type": "string" + } + }, + "type": "object" + }, + "panelIndex": { + "type": "string" + }, + "panelRefName": { + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "type": { + "description": "The embeddable type", + "type": "string" + }, + "version": { + "deprecated": true, + "description": "The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type).", + "type": "string" + } + }, + "required": [ + "panelConfig", + "type", + "gridData", + "panelIndex" + ], + "type": "object" + }, + "type": "array" + }, + "refreshInterval": { + "additionalProperties": false, + "description": "A container for various refresh interval settings", + "properties": { + "display": { + "deprecated": true, + "description": "A human-readable string indicating the refresh frequency. No longer used.", + "type": "string" + }, + "pause": { + "description": "Whether the refresh interval is set to be paused while viewing the dashboard.", + "type": "boolean" + }, + "section": { + "deprecated": true, + "description": "No longer used.", + "type": "number" + }, + "value": { + "description": "A numeric value indicating refresh frequency in milliseconds.", + "type": "number" + } + }, + "required": [ + "pause", + "value" + ], + "type": "object" + }, + "timeFrom": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "timeRestore": { + "default": false, + "description": "Whether to restore time upon viewing this dashboard", + "type": "boolean" + }, + "timeTo": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "title": { + "description": "A human-readable title for the dashboard", + "type": "string" + }, + "version": { + "deprecated": true, + "type": "number" + } + }, + "required": [ + "title", + "options" + ], + "type": "object" + }, + "createdAt": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "error": { + "additionalProperties": false, + "properties": { + "error": { + "type": "string" + }, + "message": { + "type": "string" + }, + "metadata": { + "additionalProperties": true, + "properties": {}, + "type": "object" + }, + "statusCode": { + "type": "number" + } + }, + "required": [ + "error", + "message", + "statusCode" + ], + "type": "object" + }, + "id": { + "type": "string" + }, + "managed": { + "type": "boolean" + }, + "namespaces": { + "items": { + "type": "string" + }, + "type": "array" + }, + "originId": { + "type": "string" + }, + "references": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name", + "type", + "id" + ], + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "id", + "type", + "attributes", + "references" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "aliasPurpose": { + "enum": [ + "savedObjectConversion", + "savedObjectImport" + ], + "type": "string" + }, + "aliasTargetId": { + "type": "string" + }, + "outcome": { + "enum": [ + "exactMatch", + "aliasMatch", + "conflict" + ], + "type": "string" + } + }, + "required": [ + "outcome" + ], + "type": "object" + } + }, + "required": [ + "item", + "meta" + ], + "type": "object" + } + } + } + } + }, + "summary": "Get a dashboard", + "tags": [ + "Dashboards" + ], + "x-state": "Technical Preview" + }, + "post": { + "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.", + "operationId": "post-dashboards-dashboard-id", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "description": "A unique identifier for the dashboard.", + "in": "path", + "name": "id", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "attributes": { + "additionalProperties": false, + "properties": { + "controlGroupInput": { + "additionalProperties": false, + "properties": { + "autoApplySelections": { + "default": true, + "description": "Show apply selections button in controls.", + "type": "boolean" + }, + "chainingSystem": { + "default": "HIERARCHICAL", + "description": "The chaining strategy for multiple controls. For example, \"HIERARCHICAL\" or \"NONE\".", + "enum": [ + "NONE", + "HIERARCHICAL" + ], + "type": "string" + }, + "controls": { + "default": [], + "description": "An array of control panels and their state in the control group.", + "items": { + "additionalProperties": true, + "properties": { + "controlConfig": { + "additionalProperties": {}, + "type": "object" + }, + "grow": { + "default": false, + "description": "Expand width of the control panel to fit available space.", + "type": "boolean" + }, + "id": { + "description": "The unique ID of the control.", + "type": "string" + }, + "order": { + "description": "The order of the control panel in the control group.", + "type": "number" + }, + "type": { + "description": "The type of the control panel.", + "type": "string" + }, + "width": { + "default": "medium", + "description": "Minimum width of the control panel in the control group.", + "enum": [ + "small", + "medium", + "large" + ], + "type": "string" + } + }, + "required": [ + "type", + "order" + ], + "type": "object" + }, + "type": "array" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "ignoreParentSettings": { + "additionalProperties": false, + "properties": { + "ignoreFilters": { + "default": false, + "description": "Ignore global filters in controls.", + "type": "boolean" + }, + "ignoreQuery": { + "default": false, + "description": "Ignore the global query bar in controls.", + "type": "boolean" + }, + "ignoreTimerange": { + "default": false, + "description": "Ignore the global time range in controls.", + "type": "boolean" + }, + "ignoreValidations": { + "default": false, + "description": "Ignore validations in controls.", + "type": "boolean" + } + }, + "type": "object" + }, + "labelPosition": { + "default": "oneLine", + "description": "Position of the labels for controls. For example, \"oneLine\", \"twoLine\".", + "enum": [ + "oneLine", + "twoLine" + ], + "type": "string" + } + }, + "required": [ + "ignoreParentSettings" + ], + "type": "object" + }, + "description": { + "default": "", + "description": "A short description.", + "type": "string" + }, + "kibanaSavedObjectMeta": { + "additionalProperties": false, + "default": {}, + "description": "A container for various metadata", + "properties": { + "searchSource": { + "additionalProperties": true, + "properties": { + "filter": { + "items": { + "additionalProperties": false, + "description": "A filter for the search source.", + "properties": { + "$state": { + "additionalProperties": false, + "properties": { + "store": { + "description": "Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState').", + "enum": [ + "appState", + "globalState" + ], + "type": "string" + } + }, + "required": [ + "store" + ], + "type": "object" + }, + "meta": { + "additionalProperties": true, + "properties": { + "alias": { + "nullable": true, + "type": "string" + }, + "controlledBy": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "field": { + "type": "string" + }, + "group": { + "type": "string" + }, + "index": { + "type": "string" + }, + "isMultiIndex": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "negate": { + "type": "boolean" + }, + "params": {}, + "type": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "params" + ], + "type": "object" + }, + "query": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "meta" + ], + "type": "object" + }, + "type": "array" + }, + "query": { + "additionalProperties": false, + "properties": { + "language": { + "description": "The query language such as KQL or Lucene.", + "type": "string" + }, + "query": { + "anyOf": [ + { + "description": "A text-based query such as Kibana Query Language (KQL) or Lucene query language.", + "type": "string" + }, + { + "additionalProperties": {}, + "type": "object" + } + ] + } + }, + "required": [ + "query", + "language" + ], + "type": "object" + }, + "sort": { + "items": { + "additionalProperties": { + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "format": { + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "numeric_type": { + "enum": [ + "double", + "long", + "date", + "date_nanos" + ], + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + } + ] + }, + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "options": { + "additionalProperties": false, + "properties": { + "hidePanelTitles": { + "default": false, + "description": "Hide the panel titles in the dashboard.", + "type": "boolean" + }, + "syncColors": { + "default": true, + "description": "Synchronize colors between related panels in the dashboard.", + "type": "boolean" + }, + "syncCursor": { + "default": true, + "description": "Synchronize cursor position between related panels in the dashboard.", + "type": "boolean" + }, + "syncTooltips": { + "default": true, + "description": "Synchronize tooltips between related panels in the dashboard.", + "type": "boolean" + }, + "useMargins": { + "default": true, + "description": "Show margins between panels in the dashboard layout.", + "type": "boolean" + } + }, + "type": "object" + }, + "panels": { + "default": [], + "items": { + "additionalProperties": false, + "properties": { + "gridData": { + "additionalProperties": false, + "properties": { + "h": { + "default": 15, + "description": "The height of the panel in grid units", + "minimum": 1, + "type": "number" + }, + "i": { + "description": "The unique identifier of the panel", + "type": "string" + }, + "w": { + "default": 24, + "description": "The width of the panel in grid units", + "maximum": 48, + "minimum": 1, + "type": "number" + }, + "x": { + "description": "The x coordinate of the panel in grid units", + "type": "number" + }, + "y": { + "description": "The y coordinate of the panel in grid units", + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": "object" + }, + "id": { + "description": "The saved object id for by reference panels", + "type": "string" + }, + "panelConfig": { + "additionalProperties": true, + "properties": { + "description": { + "description": "The description of the panel", + "type": "string" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "hidePanelTitles": { + "description": "Set to true to hide the panel title in its container.", + "type": "boolean" + }, + "savedObjectId": { + "description": "The unique id of the library item to construct the embeddable.", + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "version": { + "description": "The version of the embeddable in the panel.", + "type": "string" + } + }, + "type": "object" + }, + "panelIndex": { + "description": "The unique ID of the panel.", + "type": "string" + }, + "panelRefName": { + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "type": { + "description": "The embeddable type", + "type": "string" + }, + "version": { + "deprecated": true, + "description": "The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type).", + "type": "string" + } + }, + "required": [ + "panelConfig", + "type", + "gridData" + ], + "type": "object" + }, + "type": "array" + }, + "refreshInterval": { + "additionalProperties": false, + "description": "A container for various refresh interval settings", + "properties": { + "display": { + "deprecated": true, + "description": "A human-readable string indicating the refresh frequency. No longer used.", + "type": "string" + }, + "pause": { + "description": "Whether the refresh interval is set to be paused while viewing the dashboard.", + "type": "boolean" + }, + "section": { + "deprecated": true, + "description": "No longer used.", + "type": "number" + }, + "value": { + "description": "A numeric value indicating refresh frequency in milliseconds.", + "type": "number" + } + }, + "required": [ + "pause", + "value" + ], + "type": "object" + }, + "timeFrom": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "timeRestore": { + "default": false, + "description": "Whether to restore time upon viewing this dashboard", + "type": "boolean" + }, + "timeTo": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "title": { + "description": "A human-readable title for the dashboard", + "type": "string" + }, + "version": { + "deprecated": true, + "type": "number" + } + }, + "required": [ + "title", + "options" + ], + "type": "object" + }, + "references": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name", + "type", + "id" + ], + "type": "object" + }, + "type": "array" + }, + "spaces": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "attributes" + ], + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "item": { + "additionalProperties": true, + "properties": { + "attributes": { + "additionalProperties": false, + "properties": { + "controlGroupInput": { + "additionalProperties": false, + "properties": { + "autoApplySelections": { + "default": true, + "description": "Show apply selections button in controls.", + "type": "boolean" + }, + "chainingSystem": { + "default": "HIERARCHICAL", + "description": "The chaining strategy for multiple controls. For example, \"HIERARCHICAL\" or \"NONE\".", + "enum": [ + "NONE", + "HIERARCHICAL" + ], + "type": "string" + }, + "controls": { + "default": [], + "description": "An array of control panels and their state in the control group.", + "items": { + "additionalProperties": true, + "properties": { + "controlConfig": { + "additionalProperties": {}, + "type": "object" + }, + "grow": { + "default": false, + "description": "Expand width of the control panel to fit available space.", + "type": "boolean" + }, + "id": { + "description": "The unique ID of the control.", + "type": "string" + }, + "order": { + "description": "The order of the control panel in the control group.", + "type": "number" + }, + "type": { + "description": "The type of the control panel.", + "type": "string" + }, + "width": { + "default": "medium", + "description": "Minimum width of the control panel in the control group.", + "enum": [ + "small", + "medium", + "large" + ], + "type": "string" + } + }, + "required": [ + "type", + "order" + ], + "type": "object" + }, + "type": "array" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "ignoreParentSettings": { + "additionalProperties": false, + "properties": { + "ignoreFilters": { + "default": false, + "description": "Ignore global filters in controls.", + "type": "boolean" + }, + "ignoreQuery": { + "default": false, + "description": "Ignore the global query bar in controls.", + "type": "boolean" + }, + "ignoreTimerange": { + "default": false, + "description": "Ignore the global time range in controls.", + "type": "boolean" + }, + "ignoreValidations": { + "default": false, + "description": "Ignore validations in controls.", + "type": "boolean" + } + }, + "type": "object" + }, + "labelPosition": { + "default": "oneLine", + "description": "Position of the labels for controls. For example, \"oneLine\", \"twoLine\".", + "enum": [ + "oneLine", + "twoLine" + ], + "type": "string" + } + }, + "required": [ + "ignoreParentSettings" + ], + "type": "object" + }, + "description": { + "default": "", + "description": "A short description.", + "type": "string" + }, + "kibanaSavedObjectMeta": { + "additionalProperties": false, + "default": {}, + "description": "A container for various metadata", + "properties": { + "searchSource": { + "additionalProperties": true, + "properties": { + "filter": { + "items": { + "additionalProperties": false, + "description": "A filter for the search source.", + "properties": { + "$state": { + "additionalProperties": false, + "properties": { + "store": { + "description": "Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState').", + "enum": [ + "appState", + "globalState" + ], + "type": "string" + } + }, + "required": [ + "store" + ], + "type": "object" + }, + "meta": { + "additionalProperties": true, + "properties": { + "alias": { + "nullable": true, + "type": "string" + }, + "controlledBy": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "field": { + "type": "string" + }, + "group": { + "type": "string" + }, + "index": { + "type": "string" + }, + "isMultiIndex": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "negate": { + "type": "boolean" + }, + "params": {}, + "type": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "params" + ], + "type": "object" + }, + "query": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "meta" + ], + "type": "object" + }, + "type": "array" + }, + "query": { + "additionalProperties": false, + "properties": { + "language": { + "description": "The query language such as KQL or Lucene.", + "type": "string" + }, + "query": { + "anyOf": [ + { + "description": "A text-based query such as Kibana Query Language (KQL) or Lucene query language.", + "type": "string" + }, + { + "additionalProperties": {}, + "type": "object" + } + ] + } + }, + "required": [ + "query", + "language" + ], + "type": "object" + }, + "sort": { + "items": { + "additionalProperties": { + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "format": { + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "numeric_type": { + "enum": [ + "double", + "long", + "date", + "date_nanos" + ], + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + } + ] + }, + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "options": { + "additionalProperties": false, + "properties": { + "hidePanelTitles": { + "default": false, + "description": "Hide the panel titles in the dashboard.", + "type": "boolean" + }, + "syncColors": { + "default": true, + "description": "Synchronize colors between related panels in the dashboard.", + "type": "boolean" + }, + "syncCursor": { + "default": true, + "description": "Synchronize cursor position between related panels in the dashboard.", + "type": "boolean" + }, + "syncTooltips": { + "default": true, + "description": "Synchronize tooltips between related panels in the dashboard.", + "type": "boolean" + }, + "useMargins": { + "default": true, + "description": "Show margins between panels in the dashboard layout.", + "type": "boolean" + } + }, + "type": "object" + }, + "panels": { + "default": [], + "items": { + "additionalProperties": false, + "properties": { + "gridData": { + "additionalProperties": false, + "properties": { + "h": { + "default": 15, + "description": "The height of the panel in grid units", + "minimum": 1, + "type": "number" + }, + "i": { + "type": "string" + }, + "w": { + "default": 24, + "description": "The width of the panel in grid units", + "maximum": 48, + "minimum": 1, + "type": "number" + }, + "x": { + "description": "The x coordinate of the panel in grid units", + "type": "number" + }, + "y": { + "description": "The y coordinate of the panel in grid units", + "type": "number" + } + }, + "required": [ + "x", + "y", + "i" + ], + "type": "object" + }, + "id": { + "description": "The saved object id for by reference panels", + "type": "string" + }, + "panelConfig": { + "additionalProperties": true, + "properties": { + "description": { + "description": "The description of the panel", + "type": "string" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "hidePanelTitles": { + "description": "Set to true to hide the panel title in its container.", + "type": "boolean" + }, + "savedObjectId": { + "description": "The unique id of the library item to construct the embeddable.", + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "version": { + "description": "The version of the embeddable in the panel.", + "type": "string" + } + }, + "type": "object" + }, + "panelIndex": { + "type": "string" + }, + "panelRefName": { + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "type": { + "description": "The embeddable type", + "type": "string" + }, + "version": { + "deprecated": true, + "description": "The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type).", + "type": "string" + } + }, + "required": [ + "panelConfig", + "type", + "gridData", + "panelIndex" + ], + "type": "object" + }, + "type": "array" + }, + "refreshInterval": { + "additionalProperties": false, + "description": "A container for various refresh interval settings", + "properties": { + "display": { + "deprecated": true, + "description": "A human-readable string indicating the refresh frequency. No longer used.", + "type": "string" + }, + "pause": { + "description": "Whether the refresh interval is set to be paused while viewing the dashboard.", + "type": "boolean" + }, + "section": { + "deprecated": true, + "description": "No longer used.", + "type": "number" + }, + "value": { + "description": "A numeric value indicating refresh frequency in milliseconds.", + "type": "number" + } + }, + "required": [ + "pause", + "value" + ], + "type": "object" + }, + "timeFrom": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "timeRestore": { + "default": false, + "description": "Whether to restore time upon viewing this dashboard", + "type": "boolean" + }, + "timeTo": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "title": { + "description": "A human-readable title for the dashboard", + "type": "string" + }, + "version": { + "deprecated": true, + "type": "number" + } + }, + "required": [ + "title", + "options" + ], + "type": "object" + }, + "createdAt": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "error": { + "additionalProperties": false, + "properties": { + "error": { + "type": "string" + }, + "message": { + "type": "string" + }, + "metadata": { + "additionalProperties": true, + "properties": {}, + "type": "object" + }, + "statusCode": { + "type": "number" + } + }, + "required": [ + "error", + "message", + "statusCode" + ], + "type": "object" + }, + "id": { + "type": "string" + }, + "managed": { + "type": "boolean" + }, + "namespaces": { + "items": { + "type": "string" + }, + "type": "array" + }, + "originId": { + "type": "string" + }, + "references": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name", + "type", + "id" + ], + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "id", + "type", + "attributes", + "references" + ], + "type": "object" + } + }, + "required": [ + "item" + ], + "type": "object" + } + } + } + } + }, + "summary": "Create a dashboard", + "tags": [ + "Dashboards" + ], + "x-state": "Technical Preview" + }, + "put": { + "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.", + "operationId": "put-dashboards-dashboard-id", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "description": "A unique identifier for the dashboard.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "attributes": { + "additionalProperties": false, + "properties": { + "controlGroupInput": { + "additionalProperties": false, + "properties": { + "autoApplySelections": { + "default": true, + "description": "Show apply selections button in controls.", + "type": "boolean" + }, + "chainingSystem": { + "default": "HIERARCHICAL", + "description": "The chaining strategy for multiple controls. For example, \"HIERARCHICAL\" or \"NONE\".", + "enum": [ + "NONE", + "HIERARCHICAL" + ], + "type": "string" + }, + "controls": { + "default": [], + "description": "An array of control panels and their state in the control group.", + "items": { + "additionalProperties": true, + "properties": { + "controlConfig": { + "additionalProperties": {}, + "type": "object" + }, + "grow": { + "default": false, + "description": "Expand width of the control panel to fit available space.", + "type": "boolean" + }, + "id": { + "description": "The unique ID of the control.", + "type": "string" + }, + "order": { + "description": "The order of the control panel in the control group.", + "type": "number" + }, + "type": { + "description": "The type of the control panel.", + "type": "string" + }, + "width": { + "default": "medium", + "description": "Minimum width of the control panel in the control group.", + "enum": [ + "small", + "medium", + "large" + ], + "type": "string" + } + }, + "required": [ + "type", + "order" + ], + "type": "object" + }, + "type": "array" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "ignoreParentSettings": { + "additionalProperties": false, + "properties": { + "ignoreFilters": { + "default": false, + "description": "Ignore global filters in controls.", + "type": "boolean" + }, + "ignoreQuery": { + "default": false, + "description": "Ignore the global query bar in controls.", + "type": "boolean" + }, + "ignoreTimerange": { + "default": false, + "description": "Ignore the global time range in controls.", + "type": "boolean" + }, + "ignoreValidations": { + "default": false, + "description": "Ignore validations in controls.", + "type": "boolean" + } + }, + "type": "object" + }, + "labelPosition": { + "default": "oneLine", + "description": "Position of the labels for controls. For example, \"oneLine\", \"twoLine\".", + "enum": [ + "oneLine", + "twoLine" + ], + "type": "string" + } + }, + "required": [ + "ignoreParentSettings" + ], + "type": "object" + }, + "description": { + "default": "", + "description": "A short description.", + "type": "string" + }, + "kibanaSavedObjectMeta": { + "additionalProperties": false, + "default": {}, + "description": "A container for various metadata", + "properties": { + "searchSource": { + "additionalProperties": true, + "properties": { + "filter": { + "items": { + "additionalProperties": false, + "description": "A filter for the search source.", + "properties": { + "$state": { + "additionalProperties": false, + "properties": { + "store": { + "description": "Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState').", + "enum": [ + "appState", + "globalState" + ], + "type": "string" + } + }, + "required": [ + "store" + ], + "type": "object" + }, + "meta": { + "additionalProperties": true, + "properties": { + "alias": { + "nullable": true, + "type": "string" + }, + "controlledBy": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "field": { + "type": "string" + }, + "group": { + "type": "string" + }, + "index": { + "type": "string" + }, + "isMultiIndex": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "negate": { + "type": "boolean" + }, + "params": {}, + "type": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "params" + ], + "type": "object" + }, + "query": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "meta" + ], + "type": "object" + }, + "type": "array" + }, + "query": { + "additionalProperties": false, + "properties": { + "language": { + "description": "The query language such as KQL or Lucene.", + "type": "string" + }, + "query": { + "anyOf": [ + { + "description": "A text-based query such as Kibana Query Language (KQL) or Lucene query language.", + "type": "string" + }, + { + "additionalProperties": {}, + "type": "object" + } + ] + } + }, + "required": [ + "query", + "language" + ], + "type": "object" + }, + "sort": { + "items": { + "additionalProperties": { + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "format": { + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "numeric_type": { + "enum": [ + "double", + "long", + "date", + "date_nanos" + ], + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + } + ] + }, + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "options": { + "additionalProperties": false, + "properties": { + "hidePanelTitles": { + "default": false, + "description": "Hide the panel titles in the dashboard.", + "type": "boolean" + }, + "syncColors": { + "default": true, + "description": "Synchronize colors between related panels in the dashboard.", + "type": "boolean" + }, + "syncCursor": { + "default": true, + "description": "Synchronize cursor position between related panels in the dashboard.", + "type": "boolean" + }, + "syncTooltips": { + "default": true, + "description": "Synchronize tooltips between related panels in the dashboard.", + "type": "boolean" + }, + "useMargins": { + "default": true, + "description": "Show margins between panels in the dashboard layout.", + "type": "boolean" + } + }, + "type": "object" + }, + "panels": { + "default": [], + "items": { + "additionalProperties": false, + "properties": { + "gridData": { + "additionalProperties": false, + "properties": { + "h": { + "default": 15, + "description": "The height of the panel in grid units", + "minimum": 1, + "type": "number" + }, + "i": { + "description": "The unique identifier of the panel", + "type": "string" + }, + "w": { + "default": 24, + "description": "The width of the panel in grid units", + "maximum": 48, + "minimum": 1, + "type": "number" + }, + "x": { + "description": "The x coordinate of the panel in grid units", + "type": "number" + }, + "y": { + "description": "The y coordinate of the panel in grid units", + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": "object" + }, + "id": { + "description": "The saved object id for by reference panels", + "type": "string" + }, + "panelConfig": { + "additionalProperties": true, + "properties": { + "description": { + "description": "The description of the panel", + "type": "string" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "hidePanelTitles": { + "description": "Set to true to hide the panel title in its container.", + "type": "boolean" + }, + "savedObjectId": { + "description": "The unique id of the library item to construct the embeddable.", + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "version": { + "description": "The version of the embeddable in the panel.", + "type": "string" + } + }, + "type": "object" + }, + "panelIndex": { + "description": "The unique ID of the panel.", + "type": "string" + }, + "panelRefName": { + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "type": { + "description": "The embeddable type", + "type": "string" + }, + "version": { + "deprecated": true, + "description": "The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type).", + "type": "string" + } + }, + "required": [ + "panelConfig", + "type", + "gridData" + ], + "type": "object" + }, + "type": "array" + }, + "refreshInterval": { + "additionalProperties": false, + "description": "A container for various refresh interval settings", + "properties": { + "display": { + "deprecated": true, + "description": "A human-readable string indicating the refresh frequency. No longer used.", + "type": "string" + }, + "pause": { + "description": "Whether the refresh interval is set to be paused while viewing the dashboard.", + "type": "boolean" + }, + "section": { + "deprecated": true, + "description": "No longer used.", + "type": "number" + }, + "value": { + "description": "A numeric value indicating refresh frequency in milliseconds.", + "type": "number" + } + }, + "required": [ + "pause", + "value" + ], + "type": "object" + }, + "timeFrom": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "timeRestore": { + "default": false, + "description": "Whether to restore time upon viewing this dashboard", + "type": "boolean" + }, + "timeTo": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "title": { + "description": "A human-readable title for the dashboard", + "type": "string" + }, + "version": { + "deprecated": true, + "type": "number" + } + }, + "required": [ + "title", + "options" + ], + "type": "object" + }, + "references": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name", + "type", + "id" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "attributes" + ], + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "item": { + "additionalProperties": true, + "properties": { + "attributes": { + "additionalProperties": false, + "properties": { + "controlGroupInput": { + "additionalProperties": false, + "properties": { + "autoApplySelections": { + "default": true, + "description": "Show apply selections button in controls.", + "type": "boolean" + }, + "chainingSystem": { + "default": "HIERARCHICAL", + "description": "The chaining strategy for multiple controls. For example, \"HIERARCHICAL\" or \"NONE\".", + "enum": [ + "NONE", + "HIERARCHICAL" + ], + "type": "string" + }, + "controls": { + "default": [], + "description": "An array of control panels and their state in the control group.", + "items": { + "additionalProperties": true, + "properties": { + "controlConfig": { + "additionalProperties": {}, + "type": "object" + }, + "grow": { + "default": false, + "description": "Expand width of the control panel to fit available space.", + "type": "boolean" + }, + "id": { + "description": "The unique ID of the control.", + "type": "string" + }, + "order": { + "description": "The order of the control panel in the control group.", + "type": "number" + }, + "type": { + "description": "The type of the control panel.", + "type": "string" + }, + "width": { + "default": "medium", + "description": "Minimum width of the control panel in the control group.", + "enum": [ + "small", + "medium", + "large" + ], + "type": "string" + } + }, + "required": [ + "type", + "order" + ], + "type": "object" + }, + "type": "array" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "ignoreParentSettings": { + "additionalProperties": false, + "properties": { + "ignoreFilters": { + "default": false, + "description": "Ignore global filters in controls.", + "type": "boolean" + }, + "ignoreQuery": { + "default": false, + "description": "Ignore the global query bar in controls.", + "type": "boolean" + }, + "ignoreTimerange": { + "default": false, + "description": "Ignore the global time range in controls.", + "type": "boolean" + }, + "ignoreValidations": { + "default": false, + "description": "Ignore validations in controls.", + "type": "boolean" + } + }, + "type": "object" + }, + "labelPosition": { + "default": "oneLine", + "description": "Position of the labels for controls. For example, \"oneLine\", \"twoLine\".", + "enum": [ + "oneLine", + "twoLine" + ], + "type": "string" + } + }, + "required": [ + "ignoreParentSettings" + ], + "type": "object" + }, + "description": { + "default": "", + "description": "A short description.", + "type": "string" + }, + "kibanaSavedObjectMeta": { + "additionalProperties": false, + "default": {}, + "description": "A container for various metadata", + "properties": { + "searchSource": { + "additionalProperties": true, + "properties": { + "filter": { + "items": { + "additionalProperties": false, + "description": "A filter for the search source.", + "properties": { + "$state": { + "additionalProperties": false, + "properties": { + "store": { + "description": "Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState').", + "enum": [ + "appState", + "globalState" + ], + "type": "string" + } + }, + "required": [ + "store" + ], + "type": "object" + }, + "meta": { + "additionalProperties": true, + "properties": { + "alias": { + "nullable": true, + "type": "string" + }, + "controlledBy": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "field": { + "type": "string" + }, + "group": { + "type": "string" + }, + "index": { + "type": "string" + }, + "isMultiIndex": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "negate": { + "type": "boolean" + }, + "params": {}, + "type": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "params" + ], + "type": "object" + }, + "query": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "meta" + ], + "type": "object" + }, + "type": "array" + }, + "query": { + "additionalProperties": false, + "properties": { + "language": { + "description": "The query language such as KQL or Lucene.", + "type": "string" + }, + "query": { + "anyOf": [ + { + "description": "A text-based query such as Kibana Query Language (KQL) or Lucene query language.", + "type": "string" + }, + { + "additionalProperties": {}, + "type": "object" + } + ] + } + }, + "required": [ + "query", + "language" + ], + "type": "object" + }, + "sort": { + "items": { + "additionalProperties": { + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "format": { + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "numeric_type": { + "enum": [ + "double", + "long", + "date", + "date_nanos" + ], + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + } + ] + }, + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "options": { + "additionalProperties": false, + "properties": { + "hidePanelTitles": { + "default": false, + "description": "Hide the panel titles in the dashboard.", + "type": "boolean" + }, + "syncColors": { + "default": true, + "description": "Synchronize colors between related panels in the dashboard.", + "type": "boolean" + }, + "syncCursor": { + "default": true, + "description": "Synchronize cursor position between related panels in the dashboard.", + "type": "boolean" + }, + "syncTooltips": { + "default": true, + "description": "Synchronize tooltips between related panels in the dashboard.", + "type": "boolean" + }, + "useMargins": { + "default": true, + "description": "Show margins between panels in the dashboard layout.", + "type": "boolean" + } + }, + "type": "object" + }, + "panels": { + "default": [], + "items": { + "additionalProperties": false, + "properties": { + "gridData": { + "additionalProperties": false, + "properties": { + "h": { + "default": 15, + "description": "The height of the panel in grid units", + "minimum": 1, + "type": "number" + }, + "i": { + "type": "string" + }, + "w": { + "default": 24, + "description": "The width of the panel in grid units", + "maximum": 48, + "minimum": 1, + "type": "number" + }, + "x": { + "description": "The x coordinate of the panel in grid units", + "type": "number" + }, + "y": { + "description": "The y coordinate of the panel in grid units", + "type": "number" + } + }, + "required": [ + "x", + "y", + "i" + ], + "type": "object" + }, + "id": { + "description": "The saved object id for by reference panels", + "type": "string" + }, + "panelConfig": { + "additionalProperties": true, + "properties": { + "description": { + "description": "The description of the panel", + "type": "string" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "hidePanelTitles": { + "description": "Set to true to hide the panel title in its container.", + "type": "boolean" + }, + "savedObjectId": { + "description": "The unique id of the library item to construct the embeddable.", + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "version": { + "description": "The version of the embeddable in the panel.", + "type": "string" + } + }, + "type": "object" + }, + "panelIndex": { + "type": "string" + }, + "panelRefName": { + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "type": { + "description": "The embeddable type", + "type": "string" + }, + "version": { + "deprecated": true, + "description": "The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type).", + "type": "string" + } + }, + "required": [ + "panelConfig", + "type", + "gridData", + "panelIndex" + ], + "type": "object" + }, + "type": "array" + }, + "refreshInterval": { + "additionalProperties": false, + "description": "A container for various refresh interval settings", + "properties": { + "display": { + "deprecated": true, + "description": "A human-readable string indicating the refresh frequency. No longer used.", + "type": "string" + }, + "pause": { + "description": "Whether the refresh interval is set to be paused while viewing the dashboard.", + "type": "boolean" + }, + "section": { + "deprecated": true, + "description": "No longer used.", + "type": "number" + }, + "value": { + "description": "A numeric value indicating refresh frequency in milliseconds.", + "type": "number" + } + }, + "required": [ + "pause", + "value" + ], + "type": "object" + }, + "timeFrom": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "timeRestore": { + "default": false, + "description": "Whether to restore time upon viewing this dashboard", + "type": "boolean" + }, + "timeTo": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "title": { + "description": "A human-readable title for the dashboard", + "type": "string" + }, + "version": { + "deprecated": true, + "type": "number" + } + }, + "required": [ + "title", + "options" + ], + "type": "object" + }, + "createdAt": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "error": { + "additionalProperties": false, + "properties": { + "error": { + "type": "string" + }, + "message": { + "type": "string" + }, + "metadata": { + "additionalProperties": true, + "properties": {}, + "type": "object" + }, + "statusCode": { + "type": "number" + } + }, + "required": [ + "error", + "message", + "statusCode" + ], + "type": "object" + }, + "id": { + "type": "string" + }, + "managed": { + "type": "boolean" + }, + "namespaces": { + "items": { + "type": "string" + }, + "type": "array" + }, + "originId": { + "type": "string" + }, + "references": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name", + "type", + "id" + ], + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "id", + "type", + "attributes", + "references" + ], + "type": "object" + } + }, + "required": [ + "item" + ], + "type": "object" + } + } + } + } + }, + "summary": "Update an existing dashboard", + "tags": [ + "Dashboards" + ], + "x-state": "Technical Preview" + } + }, "/api/fleet/agent_download_sources": { "get": { "operationId": "get-fleet-agent-download-sources", @@ -6547,9 +9785,6 @@ "type": "number" } }, - "required": [ - "enabled" - ], "type": "object" }, "monitoring_output_id": { @@ -7316,9 +10551,6 @@ "type": "number" } }, - "required": [ - "enabled" - ], "type": "object" }, "monitoring_output_id": { @@ -7577,9 +10809,6 @@ "type": "number" } }, - "required": [ - "enabled" - ], "type": "object" }, "monitoring_output_id": { @@ -8376,9 +11605,6 @@ "type": "number" } }, - "required": [ - "enabled" - ], "type": "object" }, "monitoring_output_id": { @@ -9436,9 +12662,6 @@ "type": "number" } }, - "required": [ - "enabled" - ], "type": "object" }, "monitoring_output_id": { @@ -10204,9 +13427,6 @@ "type": "number" } }, - "required": [ - "enabled" - ], "type": "object" }, "monitoring_output_id": { @@ -10465,9 +13685,6 @@ "type": "number" } }, - "required": [ - "enabled" - ], "type": "object" }, "monitoring_output_id": { @@ -11265,9 +14482,6 @@ "type": "number" } }, - "required": [ - "enabled" - ], "type": "object" }, "monitoring_output_id": { @@ -13278,6 +16492,7 @@ }, "upgrade_details": { "additionalProperties": false, + "nullable": true, "properties": { "action_id": { "type": "string" @@ -15470,494 +18685,496 @@ }, "upgrade_details": { "additionalProperties": false, - "properties": { - "action_id": { - "type": "string" - }, - "metadata": { - "additionalProperties": false, - "properties": { - "download_percent": { - "type": "number" - }, - "download_rate": { - "type": "number" - }, - "error_msg": { - "type": "string" - }, - "failed_state": { - "enum": [ - "UPG_REQUESTED", - "UPG_SCHEDULED", - "UPG_DOWNLOADING", - "UPG_EXTRACTING", - "UPG_REPLACING", - "UPG_RESTARTING", - "UPG_FAILED", - "UPG_WATCHING", - "UPG_ROLLBACK" - ], - "type": "string" - }, - "retry_error_msg": { - "type": "string" - }, - "retry_until": { - "type": "string" - }, - "scheduled_at": { - "type": "string" - } - }, - "type": "object" - }, - "state": { - "enum": [ - "UPG_REQUESTED", - "UPG_SCHEDULED", - "UPG_DOWNLOADING", - "UPG_EXTRACTING", - "UPG_REPLACING", - "UPG_RESTARTING", - "UPG_FAILED", - "UPG_WATCHING", - "UPG_ROLLBACK" - ], - "type": "string" - }, - "target_version": { - "type": "string" - } - }, - "required": [ - "target_version", - "action_id", - "state" - ], - "type": "object" - }, - "upgrade_started_at": { - "nullable": true, - "type": "string" - }, - "upgraded_at": { "nullable": true, - "type": "string" - }, - "user_provided_metadata": { - "additionalProperties": {}, - "type": "object" - } - }, - "required": [ - "id", - "packages", - "type", - "active", - "enrolled_at", - "local_metadata" - ], - "type": "object" - } - }, - "required": [ - "item" - ], - "type": "object" - } - } - } - }, - "400": { - "content": { - "application/json; Elastic-Api-Version=2023-10-31": { - "schema": { - "additionalProperties": false, - "description": "Generic Error", - "properties": { - "error": { - "type": "string" - }, - "message": { - "type": "string" - }, - "statusCode": { - "type": "number" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "summary": "Get an agent", - "tags": [ - "Elastic Agents" - ] - }, - "put": { - "description": "Update an agent by ID.", - "operationId": "put-fleet-agents-agentid", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, - { - "description": "A required header to protect against CSRF attacks", - "in": "header", - "name": "kbn-xsrf", - "required": true, - "schema": { - "example": "true", - "type": "string" - } - }, - { - "in": "path", - "name": "agentId", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json; Elastic-Api-Version=2023-10-31": { - "schema": { - "additionalProperties": false, - "properties": { - "tags": { - "items": { - "type": "string" - }, - "type": "array" - }, - "user_provided_metadata": { - "additionalProperties": {}, - "type": "object" - } - }, - "type": "object" - } - } - } - }, - "responses": { - "200": { - "content": { - "application/json; Elastic-Api-Version=2023-10-31": { - "schema": { - "additionalProperties": false, - "properties": { - "item": { - "additionalProperties": false, - "properties": { - "access_api_key": { - "type": "string" - }, - "access_api_key_id": { - "type": "string" - }, - "active": { - "type": "boolean" - }, - "agent": { - "additionalProperties": true, - "properties": { - "id": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "id", - "version" - ], - "type": "object" - }, - "components": { - "items": { - "additionalProperties": false, - "properties": { - "id": { - "type": "string" - }, - "message": { - "type": "string" - }, - "status": { - "enum": [ - "STARTING", - "CONFIGURING", - "HEALTHY", - "DEGRADED", - "FAILED", - "STOPPING", - "STOPPED" - ], - "type": "string" - }, - "type": { - "type": "string" - }, - "units": { - "items": { - "additionalProperties": false, - "properties": { - "id": { - "type": "string" - }, - "message": { - "type": "string" - }, - "payload": { - "additionalProperties": {}, - "type": "object" - }, - "status": { - "enum": [ - "STARTING", - "CONFIGURING", - "HEALTHY", - "DEGRADED", - "FAILED", - "STOPPING", - "STOPPED" - ], - "type": "string" - }, - "type": { - "enum": [ - "input", - "output" - ], - "type": "string" - } - }, - "required": [ - "id", - "type", - "status", - "message" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "id", - "type", - "status", - "message" - ], - "type": "object" - }, - "type": "array" - }, - "default_api_key": { - "type": "string" - }, - "default_api_key_history": { - "items": { - "additionalProperties": false, - "deprecated": true, - "properties": { - "id": { - "type": "string" - }, - "retired_at": { - "type": "string" - } - }, - "required": [ - "id", - "retired_at" - ], - "type": "object" - }, - "type": "array" - }, - "default_api_key_id": { - "type": "string" - }, - "enrolled_at": { - "type": "string" - }, - "id": { - "type": "string" - }, - "last_checkin": { - "type": "string" - }, - "last_checkin_message": { - "type": "string" - }, - "last_checkin_status": { - "enum": [ - "error", - "online", - "degraded", - "updating", - "starting" - ], - "type": "string" - }, - "local_metadata": { - "additionalProperties": {}, - "type": "object" - }, - "metrics": { - "additionalProperties": false, - "properties": { - "cpu_avg": { - "type": "number" - }, - "memory_size_byte_avg": { - "type": "number" - } - }, - "type": "object" - }, - "namespaces": { - "items": { - "type": "string" - }, - "type": "array" - }, - "outputs": { - "additionalProperties": { - "additionalProperties": false, - "properties": { - "api_key_id": { - "type": "string" - }, - "to_retire_api_key_ids": { - "items": { - "additionalProperties": false, - "properties": { - "id": { - "type": "string" - }, - "retired_at": { - "type": "string" - } - }, - "required": [ - "id", - "retired_at" - ], - "type": "object" - }, - "type": "array" - }, - "type": { - "type": "string" - } - }, - "required": [ - "api_key_id", - "type" - ], - "type": "object" - }, - "type": "object" - }, - "packages": { - "items": { - "type": "string" - }, - "type": "array" - }, - "policy_id": { - "type": "string" - }, - "policy_revision": { - "nullable": true, - "type": "number" - }, - "sort": { - "items": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - }, - { - "enum": [], - "nullable": true - } - ] - }, - "type": "array" - }, - "status": { - "enum": [ - "offline", - "error", - "online", - "inactive", - "enrolling", - "unenrolling", - "unenrolled", - "updating", - "degraded" - ], - "type": "string" - }, - "tags": { - "items": { - "type": "string" - }, - "type": "array" - }, - "type": { - "enum": [ - "PERMANENT", - "EPHEMERAL", - "TEMPORARY" - ], - "type": "string" - }, - "unenrolled_at": { - "type": "string" - }, - "unenrollment_started_at": { - "type": "string" - }, - "unhealthy_reason": { - "items": { - "enum": [ - "input", - "output", - "other" - ], - "type": "string" - }, - "nullable": true, - "type": "array" - }, - "upgrade_details": { - "additionalProperties": false, + "properties": { + "action_id": { + "type": "string" + }, + "metadata": { + "additionalProperties": false, + "properties": { + "download_percent": { + "type": "number" + }, + "download_rate": { + "type": "number" + }, + "error_msg": { + "type": "string" + }, + "failed_state": { + "enum": [ + "UPG_REQUESTED", + "UPG_SCHEDULED", + "UPG_DOWNLOADING", + "UPG_EXTRACTING", + "UPG_REPLACING", + "UPG_RESTARTING", + "UPG_FAILED", + "UPG_WATCHING", + "UPG_ROLLBACK" + ], + "type": "string" + }, + "retry_error_msg": { + "type": "string" + }, + "retry_until": { + "type": "string" + }, + "scheduled_at": { + "type": "string" + } + }, + "type": "object" + }, + "state": { + "enum": [ + "UPG_REQUESTED", + "UPG_SCHEDULED", + "UPG_DOWNLOADING", + "UPG_EXTRACTING", + "UPG_REPLACING", + "UPG_RESTARTING", + "UPG_FAILED", + "UPG_WATCHING", + "UPG_ROLLBACK" + ], + "type": "string" + }, + "target_version": { + "type": "string" + } + }, + "required": [ + "target_version", + "action_id", + "state" + ], + "type": "object" + }, + "upgrade_started_at": { + "nullable": true, + "type": "string" + }, + "upgraded_at": { + "nullable": true, + "type": "string" + }, + "user_provided_metadata": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "id", + "packages", + "type", + "active", + "enrolled_at", + "local_metadata" + ], + "type": "object" + } + }, + "required": [ + "item" + ], + "type": "object" + } + } + } + }, + "400": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "description": "Generic Error", + "properties": { + "error": { + "type": "string" + }, + "message": { + "type": "string" + }, + "statusCode": { + "type": "number" + } + }, + "required": [ + "message" + ], + "type": "object" + } + } + } + } + }, + "summary": "Get an agent", + "tags": [ + "Elastic Agents" + ] + }, + "put": { + "description": "Update an agent by ID.", + "operationId": "put-fleet-agents-agentid", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "in": "path", + "name": "agentId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "user_provided_metadata": { + "additionalProperties": {}, + "type": "object" + } + }, + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "item": { + "additionalProperties": false, + "properties": { + "access_api_key": { + "type": "string" + }, + "access_api_key_id": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "agent": { + "additionalProperties": true, + "properties": { + "id": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "id", + "version" + ], + "type": "object" + }, + "components": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "message": { + "type": "string" + }, + "status": { + "enum": [ + "STARTING", + "CONFIGURING", + "HEALTHY", + "DEGRADED", + "FAILED", + "STOPPING", + "STOPPED" + ], + "type": "string" + }, + "type": { + "type": "string" + }, + "units": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "message": { + "type": "string" + }, + "payload": { + "additionalProperties": {}, + "type": "object" + }, + "status": { + "enum": [ + "STARTING", + "CONFIGURING", + "HEALTHY", + "DEGRADED", + "FAILED", + "STOPPING", + "STOPPED" + ], + "type": "string" + }, + "type": { + "enum": [ + "input", + "output" + ], + "type": "string" + } + }, + "required": [ + "id", + "type", + "status", + "message" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "id", + "type", + "status", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "default_api_key": { + "type": "string" + }, + "default_api_key_history": { + "items": { + "additionalProperties": false, + "deprecated": true, + "properties": { + "id": { + "type": "string" + }, + "retired_at": { + "type": "string" + } + }, + "required": [ + "id", + "retired_at" + ], + "type": "object" + }, + "type": "array" + }, + "default_api_key_id": { + "type": "string" + }, + "enrolled_at": { + "type": "string" + }, + "id": { + "type": "string" + }, + "last_checkin": { + "type": "string" + }, + "last_checkin_message": { + "type": "string" + }, + "last_checkin_status": { + "enum": [ + "error", + "online", + "degraded", + "updating", + "starting" + ], + "type": "string" + }, + "local_metadata": { + "additionalProperties": {}, + "type": "object" + }, + "metrics": { + "additionalProperties": false, + "properties": { + "cpu_avg": { + "type": "number" + }, + "memory_size_byte_avg": { + "type": "number" + } + }, + "type": "object" + }, + "namespaces": { + "items": { + "type": "string" + }, + "type": "array" + }, + "outputs": { + "additionalProperties": { + "additionalProperties": false, + "properties": { + "api_key_id": { + "type": "string" + }, + "to_retire_api_key_ids": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "retired_at": { + "type": "string" + } + }, + "required": [ + "id", + "retired_at" + ], + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "required": [ + "api_key_id", + "type" + ], + "type": "object" + }, + "type": "object" + }, + "packages": { + "items": { + "type": "string" + }, + "type": "array" + }, + "policy_id": { + "type": "string" + }, + "policy_revision": { + "nullable": true, + "type": "number" + }, + "sort": { + "items": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "enum": [], + "nullable": true + } + ] + }, + "type": "array" + }, + "status": { + "enum": [ + "offline", + "error", + "online", + "inactive", + "enrolling", + "unenrolling", + "unenrolled", + "updating", + "degraded" + ], + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "enum": [ + "PERMANENT", + "EPHEMERAL", + "TEMPORARY" + ], + "type": "string" + }, + "unenrolled_at": { + "type": "string" + }, + "unenrollment_started_at": { + "type": "string" + }, + "unhealthy_reason": { + "items": { + "enum": [ + "input", + "output", + "other" + ], + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "upgrade_details": { + "additionalProperties": false, + "nullable": true, "properties": { "action_id": { "type": "string" @@ -38606,6 +41823,9 @@ { "name": "connectors" }, + { + "name": "Dashboards" + }, { "name": "Data streams" }, diff --git a/oas_docs/output/kibana.serverless.yaml b/oas_docs/output/kibana.serverless.yaml index b605ab09de62f..72fc1b093903a 100644 --- a/oas_docs/output/kibana.serverless.yaml +++ b/oas_docs/output/kibana.serverless.yaml @@ -71,6 +71,7 @@ tags: description: Connector documentation url: https://www.elastic.co/docs/current/serverless/action-connectors x-displayName: Connectors + - name: Dashboards - name: Data streams - description: Data view APIs enable you to manage data views, formerly known as Kibana index patterns. name: data views @@ -5195,6 +5196,2321 @@ paths: tags: - Security Entity Analytics API x-beta: true + /api/dashboards/dashboard: + get: + description: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + operationId: get-dashboards-dashboard + parameters: + - description: The version of the API to use + in: header + name: elastic-api-version + schema: + default: '2023-10-31' + enum: + - '2023-10-31' + type: string + - description: The page number to return. Default is "1". + in: query + name: page + required: false + schema: + default: 1 + minimum: 1 + type: number + - description: The number of dashboards to display on each page (max 1000). Default is "20". + in: query + name: perPage + required: false + schema: + maximum: 1000 + minimum: 1 + type: number + responses: + '200': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + additionalProperties: false + type: object + properties: + items: + items: + additionalProperties: true + type: object + properties: + attributes: + additionalProperties: false + type: object + properties: + description: + default: '' + description: A short description. + type: string + timeRestore: + default: false + description: Whether to restore time upon viewing this dashboard + type: boolean + title: + description: A human-readable title for the dashboard + type: string + required: + - title + createdAt: + type: string + createdBy: + type: string + error: + additionalProperties: false + type: object + properties: + error: + type: string + message: + type: string + metadata: + additionalProperties: true + type: object + properties: {} + statusCode: + type: number + required: + - error + - message + - statusCode + id: + type: string + managed: + type: boolean + namespaces: + items: + type: string + type: array + originId: + type: string + references: + items: + additionalProperties: false + type: object + properties: + id: + type: string + name: + type: string + type: + type: string + required: + - name + - type + - id + type: array + type: + type: string + updatedAt: + type: string + updatedBy: + type: string + version: + type: string + required: + - id + - type + - attributes + - references + type: array + total: + type: number + required: + - items + - total + summary: Get a list of dashboards + tags: + - Dashboards + x-state: Technical Preview + x-beta: true + /api/dashboards/dashboard/{id}: + delete: + description: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + operationId: delete-dashboards-dashboard-id + parameters: + - description: The version of the API to use + in: header + name: elastic-api-version + schema: + default: '2023-10-31' + enum: + - '2023-10-31' + type: string + - description: A required header to protect against CSRF attacks + in: header + name: kbn-xsrf + required: true + schema: + example: 'true' + type: string + - description: A unique identifier for the dashboard. + in: path + name: id + required: true + schema: + type: string + responses: {} + summary: Delete a dashboard + tags: + - Dashboards + x-state: Technical Preview + x-beta: true + get: + description: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + operationId: get-dashboards-dashboard-id + parameters: + - description: The version of the API to use + in: header + name: elastic-api-version + schema: + default: '2023-10-31' + enum: + - '2023-10-31' + type: string + - description: A unique identifier for the dashboard. + in: path + name: id + required: true + schema: + type: string + responses: + '200': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + additionalProperties: false + type: object + properties: + item: + additionalProperties: true + type: object + properties: + attributes: + additionalProperties: false + type: object + properties: + controlGroupInput: + additionalProperties: false + type: object + properties: + autoApplySelections: + default: true + description: Show apply selections button in controls. + type: boolean + chainingSystem: + default: HIERARCHICAL + description: The chaining strategy for multiple controls. For example, "HIERARCHICAL" or "NONE". + enum: + - NONE + - HIERARCHICAL + type: string + controls: + default: [] + description: An array of control panels and their state in the control group. + items: + additionalProperties: true + type: object + properties: + controlConfig: + additionalProperties: {} + type: object + grow: + default: false + description: Expand width of the control panel to fit available space. + type: boolean + id: + description: The unique ID of the control. + type: string + order: + description: The order of the control panel in the control group. + type: number + type: + description: The type of the control panel. + type: string + width: + default: medium + description: Minimum width of the control panel in the control group. + enum: + - small + - medium + - large + type: string + required: + - type + - order + type: array + enhancements: + additionalProperties: {} + type: object + ignoreParentSettings: + additionalProperties: false + type: object + properties: + ignoreFilters: + default: false + description: Ignore global filters in controls. + type: boolean + ignoreQuery: + default: false + description: Ignore the global query bar in controls. + type: boolean + ignoreTimerange: + default: false + description: Ignore the global time range in controls. + type: boolean + ignoreValidations: + default: false + description: Ignore validations in controls. + type: boolean + labelPosition: + default: oneLine + description: Position of the labels for controls. For example, "oneLine", "twoLine". + enum: + - oneLine + - twoLine + type: string + required: + - ignoreParentSettings + description: + default: '' + description: A short description. + type: string + kibanaSavedObjectMeta: + additionalProperties: false + default: {} + description: A container for various metadata + type: object + properties: + searchSource: + additionalProperties: true + type: object + properties: + filter: + items: + additionalProperties: false + description: A filter for the search source. + type: object + properties: + $state: + additionalProperties: false + type: object + properties: + store: + description: Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState'). + enum: + - appState + - globalState + type: string + required: + - store + meta: + additionalProperties: true + type: object + properties: + alias: + nullable: true + type: string + controlledBy: + type: string + disabled: + type: boolean + field: + type: string + group: + type: string + index: + type: string + isMultiIndex: + type: boolean + key: + type: string + negate: + type: boolean + params: {} + type: + type: string + value: + type: string + required: + - params + query: + additionalProperties: {} + type: object + required: + - meta + type: array + query: + additionalProperties: false + type: object + properties: + language: + description: The query language such as KQL or Lucene. + type: string + query: + anyOf: + - description: A text-based query such as Kibana Query Language (KQL) or Lucene query language. + type: string + - additionalProperties: {} + type: object + required: + - query + - language + sort: + items: + additionalProperties: + anyOf: + - enum: + - asc + - desc + type: string + - additionalProperties: false + type: object + properties: + format: + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + - additionalProperties: false + type: object + properties: + numeric_type: + enum: + - double + - long + - date + - date_nanos + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + type: object + type: array + type: + type: string + options: + additionalProperties: false + type: object + properties: + hidePanelTitles: + default: false + description: Hide the panel titles in the dashboard. + type: boolean + syncColors: + default: true + description: Synchronize colors between related panels in the dashboard. + type: boolean + syncCursor: + default: true + description: Synchronize cursor position between related panels in the dashboard. + type: boolean + syncTooltips: + default: true + description: Synchronize tooltips between related panels in the dashboard. + type: boolean + useMargins: + default: true + description: Show margins between panels in the dashboard layout. + type: boolean + panels: + default: [] + items: + additionalProperties: false + type: object + properties: + gridData: + additionalProperties: false + type: object + properties: + h: + default: 15 + description: The height of the panel in grid units + minimum: 1 + type: number + i: + type: string + w: + default: 24 + description: The width of the panel in grid units + maximum: 48 + minimum: 1 + type: number + x: + description: The x coordinate of the panel in grid units + type: number + 'y': + description: The y coordinate of the panel in grid units + type: number + required: + - x + - 'y' + - i + id: + description: The saved object id for by reference panels + type: string + panelConfig: + additionalProperties: true + type: object + properties: + description: + description: The description of the panel + type: string + enhancements: + additionalProperties: {} + type: object + hidePanelTitles: + description: Set to true to hide the panel title in its container. + type: boolean + savedObjectId: + description: The unique id of the library item to construct the embeddable. + type: string + title: + description: The title of the panel + type: string + version: + description: The version of the embeddable in the panel. + type: string + panelIndex: + type: string + panelRefName: + type: string + title: + description: The title of the panel + type: string + type: + description: The embeddable type + type: string + version: + deprecated: true + description: The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type). + type: string + required: + - panelConfig + - type + - gridData + - panelIndex + type: array + refreshInterval: + additionalProperties: false + description: A container for various refresh interval settings + type: object + properties: + display: + deprecated: true + description: A human-readable string indicating the refresh frequency. No longer used. + type: string + pause: + description: Whether the refresh interval is set to be paused while viewing the dashboard. + type: boolean + section: + deprecated: true + description: No longer used. + type: number + value: + description: A numeric value indicating refresh frequency in milliseconds. + type: number + required: + - pause + - value + timeFrom: + description: An ISO string indicating when to restore time from + type: string + timeRestore: + default: false + description: Whether to restore time upon viewing this dashboard + type: boolean + timeTo: + description: An ISO string indicating when to restore time from + type: string + title: + description: A human-readable title for the dashboard + type: string + version: + deprecated: true + type: number + required: + - title + - options + createdAt: + type: string + createdBy: + type: string + error: + additionalProperties: false + type: object + properties: + error: + type: string + message: + type: string + metadata: + additionalProperties: true + type: object + properties: {} + statusCode: + type: number + required: + - error + - message + - statusCode + id: + type: string + managed: + type: boolean + namespaces: + items: + type: string + type: array + originId: + type: string + references: + items: + additionalProperties: false + type: object + properties: + id: + type: string + name: + type: string + type: + type: string + required: + - name + - type + - id + type: array + type: + type: string + updatedAt: + type: string + updatedBy: + type: string + version: + type: string + required: + - id + - type + - attributes + - references + meta: + additionalProperties: false + type: object + properties: + aliasPurpose: + enum: + - savedObjectConversion + - savedObjectImport + type: string + aliasTargetId: + type: string + outcome: + enum: + - exactMatch + - aliasMatch + - conflict + type: string + required: + - outcome + required: + - item + - meta + summary: Get a dashboard + tags: + - Dashboards + x-state: Technical Preview + x-beta: true + post: + description: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + operationId: post-dashboards-dashboard-id + parameters: + - description: The version of the API to use + in: header + name: elastic-api-version + schema: + default: '2023-10-31' + enum: + - '2023-10-31' + type: string + - description: A required header to protect against CSRF attacks + in: header + name: kbn-xsrf + required: true + schema: + example: 'true' + type: string + - description: A unique identifier for the dashboard. + in: path + name: id + required: false + schema: + type: string + requestBody: + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + additionalProperties: false + type: object + properties: + attributes: + additionalProperties: false + type: object + properties: + controlGroupInput: + additionalProperties: false + type: object + properties: + autoApplySelections: + default: true + description: Show apply selections button in controls. + type: boolean + chainingSystem: + default: HIERARCHICAL + description: The chaining strategy for multiple controls. For example, "HIERARCHICAL" or "NONE". + enum: + - NONE + - HIERARCHICAL + type: string + controls: + default: [] + description: An array of control panels and their state in the control group. + items: + additionalProperties: true + type: object + properties: + controlConfig: + additionalProperties: {} + type: object + grow: + default: false + description: Expand width of the control panel to fit available space. + type: boolean + id: + description: The unique ID of the control. + type: string + order: + description: The order of the control panel in the control group. + type: number + type: + description: The type of the control panel. + type: string + width: + default: medium + description: Minimum width of the control panel in the control group. + enum: + - small + - medium + - large + type: string + required: + - type + - order + type: array + enhancements: + additionalProperties: {} + type: object + ignoreParentSettings: + additionalProperties: false + type: object + properties: + ignoreFilters: + default: false + description: Ignore global filters in controls. + type: boolean + ignoreQuery: + default: false + description: Ignore the global query bar in controls. + type: boolean + ignoreTimerange: + default: false + description: Ignore the global time range in controls. + type: boolean + ignoreValidations: + default: false + description: Ignore validations in controls. + type: boolean + labelPosition: + default: oneLine + description: Position of the labels for controls. For example, "oneLine", "twoLine". + enum: + - oneLine + - twoLine + type: string + required: + - ignoreParentSettings + description: + default: '' + description: A short description. + type: string + kibanaSavedObjectMeta: + additionalProperties: false + default: {} + description: A container for various metadata + type: object + properties: + searchSource: + additionalProperties: true + type: object + properties: + filter: + items: + additionalProperties: false + description: A filter for the search source. + type: object + properties: + $state: + additionalProperties: false + type: object + properties: + store: + description: Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState'). + enum: + - appState + - globalState + type: string + required: + - store + meta: + additionalProperties: true + type: object + properties: + alias: + nullable: true + type: string + controlledBy: + type: string + disabled: + type: boolean + field: + type: string + group: + type: string + index: + type: string + isMultiIndex: + type: boolean + key: + type: string + negate: + type: boolean + params: {} + type: + type: string + value: + type: string + required: + - params + query: + additionalProperties: {} + type: object + required: + - meta + type: array + query: + additionalProperties: false + type: object + properties: + language: + description: The query language such as KQL or Lucene. + type: string + query: + anyOf: + - description: A text-based query such as Kibana Query Language (KQL) or Lucene query language. + type: string + - additionalProperties: {} + type: object + required: + - query + - language + sort: + items: + additionalProperties: + anyOf: + - enum: + - asc + - desc + type: string + - additionalProperties: false + type: object + properties: + format: + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + - additionalProperties: false + type: object + properties: + numeric_type: + enum: + - double + - long + - date + - date_nanos + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + type: object + type: array + type: + type: string + options: + additionalProperties: false + type: object + properties: + hidePanelTitles: + default: false + description: Hide the panel titles in the dashboard. + type: boolean + syncColors: + default: true + description: Synchronize colors between related panels in the dashboard. + type: boolean + syncCursor: + default: true + description: Synchronize cursor position between related panels in the dashboard. + type: boolean + syncTooltips: + default: true + description: Synchronize tooltips between related panels in the dashboard. + type: boolean + useMargins: + default: true + description: Show margins between panels in the dashboard layout. + type: boolean + panels: + default: [] + items: + additionalProperties: false + type: object + properties: + gridData: + additionalProperties: false + type: object + properties: + h: + default: 15 + description: The height of the panel in grid units + minimum: 1 + type: number + i: + description: The unique identifier of the panel + type: string + w: + default: 24 + description: The width of the panel in grid units + maximum: 48 + minimum: 1 + type: number + x: + description: The x coordinate of the panel in grid units + type: number + 'y': + description: The y coordinate of the panel in grid units + type: number + required: + - x + - 'y' + id: + description: The saved object id for by reference panels + type: string + panelConfig: + additionalProperties: true + type: object + properties: + description: + description: The description of the panel + type: string + enhancements: + additionalProperties: {} + type: object + hidePanelTitles: + description: Set to true to hide the panel title in its container. + type: boolean + savedObjectId: + description: The unique id of the library item to construct the embeddable. + type: string + title: + description: The title of the panel + type: string + version: + description: The version of the embeddable in the panel. + type: string + panelIndex: + description: The unique ID of the panel. + type: string + panelRefName: + type: string + title: + description: The title of the panel + type: string + type: + description: The embeddable type + type: string + version: + deprecated: true + description: The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type). + type: string + required: + - panelConfig + - type + - gridData + type: array + refreshInterval: + additionalProperties: false + description: A container for various refresh interval settings + type: object + properties: + display: + deprecated: true + description: A human-readable string indicating the refresh frequency. No longer used. + type: string + pause: + description: Whether the refresh interval is set to be paused while viewing the dashboard. + type: boolean + section: + deprecated: true + description: No longer used. + type: number + value: + description: A numeric value indicating refresh frequency in milliseconds. + type: number + required: + - pause + - value + timeFrom: + description: An ISO string indicating when to restore time from + type: string + timeRestore: + default: false + description: Whether to restore time upon viewing this dashboard + type: boolean + timeTo: + description: An ISO string indicating when to restore time from + type: string + title: + description: A human-readable title for the dashboard + type: string + version: + deprecated: true + type: number + required: + - title + - options + references: + items: + additionalProperties: false + type: object + properties: + id: + type: string + name: + type: string + type: + type: string + required: + - name + - type + - id + type: array + spaces: + items: + type: string + type: array + required: + - attributes + responses: + '200': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + additionalProperties: false + type: object + properties: + item: + additionalProperties: true + type: object + properties: + attributes: + additionalProperties: false + type: object + properties: + controlGroupInput: + additionalProperties: false + type: object + properties: + autoApplySelections: + default: true + description: Show apply selections button in controls. + type: boolean + chainingSystem: + default: HIERARCHICAL + description: The chaining strategy for multiple controls. For example, "HIERARCHICAL" or "NONE". + enum: + - NONE + - HIERARCHICAL + type: string + controls: + default: [] + description: An array of control panels and their state in the control group. + items: + additionalProperties: true + type: object + properties: + controlConfig: + additionalProperties: {} + type: object + grow: + default: false + description: Expand width of the control panel to fit available space. + type: boolean + id: + description: The unique ID of the control. + type: string + order: + description: The order of the control panel in the control group. + type: number + type: + description: The type of the control panel. + type: string + width: + default: medium + description: Minimum width of the control panel in the control group. + enum: + - small + - medium + - large + type: string + required: + - type + - order + type: array + enhancements: + additionalProperties: {} + type: object + ignoreParentSettings: + additionalProperties: false + type: object + properties: + ignoreFilters: + default: false + description: Ignore global filters in controls. + type: boolean + ignoreQuery: + default: false + description: Ignore the global query bar in controls. + type: boolean + ignoreTimerange: + default: false + description: Ignore the global time range in controls. + type: boolean + ignoreValidations: + default: false + description: Ignore validations in controls. + type: boolean + labelPosition: + default: oneLine + description: Position of the labels for controls. For example, "oneLine", "twoLine". + enum: + - oneLine + - twoLine + type: string + required: + - ignoreParentSettings + description: + default: '' + description: A short description. + type: string + kibanaSavedObjectMeta: + additionalProperties: false + default: {} + description: A container for various metadata + type: object + properties: + searchSource: + additionalProperties: true + type: object + properties: + filter: + items: + additionalProperties: false + description: A filter for the search source. + type: object + properties: + $state: + additionalProperties: false + type: object + properties: + store: + description: Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState'). + enum: + - appState + - globalState + type: string + required: + - store + meta: + additionalProperties: true + type: object + properties: + alias: + nullable: true + type: string + controlledBy: + type: string + disabled: + type: boolean + field: + type: string + group: + type: string + index: + type: string + isMultiIndex: + type: boolean + key: + type: string + negate: + type: boolean + params: {} + type: + type: string + value: + type: string + required: + - params + query: + additionalProperties: {} + type: object + required: + - meta + type: array + query: + additionalProperties: false + type: object + properties: + language: + description: The query language such as KQL or Lucene. + type: string + query: + anyOf: + - description: A text-based query such as Kibana Query Language (KQL) or Lucene query language. + type: string + - additionalProperties: {} + type: object + required: + - query + - language + sort: + items: + additionalProperties: + anyOf: + - enum: + - asc + - desc + type: string + - additionalProperties: false + type: object + properties: + format: + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + - additionalProperties: false + type: object + properties: + numeric_type: + enum: + - double + - long + - date + - date_nanos + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + type: object + type: array + type: + type: string + options: + additionalProperties: false + type: object + properties: + hidePanelTitles: + default: false + description: Hide the panel titles in the dashboard. + type: boolean + syncColors: + default: true + description: Synchronize colors between related panels in the dashboard. + type: boolean + syncCursor: + default: true + description: Synchronize cursor position between related panels in the dashboard. + type: boolean + syncTooltips: + default: true + description: Synchronize tooltips between related panels in the dashboard. + type: boolean + useMargins: + default: true + description: Show margins between panels in the dashboard layout. + type: boolean + panels: + default: [] + items: + additionalProperties: false + type: object + properties: + gridData: + additionalProperties: false + type: object + properties: + h: + default: 15 + description: The height of the panel in grid units + minimum: 1 + type: number + i: + type: string + w: + default: 24 + description: The width of the panel in grid units + maximum: 48 + minimum: 1 + type: number + x: + description: The x coordinate of the panel in grid units + type: number + 'y': + description: The y coordinate of the panel in grid units + type: number + required: + - x + - 'y' + - i + id: + description: The saved object id for by reference panels + type: string + panelConfig: + additionalProperties: true + type: object + properties: + description: + description: The description of the panel + type: string + enhancements: + additionalProperties: {} + type: object + hidePanelTitles: + description: Set to true to hide the panel title in its container. + type: boolean + savedObjectId: + description: The unique id of the library item to construct the embeddable. + type: string + title: + description: The title of the panel + type: string + version: + description: The version of the embeddable in the panel. + type: string + panelIndex: + type: string + panelRefName: + type: string + title: + description: The title of the panel + type: string + type: + description: The embeddable type + type: string + version: + deprecated: true + description: The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type). + type: string + required: + - panelConfig + - type + - gridData + - panelIndex + type: array + refreshInterval: + additionalProperties: false + description: A container for various refresh interval settings + type: object + properties: + display: + deprecated: true + description: A human-readable string indicating the refresh frequency. No longer used. + type: string + pause: + description: Whether the refresh interval is set to be paused while viewing the dashboard. + type: boolean + section: + deprecated: true + description: No longer used. + type: number + value: + description: A numeric value indicating refresh frequency in milliseconds. + type: number + required: + - pause + - value + timeFrom: + description: An ISO string indicating when to restore time from + type: string + timeRestore: + default: false + description: Whether to restore time upon viewing this dashboard + type: boolean + timeTo: + description: An ISO string indicating when to restore time from + type: string + title: + description: A human-readable title for the dashboard + type: string + version: + deprecated: true + type: number + required: + - title + - options + createdAt: + type: string + createdBy: + type: string + error: + additionalProperties: false + type: object + properties: + error: + type: string + message: + type: string + metadata: + additionalProperties: true + type: object + properties: {} + statusCode: + type: number + required: + - error + - message + - statusCode + id: + type: string + managed: + type: boolean + namespaces: + items: + type: string + type: array + originId: + type: string + references: + items: + additionalProperties: false + type: object + properties: + id: + type: string + name: + type: string + type: + type: string + required: + - name + - type + - id + type: array + type: + type: string + updatedAt: + type: string + updatedBy: + type: string + version: + type: string + required: + - id + - type + - attributes + - references + required: + - item + summary: Create a dashboard + tags: + - Dashboards + x-state: Technical Preview + x-beta: true + put: + description: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + operationId: put-dashboards-dashboard-id + parameters: + - description: The version of the API to use + in: header + name: elastic-api-version + schema: + default: '2023-10-31' + enum: + - '2023-10-31' + type: string + - description: A required header to protect against CSRF attacks + in: header + name: kbn-xsrf + required: true + schema: + example: 'true' + type: string + - description: A unique identifier for the dashboard. + in: path + name: id + required: true + schema: + type: string + requestBody: + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + additionalProperties: false + type: object + properties: + attributes: + additionalProperties: false + type: object + properties: + controlGroupInput: + additionalProperties: false + type: object + properties: + autoApplySelections: + default: true + description: Show apply selections button in controls. + type: boolean + chainingSystem: + default: HIERARCHICAL + description: The chaining strategy for multiple controls. For example, "HIERARCHICAL" or "NONE". + enum: + - NONE + - HIERARCHICAL + type: string + controls: + default: [] + description: An array of control panels and their state in the control group. + items: + additionalProperties: true + type: object + properties: + controlConfig: + additionalProperties: {} + type: object + grow: + default: false + description: Expand width of the control panel to fit available space. + type: boolean + id: + description: The unique ID of the control. + type: string + order: + description: The order of the control panel in the control group. + type: number + type: + description: The type of the control panel. + type: string + width: + default: medium + description: Minimum width of the control panel in the control group. + enum: + - small + - medium + - large + type: string + required: + - type + - order + type: array + enhancements: + additionalProperties: {} + type: object + ignoreParentSettings: + additionalProperties: false + type: object + properties: + ignoreFilters: + default: false + description: Ignore global filters in controls. + type: boolean + ignoreQuery: + default: false + description: Ignore the global query bar in controls. + type: boolean + ignoreTimerange: + default: false + description: Ignore the global time range in controls. + type: boolean + ignoreValidations: + default: false + description: Ignore validations in controls. + type: boolean + labelPosition: + default: oneLine + description: Position of the labels for controls. For example, "oneLine", "twoLine". + enum: + - oneLine + - twoLine + type: string + required: + - ignoreParentSettings + description: + default: '' + description: A short description. + type: string + kibanaSavedObjectMeta: + additionalProperties: false + default: {} + description: A container for various metadata + type: object + properties: + searchSource: + additionalProperties: true + type: object + properties: + filter: + items: + additionalProperties: false + description: A filter for the search source. + type: object + properties: + $state: + additionalProperties: false + type: object + properties: + store: + description: Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState'). + enum: + - appState + - globalState + type: string + required: + - store + meta: + additionalProperties: true + type: object + properties: + alias: + nullable: true + type: string + controlledBy: + type: string + disabled: + type: boolean + field: + type: string + group: + type: string + index: + type: string + isMultiIndex: + type: boolean + key: + type: string + negate: + type: boolean + params: {} + type: + type: string + value: + type: string + required: + - params + query: + additionalProperties: {} + type: object + required: + - meta + type: array + query: + additionalProperties: false + type: object + properties: + language: + description: The query language such as KQL or Lucene. + type: string + query: + anyOf: + - description: A text-based query such as Kibana Query Language (KQL) or Lucene query language. + type: string + - additionalProperties: {} + type: object + required: + - query + - language + sort: + items: + additionalProperties: + anyOf: + - enum: + - asc + - desc + type: string + - additionalProperties: false + type: object + properties: + format: + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + - additionalProperties: false + type: object + properties: + numeric_type: + enum: + - double + - long + - date + - date_nanos + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + type: object + type: array + type: + type: string + options: + additionalProperties: false + type: object + properties: + hidePanelTitles: + default: false + description: Hide the panel titles in the dashboard. + type: boolean + syncColors: + default: true + description: Synchronize colors between related panels in the dashboard. + type: boolean + syncCursor: + default: true + description: Synchronize cursor position between related panels in the dashboard. + type: boolean + syncTooltips: + default: true + description: Synchronize tooltips between related panels in the dashboard. + type: boolean + useMargins: + default: true + description: Show margins between panels in the dashboard layout. + type: boolean + panels: + default: [] + items: + additionalProperties: false + type: object + properties: + gridData: + additionalProperties: false + type: object + properties: + h: + default: 15 + description: The height of the panel in grid units + minimum: 1 + type: number + i: + description: The unique identifier of the panel + type: string + w: + default: 24 + description: The width of the panel in grid units + maximum: 48 + minimum: 1 + type: number + x: + description: The x coordinate of the panel in grid units + type: number + 'y': + description: The y coordinate of the panel in grid units + type: number + required: + - x + - 'y' + id: + description: The saved object id for by reference panels + type: string + panelConfig: + additionalProperties: true + type: object + properties: + description: + description: The description of the panel + type: string + enhancements: + additionalProperties: {} + type: object + hidePanelTitles: + description: Set to true to hide the panel title in its container. + type: boolean + savedObjectId: + description: The unique id of the library item to construct the embeddable. + type: string + title: + description: The title of the panel + type: string + version: + description: The version of the embeddable in the panel. + type: string + panelIndex: + description: The unique ID of the panel. + type: string + panelRefName: + type: string + title: + description: The title of the panel + type: string + type: + description: The embeddable type + type: string + version: + deprecated: true + description: The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type). + type: string + required: + - panelConfig + - type + - gridData + type: array + refreshInterval: + additionalProperties: false + description: A container for various refresh interval settings + type: object + properties: + display: + deprecated: true + description: A human-readable string indicating the refresh frequency. No longer used. + type: string + pause: + description: Whether the refresh interval is set to be paused while viewing the dashboard. + type: boolean + section: + deprecated: true + description: No longer used. + type: number + value: + description: A numeric value indicating refresh frequency in milliseconds. + type: number + required: + - pause + - value + timeFrom: + description: An ISO string indicating when to restore time from + type: string + timeRestore: + default: false + description: Whether to restore time upon viewing this dashboard + type: boolean + timeTo: + description: An ISO string indicating when to restore time from + type: string + title: + description: A human-readable title for the dashboard + type: string + version: + deprecated: true + type: number + required: + - title + - options + references: + items: + additionalProperties: false + type: object + properties: + id: + type: string + name: + type: string + type: + type: string + required: + - name + - type + - id + type: array + required: + - attributes + responses: + '200': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + additionalProperties: false + type: object + properties: + item: + additionalProperties: true + type: object + properties: + attributes: + additionalProperties: false + type: object + properties: + controlGroupInput: + additionalProperties: false + type: object + properties: + autoApplySelections: + default: true + description: Show apply selections button in controls. + type: boolean + chainingSystem: + default: HIERARCHICAL + description: The chaining strategy for multiple controls. For example, "HIERARCHICAL" or "NONE". + enum: + - NONE + - HIERARCHICAL + type: string + controls: + default: [] + description: An array of control panels and their state in the control group. + items: + additionalProperties: true + type: object + properties: + controlConfig: + additionalProperties: {} + type: object + grow: + default: false + description: Expand width of the control panel to fit available space. + type: boolean + id: + description: The unique ID of the control. + type: string + order: + description: The order of the control panel in the control group. + type: number + type: + description: The type of the control panel. + type: string + width: + default: medium + description: Minimum width of the control panel in the control group. + enum: + - small + - medium + - large + type: string + required: + - type + - order + type: array + enhancements: + additionalProperties: {} + type: object + ignoreParentSettings: + additionalProperties: false + type: object + properties: + ignoreFilters: + default: false + description: Ignore global filters in controls. + type: boolean + ignoreQuery: + default: false + description: Ignore the global query bar in controls. + type: boolean + ignoreTimerange: + default: false + description: Ignore the global time range in controls. + type: boolean + ignoreValidations: + default: false + description: Ignore validations in controls. + type: boolean + labelPosition: + default: oneLine + description: Position of the labels for controls. For example, "oneLine", "twoLine". + enum: + - oneLine + - twoLine + type: string + required: + - ignoreParentSettings + description: + default: '' + description: A short description. + type: string + kibanaSavedObjectMeta: + additionalProperties: false + default: {} + description: A container for various metadata + type: object + properties: + searchSource: + additionalProperties: true + type: object + properties: + filter: + items: + additionalProperties: false + description: A filter for the search source. + type: object + properties: + $state: + additionalProperties: false + type: object + properties: + store: + description: Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState'). + enum: + - appState + - globalState + type: string + required: + - store + meta: + additionalProperties: true + type: object + properties: + alias: + nullable: true + type: string + controlledBy: + type: string + disabled: + type: boolean + field: + type: string + group: + type: string + index: + type: string + isMultiIndex: + type: boolean + key: + type: string + negate: + type: boolean + params: {} + type: + type: string + value: + type: string + required: + - params + query: + additionalProperties: {} + type: object + required: + - meta + type: array + query: + additionalProperties: false + type: object + properties: + language: + description: The query language such as KQL or Lucene. + type: string + query: + anyOf: + - description: A text-based query such as Kibana Query Language (KQL) or Lucene query language. + type: string + - additionalProperties: {} + type: object + required: + - query + - language + sort: + items: + additionalProperties: + anyOf: + - enum: + - asc + - desc + type: string + - additionalProperties: false + type: object + properties: + format: + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + - additionalProperties: false + type: object + properties: + numeric_type: + enum: + - double + - long + - date + - date_nanos + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + type: object + type: array + type: + type: string + options: + additionalProperties: false + type: object + properties: + hidePanelTitles: + default: false + description: Hide the panel titles in the dashboard. + type: boolean + syncColors: + default: true + description: Synchronize colors between related panels in the dashboard. + type: boolean + syncCursor: + default: true + description: Synchronize cursor position between related panels in the dashboard. + type: boolean + syncTooltips: + default: true + description: Synchronize tooltips between related panels in the dashboard. + type: boolean + useMargins: + default: true + description: Show margins between panels in the dashboard layout. + type: boolean + panels: + default: [] + items: + additionalProperties: false + type: object + properties: + gridData: + additionalProperties: false + type: object + properties: + h: + default: 15 + description: The height of the panel in grid units + minimum: 1 + type: number + i: + type: string + w: + default: 24 + description: The width of the panel in grid units + maximum: 48 + minimum: 1 + type: number + x: + description: The x coordinate of the panel in grid units + type: number + 'y': + description: The y coordinate of the panel in grid units + type: number + required: + - x + - 'y' + - i + id: + description: The saved object id for by reference panels + type: string + panelConfig: + additionalProperties: true + type: object + properties: + description: + description: The description of the panel + type: string + enhancements: + additionalProperties: {} + type: object + hidePanelTitles: + description: Set to true to hide the panel title in its container. + type: boolean + savedObjectId: + description: The unique id of the library item to construct the embeddable. + type: string + title: + description: The title of the panel + type: string + version: + description: The version of the embeddable in the panel. + type: string + panelIndex: + type: string + panelRefName: + type: string + title: + description: The title of the panel + type: string + type: + description: The embeddable type + type: string + version: + deprecated: true + description: The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type). + type: string + required: + - panelConfig + - type + - gridData + - panelIndex + type: array + refreshInterval: + additionalProperties: false + description: A container for various refresh interval settings + type: object + properties: + display: + deprecated: true + description: A human-readable string indicating the refresh frequency. No longer used. + type: string + pause: + description: Whether the refresh interval is set to be paused while viewing the dashboard. + type: boolean + section: + deprecated: true + description: No longer used. + type: number + value: + description: A numeric value indicating refresh frequency in milliseconds. + type: number + required: + - pause + - value + timeFrom: + description: An ISO string indicating when to restore time from + type: string + timeRestore: + default: false + description: Whether to restore time upon viewing this dashboard + type: boolean + timeTo: + description: An ISO string indicating when to restore time from + type: string + title: + description: A human-readable title for the dashboard + type: string + version: + deprecated: true + type: number + required: + - title + - options + createdAt: + type: string + createdBy: + type: string + error: + additionalProperties: false + type: object + properties: + error: + type: string + message: + type: string + metadata: + additionalProperties: true + type: object + properties: {} + statusCode: + type: number + required: + - error + - message + - statusCode + id: + type: string + managed: + type: boolean + namespaces: + items: + type: string + type: array + originId: + type: string + references: + items: + additionalProperties: false + type: object + properties: + id: + type: string + name: + type: string + type: + type: string + required: + - name + - type + - id + type: array + type: + type: string + updatedAt: + type: string + updatedBy: + type: string + version: + type: string + required: + - id + - type + - attributes + - references + required: + - item + summary: Update an existing dashboard + tags: + - Dashboards + x-state: Technical Preview + x-beta: true /api/data_views: get: operationId: getAllDataViewsDefault @@ -9628,8 +11944,6 @@ paths: maximum: 65353 minimum: 0 type: number - required: - - enabled monitoring_output_id: nullable: true type: string @@ -10160,8 +12474,6 @@ paths: maximum: 65353 minimum: 0 type: number - required: - - enabled monitoring_output_id: nullable: true type: string @@ -10342,8 +12654,6 @@ paths: maximum: 65353 minimum: 0 type: number - required: - - enabled monitoring_output_id: nullable: true type: string @@ -10896,8 +13206,6 @@ paths: maximum: 65353 minimum: 0 type: number - required: - - enabled monitoring_output_id: nullable: true type: string @@ -11430,8 +13738,6 @@ paths: maximum: 65353 minimum: 0 type: number - required: - - enabled monitoring_output_id: nullable: true type: string @@ -11961,8 +14267,6 @@ paths: maximum: 65353 minimum: 0 type: number - required: - - enabled monitoring_output_id: nullable: true type: string @@ -12143,8 +14447,6 @@ paths: maximum: 65353 minimum: 0 type: number - required: - - enabled monitoring_output_id: nullable: true type: string @@ -12697,8 +14999,6 @@ paths: maximum: 65353 minimum: 0 type: number - required: - - enabled monitoring_output_id: nullable: true type: string @@ -14248,6 +16548,7 @@ paths: type: array upgrade_details: additionalProperties: false + nullable: true type: object properties: action_id: @@ -14715,6 +17016,7 @@ paths: type: array upgrade_details: additionalProperties: false + nullable: true type: object properties: action_id: @@ -15059,6 +17361,7 @@ paths: type: array upgrade_details: additionalProperties: false + nullable: true type: object properties: action_id: diff --git a/oas_docs/output/kibana.yaml b/oas_docs/output/kibana.yaml index b1f2186262365..3c56597469133 100644 --- a/oas_docs/output/kibana.yaml +++ b/oas_docs/output/kibana.yaml @@ -85,6 +85,7 @@ tags: description: Connector documentation url: https://www.elastic.co/guide/en/kibana/current/action-types.html x-displayName: Connectors + - name: Dashboards - name: Data streams - description: Data view APIs enable you to manage data views, formerly known as Kibana index patterns. name: data views @@ -7465,6 +7466,2316 @@ paths: summary: Get case tags tags: - cases + /api/dashboards/dashboard: + get: + description: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + operationId: get-dashboards-dashboard + parameters: + - description: The version of the API to use + in: header + name: elastic-api-version + schema: + default: '2023-10-31' + enum: + - '2023-10-31' + type: string + - description: The page number to return. Default is "1". + in: query + name: page + required: false + schema: + default: 1 + minimum: 1 + type: number + - description: The number of dashboards to display on each page (max 1000). Default is "20". + in: query + name: perPage + required: false + schema: + maximum: 1000 + minimum: 1 + type: number + responses: + '200': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + additionalProperties: false + type: object + properties: + items: + items: + additionalProperties: true + type: object + properties: + attributes: + additionalProperties: false + type: object + properties: + description: + default: '' + description: A short description. + type: string + timeRestore: + default: false + description: Whether to restore time upon viewing this dashboard + type: boolean + title: + description: A human-readable title for the dashboard + type: string + required: + - title + createdAt: + type: string + createdBy: + type: string + error: + additionalProperties: false + type: object + properties: + error: + type: string + message: + type: string + metadata: + additionalProperties: true + type: object + properties: {} + statusCode: + type: number + required: + - error + - message + - statusCode + id: + type: string + managed: + type: boolean + namespaces: + items: + type: string + type: array + originId: + type: string + references: + items: + additionalProperties: false + type: object + properties: + id: + type: string + name: + type: string + type: + type: string + required: + - name + - type + - id + type: array + type: + type: string + updatedAt: + type: string + updatedBy: + type: string + version: + type: string + required: + - id + - type + - attributes + - references + type: array + total: + type: number + required: + - items + - total + summary: Get a list of dashboards + tags: + - Dashboards + x-state: Technical Preview + /api/dashboards/dashboard/{id}: + delete: + description: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + operationId: delete-dashboards-dashboard-id + parameters: + - description: The version of the API to use + in: header + name: elastic-api-version + schema: + default: '2023-10-31' + enum: + - '2023-10-31' + type: string + - description: A required header to protect against CSRF attacks + in: header + name: kbn-xsrf + required: true + schema: + example: 'true' + type: string + - description: A unique identifier for the dashboard. + in: path + name: id + required: true + schema: + type: string + responses: {} + summary: Delete a dashboard + tags: + - Dashboards + x-state: Technical Preview + get: + description: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + operationId: get-dashboards-dashboard-id + parameters: + - description: The version of the API to use + in: header + name: elastic-api-version + schema: + default: '2023-10-31' + enum: + - '2023-10-31' + type: string + - description: A unique identifier for the dashboard. + in: path + name: id + required: true + schema: + type: string + responses: + '200': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + additionalProperties: false + type: object + properties: + item: + additionalProperties: true + type: object + properties: + attributes: + additionalProperties: false + type: object + properties: + controlGroupInput: + additionalProperties: false + type: object + properties: + autoApplySelections: + default: true + description: Show apply selections button in controls. + type: boolean + chainingSystem: + default: HIERARCHICAL + description: The chaining strategy for multiple controls. For example, "HIERARCHICAL" or "NONE". + enum: + - NONE + - HIERARCHICAL + type: string + controls: + default: [] + description: An array of control panels and their state in the control group. + items: + additionalProperties: true + type: object + properties: + controlConfig: + additionalProperties: {} + type: object + grow: + default: false + description: Expand width of the control panel to fit available space. + type: boolean + id: + description: The unique ID of the control. + type: string + order: + description: The order of the control panel in the control group. + type: number + type: + description: The type of the control panel. + type: string + width: + default: medium + description: Minimum width of the control panel in the control group. + enum: + - small + - medium + - large + type: string + required: + - type + - order + type: array + enhancements: + additionalProperties: {} + type: object + ignoreParentSettings: + additionalProperties: false + type: object + properties: + ignoreFilters: + default: false + description: Ignore global filters in controls. + type: boolean + ignoreQuery: + default: false + description: Ignore the global query bar in controls. + type: boolean + ignoreTimerange: + default: false + description: Ignore the global time range in controls. + type: boolean + ignoreValidations: + default: false + description: Ignore validations in controls. + type: boolean + labelPosition: + default: oneLine + description: Position of the labels for controls. For example, "oneLine", "twoLine". + enum: + - oneLine + - twoLine + type: string + required: + - ignoreParentSettings + description: + default: '' + description: A short description. + type: string + kibanaSavedObjectMeta: + additionalProperties: false + default: {} + description: A container for various metadata + type: object + properties: + searchSource: + additionalProperties: true + type: object + properties: + filter: + items: + additionalProperties: false + description: A filter for the search source. + type: object + properties: + $state: + additionalProperties: false + type: object + properties: + store: + description: Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState'). + enum: + - appState + - globalState + type: string + required: + - store + meta: + additionalProperties: true + type: object + properties: + alias: + nullable: true + type: string + controlledBy: + type: string + disabled: + type: boolean + field: + type: string + group: + type: string + index: + type: string + isMultiIndex: + type: boolean + key: + type: string + negate: + type: boolean + params: {} + type: + type: string + value: + type: string + required: + - params + query: + additionalProperties: {} + type: object + required: + - meta + type: array + query: + additionalProperties: false + type: object + properties: + language: + description: The query language such as KQL or Lucene. + type: string + query: + anyOf: + - description: A text-based query such as Kibana Query Language (KQL) or Lucene query language. + type: string + - additionalProperties: {} + type: object + required: + - query + - language + sort: + items: + additionalProperties: + anyOf: + - enum: + - asc + - desc + type: string + - additionalProperties: false + type: object + properties: + format: + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + - additionalProperties: false + type: object + properties: + numeric_type: + enum: + - double + - long + - date + - date_nanos + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + type: object + type: array + type: + type: string + options: + additionalProperties: false + type: object + properties: + hidePanelTitles: + default: false + description: Hide the panel titles in the dashboard. + type: boolean + syncColors: + default: true + description: Synchronize colors between related panels in the dashboard. + type: boolean + syncCursor: + default: true + description: Synchronize cursor position between related panels in the dashboard. + type: boolean + syncTooltips: + default: true + description: Synchronize tooltips between related panels in the dashboard. + type: boolean + useMargins: + default: true + description: Show margins between panels in the dashboard layout. + type: boolean + panels: + default: [] + items: + additionalProperties: false + type: object + properties: + gridData: + additionalProperties: false + type: object + properties: + h: + default: 15 + description: The height of the panel in grid units + minimum: 1 + type: number + i: + type: string + w: + default: 24 + description: The width of the panel in grid units + maximum: 48 + minimum: 1 + type: number + x: + description: The x coordinate of the panel in grid units + type: number + 'y': + description: The y coordinate of the panel in grid units + type: number + required: + - x + - 'y' + - i + id: + description: The saved object id for by reference panels + type: string + panelConfig: + additionalProperties: true + type: object + properties: + description: + description: The description of the panel + type: string + enhancements: + additionalProperties: {} + type: object + hidePanelTitles: + description: Set to true to hide the panel title in its container. + type: boolean + savedObjectId: + description: The unique id of the library item to construct the embeddable. + type: string + title: + description: The title of the panel + type: string + version: + description: The version of the embeddable in the panel. + type: string + panelIndex: + type: string + panelRefName: + type: string + title: + description: The title of the panel + type: string + type: + description: The embeddable type + type: string + version: + deprecated: true + description: The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type). + type: string + required: + - panelConfig + - type + - gridData + - panelIndex + type: array + refreshInterval: + additionalProperties: false + description: A container for various refresh interval settings + type: object + properties: + display: + deprecated: true + description: A human-readable string indicating the refresh frequency. No longer used. + type: string + pause: + description: Whether the refresh interval is set to be paused while viewing the dashboard. + type: boolean + section: + deprecated: true + description: No longer used. + type: number + value: + description: A numeric value indicating refresh frequency in milliseconds. + type: number + required: + - pause + - value + timeFrom: + description: An ISO string indicating when to restore time from + type: string + timeRestore: + default: false + description: Whether to restore time upon viewing this dashboard + type: boolean + timeTo: + description: An ISO string indicating when to restore time from + type: string + title: + description: A human-readable title for the dashboard + type: string + version: + deprecated: true + type: number + required: + - title + - options + createdAt: + type: string + createdBy: + type: string + error: + additionalProperties: false + type: object + properties: + error: + type: string + message: + type: string + metadata: + additionalProperties: true + type: object + properties: {} + statusCode: + type: number + required: + - error + - message + - statusCode + id: + type: string + managed: + type: boolean + namespaces: + items: + type: string + type: array + originId: + type: string + references: + items: + additionalProperties: false + type: object + properties: + id: + type: string + name: + type: string + type: + type: string + required: + - name + - type + - id + type: array + type: + type: string + updatedAt: + type: string + updatedBy: + type: string + version: + type: string + required: + - id + - type + - attributes + - references + meta: + additionalProperties: false + type: object + properties: + aliasPurpose: + enum: + - savedObjectConversion + - savedObjectImport + type: string + aliasTargetId: + type: string + outcome: + enum: + - exactMatch + - aliasMatch + - conflict + type: string + required: + - outcome + required: + - item + - meta + summary: Get a dashboard + tags: + - Dashboards + x-state: Technical Preview + post: + description: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + operationId: post-dashboards-dashboard-id + parameters: + - description: The version of the API to use + in: header + name: elastic-api-version + schema: + default: '2023-10-31' + enum: + - '2023-10-31' + type: string + - description: A required header to protect against CSRF attacks + in: header + name: kbn-xsrf + required: true + schema: + example: 'true' + type: string + - description: A unique identifier for the dashboard. + in: path + name: id + required: false + schema: + type: string + requestBody: + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + additionalProperties: false + type: object + properties: + attributes: + additionalProperties: false + type: object + properties: + controlGroupInput: + additionalProperties: false + type: object + properties: + autoApplySelections: + default: true + description: Show apply selections button in controls. + type: boolean + chainingSystem: + default: HIERARCHICAL + description: The chaining strategy for multiple controls. For example, "HIERARCHICAL" or "NONE". + enum: + - NONE + - HIERARCHICAL + type: string + controls: + default: [] + description: An array of control panels and their state in the control group. + items: + additionalProperties: true + type: object + properties: + controlConfig: + additionalProperties: {} + type: object + grow: + default: false + description: Expand width of the control panel to fit available space. + type: boolean + id: + description: The unique ID of the control. + type: string + order: + description: The order of the control panel in the control group. + type: number + type: + description: The type of the control panel. + type: string + width: + default: medium + description: Minimum width of the control panel in the control group. + enum: + - small + - medium + - large + type: string + required: + - type + - order + type: array + enhancements: + additionalProperties: {} + type: object + ignoreParentSettings: + additionalProperties: false + type: object + properties: + ignoreFilters: + default: false + description: Ignore global filters in controls. + type: boolean + ignoreQuery: + default: false + description: Ignore the global query bar in controls. + type: boolean + ignoreTimerange: + default: false + description: Ignore the global time range in controls. + type: boolean + ignoreValidations: + default: false + description: Ignore validations in controls. + type: boolean + labelPosition: + default: oneLine + description: Position of the labels for controls. For example, "oneLine", "twoLine". + enum: + - oneLine + - twoLine + type: string + required: + - ignoreParentSettings + description: + default: '' + description: A short description. + type: string + kibanaSavedObjectMeta: + additionalProperties: false + default: {} + description: A container for various metadata + type: object + properties: + searchSource: + additionalProperties: true + type: object + properties: + filter: + items: + additionalProperties: false + description: A filter for the search source. + type: object + properties: + $state: + additionalProperties: false + type: object + properties: + store: + description: Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState'). + enum: + - appState + - globalState + type: string + required: + - store + meta: + additionalProperties: true + type: object + properties: + alias: + nullable: true + type: string + controlledBy: + type: string + disabled: + type: boolean + field: + type: string + group: + type: string + index: + type: string + isMultiIndex: + type: boolean + key: + type: string + negate: + type: boolean + params: {} + type: + type: string + value: + type: string + required: + - params + query: + additionalProperties: {} + type: object + required: + - meta + type: array + query: + additionalProperties: false + type: object + properties: + language: + description: The query language such as KQL or Lucene. + type: string + query: + anyOf: + - description: A text-based query such as Kibana Query Language (KQL) or Lucene query language. + type: string + - additionalProperties: {} + type: object + required: + - query + - language + sort: + items: + additionalProperties: + anyOf: + - enum: + - asc + - desc + type: string + - additionalProperties: false + type: object + properties: + format: + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + - additionalProperties: false + type: object + properties: + numeric_type: + enum: + - double + - long + - date + - date_nanos + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + type: object + type: array + type: + type: string + options: + additionalProperties: false + type: object + properties: + hidePanelTitles: + default: false + description: Hide the panel titles in the dashboard. + type: boolean + syncColors: + default: true + description: Synchronize colors between related panels in the dashboard. + type: boolean + syncCursor: + default: true + description: Synchronize cursor position between related panels in the dashboard. + type: boolean + syncTooltips: + default: true + description: Synchronize tooltips between related panels in the dashboard. + type: boolean + useMargins: + default: true + description: Show margins between panels in the dashboard layout. + type: boolean + panels: + default: [] + items: + additionalProperties: false + type: object + properties: + gridData: + additionalProperties: false + type: object + properties: + h: + default: 15 + description: The height of the panel in grid units + minimum: 1 + type: number + i: + description: The unique identifier of the panel + type: string + w: + default: 24 + description: The width of the panel in grid units + maximum: 48 + minimum: 1 + type: number + x: + description: The x coordinate of the panel in grid units + type: number + 'y': + description: The y coordinate of the panel in grid units + type: number + required: + - x + - 'y' + id: + description: The saved object id for by reference panels + type: string + panelConfig: + additionalProperties: true + type: object + properties: + description: + description: The description of the panel + type: string + enhancements: + additionalProperties: {} + type: object + hidePanelTitles: + description: Set to true to hide the panel title in its container. + type: boolean + savedObjectId: + description: The unique id of the library item to construct the embeddable. + type: string + title: + description: The title of the panel + type: string + version: + description: The version of the embeddable in the panel. + type: string + panelIndex: + description: The unique ID of the panel. + type: string + panelRefName: + type: string + title: + description: The title of the panel + type: string + type: + description: The embeddable type + type: string + version: + deprecated: true + description: The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type). + type: string + required: + - panelConfig + - type + - gridData + type: array + refreshInterval: + additionalProperties: false + description: A container for various refresh interval settings + type: object + properties: + display: + deprecated: true + description: A human-readable string indicating the refresh frequency. No longer used. + type: string + pause: + description: Whether the refresh interval is set to be paused while viewing the dashboard. + type: boolean + section: + deprecated: true + description: No longer used. + type: number + value: + description: A numeric value indicating refresh frequency in milliseconds. + type: number + required: + - pause + - value + timeFrom: + description: An ISO string indicating when to restore time from + type: string + timeRestore: + default: false + description: Whether to restore time upon viewing this dashboard + type: boolean + timeTo: + description: An ISO string indicating when to restore time from + type: string + title: + description: A human-readable title for the dashboard + type: string + version: + deprecated: true + type: number + required: + - title + - options + references: + items: + additionalProperties: false + type: object + properties: + id: + type: string + name: + type: string + type: + type: string + required: + - name + - type + - id + type: array + spaces: + items: + type: string + type: array + required: + - attributes + responses: + '200': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + additionalProperties: false + type: object + properties: + item: + additionalProperties: true + type: object + properties: + attributes: + additionalProperties: false + type: object + properties: + controlGroupInput: + additionalProperties: false + type: object + properties: + autoApplySelections: + default: true + description: Show apply selections button in controls. + type: boolean + chainingSystem: + default: HIERARCHICAL + description: The chaining strategy for multiple controls. For example, "HIERARCHICAL" or "NONE". + enum: + - NONE + - HIERARCHICAL + type: string + controls: + default: [] + description: An array of control panels and their state in the control group. + items: + additionalProperties: true + type: object + properties: + controlConfig: + additionalProperties: {} + type: object + grow: + default: false + description: Expand width of the control panel to fit available space. + type: boolean + id: + description: The unique ID of the control. + type: string + order: + description: The order of the control panel in the control group. + type: number + type: + description: The type of the control panel. + type: string + width: + default: medium + description: Minimum width of the control panel in the control group. + enum: + - small + - medium + - large + type: string + required: + - type + - order + type: array + enhancements: + additionalProperties: {} + type: object + ignoreParentSettings: + additionalProperties: false + type: object + properties: + ignoreFilters: + default: false + description: Ignore global filters in controls. + type: boolean + ignoreQuery: + default: false + description: Ignore the global query bar in controls. + type: boolean + ignoreTimerange: + default: false + description: Ignore the global time range in controls. + type: boolean + ignoreValidations: + default: false + description: Ignore validations in controls. + type: boolean + labelPosition: + default: oneLine + description: Position of the labels for controls. For example, "oneLine", "twoLine". + enum: + - oneLine + - twoLine + type: string + required: + - ignoreParentSettings + description: + default: '' + description: A short description. + type: string + kibanaSavedObjectMeta: + additionalProperties: false + default: {} + description: A container for various metadata + type: object + properties: + searchSource: + additionalProperties: true + type: object + properties: + filter: + items: + additionalProperties: false + description: A filter for the search source. + type: object + properties: + $state: + additionalProperties: false + type: object + properties: + store: + description: Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState'). + enum: + - appState + - globalState + type: string + required: + - store + meta: + additionalProperties: true + type: object + properties: + alias: + nullable: true + type: string + controlledBy: + type: string + disabled: + type: boolean + field: + type: string + group: + type: string + index: + type: string + isMultiIndex: + type: boolean + key: + type: string + negate: + type: boolean + params: {} + type: + type: string + value: + type: string + required: + - params + query: + additionalProperties: {} + type: object + required: + - meta + type: array + query: + additionalProperties: false + type: object + properties: + language: + description: The query language such as KQL or Lucene. + type: string + query: + anyOf: + - description: A text-based query such as Kibana Query Language (KQL) or Lucene query language. + type: string + - additionalProperties: {} + type: object + required: + - query + - language + sort: + items: + additionalProperties: + anyOf: + - enum: + - asc + - desc + type: string + - additionalProperties: false + type: object + properties: + format: + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + - additionalProperties: false + type: object + properties: + numeric_type: + enum: + - double + - long + - date + - date_nanos + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + type: object + type: array + type: + type: string + options: + additionalProperties: false + type: object + properties: + hidePanelTitles: + default: false + description: Hide the panel titles in the dashboard. + type: boolean + syncColors: + default: true + description: Synchronize colors between related panels in the dashboard. + type: boolean + syncCursor: + default: true + description: Synchronize cursor position between related panels in the dashboard. + type: boolean + syncTooltips: + default: true + description: Synchronize tooltips between related panels in the dashboard. + type: boolean + useMargins: + default: true + description: Show margins between panels in the dashboard layout. + type: boolean + panels: + default: [] + items: + additionalProperties: false + type: object + properties: + gridData: + additionalProperties: false + type: object + properties: + h: + default: 15 + description: The height of the panel in grid units + minimum: 1 + type: number + i: + type: string + w: + default: 24 + description: The width of the panel in grid units + maximum: 48 + minimum: 1 + type: number + x: + description: The x coordinate of the panel in grid units + type: number + 'y': + description: The y coordinate of the panel in grid units + type: number + required: + - x + - 'y' + - i + id: + description: The saved object id for by reference panels + type: string + panelConfig: + additionalProperties: true + type: object + properties: + description: + description: The description of the panel + type: string + enhancements: + additionalProperties: {} + type: object + hidePanelTitles: + description: Set to true to hide the panel title in its container. + type: boolean + savedObjectId: + description: The unique id of the library item to construct the embeddable. + type: string + title: + description: The title of the panel + type: string + version: + description: The version of the embeddable in the panel. + type: string + panelIndex: + type: string + panelRefName: + type: string + title: + description: The title of the panel + type: string + type: + description: The embeddable type + type: string + version: + deprecated: true + description: The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type). + type: string + required: + - panelConfig + - type + - gridData + - panelIndex + type: array + refreshInterval: + additionalProperties: false + description: A container for various refresh interval settings + type: object + properties: + display: + deprecated: true + description: A human-readable string indicating the refresh frequency. No longer used. + type: string + pause: + description: Whether the refresh interval is set to be paused while viewing the dashboard. + type: boolean + section: + deprecated: true + description: No longer used. + type: number + value: + description: A numeric value indicating refresh frequency in milliseconds. + type: number + required: + - pause + - value + timeFrom: + description: An ISO string indicating when to restore time from + type: string + timeRestore: + default: false + description: Whether to restore time upon viewing this dashboard + type: boolean + timeTo: + description: An ISO string indicating when to restore time from + type: string + title: + description: A human-readable title for the dashboard + type: string + version: + deprecated: true + type: number + required: + - title + - options + createdAt: + type: string + createdBy: + type: string + error: + additionalProperties: false + type: object + properties: + error: + type: string + message: + type: string + metadata: + additionalProperties: true + type: object + properties: {} + statusCode: + type: number + required: + - error + - message + - statusCode + id: + type: string + managed: + type: boolean + namespaces: + items: + type: string + type: array + originId: + type: string + references: + items: + additionalProperties: false + type: object + properties: + id: + type: string + name: + type: string + type: + type: string + required: + - name + - type + - id + type: array + type: + type: string + updatedAt: + type: string + updatedBy: + type: string + version: + type: string + required: + - id + - type + - attributes + - references + required: + - item + summary: Create a dashboard + tags: + - Dashboards + x-state: Technical Preview + put: + description: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + operationId: put-dashboards-dashboard-id + parameters: + - description: The version of the API to use + in: header + name: elastic-api-version + schema: + default: '2023-10-31' + enum: + - '2023-10-31' + type: string + - description: A required header to protect against CSRF attacks + in: header + name: kbn-xsrf + required: true + schema: + example: 'true' + type: string + - description: A unique identifier for the dashboard. + in: path + name: id + required: true + schema: + type: string + requestBody: + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + additionalProperties: false + type: object + properties: + attributes: + additionalProperties: false + type: object + properties: + controlGroupInput: + additionalProperties: false + type: object + properties: + autoApplySelections: + default: true + description: Show apply selections button in controls. + type: boolean + chainingSystem: + default: HIERARCHICAL + description: The chaining strategy for multiple controls. For example, "HIERARCHICAL" or "NONE". + enum: + - NONE + - HIERARCHICAL + type: string + controls: + default: [] + description: An array of control panels and their state in the control group. + items: + additionalProperties: true + type: object + properties: + controlConfig: + additionalProperties: {} + type: object + grow: + default: false + description: Expand width of the control panel to fit available space. + type: boolean + id: + description: The unique ID of the control. + type: string + order: + description: The order of the control panel in the control group. + type: number + type: + description: The type of the control panel. + type: string + width: + default: medium + description: Minimum width of the control panel in the control group. + enum: + - small + - medium + - large + type: string + required: + - type + - order + type: array + enhancements: + additionalProperties: {} + type: object + ignoreParentSettings: + additionalProperties: false + type: object + properties: + ignoreFilters: + default: false + description: Ignore global filters in controls. + type: boolean + ignoreQuery: + default: false + description: Ignore the global query bar in controls. + type: boolean + ignoreTimerange: + default: false + description: Ignore the global time range in controls. + type: boolean + ignoreValidations: + default: false + description: Ignore validations in controls. + type: boolean + labelPosition: + default: oneLine + description: Position of the labels for controls. For example, "oneLine", "twoLine". + enum: + - oneLine + - twoLine + type: string + required: + - ignoreParentSettings + description: + default: '' + description: A short description. + type: string + kibanaSavedObjectMeta: + additionalProperties: false + default: {} + description: A container for various metadata + type: object + properties: + searchSource: + additionalProperties: true + type: object + properties: + filter: + items: + additionalProperties: false + description: A filter for the search source. + type: object + properties: + $state: + additionalProperties: false + type: object + properties: + store: + description: Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState'). + enum: + - appState + - globalState + type: string + required: + - store + meta: + additionalProperties: true + type: object + properties: + alias: + nullable: true + type: string + controlledBy: + type: string + disabled: + type: boolean + field: + type: string + group: + type: string + index: + type: string + isMultiIndex: + type: boolean + key: + type: string + negate: + type: boolean + params: {} + type: + type: string + value: + type: string + required: + - params + query: + additionalProperties: {} + type: object + required: + - meta + type: array + query: + additionalProperties: false + type: object + properties: + language: + description: The query language such as KQL or Lucene. + type: string + query: + anyOf: + - description: A text-based query such as Kibana Query Language (KQL) or Lucene query language. + type: string + - additionalProperties: {} + type: object + required: + - query + - language + sort: + items: + additionalProperties: + anyOf: + - enum: + - asc + - desc + type: string + - additionalProperties: false + type: object + properties: + format: + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + - additionalProperties: false + type: object + properties: + numeric_type: + enum: + - double + - long + - date + - date_nanos + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + type: object + type: array + type: + type: string + options: + additionalProperties: false + type: object + properties: + hidePanelTitles: + default: false + description: Hide the panel titles in the dashboard. + type: boolean + syncColors: + default: true + description: Synchronize colors between related panels in the dashboard. + type: boolean + syncCursor: + default: true + description: Synchronize cursor position between related panels in the dashboard. + type: boolean + syncTooltips: + default: true + description: Synchronize tooltips between related panels in the dashboard. + type: boolean + useMargins: + default: true + description: Show margins between panels in the dashboard layout. + type: boolean + panels: + default: [] + items: + additionalProperties: false + type: object + properties: + gridData: + additionalProperties: false + type: object + properties: + h: + default: 15 + description: The height of the panel in grid units + minimum: 1 + type: number + i: + description: The unique identifier of the panel + type: string + w: + default: 24 + description: The width of the panel in grid units + maximum: 48 + minimum: 1 + type: number + x: + description: The x coordinate of the panel in grid units + type: number + 'y': + description: The y coordinate of the panel in grid units + type: number + required: + - x + - 'y' + id: + description: The saved object id for by reference panels + type: string + panelConfig: + additionalProperties: true + type: object + properties: + description: + description: The description of the panel + type: string + enhancements: + additionalProperties: {} + type: object + hidePanelTitles: + description: Set to true to hide the panel title in its container. + type: boolean + savedObjectId: + description: The unique id of the library item to construct the embeddable. + type: string + title: + description: The title of the panel + type: string + version: + description: The version of the embeddable in the panel. + type: string + panelIndex: + description: The unique ID of the panel. + type: string + panelRefName: + type: string + title: + description: The title of the panel + type: string + type: + description: The embeddable type + type: string + version: + deprecated: true + description: The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type). + type: string + required: + - panelConfig + - type + - gridData + type: array + refreshInterval: + additionalProperties: false + description: A container for various refresh interval settings + type: object + properties: + display: + deprecated: true + description: A human-readable string indicating the refresh frequency. No longer used. + type: string + pause: + description: Whether the refresh interval is set to be paused while viewing the dashboard. + type: boolean + section: + deprecated: true + description: No longer used. + type: number + value: + description: A numeric value indicating refresh frequency in milliseconds. + type: number + required: + - pause + - value + timeFrom: + description: An ISO string indicating when to restore time from + type: string + timeRestore: + default: false + description: Whether to restore time upon viewing this dashboard + type: boolean + timeTo: + description: An ISO string indicating when to restore time from + type: string + title: + description: A human-readable title for the dashboard + type: string + version: + deprecated: true + type: number + required: + - title + - options + references: + items: + additionalProperties: false + type: object + properties: + id: + type: string + name: + type: string + type: + type: string + required: + - name + - type + - id + type: array + required: + - attributes + responses: + '200': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + additionalProperties: false + type: object + properties: + item: + additionalProperties: true + type: object + properties: + attributes: + additionalProperties: false + type: object + properties: + controlGroupInput: + additionalProperties: false + type: object + properties: + autoApplySelections: + default: true + description: Show apply selections button in controls. + type: boolean + chainingSystem: + default: HIERARCHICAL + description: The chaining strategy for multiple controls. For example, "HIERARCHICAL" or "NONE". + enum: + - NONE + - HIERARCHICAL + type: string + controls: + default: [] + description: An array of control panels and their state in the control group. + items: + additionalProperties: true + type: object + properties: + controlConfig: + additionalProperties: {} + type: object + grow: + default: false + description: Expand width of the control panel to fit available space. + type: boolean + id: + description: The unique ID of the control. + type: string + order: + description: The order of the control panel in the control group. + type: number + type: + description: The type of the control panel. + type: string + width: + default: medium + description: Minimum width of the control panel in the control group. + enum: + - small + - medium + - large + type: string + required: + - type + - order + type: array + enhancements: + additionalProperties: {} + type: object + ignoreParentSettings: + additionalProperties: false + type: object + properties: + ignoreFilters: + default: false + description: Ignore global filters in controls. + type: boolean + ignoreQuery: + default: false + description: Ignore the global query bar in controls. + type: boolean + ignoreTimerange: + default: false + description: Ignore the global time range in controls. + type: boolean + ignoreValidations: + default: false + description: Ignore validations in controls. + type: boolean + labelPosition: + default: oneLine + description: Position of the labels for controls. For example, "oneLine", "twoLine". + enum: + - oneLine + - twoLine + type: string + required: + - ignoreParentSettings + description: + default: '' + description: A short description. + type: string + kibanaSavedObjectMeta: + additionalProperties: false + default: {} + description: A container for various metadata + type: object + properties: + searchSource: + additionalProperties: true + type: object + properties: + filter: + items: + additionalProperties: false + description: A filter for the search source. + type: object + properties: + $state: + additionalProperties: false + type: object + properties: + store: + description: Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState'). + enum: + - appState + - globalState + type: string + required: + - store + meta: + additionalProperties: true + type: object + properties: + alias: + nullable: true + type: string + controlledBy: + type: string + disabled: + type: boolean + field: + type: string + group: + type: string + index: + type: string + isMultiIndex: + type: boolean + key: + type: string + negate: + type: boolean + params: {} + type: + type: string + value: + type: string + required: + - params + query: + additionalProperties: {} + type: object + required: + - meta + type: array + query: + additionalProperties: false + type: object + properties: + language: + description: The query language such as KQL or Lucene. + type: string + query: + anyOf: + - description: A text-based query such as Kibana Query Language (KQL) or Lucene query language. + type: string + - additionalProperties: {} + type: object + required: + - query + - language + sort: + items: + additionalProperties: + anyOf: + - enum: + - asc + - desc + type: string + - additionalProperties: false + type: object + properties: + format: + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + - additionalProperties: false + type: object + properties: + numeric_type: + enum: + - double + - long + - date + - date_nanos + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + type: object + type: array + type: + type: string + options: + additionalProperties: false + type: object + properties: + hidePanelTitles: + default: false + description: Hide the panel titles in the dashboard. + type: boolean + syncColors: + default: true + description: Synchronize colors between related panels in the dashboard. + type: boolean + syncCursor: + default: true + description: Synchronize cursor position between related panels in the dashboard. + type: boolean + syncTooltips: + default: true + description: Synchronize tooltips between related panels in the dashboard. + type: boolean + useMargins: + default: true + description: Show margins between panels in the dashboard layout. + type: boolean + panels: + default: [] + items: + additionalProperties: false + type: object + properties: + gridData: + additionalProperties: false + type: object + properties: + h: + default: 15 + description: The height of the panel in grid units + minimum: 1 + type: number + i: + type: string + w: + default: 24 + description: The width of the panel in grid units + maximum: 48 + minimum: 1 + type: number + x: + description: The x coordinate of the panel in grid units + type: number + 'y': + description: The y coordinate of the panel in grid units + type: number + required: + - x + - 'y' + - i + id: + description: The saved object id for by reference panels + type: string + panelConfig: + additionalProperties: true + type: object + properties: + description: + description: The description of the panel + type: string + enhancements: + additionalProperties: {} + type: object + hidePanelTitles: + description: Set to true to hide the panel title in its container. + type: boolean + savedObjectId: + description: The unique id of the library item to construct the embeddable. + type: string + title: + description: The title of the panel + type: string + version: + description: The version of the embeddable in the panel. + type: string + panelIndex: + type: string + panelRefName: + type: string + title: + description: The title of the panel + type: string + type: + description: The embeddable type + type: string + version: + deprecated: true + description: The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type). + type: string + required: + - panelConfig + - type + - gridData + - panelIndex + type: array + refreshInterval: + additionalProperties: false + description: A container for various refresh interval settings + type: object + properties: + display: + deprecated: true + description: A human-readable string indicating the refresh frequency. No longer used. + type: string + pause: + description: Whether the refresh interval is set to be paused while viewing the dashboard. + type: boolean + section: + deprecated: true + description: No longer used. + type: number + value: + description: A numeric value indicating refresh frequency in milliseconds. + type: number + required: + - pause + - value + timeFrom: + description: An ISO string indicating when to restore time from + type: string + timeRestore: + default: false + description: Whether to restore time upon viewing this dashboard + type: boolean + timeTo: + description: An ISO string indicating when to restore time from + type: string + title: + description: A human-readable title for the dashboard + type: string + version: + deprecated: true + type: number + required: + - title + - options + createdAt: + type: string + createdBy: + type: string + error: + additionalProperties: false + type: object + properties: + error: + type: string + message: + type: string + metadata: + additionalProperties: true + type: object + properties: {} + statusCode: + type: number + required: + - error + - message + - statusCode + id: + type: string + managed: + type: boolean + namespaces: + items: + type: string + type: array + originId: + type: string + references: + items: + additionalProperties: false + type: object + properties: + id: + type: string + name: + type: string + type: + type: string + required: + - name + - type + - id + type: array + type: + type: string + updatedAt: + type: string + updatedBy: + type: string + version: + type: string + required: + - id + - type + - attributes + - references + required: + - item + summary: Update an existing dashboard + tags: + - Dashboards + x-state: Technical Preview /api/data_views: get: operationId: getAllDataViewsDefault @@ -12489,8 +14800,6 @@ paths: maximum: 65353 minimum: 0 type: number - required: - - enabled monitoring_output_id: nullable: true type: string @@ -13020,8 +15329,6 @@ paths: maximum: 65353 minimum: 0 type: number - required: - - enabled monitoring_output_id: nullable: true type: string @@ -13202,8 +15509,6 @@ paths: maximum: 65353 minimum: 0 type: number - required: - - enabled monitoring_output_id: nullable: true type: string @@ -13755,8 +16060,6 @@ paths: maximum: 65353 minimum: 0 type: number - required: - - enabled monitoring_output_id: nullable: true type: string @@ -14288,8 +16591,6 @@ paths: maximum: 65353 minimum: 0 type: number - required: - - enabled monitoring_output_id: nullable: true type: string @@ -14818,8 +17119,6 @@ paths: maximum: 65353 minimum: 0 type: number - required: - - enabled monitoring_output_id: nullable: true type: string @@ -15000,8 +17299,6 @@ paths: maximum: 65353 minimum: 0 type: number - required: - - enabled monitoring_output_id: nullable: true type: string @@ -15553,8 +17850,6 @@ paths: maximum: 65353 minimum: 0 type: number - required: - - enabled monitoring_output_id: nullable: true type: string @@ -17096,6 +19391,7 @@ paths: type: array upgrade_details: additionalProperties: false + nullable: true type: object properties: action_id: @@ -17560,6 +19856,7 @@ paths: type: array upgrade_details: additionalProperties: false + nullable: true type: object properties: action_id: @@ -17903,6 +20200,7 @@ paths: type: array upgrade_details: additionalProperties: false + nullable: true type: object properties: action_id: diff --git a/package.json b/package.json index f6c3330adad25..c35b4daccb349 100644 --- a/package.json +++ b/package.json @@ -96,7 +96,7 @@ "@types/react": "~18.2.0", "@types/react-dom": "~18.2.0", "@xstate5/react/**/xstate": "^5.18.1", - "globby/fast-glob": "^3.2.11" + "globby/fast-glob": "^3.3.2" }, "dependencies": { "@appland/sql-parser": "^1.5.1", @@ -117,8 +117,8 @@ "@elastic/ecs": "^8.11.1", "@elastic/elasticsearch": "^8.15.2", "@elastic/ems-client": "8.5.3", - "@elastic/eui": "98.0.0-borealis.1", - "@elastic/eui-theme-borealis": "0.0.3", + "@elastic/eui": "98.1.0-borealis.0", + "@elastic/eui-theme-borealis": "0.0.4", "@elastic/filesaver": "1.1.2", "@elastic/node-crypto": "^1.2.3", "@elastic/numeral": "^2.5.1", @@ -759,6 +759,7 @@ "@kbn/resizable-layout-examples-plugin": "link:examples/resizable_layout_examples", "@kbn/resolver-test-plugin": "link:x-pack/test/plugin_functional/plugins/resolver_test", "@kbn/response-ops-feature-flag-service": "link:packages/response-ops/feature_flag_service", + "@kbn/response-ops-rule-form": "link:packages/response-ops/rule_form", "@kbn/response-ops-rule-params": "link:packages/response-ops/rule_params", "@kbn/response-stream-plugin": "link:examples/response_stream", "@kbn/rison": "link:packages/kbn-rison", @@ -1031,7 +1032,7 @@ "@langchain/google-vertexai": "^0.1.0", "@langchain/langgraph": "0.2.19", "@langchain/openai": "^0.3.11", - "@langtrase/trace-attributes": "^3.0.8", + "@langtrase/trace-attributes": "^7.5.0", "@launchdarkly/node-server-sdk": "^9.7.2", "@launchdarkly/openfeature-node-server": "^1.0.0", "@loaders.gl/core": "^3.4.7", @@ -1058,12 +1059,12 @@ "@reduxjs/toolkit": "1.9.7", "@slack/webhook": "^7.0.1", "@smithy/eventstream-codec": "^3.1.1", - "@smithy/eventstream-serde-node": "^3.0.3", + "@smithy/eventstream-serde-node": "^3.0.12", "@smithy/middleware-stack": "^3.0.10", "@smithy/node-http-handler": "^3.3.1", "@smithy/protocol-http": "^4.1.7", - "@smithy/signature-v4": "^3.1.1", - "@smithy/types": "^3.2.0", + "@smithy/signature-v4": "^4.2.3", + "@smithy/types": "^3.7.1", "@smithy/util-utf8": "^3.0.0", "@tanstack/react-query": "^4.29.12", "@tanstack/react-query-devtools": "^4.29.12", @@ -1082,13 +1083,13 @@ "@xyflow/react": "^12.3.5", "adm-zip": "^0.5.9", "ai": "^2.2.33", - "ajv": "^8.12.0", + "ajv": "^8.17.1", "ansi-regex": "^6.1.0", "antlr4": "^4.13.1-patch-1", "archiver": "^7.0.1", "async": "^3.2.3", - "aws4": "^1.12.0", - "axios": "^1.7.4", + "aws4": "^1.13.2", + "axios": "^1.7.9", "base64-js": "^1.3.1", "bitmap-sdf": "^1.0.3", "blurhash": "^2.0.1", @@ -1130,7 +1131,7 @@ "dotenv": "^16.4.5", "elastic-apm-node": "^4.8.1", "email-addresses": "^5.0.0", - "eventsource-parser": "^1.1.1", + "eventsource-parser": "^3.0.0", "execa": "^5.1.1", "expiry-js": "0.1.7", "exponential-backoff": "^3.1.1", @@ -1148,7 +1149,7 @@ "getos": "^3.1.0", "globby": "^11.1.0", "google-auth-library": "^9.10.0", - "gpt-tokenizer": "^2.1.2", + "gpt-tokenizer": "^2.6.2", "handlebars": "4.7.8", "he": "^1.2.0", "history": "^4.9.0", @@ -1176,7 +1177,7 @@ "jsts": "^1.6.2", "kea": "^2.6.0", "langchain": "^0.3.5", - "langsmith": "^0.2.3", + "langsmith": "^0.2.5", "launchdarkly-js-client-sdk": "^3.5.0", "load-json-file": "^6.2.0", "lodash": "^4.17.21", @@ -1205,7 +1206,7 @@ "nunjucks": "^3.2.4", "object-hash": "^1.3.1", "object-path-immutable": "^3.1.1", - "openai": "^4.68.0", + "openai": "^4.72.0", "openpgp": "5.10.1", "ora": "^4.0.4", "p-limit": "^3.0.1", @@ -1453,6 +1454,7 @@ "@kbn/ftr-common-functional-services": "link:packages/kbn-ftr-common-functional-services", "@kbn/ftr-common-functional-ui-services": "link:packages/kbn-ftr-common-functional-ui-services", "@kbn/ftr-screenshot-filename": "link:packages/kbn-ftr-screenshot-filename", + "@kbn/gen-ai-functional-testing": "link:packages/kbn-gen-ai-functional-testing", "@kbn/generate": "link:packages/kbn-generate", "@kbn/get-repo-files": "link:packages/kbn-get-repo-files", "@kbn/import-locator": "link:packages/kbn-import-locator", @@ -1515,7 +1517,7 @@ "@mswjs/http-middleware": "^0.10.1", "@octokit/rest": "^17.11.2", "@parcel/watcher": "^2.1.0", - "@playwright/test": "=1.46.0", + "@playwright/test": "1.49.0", "@redocly/cli": "^1.25.14", "@statoscope/webpack-plugin": "^5.28.2", "@storybook/addon-a11y": "^6.5.16", @@ -1572,7 +1574,6 @@ "@types/eslint": "^8.44.2", "@types/express": "^4.17.21", "@types/extract-zip": "^1.6.2", - "@types/faker": "^5.1.5", "@types/fetch-mock": "^7.3.1", "@types/file-saver": "^2.0.0", "@types/flot": "^0.0.31", @@ -1592,7 +1593,7 @@ "@types/js-search": "^1.4.0", "@types/js-yaml": "^4.0.9", "@types/jsdom": "^20.0.1", - "@types/json-schema": "^7", + "@types/json-schema": "^7.0.15", "@types/json-stable-stringify": "^1.0.32", "@types/json5": "^2.2.0", "@types/jsonwebtoken": "^9.0.0", @@ -1741,7 +1742,6 @@ "expect": "^29.7.0", "expose-loader": "^0.7.5", "express": "^4.21.1", - "faker": "^5.1.0", "fetch-mock": "^7.3.9", "file-loader": "^4.2.0", "find-cypress-specs": "^1.41.4", @@ -1803,8 +1803,8 @@ "pirates": "^4.0.1", "piscina": "^3.2.0", "pixelmatch": "^5.3.0", - "playwright": "=1.46.0", - "playwright-chromium": "=1.46.0", + "playwright": "1.49.0", + "playwright-chromium": "1.49.0", "pngjs": "^7.0.0", "postcss": "^8.4.31", "postcss-loader": "^4.2.0", @@ -1836,7 +1836,7 @@ "svgo": "^2.8.0", "swagger-jsdoc": "^6.2.8", "swagger-ui-express": "^5.0.1", - "table": "^6.8.1", + "table": "^6.8.2", "tape": "^5.0.1", "terser": "^5.36.0", "terser-webpack-plugin": "^4.2.3", diff --git a/packages/core/chrome/core-chrome-browser-internal/src/ui/__snapshots__/loading_indicator.test.tsx.snap b/packages/core/chrome/core-chrome-browser-internal/src/ui/__snapshots__/loading_indicator.test.tsx.snap index b221e4e9a64ab..c8e702f228b20 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/ui/__snapshots__/loading_indicator.test.tsx.snap +++ b/packages/core/chrome/core-chrome-browser-internal/src/ui/__snapshots__/loading_indicator.test.tsx.snap @@ -1,31 +1,62 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`kbnLoadingIndicator is hidden by default 1`] = ` - + + + + `; exports[`kbnLoadingIndicator is visible when loadingCount is > 0 1`] = ` - + + + + `; exports[`kbnLoadingIndicator shows logo image when customLogo is set 1`] = ` - + + + + `; diff --git a/packages/core/chrome/core-chrome-browser-internal/src/ui/header/__snapshots__/collapsible_nav.test.tsx.snap b/packages/core/chrome/core-chrome-browser-internal/src/ui/header/__snapshots__/collapsible_nav.test.tsx.snap index 62b40f0d05e9b..167c919d6f498 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/ui/header/__snapshots__/collapsible_nav.test.tsx.snap +++ b/packages/core/chrome/core-chrome-browser-internal/src/ui/header/__snapshots__/collapsible_nav.test.tsx.snap @@ -168,7 +168,7 @@ Array [ >
  • @@ -351,7 +351,7 @@ Array [
    @@ -464,7 +464,7 @@ Array [
    @@ -560,7 +560,7 @@ Array [
    @@ -858,7 +858,15 @@ exports[`CollapsibleNav renders the default nav 1`] = ` } - className="kbnCollapsibleNav" + css={ + Object { + "map": undefined, + "name": "1pvcuvk", + "next": undefined, + "styles": "@media (max-height: 240px){overflow-y:auto;}", + "toString": [Function], + } + } data-test-subj="collapsibleNav" id="collapsibe-nav" isOpen={false} @@ -1045,7 +1053,15 @@ exports[`CollapsibleNav renders the default nav 2`] = ` } - className="kbnCollapsibleNav" + css={ + Object { + "map": undefined, + "name": "1pvcuvk", + "next": undefined, + "styles": "@media (max-height: 240px){overflow-y:auto;}", + "toString": [Function], + } + } data-test-subj="collapsibleNav" id="collapsibe-nav" isOpen={false} diff --git a/packages/core/chrome/core-chrome-browser-internal/src/ui/header/__snapshots__/header.test.tsx.snap b/packages/core/chrome/core-chrome-browser-internal/src/ui/header/__snapshots__/header.test.tsx.snap index 3e5b746b31536..6596f7c69db24 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/ui/header/__snapshots__/header.test.tsx.snap +++ b/packages/core/chrome/core-chrome-browser-internal/src/ui/header/__snapshots__/header.test.tsx.snap @@ -56,12 +56,11 @@ Array [ > ); diff --git a/packages/core/chrome/core-chrome-browser-internal/src/ui/loading_indicator.scss b/packages/core/chrome/core-chrome-browser-internal/src/ui/loading_indicator.scss deleted file mode 100644 index d12331d9c042d..0000000000000 --- a/packages/core/chrome/core-chrome-browser-internal/src/ui/loading_indicator.scss +++ /dev/null @@ -1,9 +0,0 @@ -.kbnLoadingIndicator-hidden { - visibility: hidden; - animation-play-state: paused; -} - -.euiHeaderSectionItem .euiButtonEmpty__text { - // stop global header buttons from jumping during loading state - display: flex; -} \ No newline at end of file diff --git a/packages/core/chrome/core-chrome-browser-internal/src/ui/loading_indicator.test.tsx b/packages/core/chrome/core-chrome-browser-internal/src/ui/loading_indicator.test.tsx index 1cdc7aa32533c..42bb1c718c88d 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/ui/loading_indicator.test.tsx +++ b/packages/core/chrome/core-chrome-browser-internal/src/ui/loading_indicator.test.tsx @@ -16,7 +16,9 @@ import { LoadingIndicator } from './loading_indicator'; describe('kbnLoadingIndicator', () => { it('is hidden by default', () => { const wrapper = shallow(); - expect(wrapper.prop('data-test-subj')).toBe('globalLoadingIndicator-hidden'); + expect( + wrapper.findWhere((node) => node.prop('data-test-subj') === 'globalLoadingIndicator-hidden') + ).toHaveLength(1); expect(wrapper).toMatchSnapshot(); }); diff --git a/packages/core/chrome/core-chrome-browser-internal/src/ui/loading_indicator.tsx b/packages/core/chrome/core-chrome-browser-internal/src/ui/loading_indicator.tsx index 2c9d5f6b931d6..28b91a5714a03 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/ui/loading_indicator.tsx +++ b/packages/core/chrome/core-chrome-browser-internal/src/ui/loading_indicator.tsx @@ -7,6 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import { Global, css } from '@emotion/react'; import { EuiLoadingSpinner, EuiProgress, EuiIcon, EuiImage } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React from 'react'; @@ -14,8 +15,6 @@ import classNames from 'classnames'; import type { Subscription } from 'rxjs'; import type { HttpStart } from '@kbn/core-http-browser'; -import './loading_indicator.scss'; - export interface LoadingIndicatorProps { loadingCount$: ReturnType; showAsBar?: boolean; @@ -60,6 +59,12 @@ export class LoadingIndicator extends React.Component + return ( + <> + + {!this.props.showAsBar ? ( + logo + ) : ( + + )} + ); } } diff --git a/packages/core/i18n/core-i18n-browser-internal/src/__snapshots__/i18n_service.test.tsx.snap b/packages/core/i18n/core-i18n-browser-internal/src/__snapshots__/i18n_service.test.tsx.snap index 9fd84ce731847..52a55d3113173 100644 --- a/packages/core/i18n/core-i18n-browser-internal/src/__snapshots__/i18n_service.test.tsx.snap +++ b/packages/core/i18n/core-i18n-browser-internal/src/__snapshots__/i18n_service.test.tsx.snap @@ -144,6 +144,7 @@ exports[`#start() returns \`Context\` component 1`] = ` "euiFieldPassword.maskPassword": "Mask password", "euiFieldPassword.showPassword": "Show password as plain text. Note: this will visually expose your password on the screen.", "euiFieldSearch.clearSearchButtonLabel": "Clear search input", + "euiFieldValueSelectionFilter.buttonLabelHint": "Selection", "euiFilePicker.filesSelected": [Function], "euiFilePicker.promptText": "Select or drag and drop a file", "euiFilePicker.removeSelected": "Remove", diff --git a/packages/core/i18n/core-i18n-browser-internal/src/i18n_eui_mapping.tsx b/packages/core/i18n/core-i18n-browser-internal/src/i18n_eui_mapping.tsx index 732c43a0593c7..c48dffd8caa45 100644 --- a/packages/core/i18n/core-i18n-browser-internal/src/i18n_eui_mapping.tsx +++ b/packages/core/i18n/core-i18n-browser-internal/src/i18n_eui_mapping.tsx @@ -1822,5 +1822,11 @@ export const getEuiContextMapping = (): EuiTokensObject => { defaultMessage: 'Select listbox', description: 'Accessible label for Super Selects without a visible label.', }), + 'euiFieldValueSelectionFilter.buttonLabelHint': i18n.translate( + 'core.euiFieldValueSelectionFilter.buttonLabelHint', + { + defaultMessage: 'Selection', + } + ), }; }; diff --git a/packages/kbn-alerts-ui-shared/index.ts b/packages/kbn-alerts-ui-shared/index.ts index a81942a5f956c..c579fa7ed74fd 100644 --- a/packages/kbn-alerts-ui-shared/index.ts +++ b/packages/kbn-alerts-ui-shared/index.ts @@ -19,3 +19,7 @@ export type { AlertsSearchBarProps } from './src/alerts_search_bar/types'; export * from './src/alert_fields_table'; export * from './src/alert_filter_controls/types'; export * from './src/common/types'; +export * from './src/check_action_type_enabled'; +export * from './src/action_variables'; + +export { useFetchFlappingSettings } from './src/common/hooks/use_fetch_flapping_settings'; diff --git a/packages/kbn-alerts-ui-shared/lib/README.md b/packages/kbn-alerts-ui-shared/lib/README.md new file mode 100644 index 0000000000000..3034f4804bd7c --- /dev/null +++ b/packages/kbn-alerts-ui-shared/lib/README.md @@ -0,0 +1 @@ +Export files in here that are only meant to be used by other KBN packages and not directly imported by plugins. This helps to keep bundle sizes efficient. diff --git a/packages/kbn-alerts-ui-shared/lib/index.ts b/packages/kbn-alerts-ui-shared/lib/index.ts new file mode 100644 index 0000000000000..808c936f18d27 --- /dev/null +++ b/packages/kbn-alerts-ui-shared/lib/index.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", 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 * from '../src/common/type_registry'; +export * from '../src/rule_settings'; diff --git a/packages/kbn-alerts-ui-shared/src/action_variables/transforms.test.ts b/packages/kbn-alerts-ui-shared/src/action_variables/transforms.test.ts index 6f362fd34710b..8411ff911e284 100644 --- a/packages/kbn-alerts-ui-shared/src/action_variables/transforms.test.ts +++ b/packages/kbn-alerts-ui-shared/src/action_variables/transforms.test.ts @@ -9,7 +9,7 @@ import { ActionVariables, RuleType } from '@kbn/triggers-actions-ui-types'; import { transformActionVariables } from './transforms'; -import { ALERTING_FEATURE_ID } from '../rule_form'; +import { ALERTING_FEATURE_ID } from '../common/constants'; beforeEach(() => jest.resetAllMocks()); diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/utils/check_action_type_enabled.scss b/packages/kbn-alerts-ui-shared/src/check_action_type_enabled/check_action_type_enabled.scss similarity index 100% rename from packages/kbn-alerts-ui-shared/src/rule_form/utils/check_action_type_enabled.scss rename to packages/kbn-alerts-ui-shared/src/check_action_type_enabled/check_action_type_enabled.scss diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/utils/check_action_type_enabled.test.ts b/packages/kbn-alerts-ui-shared/src/check_action_type_enabled/check_action_type_enabled.test.ts similarity index 98% rename from packages/kbn-alerts-ui-shared/src/rule_form/utils/check_action_type_enabled.test.ts rename to packages/kbn-alerts-ui-shared/src/check_action_type_enabled/check_action_type_enabled.test.ts index 7794f83825c76..8c1017af17f73 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/utils/check_action_type_enabled.test.ts +++ b/packages/kbn-alerts-ui-shared/src/check_action_type_enabled/check_action_type_enabled.test.ts @@ -8,11 +8,11 @@ */ import { ActionType } from '@kbn/actions-types'; +import { PreConfiguredActionConnector } from '../common/types'; import { - checkActionTypeEnabled, checkActionFormActionTypeEnabled, + checkActionTypeEnabled, } from './check_action_type_enabled'; -import { PreConfiguredActionConnector } from '../../common'; describe('checkActionTypeEnabled', () => { test(`returns isEnabled:true when action type isn't provided`, async () => { diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/utils/check_action_type_enabled.ts b/packages/kbn-alerts-ui-shared/src/check_action_type_enabled/check_action_type_enabled.ts similarity index 97% rename from packages/kbn-alerts-ui-shared/src/rule_form/utils/check_action_type_enabled.ts rename to packages/kbn-alerts-ui-shared/src/check_action_type_enabled/check_action_type_enabled.ts index 79c26b7052e86..0df3c542969fd 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/utils/check_action_type_enabled.ts +++ b/packages/kbn-alerts-ui-shared/src/check_action_type_enabled/check_action_type_enabled.ts @@ -8,9 +8,9 @@ */ import { ActionType } from '@kbn/actions-types'; -import { configurationCheckResult, getLicenseCheckResult } from './get_license_check_result'; -import { ActionConnector } from '../../common'; +import { ActionConnector } from '../common/types'; import './check_action_type_enabled.scss'; +import { configurationCheckResult, getLicenseCheckResult } from './get_license_check_result'; export interface IsEnabledResult { isEnabled: true; diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/utils/get_license_check_result.tsx b/packages/kbn-alerts-ui-shared/src/check_action_type_enabled/get_license_check_result.tsx similarity index 97% rename from packages/kbn-alerts-ui-shared/src/rule_form/utils/get_license_check_result.tsx rename to packages/kbn-alerts-ui-shared/src/check_action_type_enabled/get_license_check_result.tsx index e4477822ca92f..b774d203f9215 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/utils/get_license_check_result.tsx +++ b/packages/kbn-alerts-ui-shared/src/check_action_type_enabled/get_license_check_result.tsx @@ -13,7 +13,7 @@ import { i18n } from '@kbn/i18n'; import { EuiCard, EuiLink } from '@elastic/eui'; import { ActionType } from '@kbn/actions-types'; import { FormattedMessage } from '@kbn/i18n-react'; -import { VIEW_LICENSE_OPTIONS_LINK } from '../../common/constants'; +import { VIEW_LICENSE_OPTIONS_LINK } from '../common/constants'; export const getLicenseCheckResult = (actionType: ActionType) => { return { diff --git a/packages/kbn-alerts-ui-shared/src/check_action_type_enabled/index.ts b/packages/kbn-alerts-ui-shared/src/check_action_type_enabled/index.ts new file mode 100644 index 0000000000000..509a53df7a586 --- /dev/null +++ b/packages/kbn-alerts-ui-shared/src/check_action_type_enabled/index.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", 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 * from './check_action_type_enabled'; diff --git a/packages/kbn-alerts-ui-shared/src/common/apis/index.ts b/packages/kbn-alerts-ui-shared/src/common/apis/index.ts index 36a68df832c36..16ecd225a01c8 100644 --- a/packages/kbn-alerts-ui-shared/src/common/apis/index.ts +++ b/packages/kbn-alerts-ui-shared/src/common/apis/index.ts @@ -7,13 +7,10 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -export * from './create_rule'; export * from './fetch_alerting_framework_health'; export * from './fetch_alerts_fields'; -export * from './fetch_connector_types'; +export * from './fetch_alerts_index_names'; export * from './fetch_connectors'; +export * from './fetch_connector_types'; export * from './fetch_rule_type_aad_template_fields'; -export * from './fetch_ui_config'; export * from './fetch_ui_health_status'; -export * from './resolve_rule'; -export * from './update_rule'; diff --git a/packages/kbn-alerts-ui-shared/src/common/constants/index.ts b/packages/kbn-alerts-ui-shared/src/common/constants/index.ts index 5213094216c6b..991e151da1957 100644 --- a/packages/kbn-alerts-ui-shared/src/common/constants/index.ts +++ b/packages/kbn-alerts-ui-shared/src/common/constants/index.ts @@ -12,3 +12,5 @@ export * from './i18n_weekdays'; export * from './routes'; export const VIEW_LICENSE_OPTIONS_LINK = 'https://www.elastic.co/subscriptions'; + +export const ALERTING_FEATURE_ID = 'alerts'; diff --git a/packages/kbn-alerts-ui-shared/src/common/hooks/index.ts b/packages/kbn-alerts-ui-shared/src/common/hooks/index.ts index 8abf5482682f5..88cc7a4666d1f 100644 --- a/packages/kbn-alerts-ui-shared/src/common/hooks/index.ts +++ b/packages/kbn-alerts-ui-shared/src/common/hooks/index.ts @@ -8,16 +8,8 @@ */ export * from './use_alerts_data_view'; -export * from './use_create_rule'; -export * from './use_update_rule'; -export * from './use_resolve_rule'; -export * from './use_load_connectors'; -export * from './use_load_connector_types'; export * from './use_get_alerts_group_aggregations_query'; export * from './use_health_check'; export * from './use_load_alerting_framework_health'; export * from './use_load_rule_types_query'; -export * from './use_load_ui_config'; export * from './use_load_ui_health'; -export * from './use_resolve_rule'; -export * from './use_update_rule'; diff --git a/packages/kbn-alerts-ui-shared/src/common/hooks/use_fetch_alerts_fields_query.ts b/packages/kbn-alerts-ui-shared/src/common/hooks/use_fetch_alerts_fields_query.ts index 5099587904f4c..9b4c56e955d46 100644 --- a/packages/kbn-alerts-ui-shared/src/common/hooks/use_fetch_alerts_fields_query.ts +++ b/packages/kbn-alerts-ui-shared/src/common/hooks/use_fetch_alerts_fields_query.ts @@ -14,7 +14,9 @@ import { fetchAlertsFields, FetchAlertsFieldsParams } from '../apis/fetch_alerts export type UseFetchAlertsFieldsQueryParams = FetchAlertsFieldsParams; -export const queryKeyPrefix = ['alerts', fetchAlertsFields.name]; +// Query key prefix MUST contain explicit strings, not fetchAlertsFields.name +// Production builds cannot guarantee a unique function name +export const queryKeyPrefix = ['alerts', 'fetchAlertsFields']; /** * Fetch alerts indexes browser fields for the given feature ids diff --git a/packages/kbn-alerts-ui-shared/src/common/hooks/use_fetch_alerts_index_names_query.ts b/packages/kbn-alerts-ui-shared/src/common/hooks/use_fetch_alerts_index_names_query.ts index 80e53e961f4e3..26a15f8e450ef 100644 --- a/packages/kbn-alerts-ui-shared/src/common/hooks/use_fetch_alerts_index_names_query.ts +++ b/packages/kbn-alerts-ui-shared/src/common/hooks/use_fetch_alerts_index_names_query.ts @@ -16,7 +16,9 @@ import type { QueryOptionsOverrides } from '../types/tanstack_query_utility_type export type UseFetchAlertsIndexNamesQueryParams = FetchAlertsIndexNamesParams; -export const queryKeyPrefix = ['alerts', fetchAlertsIndexNames.name]; +// Query key prefix MUST contain explicit strings, not fetchAlertsIndexNames.name +// Production builds cannot guarantee a unique function name +export const queryKeyPrefix = ['alerts', 'fetchAlertsIndexNames']; /** * Fetch alerts index names feature ids diff --git a/packages/kbn-alerts-ui-shared/src/common/hooks/use_fetch_flapping_settings.ts b/packages/kbn-alerts-ui-shared/src/common/hooks/use_fetch_flapping_settings.ts index 6b72c2fea734b..da1c441892988 100644 --- a/packages/kbn-alerts-ui-shared/src/common/hooks/use_fetch_flapping_settings.ts +++ b/packages/kbn-alerts-ui-shared/src/common/hooks/use_fetch_flapping_settings.ts @@ -8,7 +8,7 @@ */ import { useQuery } from '@tanstack/react-query'; -import { HttpStart } from '@kbn/core-http-browser'; +import type { HttpStart } from '@kbn/core-http-browser'; import { RulesSettingsFlapping } from '@kbn/alerting-types/rule_settings'; import { fetchFlappingSettings } from '../apis/fetch_flapping_settings'; diff --git a/packages/kbn-alerts-ui-shared/src/common/hooks/use_load_rule_types_query.ts b/packages/kbn-alerts-ui-shared/src/common/hooks/use_load_rule_types_query.ts index ecbdab2a585bc..7cd838d0d24cb 100644 --- a/packages/kbn-alerts-ui-shared/src/common/hooks/use_load_rule_types_query.ts +++ b/packages/kbn-alerts-ui-shared/src/common/hooks/use_load_rule_types_query.ts @@ -7,16 +7,19 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { keyBy } from 'lodash'; -import { i18n } from '@kbn/i18n'; -import { useMemo } from 'react'; -import { useQuery } from '@tanstack/react-query'; import type { HttpStart } from '@kbn/core-http-browser'; import type { ToastsStart } from '@kbn/core-notifications-browser'; +import { i18n } from '@kbn/i18n'; import type { RuleType } from '@kbn/triggers-actions-ui-types'; -import { ALERTS_FEATURE_ID } from '../constants'; +import { + RuleTypeIndexWithDescriptions, + RuleTypeWithDescription, +} from '@kbn/triggers-actions-ui-types'; +import { useQuery } from '@tanstack/react-query'; +import { keyBy } from 'lodash'; +import { useMemo } from 'react'; import { fetchRuleTypes } from '../apis/fetch_rule_types'; -import { RuleTypeIndexWithDescriptions, RuleTypeWithDescription } from '../types'; +import { ALERTS_FEATURE_ID } from '../constants'; export interface UseRuleTypesProps { http: HttpStart; diff --git a/packages/kbn-alerts-ui-shared/src/common/transformations/index.ts b/packages/kbn-alerts-ui-shared/src/common/transformations/index.ts index 4350bb38e1ef8..2d50470efdb45 100644 --- a/packages/kbn-alerts-ui-shared/src/common/transformations/index.ts +++ b/packages/kbn-alerts-ui-shared/src/common/transformations/index.ts @@ -8,4 +8,3 @@ */ export * from './transform_action'; -export * from './transform_rule'; diff --git a/packages/kbn-alerts-ui-shared/src/rule_settings/index.ts b/packages/kbn-alerts-ui-shared/src/rule_settings/index.ts new file mode 100644 index 0000000000000..a80abf808a1d1 --- /dev/null +++ b/packages/kbn-alerts-ui-shared/src/rule_settings/index.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", 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 * from './rule_settings_flapping_form'; +export * from './rule_settings_flapping_inputs'; +export * from './rule_settings_flapping_message'; +export * from './rule_settings_flapping_title_tooltip'; +export * from './rule_settings_range_input'; diff --git a/packages/kbn-alerts-ui-shared/tsconfig.json b/packages/kbn-alerts-ui-shared/tsconfig.json index 317f80dd209f3..07a52c9d9c1b9 100644 --- a/packages/kbn-alerts-ui-shared/tsconfig.json +++ b/packages/kbn-alerts-ui-shared/tsconfig.json @@ -2,19 +2,10 @@ "extends": "../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", - "types": [ - "jest", - "node", - "react" - ] + "types": ["jest", "node", "react"] }, - "include": [ - "**/*.ts", - "**/*.tsx" - ], - "exclude": [ - "target/**/*" - ], + "include": ["**/*.ts", "**/*.tsx"], + "exclude": ["target/**/*"], "kbn_references": [ "@kbn/i18n", "@kbn/rule-data-utils", @@ -40,16 +31,9 @@ "@kbn/search-types", "@kbn/utility-types", "@kbn/safer-lodash-set", - "@kbn/core-application-browser", - "@kbn/react-kibana-mount", - "@kbn/core-i18n-browser", - "@kbn/core-theme-browser", "@kbn/alerts-as-data-utils", - "@kbn/test-jest-helpers", - "@kbn/core-ui-settings-browser", "@kbn/core-http-browser-mocks", "@kbn/core-notifications-browser-mocks", - "@kbn/kibana-react-plugin", "@kbn/shared-ux-table-persist" ] } diff --git a/packages/kbn-calculate-width-from-char-count/src/calculate_width_from_entries.test.ts b/packages/kbn-calculate-width-from-char-count/src/calculate_width_from_entries.test.ts index 9924ea7b84a14..89abd5d8ce667 100644 --- a/packages/kbn-calculate-width-from-char-count/src/calculate_width_from_entries.test.ts +++ b/packages/kbn-calculate-width-from-char-count/src/calculate_width_from_entries.test.ts @@ -9,24 +9,22 @@ import { calculateWidthFromEntries } from './calculate_width_from_entries'; import { MAX_WIDTH } from './calculate_width_from_char_count'; -import faker from 'faker'; - -const generateLabel = (length: number) => faker.random.alpha({ count: length }); +import { faker } from '@faker-js/faker'; const generateObjectWithLabelOfLength = (length: number, propOverrides?: Record) => ({ - label: generateLabel(length), + label: faker.string.alpha(length), ...propOverrides, }); describe('calculateWidthFromEntries', () => { it('calculates width for array of strings', () => { - const shortLabels = [10, 20].map(generateLabel); + const shortLabels = [10, 20].map(faker.string.alpha); expect(calculateWidthFromEntries(shortLabels)).toBe(256); - const mediumLabels = [50, 55, 10, 20].map(generateLabel); + const mediumLabels = [50, 55, 10, 20].map(faker.string.alpha); expect(calculateWidthFromEntries(mediumLabels)).toBe(501); - const longLabels = [80, 90, 10].map(generateLabel); + const longLabels = [80, 90, 10].map(faker.string.alpha); expect(calculateWidthFromEntries(longLabels)).toBe(MAX_WIDTH); }); @@ -42,12 +40,12 @@ describe('calculateWidthFromEntries', () => { }); it('calculates width for array of objects for fallback keys', () => { const shortLabels = [10, 20].map((v) => - generateObjectWithLabelOfLength(v, { label: undefined, name: generateLabel(v) }) + generateObjectWithLabelOfLength(v, { label: undefined, name: faker.string.alpha(v) }) ); expect(calculateWidthFromEntries(shortLabels, ['id', 'label', 'name'])).toBe(256); const mediumLabels = [50, 55, 10, 20].map((v) => - generateObjectWithLabelOfLength(v, { label: undefined, name: generateLabel(v) }) + generateObjectWithLabelOfLength(v, { label: undefined, name: faker.string.alpha(v) }) ); expect(calculateWidthFromEntries(mediumLabels, ['id', 'label', 'name'])).toBe(501); }); diff --git a/packages/kbn-cell-actions/src/context/cell_actions_context.test.tsx b/packages/kbn-cell-actions/src/context/cell_actions_context.test.tsx index 81a3802407563..d3bb117d2c8a1 100644 --- a/packages/kbn-cell-actions/src/context/cell_actions_context.test.tsx +++ b/packages/kbn-cell-actions/src/context/cell_actions_context.test.tsx @@ -7,7 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import React, { type PropsWithChildren } from 'react'; import { makeAction, makeActionContext } from '../mocks/helpers'; import { CellActionsProvider, useCellActionsContext } from './cell_actions_context'; @@ -29,9 +29,8 @@ describe('CellActionContext', () => { }); it('should throw error when context not found', () => { - const { result } = renderHook(useCellActionsContext); - expect(result.error).toEqual( - new Error('No CellActionsContext found. Please wrap the application with CellActionsProvider') + expect(() => renderHook(useCellActionsContext)).toThrow( + /No CellActionsContext found. Please wrap the application with CellActionsProvider/ ); }); diff --git a/packages/kbn-cell-actions/src/hooks/use_data_grid_column_cell_actions.test.tsx b/packages/kbn-cell-actions/src/hooks/use_data_grid_column_cell_actions.test.tsx index 2d6417cd73bd3..b55587ad887d0 100644 --- a/packages/kbn-cell-actions/src/hooks/use_data_grid_column_cell_actions.test.tsx +++ b/packages/kbn-cell-actions/src/hooks/use_data_grid_column_cell_actions.test.tsx @@ -11,8 +11,7 @@ import type { JSXElementConstructor, MutableRefObject } from 'react'; import React from 'react'; import type { EuiDataGridColumnCellActionProps, EuiDataGridRefProps } from '@elastic/eui'; import { EuiButtonEmpty, type EuiDataGridColumnCellAction } from '@elastic/eui'; -import { render, waitFor } from '@testing-library/react'; -import { renderHook } from '@testing-library/react-hooks'; +import { render, waitFor, renderHook } from '@testing-library/react'; import { makeAction } from '../mocks/helpers'; import type { UseDataGridColumnsCellActionsProps } from './use_data_grid_column_cell_actions'; import { useDataGridColumnsCellActions } from './use_data_grid_column_cell_actions'; @@ -72,75 +71,88 @@ describe('useDataGridColumnsCellActions', () => { }); it('should return array with actions for each columns', async () => { - const { result, waitForNextUpdate } = renderHook(useDataGridColumnsCellActions, { + const { result } = renderHook(useDataGridColumnsCellActions, { initialProps: useDataGridColumnsCellActionsProps, }); expect(result.current).toHaveLength(0); - await waitForNextUpdate(); - - expect(result.current).toHaveLength(columns.length); - expect(result.current[0]).toHaveLength(actions.length); + await waitFor(() => { + expect(result.current).toHaveLength(columns.length); + expect(result.current[0]).toHaveLength(actions.length); + }); }); it('should call getCellValue with the proper params', async () => { - const { result, waitForNextUpdate } = renderHook(useDataGridColumnsCellActions, { + const { result } = renderHook(useDataGridColumnsCellActions, { initialProps: useDataGridColumnsCellActionsProps, }); - await waitForNextUpdate(); + await waitFor(() => { + expect(result.current).toHaveLength(columns.length); + }); renderCellAction(result.current[0][0], { rowIndex: 0 }); renderCellAction(result.current[0][1], { rowIndex: 1 }); renderCellAction(result.current[1][0], { rowIndex: 0 }); renderCellAction(result.current[1][1], { rowIndex: 1 }); - expect(mockGetCellValue).toHaveBeenCalledTimes(4); - expect(mockGetCellValue).toHaveBeenCalledWith(field1.name, 0); - expect(mockGetCellValue).toHaveBeenCalledWith(field1.name, 1); - expect(mockGetCellValue).toHaveBeenCalledWith(field2.name, 0); - expect(mockGetCellValue).toHaveBeenCalledWith(field2.name, 1); + await waitFor(() => { + expect(mockGetCellValue).toHaveBeenCalledTimes(4); + expect(mockGetCellValue).toHaveBeenCalledWith(field1.name, 0); + expect(mockGetCellValue).toHaveBeenCalledWith(field1.name, 1); + expect(mockGetCellValue).toHaveBeenCalledWith(field2.name, 0); + expect(mockGetCellValue).toHaveBeenCalledWith(field2.name, 1); + }); }); it('should render the cell actions', async () => { - const { result, waitForNextUpdate } = renderHook(useDataGridColumnsCellActions, { + const { result } = renderHook(useDataGridColumnsCellActions, { initialProps: useDataGridColumnsCellActionsProps, }); - await waitForNextUpdate(); + await waitFor(() => { + expect(result.current).toHaveLength(columns.length); + }); const cellAction1 = renderCellAction(result.current[0][0]); - expect(cellAction1.getByTestId(`dataGridColumnCellAction-${action1.id}`)).toBeInTheDocument(); - expect(cellAction1.getByText(action1.getDisplayName())).toBeInTheDocument(); + await waitFor(() => { + expect(cellAction1.getByTestId(`dataGridColumnCellAction-${action1.id}`)).toBeInTheDocument(); + expect(cellAction1.getByText(action1.getDisplayName())).toBeInTheDocument(); + }); const cellAction2 = renderCellAction(result.current[0][1]); - expect(cellAction2.getByTestId(`dataGridColumnCellAction-${action2.id}`)).toBeInTheDocument(); - expect(cellAction2.getByText(action2.getDisplayName())).toBeInTheDocument(); + await waitFor(() => { + expect(cellAction2.getByTestId(`dataGridColumnCellAction-${action2.id}`)).toBeInTheDocument(); + expect(cellAction2.getByText(action2.getDisplayName())).toBeInTheDocument(); + }); }); it('should execute the action on click', async () => { - const { result, waitForNextUpdate } = renderHook(useDataGridColumnsCellActions, { + const { result } = renderHook(useDataGridColumnsCellActions, { initialProps: useDataGridColumnsCellActionsProps, }); - await waitForNextUpdate(); - - const cellAction = renderCellAction(result.current[0][0]); - cellAction.getByTestId(`dataGridColumnCellAction-${action1.id}`).click(); + await waitFor(() => { + const cellAction = renderCellAction(result.current[0][0]); + cellAction.getByTestId(`dataGridColumnCellAction-${action1.id}`).click(); + }); - waitFor(() => { + await waitFor(() => { expect(action1.execute).toHaveBeenCalled(); }); }); it('should execute the action with correct context', async () => { - const { result, waitForNextUpdate } = renderHook(useDataGridColumnsCellActions, { + const { result } = renderHook(useDataGridColumnsCellActions, { initialProps: useDataGridColumnsCellActionsProps, }); - await waitForNextUpdate(); + + await waitFor(() => { + expect(result.current).toHaveLength(columns.length); + }); const cellAction1 = renderCellAction(result.current[0][0], { rowIndex: 1 }); @@ -194,18 +206,19 @@ describe('useDataGridColumnsCellActions', () => { }); it('should execute the action with correct page value', async () => { - const { result, waitForNextUpdate } = renderHook(useDataGridColumnsCellActions, { + const { result } = renderHook(useDataGridColumnsCellActions, { initialProps: useDataGridColumnsCellActionsProps, }); - await waitForNextUpdate(); - const cellAction = renderCellAction(result.current[0][0], { rowIndex: 25 }); + await waitFor(() => { + expect(result.current).toHaveLength(columns.length); + }); + const cellAction = renderCellAction(result.current[0][0], { rowIndex: 25 }); cellAction.getByTestId(`dataGridColumnCellAction-${action1.id}`).click(); - expect(mockGetCellValue).toHaveBeenCalledWith(field1.name, 25); - await waitFor(() => { + expect(mockGetCellValue).toHaveBeenCalledWith(field1.name, 25); expect(action1.execute).toHaveBeenCalledWith( expect.objectContaining({ data: [ @@ -225,13 +238,15 @@ describe('useDataGridColumnsCellActions', () => { }); it('should close popover then action executed', async () => { - const { result, waitForNextUpdate } = renderHook(useDataGridColumnsCellActions, { + const { result } = renderHook(useDataGridColumnsCellActions, { initialProps: useDataGridColumnsCellActionsProps, }); - await waitForNextUpdate(); - const cellAction = renderCellAction(result.current[0][0], { rowIndex: 25 }); + await waitFor(() => { + expect(result.current).toHaveLength(columns.length); + }); + const cellAction = renderCellAction(result.current[0][0], { rowIndex: 25 }); cellAction.getByTestId(`dataGridColumnCellAction-${action1.id}`).click(); await waitFor(() => { @@ -240,30 +255,30 @@ describe('useDataGridColumnsCellActions', () => { }); it('should return empty array of actions when list of fields is empty', async () => { - const { result, waitForNextUpdate } = renderHook(useDataGridColumnsCellActions, { + const { result } = renderHook(useDataGridColumnsCellActions, { initialProps: { ...useDataGridColumnsCellActionsProps, fields: [], }, }); - await waitForNextUpdate(); - - expect(result.current).toBeInstanceOf(Array); - expect(result.current.length).toBe(0); + await waitFor(() => { + expect(result.current).toBeInstanceOf(Array); + expect(result.current.length).toBe(0); + }); }); it('should return empty array of actions when list of fields is undefined', async () => { - const { result, waitForNextUpdate } = renderHook(useDataGridColumnsCellActions, { + const { result } = renderHook(useDataGridColumnsCellActions, { initialProps: { ...useDataGridColumnsCellActionsProps, fields: undefined, }, }); - await waitForNextUpdate(); - - expect(result.current).toBeInstanceOf(Array); - expect(result.current.length).toBe(0); + await waitFor(() => { + expect(result.current).toBeInstanceOf(Array); + expect(result.current.length).toBe(0); + }); }); }); diff --git a/packages/kbn-cell-actions/src/hooks/use_load_actions.test.ts b/packages/kbn-cell-actions/src/hooks/use_load_actions.test.tsx similarity index 64% rename from packages/kbn-cell-actions/src/hooks/use_load_actions.test.ts rename to packages/kbn-cell-actions/src/hooks/use_load_actions.test.tsx index b4aeb7795274d..a7690ce822591 100644 --- a/packages/kbn-cell-actions/src/hooks/use_load_actions.test.ts +++ b/packages/kbn-cell-actions/src/hooks/use_load_actions.test.tsx @@ -7,7 +7,8 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { act, renderHook } from '@testing-library/react-hooks'; +import React from 'react'; +import { waitFor, renderHook, act, screen } from '@testing-library/react'; import { makeAction, makeActionContext } from '../mocks/helpers'; import { useBulkLoadActions, useLoadActions, useLoadActionsFn } from './use_load_actions'; @@ -17,6 +18,22 @@ jest.mock('../context/cell_actions_context', () => ({ useCellActionsContext: () => ({ getActions: mockGetActions }), })); +class ErrorCatcher extends React.Component { + state: { error: Error | null } = { error: null }; + + static getDerivedStateFromError(error: Error) { + return { error }; + } + + render() { + return this.state.error ? ( +
    {this.state.error.toString()}
    + ) : ( + this.props.children + ); + } +} + describe('loadActions hooks', () => { const actionContext = makeActionContext(); @@ -26,7 +43,7 @@ describe('loadActions hooks', () => { }); describe('useLoadActions', () => { it('should load actions when called', async () => { - const { result, waitForNextUpdate } = renderHook(useLoadActions, { + const { result } = renderHook(useLoadActions, { initialProps: actionContext, }); @@ -35,22 +52,24 @@ describe('loadActions hooks', () => { expect(mockGetActions).toHaveBeenCalledTimes(1); expect(mockGetActions).toHaveBeenCalledWith(actionContext); - await waitForNextUpdate(); - - expect(result.current.value).toEqual([action]); - expect(result.current.loading).toEqual(false); + await waitFor(() => { + expect(result.current.value).toEqual([action]); + expect(result.current.loading).toEqual(false); + }); }); it('should throw error when getAction is rejected', async () => { const message = 'some division by 0'; mockGetActions.mockRejectedValueOnce(Error(message)); - const { result, waitForNextUpdate } = renderHook(useLoadActions, { + const { result } = renderHook(useLoadActions, { initialProps: actionContext, + wrapper: ErrorCatcher, // Error prints any received error to the screen }); - await waitForNextUpdate(); - expect(result.error?.message).toEqual(message); + expect(result.current.loading).toEqual(true); + + await waitFor(() => expect(screen.getByTestId('leaf-error')).toBeInTheDocument()); }); it('filters out disabled actions', async () => { @@ -58,19 +77,17 @@ describe('loadActions hooks', () => { const actionDisabled = makeAction('action-disabled'); mockGetActions.mockResolvedValue([actionEnabled, actionDisabled]); - const { result, waitForNextUpdate } = renderHook(() => + const { result } = renderHook(() => useLoadActions(actionContext, { disabledActionTypes: [actionDisabled.type] }) ); - await waitForNextUpdate(); - - expect(result.current.value).toEqual([actionEnabled]); + await waitFor(() => expect(result.current.value).toEqual([actionEnabled])); }); }); describe('useLoadActionsFn', () => { it('should load actions when returned function is called', async () => { - const { result, waitForNextUpdate } = renderHook(useLoadActionsFn); + const { result } = renderHook(useLoadActionsFn); const [{ value: valueBeforeCall, loading: loadingBeforeCall }, loadActions] = result.current; expect(valueBeforeCall).toBeUndefined(); @@ -87,28 +104,27 @@ describe('loadActions hooks', () => { expect(mockGetActions).toHaveBeenCalledTimes(1); expect(mockGetActions).toHaveBeenCalledWith(actionContext); - await waitForNextUpdate(); - - const [{ value: valueAfterUpdate, loading: loadingAfterUpdate }] = result.current; - expect(valueAfterUpdate).toEqual([action]); - expect(loadingAfterUpdate).toEqual(false); + await waitFor(() => { + const [{ value: valueAfterUpdate, loading: loadingAfterUpdate }] = result.current; + expect(valueAfterUpdate).toEqual([action]); + expect(loadingAfterUpdate).toEqual(false); + }); }); it('should throw error when getAction is rejected', async () => { const message = 'some division by 0'; - mockGetActions.mockRejectedValueOnce(Error(message)); + mockGetActions.mockRejectedValueOnce(new Error(message)); - const { result, waitForNextUpdate } = renderHook(useLoadActionsFn); + const { result } = renderHook(useLoadActionsFn, { + wrapper: ErrorCatcher, // Error prints any received error to the screen + }); const [_, loadActions] = result.current; - expect(result.error).toBeUndefined(); - act(() => { loadActions(actionContext); }); - await waitForNextUpdate(); - expect(result.error?.message).toEqual(message); + await waitFor(() => expect(screen.getByTestId('leaf-error')).toBeInTheDocument()); }); it('filters out disabled actions types', async () => { @@ -116,7 +132,7 @@ describe('loadActions hooks', () => { const actionDisabled = makeAction('action-disabled'); mockGetActions.mockResolvedValue([actionEnabled, actionDisabled]); - const { result, waitForNextUpdate } = renderHook(() => + const { result } = renderHook(() => useLoadActionsFn({ disabledActionTypes: [actionDisabled.type] }) ); const [_, loadActions] = result.current; @@ -124,10 +140,10 @@ describe('loadActions hooks', () => { act(() => { loadActions(actionContext); }); - await waitForNextUpdate(); - - const [{ value: valueAfterUpdate }] = result.current; - expect(valueAfterUpdate).toEqual([actionEnabled]); + await waitFor(() => { + const [{ value: valueAfterUpdate }] = result.current; + expect(valueAfterUpdate).toEqual([actionEnabled]); + }); }); }); @@ -136,7 +152,7 @@ describe('loadActions hooks', () => { const actionContexts = [actionContext, actionContext2]; it('should load bulk actions array when called', async () => { - const { result, waitForNextUpdate } = renderHook(useBulkLoadActions, { + const { result } = renderHook(useBulkLoadActions, { initialProps: actionContexts, }); @@ -146,22 +162,24 @@ describe('loadActions hooks', () => { expect(mockGetActions).toHaveBeenCalledWith(actionContext); expect(mockGetActions).toHaveBeenCalledWith(actionContext2); - await waitForNextUpdate(); - - expect(result.current.value).toEqual([[action], [action]]); - expect(result.current.loading).toEqual(false); + await waitFor(() => { + expect(result.current.value).toEqual([[action], [action]]); + expect(result.current.loading).toEqual(false); + }); }); it('should throw error when getAction is rejected', async () => { const message = 'some division by 0'; mockGetActions.mockRejectedValueOnce(Error(message)); - const { result, waitForNextUpdate } = renderHook(useBulkLoadActions, { + const { result } = renderHook(useBulkLoadActions, { initialProps: actionContexts, + wrapper: ErrorCatcher, // Error prints any received error to the screen }); - await waitForNextUpdate(); - expect(result.error?.message).toEqual(message); + expect(result.current.loading).toEqual(true); + + await waitFor(() => expect(screen.getByTestId('leaf-error')).toBeInTheDocument()); }); it('filters out disabled actions types', async () => { @@ -169,40 +187,37 @@ describe('loadActions hooks', () => { const actionDisabled = makeAction('action-disabled'); mockGetActions.mockResolvedValue([actionEnabled, actionDisabled]); - const { result, waitForNextUpdate } = renderHook(() => + const { result } = renderHook(() => useBulkLoadActions(actionContexts, { disabledActionTypes: [actionDisabled.type] }) ); - await waitForNextUpdate(); - - expect(result.current.value).toEqual([[actionEnabled], [actionEnabled]]); + await waitFor(() => expect(result.current.value).toEqual([[actionEnabled], [actionEnabled]])); }); it('should re-render when contexts is changed', async () => { - const { result, rerender, waitForNextUpdate } = renderHook(useBulkLoadActions, { + const { result, rerender } = renderHook(useBulkLoadActions, { initialProps: [actionContext], }); - await waitForNextUpdate(); - expect(mockGetActions).toHaveBeenCalledWith(actionContext); + await waitFor(() => expect(mockGetActions).toHaveBeenCalledWith(actionContext)); rerender([actionContext2]); - await waitForNextUpdate(); - expect(mockGetActions).toHaveBeenCalledWith(actionContext2); + await waitFor(() => expect(mockGetActions).toHaveBeenCalledWith(actionContext2)); mockGetActions.mockClear(); rerender([]); - await waitForNextUpdate(); - expect(mockGetActions).toHaveBeenCalledTimes(0); + await waitFor(() => { + expect(mockGetActions).toHaveBeenCalledTimes(0); - expect(result.current.value).toBeInstanceOf(Array); - expect(result.current.value).toHaveLength(0); - expect(result.current.loading).toBe(false); + expect(result.current.value).toBeInstanceOf(Array); + expect(result.current.value).toHaveLength(0); + expect(result.current.loading).toBe(false); + }); }); it('should return the same array after re-render when contexts is undefined', async () => { - const { result, rerender, waitFor } = renderHook(useBulkLoadActions, { + const { result, rerender } = renderHook(useBulkLoadActions, { initialProps: undefined, }); diff --git a/packages/kbn-dom-drag-drop/src/test_utils.tsx b/packages/kbn-dom-drag-drop/src/test_utils.tsx index 033697353a43f..84996956e26c3 100644 --- a/packages/kbn-dom-drag-drop/src/test_utils.tsx +++ b/packages/kbn-dom-drag-drop/src/test_utils.tsx @@ -8,7 +8,7 @@ */ import React, { ReactElement } from 'react'; -import faker from 'faker'; +import { faker } from '@faker-js/faker'; import { RenderOptions, render } from '@testing-library/react'; import { DragContextState, RootDragDropProvider } from './providers'; @@ -22,7 +22,7 @@ export const dataTransfer = { }; export const generateDragDropValue = (label = faker.lorem.word()) => ({ - id: faker.random.uuid(), + id: faker.string.uuid(), humanData: { label, groupLabel: faker.lorem.word(), 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 d8fae0858208d..b7be820f35e4b 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 @@ -140,7 +140,7 @@ editor: run_as: [] t1_analyst: - cluster: + cluster: [] indices: - names: - '.alerts-security*' @@ -191,7 +191,7 @@ t1_analyst: resources: '*' t2_analyst: - cluster: + cluster: [] indices: - names: - .alerts-security* @@ -246,7 +246,7 @@ t2_analyst: resources: '*' t3_analyst: - cluster: + cluster: [] indices: - names: - apm-*-transaction* @@ -316,7 +316,7 @@ t3_analyst: resources: '*' threat_intelligence_analyst: - cluster: + cluster: [] indices: - names: - apm-*-transaction* @@ -378,7 +378,7 @@ threat_intelligence_analyst: resources: '*' rule_author: - cluster: + cluster: [] indices: - names: - apm-*-transaction* @@ -446,7 +446,7 @@ rule_author: resources: '*' soc_manager: - cluster: + cluster: [] indices: - names: - apm-*-transaction* @@ -641,7 +641,7 @@ platform_engineer: resources: '*' endpoint_operations_analyst: - cluster: + cluster: [] indices: - names: - metrics-endpoint.metadata_current_* @@ -713,7 +713,7 @@ endpoint_operations_analyst: resources: '*' endpoint_policy_manager: - cluster: + cluster: [] indices: - names: - metrics-endpoint.metadata_current_* diff --git a/packages/kbn-esql-ast/src/parser/__tests__/join.test.ts b/packages/kbn-esql-ast/src/parser/__tests__/join.test.ts new file mode 100644 index 0000000000000..5784e0c71cb86 --- /dev/null +++ b/packages/kbn-esql-ast/src/parser/__tests__/join.test.ts @@ -0,0 +1,202 @@ +/* + * 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 { EsqlQuery } from '../../query'; +import { Walker } from '../../walker'; + +describe(' JOIN command', () => { + describe('correctly formatted', () => { + it('can parse out JOIN command', () => { + const text = `FROM employees | LOOKUP JOIN languages_lookup ON language_code`; + const query = EsqlQuery.fromSrc(text); + + expect(query.ast.commands[1]).toMatchObject({ + type: 'command', + name: 'join', + commandType: 'lookup', + }); + }); + + it('supports all join types', () => { + const assertJoinType = (type: string) => { + const text = `FROM employees | ${type} JOIN languages_lookup ON language_code`; + const query = EsqlQuery.fromSrc(text); + + expect(query.ast.commands[1]).toMatchObject({ + type: 'command', + name: 'join', + commandType: type.toLowerCase(), + }); + }; + + assertJoinType('LOOKUP'); + assertJoinType('LEFT'); + assertJoinType('RIGHT'); + expect(() => assertJoinType('HASH')).toThrow(); + }); + + it('can parse out target identifier', () => { + const text = `FROM employees | LOOKUP JOIN languages_lookup ON language_code`; + const query = EsqlQuery.fromSrc(text); + + expect(query.ast.commands[1]).toMatchObject({ + commandType: 'lookup', + args: [ + { + type: 'identifier', + name: 'languages_lookup', + }, + {}, + ], + }); + }); + + it('can parse out target with "AS" alias expression', () => { + const text = `FROM employees | LOOKUP JOIN languages_lookup AS ll ON language_code`; + const query = EsqlQuery.fromSrc(text); + + expect(query.ast.commands[1]).toMatchObject({ + commandType: 'lookup', + args: [ + { + type: 'function', + subtype: 'binary-expression', + name: 'as', + args: [ + { + type: 'identifier', + name: 'languages_lookup', + }, + { + type: 'identifier', + name: 'll', + }, + ], + }, + {}, + ], + }); + }); + + it('can parse out a single "ON" predicate expression', () => { + const text = `FROM employees | LOOKUP JOIN languages_lookup AS ll ON language_code`; + const query = EsqlQuery.fromSrc(text); + + expect(query.ast.commands[1]).toMatchObject({ + commandType: 'lookup', + args: [ + {}, + { + type: 'option', + name: 'on', + args: [ + { + type: 'column', + name: 'language_code', + args: [ + { + type: 'identifier', + name: 'language_code', + }, + ], + }, + ], + }, + ], + }); + }); + + it('can parse out multiple "ON" predicate expressions', () => { + const text = `FROM employees | LOOKUP JOIN languages_lookup AS ll ON a, b, c`; + const query = EsqlQuery.fromSrc(text); + + expect(query.ast.commands[1]).toMatchObject({ + name: 'join', + args: [ + {}, + { + type: 'option', + name: 'on', + args: [ + { + type: 'column', + name: 'a', + }, + { + type: 'column', + name: 'b', + }, + { + type: 'column', + name: 'c', + }, + ], + }, + ], + }); + }); + + it('example from documentation', () => { + const text = ` + FROM employees + | EVAL language_code = languages + | LOOKUP JOIN languages_lookup ON language_code + | WHERE emp_no < 500 + | KEEP emp_no, language_name + | SORT emp_no + | LIMIT 10 + `; + const query = EsqlQuery.fromSrc(text); + + expect(query.ast.commands[2]).toMatchObject({ + type: 'command', + name: 'join', + commandType: 'lookup', + args: [ + { + type: 'identifier', + name: 'languages_lookup', + }, + { + type: 'option', + name: 'on', + args: [ + { + type: 'column', + name: 'language_code', + }, + ], + }, + ], + }); + }); + + it('correctly extracts node positions', () => { + const text = `FROM employees | LOOKUP JOIN index AS alias ON on_1, on_2 | LIMIT 1`; + const query = EsqlQuery.fromSrc(text); + const node1 = Walker.match(query.ast, { type: 'identifier', name: 'index' }); + const node2 = Walker.match(query.ast, { type: 'identifier', name: 'alias' }); + const node3 = Walker.match(query.ast, { type: 'column', name: 'on_1' }); + const node4 = Walker.match(query.ast, { type: 'column', name: 'on_2' }); + + expect(query.src.slice(node1?.location.min, node1?.location.max! + 1)).toBe('index'); + expect(query.src.slice(node2?.location.min, node2?.location.max! + 1)).toBe('alias'); + expect(query.src.slice(node3?.location.min, node3?.location.max! + 1)).toBe('on_1'); + expect(query.src.slice(node4?.location.min, node4?.location.max! + 1)).toBe('on_2'); + }); + }); + + describe('incorrectly formatted', () => { + const text = `FROM employees | LOOKUP JOIN index AAS alias ON on_1, on_2 | LIMIT 1`; + const query = EsqlQuery.fromSrc(text); + + expect(query.errors.length > 0).toBe(true); + expect(query.errors[0].message.includes('AAS')).toBe(true); + }); +}); diff --git a/packages/kbn-esql-ast/src/parser/esql_ast_builder_listener.ts b/packages/kbn-esql-ast/src/parser/esql_ast_builder_listener.ts index a3f5bfabed154..e167a55f1b682 100644 --- a/packages/kbn-esql-ast/src/parser/esql_ast_builder_listener.ts +++ b/packages/kbn-esql-ast/src/parser/esql_ast_builder_listener.ts @@ -30,6 +30,7 @@ import { type MetricsCommandContext, IndexPatternContext, InlinestatsCommandContext, + JoinCommandContext, } from '../antlr/esql_parser'; import { default as ESQLParserListener } from '../antlr/esql_parser_listener'; import { @@ -58,6 +59,7 @@ import { getEnrichClauses, } from './walkers'; import type { ESQLAst, ESQLAstMetricsCommand } from '../types'; +import { createJoinCommand } from './factories/join'; export class ESQLAstBuilderListener implements ESQLParserListener { private ast: ESQLAst = []; @@ -304,6 +306,23 @@ export class ESQLAstBuilderListener implements ESQLParserListener { command.args.push(...getPolicyName(ctx), ...getMatchField(ctx), ...getEnrichClauses(ctx)); } + /** + * Exit a parse tree produced by `esql_parser.joinCommand`. + * + * Parse the JOIN command: + * + * ``` + * JOIN identifier [ AS identifier ] ON expression [, expression [, ... ]] + * ``` + * + * @param ctx the parse tree + */ + exitJoinCommand(ctx: JoinCommandContext): void { + const command = createJoinCommand(ctx); + + this.ast.push(command); + } + enterEveryRule(ctx: ParserRuleContext): void { // method not implemented, added to satisfy interface expectation } diff --git a/packages/kbn-esql-ast/src/parser/factories/join.ts b/packages/kbn-esql-ast/src/parser/factories/join.ts new file mode 100644 index 0000000000000..400313aa39045 --- /dev/null +++ b/packages/kbn-esql-ast/src/parser/factories/join.ts @@ -0,0 +1,57 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", 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 { JoinCommandContext, JoinTargetContext } from '../../antlr/esql_parser'; +import { Builder } from '../../builder'; +import { ESQLAstItem, ESQLBinaryExpression, ESQLCommand, ESQLIdentifier } from '../../types'; +import { createCommand, createIdentifier } from '../factories'; +import { visitValueExpression } from '../walkers'; + +const createNodeFromJoinTarget = ( + ctx: JoinTargetContext +): ESQLIdentifier | ESQLBinaryExpression => { + const index = createIdentifier(ctx._index); + const aliasCtx = ctx._alias; + + if (!aliasCtx) { + return index; + } + + const alias = createIdentifier(aliasCtx); + const renameExpression = Builder.expression.func.binary('as', [ + index, + alias, + ]) as ESQLBinaryExpression; + + return renameExpression; +}; + +export const createJoinCommand = (ctx: JoinCommandContext): ESQLCommand => { + const command = createCommand('join', ctx); + + // Pick-up the of the command. + command.commandType = (ctx._type_.text ?? '').toLocaleLowerCase(); + + const joinTarget = createNodeFromJoinTarget(ctx.joinTarget()); + const onOption = Builder.option({ name: 'on' }); + const joinPredicates: ESQLAstItem[] = onOption.args; + + for (const joinPredicateCtx of ctx.joinCondition().joinPredicate_list()) { + const expression = visitValueExpression(joinPredicateCtx.valueExpression()); + + if (expression) { + joinPredicates.push(expression); + } + } + + command.args.push(joinTarget); + command.args.push(onOption); + + return command; +}; diff --git a/packages/kbn-esql-ast/src/parser/walkers.ts b/packages/kbn-esql-ast/src/parser/walkers.ts index 60d69a17bb1c7..60dfafa6e3c89 100644 --- a/packages/kbn-esql-ast/src/parser/walkers.ts +++ b/packages/kbn-esql-ast/src/parser/walkers.ts @@ -267,7 +267,7 @@ function getComparisonName(ctx: ComparisonOperatorContext) { return (ctx.EQ() || ctx.NEQ() || ctx.LT() || ctx.LTE() || ctx.GT() || ctx.GTE()).getText() || ''; } -function visitValueExpression(ctx: ValueExpressionContext) { +export function visitValueExpression(ctx: ValueExpressionContext) { if (!textExistsAndIsValid(ctx.getText())) { return []; } diff --git a/packages/kbn-esql-ast/src/query/query.ts b/packages/kbn-esql-ast/src/query/query.ts index 66c9fd58df085..638cc4fc17f32 100644 --- a/packages/kbn-esql-ast/src/query/query.ts +++ b/packages/kbn-esql-ast/src/query/query.ts @@ -9,7 +9,7 @@ import type { Token } from 'antlr4'; import { ParseOptions, parse } from '../parser'; -import type { ESQLAstQueryExpression } from '../types'; +import type { ESQLAstQueryExpression, EditorError } from '../types'; import { WrappingPrettyPrinter, WrappingPrettyPrinterOptions, @@ -21,8 +21,9 @@ import { */ export class EsqlQuery { public static readonly fromSrc = (src: string, opts?: ParseOptions): EsqlQuery => { - const { root, tokens } = parse(src, opts); - return new EsqlQuery(root, src, tokens); + const { root, tokens, errors } = parse(src, opts); + + return new EsqlQuery(root, src, tokens, errors); }; constructor( @@ -43,7 +44,12 @@ export class EsqlQuery { * Optional array of ANTLR tokens, in case the query was parsed from a * source code. */ - public readonly tokens: Token[] = [] + public readonly tokens: Token[] = [], + + /** + * Parsing errors. + */ + public readonly errors: EditorError[] = [] ) {} public print(opts?: WrappingPrettyPrinterOptions): string { diff --git a/packages/kbn-esql-ast/src/types.ts b/packages/kbn-esql-ast/src/types.ts index 2a8513fc2ced1..60da69b04989a 100644 --- a/packages/kbn-esql-ast/src/types.ts +++ b/packages/kbn-esql-ast/src/types.ts @@ -76,6 +76,13 @@ export interface ESQLAstNodeFormatting { export interface ESQLCommand extends ESQLAstBaseItem { type: 'command'; + + /** + * The subtype of the command. For example, the `JOIN` command can be: (1) + * LOOKUP JOIN, (2) LEFT JOIN, (3) RIGHT JOIN. + */ + commandType?: string; + args: ESQLAstItem[]; } diff --git a/packages/kbn-esql-editor/src/editor_footer/index.tsx b/packages/kbn-esql-editor/src/editor_footer/index.tsx index 4e60e65f19ca4..e6973e39657d9 100644 --- a/packages/kbn-esql-editor/src/editor_footer/index.tsx +++ b/packages/kbn-esql-editor/src/editor_footer/index.tsx @@ -297,7 +297,13 @@ export const EditorFooter = memo(function EditorFooter({ /> )} - + diff --git a/packages/kbn-esql-editor/src/esql_editor.tsx b/packages/kbn-esql-editor/src/esql_editor.tsx index 767bc9026348c..eb3da01abd505 100644 --- a/packages/kbn-esql-editor/src/esql_editor.tsx +++ b/packages/kbn-esql-editor/src/esql_editor.tsx @@ -585,7 +585,7 @@ export const ESQLEditor = memo(function ESQLEditor({ lightbulb: { enabled: false, }, - lineDecorationsWidth: 12, + lineDecorationsWidth: 20, lineNumbers: 'on', lineNumbersMinChars: 3, minimap: { enabled: false }, @@ -601,7 +601,9 @@ export const ESQLEditor = memo(function ESQLEditor({ renderLineHighlightOnlyWhenFocus: true, scrollbar: { horizontal: 'hidden', + horizontalScrollbarSize: 6, vertical: 'auto', + verticalScrollbarSize: 6, }, scrollBeyondLastLine: false, theme: darkMode ? ESQL_DARK_THEME_ID : ESQL_LIGHT_THEME_ID, diff --git a/packages/kbn-esql-editor/src/overwrite.scss b/packages/kbn-esql-editor/src/overwrite.scss index 0f675c02cd768..9e716b55f3e2b 100644 --- a/packages/kbn-esql-editor/src/overwrite.scss +++ b/packages/kbn-esql-editor/src/overwrite.scss @@ -29,15 +29,11 @@ @include euiTextBreakWord; } -// All scrollable containers (e.g. main container and suggest menu) -.ESQLEditor .monaco-editor .monaco-scrollable-element { - margin-left: $euiSizeS; +// Space between the autocomplete menu and expanded suggestion details +.ESQLEditor .monaco-editor .suggest-details { + padding-left: $euiSizeS; } -.ESQLEditor .monaco-editor .monaco-list .monaco-scrollable-element { - margin-left: 0; - - .monaco-list-row.focused { - border-radius: $euiBorderRadius; - } +.ESQLEditor .monaco-editor .monaco-list .monaco-scrollable-element .monaco-list-row.focused { + border-radius: $euiBorderRadius; } \ No newline at end of file diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/validation.ts b/packages/kbn-esql-validation-autocomplete/src/validation/validation.ts index b3076d107f850..ae8ab41da157e 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/validation.ts +++ b/packages/kbn-esql-validation-autocomplete/src/validation/validation.ts @@ -1117,7 +1117,11 @@ function validateCommand( // do not check the command exists, the grammar is already picking that up const commandDef = getCommandDefinition(command.name); - if (commandDef?.validate) { + if (!commandDef) { + return messages; + } + + if (commandDef.validate) { messages.push(...commandDef.validate(command)); } diff --git a/packages/kbn-gen-ai-functional-testing/.gitignore b/packages/kbn-gen-ai-functional-testing/.gitignore new file mode 100644 index 0000000000000..fea551a7bacc7 --- /dev/null +++ b/packages/kbn-gen-ai-functional-testing/.gitignore @@ -0,0 +1,2 @@ +## local version of the connector config +connector_config.json diff --git a/packages/kbn-gen-ai-functional-testing/README.md b/packages/kbn-gen-ai-functional-testing/README.md new file mode 100644 index 0000000000000..df33821142e1d --- /dev/null +++ b/packages/kbn-gen-ai-functional-testing/README.md @@ -0,0 +1,49 @@ +# @kbn/gen-ai-functional-testing + +Package exposing various utilities for GenAI/LLM related functional testing. + +## Features + +### LLM connectors + +Utilizing LLM connectors on FTR tests can be done via the `getPreconfiguredConnectorConfig` and `getAvailableConnectors` tools. + +`getPreconfiguredConnectorConfig` should be used to define the list of connectors when creating the FTR test's configuration. + +```ts +import { getPreconfiguredConnectorConfig } from '@kbn/gen-ai-functional-testing' + +export default async function ({ readConfigFile }: FtrConfigProviderContext) { + const xpackFunctionalConfig = {...}; + const preconfiguredConnectors = getPreconfiguredConnectorConfig(); + + return { + ...xpackFunctionalConfig.getAll(), + kbnTestServer: { + ...xpackFunctionalConfig.get('kbnTestServer'), + serverArgs: [ + ...xpackFunctionalConfig.get('kbnTestServer.serverArgs'), + `--xpack.actions.preconfigured=${JSON.stringify(preconfiguredConnectors)}`, + ], + }, + }; +} +``` + +then the `getAvailableConnectors` can be used during the test suite to retrieve the list of LLM connectors. + +For example to run some predefined test suite against all exposed LLM connectors: + +```ts +import { getAvailableConnectors } from '@kbn/gen-ai-functional-testing'; + +export default function (providerContext: FtrProviderContext) { + describe('Some GenAI FTR test suite', async () => { + getAvailableConnectors().forEach((connector) => { + describe(`Using connector ${connector.id}`, () => { + myTestSuite(connector, providerContext); + }); + }); + }); +} +``` diff --git a/packages/kbn-gen-ai-functional-testing/index.ts b/packages/kbn-gen-ai-functional-testing/index.ts new file mode 100644 index 0000000000000..b0fc5fe6ab3ba --- /dev/null +++ b/packages/kbn-gen-ai-functional-testing/index.ts @@ -0,0 +1,16 @@ +/* + * 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 { + AI_CONNECTORS_VAR_ENV, + getPreconfiguredConnectorConfig, + getAvailableConnectors, + type AvailableConnector, + type AvailableConnectorWithId, +} from './src/connectors'; diff --git a/packages/kbn-gen-ai-functional-testing/jest.config.js b/packages/kbn-gen-ai-functional-testing/jest.config.js new file mode 100644 index 0000000000000..624ab023e16a1 --- /dev/null +++ b/packages/kbn-gen-ai-functional-testing/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/jest_node', + rootDir: '../..', + roots: ['/packages/kbn-gen-ai-functional-testing'], +}; diff --git a/packages/kbn-gen-ai-functional-testing/kibana.jsonc b/packages/kbn-gen-ai-functional-testing/kibana.jsonc new file mode 100644 index 0000000000000..dfc83f235de1f --- /dev/null +++ b/packages/kbn-gen-ai-functional-testing/kibana.jsonc @@ -0,0 +1,6 @@ +{ + "type": "shared-common", + "id": "@kbn/gen-ai-functional-testing", + "owner": "@elastic/appex-ai-infra", + "devOnly": true +} diff --git a/packages/kbn-gen-ai-functional-testing/package.json b/packages/kbn-gen-ai-functional-testing/package.json new file mode 100644 index 0000000000000..a687a7c9ec94b --- /dev/null +++ b/packages/kbn-gen-ai-functional-testing/package.json @@ -0,0 +1,6 @@ +{ + "name": "@kbn/gen-ai-functional-testing", + "private": true, + "version": "1.0.0", + "license": "Elastic License 2.0 OR AGPL-3.0-only OR SSPL-1.0" +} \ No newline at end of file diff --git a/packages/kbn-gen-ai-functional-testing/scripts/format_connector_config.js b/packages/kbn-gen-ai-functional-testing/scripts/format_connector_config.js new file mode 100644 index 0000000000000..d8ac404413bbb --- /dev/null +++ b/packages/kbn-gen-ai-functional-testing/scripts/format_connector_config.js @@ -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", 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". + */ + +require('@kbn/babel-register').install(); +require('../src/manage_connector_config').formatCurrentConfig(); diff --git a/packages/kbn-gen-ai-functional-testing/scripts/retrieve_connector_config.js b/packages/kbn-gen-ai-functional-testing/scripts/retrieve_connector_config.js new file mode 100644 index 0000000000000..e9b3c9b196920 --- /dev/null +++ b/packages/kbn-gen-ai-functional-testing/scripts/retrieve_connector_config.js @@ -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", 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". + */ + +require('@kbn/babel-register').install(); +require('../src/manage_connector_config').retrieveFromVault(); diff --git a/packages/kbn-gen-ai-functional-testing/scripts/upload_connector_config.js b/packages/kbn-gen-ai-functional-testing/scripts/upload_connector_config.js new file mode 100644 index 0000000000000..e9cc8d9738c1a --- /dev/null +++ b/packages/kbn-gen-ai-functional-testing/scripts/upload_connector_config.js @@ -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", 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". + */ + +require('@kbn/babel-register').install(); +require('../src/manage_connector_config').uploadToVault(); diff --git a/packages/kbn-gen-ai-functional-testing/src/connectors.ts b/packages/kbn-gen-ai-functional-testing/src/connectors.ts new file mode 100644 index 0000000000000..6bfe3f7030484 --- /dev/null +++ b/packages/kbn-gen-ai-functional-testing/src/connectors.ts @@ -0,0 +1,91 @@ +/* + * 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 { schema } from '@kbn/config-schema'; + +/** + * The environment variable that is used by the CI to load the connectors configuration + */ +export const AI_CONNECTORS_VAR_ENV = 'KIBANA_TESTING_AI_CONNECTORS'; + +const connectorsSchema = schema.recordOf( + schema.string(), + schema.object({ + name: schema.string(), + actionTypeId: schema.string(), + config: schema.recordOf(schema.string(), schema.any()), + secrets: schema.recordOf(schema.string(), schema.any()), + }) +); + +export interface AvailableConnector { + name: string; + actionTypeId: string; + config: Record; + secrets: Record; +} + +export interface AvailableConnectorWithId extends AvailableConnector { + id: string; +} + +const loadConnectors = (): Record => { + const envValue = process.env[AI_CONNECTORS_VAR_ENV]; + if (!envValue) { + return {}; + } + + let connectors: Record; + try { + connectors = JSON.parse(Buffer.from(envValue, 'base64').toString('utf-8')); + } catch (e) { + throw new Error( + `Error trying to parse value from KIBANA_AI_CONNECTORS environment variable: ${e.message}` + ); + } + return connectorsSchema.validate(connectors); +}; + +/** + * Retrieve the list of preconfigured connectors that should be used when defining the + * FTR configuration of suites using the connectors. + * + * @example + * ```ts + * import { getPreconfiguredConnectorConfig } from '@kbn/gen-ai-functional-testing' + * + * export default async function ({ readConfigFile }: FtrConfigProviderContext) { + * const xpackFunctionalConfig = {...}; + * const preconfiguredConnectors = getPreconfiguredConnectorConfig(); + * + * return { + * ...xpackFunctionalConfig.getAll(), + * kbnTestServer: { + * ...xpackFunctionalConfig.get('kbnTestServer'), + * serverArgs: [ + * ...xpackFunctionalConfig.get('kbnTestServer.serverArgs'), + * `--xpack.actions.preconfigured=${JSON.stringify(preconfiguredConnectors)}`, + * ], + * }, + * }; + * } + * ``` + */ +export const getPreconfiguredConnectorConfig = () => { + return loadConnectors(); +}; + +export const getAvailableConnectors = (): AvailableConnectorWithId[] => { + return Object.entries(loadConnectors()).map(([id, connector]) => { + return { + id, + ...connector, + }; + }); +}; diff --git a/packages/kbn-gen-ai-functional-testing/src/manage_connector_config.ts b/packages/kbn-gen-ai-functional-testing/src/manage_connector_config.ts new file mode 100644 index 0000000000000..484ff9d4bc48a --- /dev/null +++ b/packages/kbn-gen-ai-functional-testing/src/manage_connector_config.ts @@ -0,0 +1,59 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", 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 execa from 'execa'; +import Path from 'path'; +import { writeFile, readFile } from 'fs/promises'; +import { REPO_ROOT } from '@kbn/repo-info'; + +const LOCAL_FILE = Path.join( + REPO_ROOT, + 'packages', + 'kbn-gen-ai-functional-testing', + 'connector_config.json' +); + +export const retrieveFromVault = async () => { + const { stdout } = await execa( + 'vault', + ['read', '-field=connectors-config', 'secret/ci/elastic-kibana/ai-infra-ci-connectors'], + { + cwd: REPO_ROOT, + buffer: true, + } + ); + + const config = JSON.parse(Buffer.from(stdout, 'base64').toString('utf-8')); + + await writeFile(LOCAL_FILE, JSON.stringify(config, undefined, 2)); + + // eslint-disable-next-line no-console + console.log(`Config dumped into ${LOCAL_FILE}`); +}; + +export const formatCurrentConfig = async () => { + const config = await readFile(LOCAL_FILE, 'utf-8'); + const asB64 = Buffer.from(config).toString('base64'); + // eslint-disable-next-line no-console + console.log(asB64); +}; + +export const uploadToVault = async () => { + const config = await readFile(LOCAL_FILE, 'utf-8'); + const asB64 = Buffer.from(config).toString('base64'); + + await execa( + 'vault', + ['write', 'secret/ci/elastic-kibana/ai-infra-ci-connectors', `connectors-config=${asB64}`], + { + cwd: REPO_ROOT, + buffer: true, + } + ); +}; diff --git a/packages/kbn-gen-ai-functional-testing/tsconfig.json b/packages/kbn-gen-ai-functional-testing/tsconfig.json new file mode 100644 index 0000000000000..7ad2ded097a42 --- /dev/null +++ b/packages/kbn-gen-ai-functional-testing/tsconfig.json @@ -0,0 +1,20 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": [ + "jest", + "node" + ] + }, + "include": [ + "**/*.ts", + ], + "exclude": [ + "target/**/*" + ], + "kbn_references": [ + "@kbn/config-schema", + "@kbn/repo-info", + ] +} diff --git a/packages/kbn-grid-layout/grid/grid_layout.test.tsx b/packages/kbn-grid-layout/grid/grid_layout.test.tsx new file mode 100644 index 0000000000000..33b1bad784618 --- /dev/null +++ b/packages/kbn-grid-layout/grid/grid_layout.test.tsx @@ -0,0 +1,167 @@ +/* + * 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 React from 'react'; +import { fireEvent, render, screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import { getSampleLayout } from './test_utils/sample_layout'; +import { GridLayout, GridLayoutProps } from './grid_layout'; +import { gridSettings, mockRenderPanelContents } from './test_utils/mocks'; +import { cloneDeep } from 'lodash'; + +describe('GridLayout', () => { + const renderGridLayout = (propsOverrides: Partial = {}) => { + const defaultProps: GridLayoutProps = { + accessMode: 'EDIT', + layout: getSampleLayout(), + gridSettings, + renderPanelContents: mockRenderPanelContents, + onLayoutChange: jest.fn(), + }; + + const { rerender, ...rtlRest } = render(); + + return { + ...rtlRest, + rerender: (overrides: Partial) => + rerender(), + }; + }; + const getAllThePanelIds = () => + screen + .getAllByRole('button', { name: /panelId:panel/i }) + .map((el) => el.getAttribute('aria-label')?.replace(/panelId:/g, '')); + + const startDragging = (handle: HTMLElement, options = { clientX: 0, clientY: 0 }) => { + fireEvent.mouseDown(handle, options); + }; + const moveTo = (options = { clientX: 256, clientY: 128 }) => { + fireEvent.mouseMove(document, options); + }; + const drop = (handle: HTMLElement) => { + fireEvent.mouseUp(handle); + }; + + const assertTabThroughPanel = async (panelId: string) => { + await userEvent.tab(); // tab to drag handle + await userEvent.tab(); // tab to the panel + expect(screen.getByLabelText(`panelId:${panelId}`)).toHaveFocus(); + await userEvent.tab(); // tab to the resize handle + }; + + const expectedInitialOrder = [ + 'panel1', + 'panel5', + 'panel2', + 'panel3', + 'panel7', + 'panel6', + 'panel8', + 'panel4', + 'panel9', + 'panel10', + ]; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it(`'renderPanelContents' is not called during dragging`, () => { + renderGridLayout(); + + expect(mockRenderPanelContents).toHaveBeenCalledTimes(10); // renderPanelContents is called for each of 10 panels + jest.clearAllMocks(); + + const panel1DragHandle = screen.getAllByRole('button', { name: /drag to move/i })[0]; + startDragging(panel1DragHandle); + moveTo({ clientX: 256, clientY: 128 }); + expect(mockRenderPanelContents).toHaveBeenCalledTimes(0); // renderPanelContents should not be called during dragging + + drop(panel1DragHandle); + expect(mockRenderPanelContents).toHaveBeenCalledTimes(0); // renderPanelContents should not be called after reordering + }); + + describe('panels order: panels are rendered from left to right, from top to bottom', () => { + it('focus management - tabbing through the panels', async () => { + renderGridLayout(); + // we only test a few panels because otherwise that test would execute for too long + await assertTabThroughPanel('panel1'); + await assertTabThroughPanel('panel5'); + await assertTabThroughPanel('panel2'); + await assertTabThroughPanel('panel3'); + }); + it('on initializing', () => { + renderGridLayout(); + expect(getAllThePanelIds()).toEqual(expectedInitialOrder); + }); + + it('after reordering some panels', async () => { + renderGridLayout(); + + const panel1DragHandle = screen.getAllByRole('button', { name: /drag to move/i })[0]; + startDragging(panel1DragHandle); + + moveTo({ clientX: 256, clientY: 128 }); + expect(getAllThePanelIds()).toEqual(expectedInitialOrder); // the panels shouldn't be reordered till we drop + + drop(panel1DragHandle); + expect(getAllThePanelIds()).toEqual([ + 'panel2', + 'panel5', + 'panel3', + 'panel7', + 'panel1', + 'panel8', + 'panel6', + 'panel4', + 'panel9', + 'panel10', + ]); + }); + it('after removing a panel', async () => { + const { rerender } = renderGridLayout(); + const sampleLayoutWithoutPanel1 = cloneDeep(getSampleLayout()); + delete sampleLayoutWithoutPanel1[0].panels.panel1; + rerender({ layout: sampleLayoutWithoutPanel1 }); + + expect(getAllThePanelIds()).toEqual([ + 'panel2', + 'panel5', + 'panel3', + 'panel7', + 'panel6', + 'panel8', + 'panel4', + 'panel9', + 'panel10', + ]); + }); + it('after replacing a panel id', async () => { + const { rerender } = renderGridLayout(); + const modifiedLayout = cloneDeep(getSampleLayout()); + const newPanel = { ...modifiedLayout[0].panels.panel1, id: 'panel11' }; + delete modifiedLayout[0].panels.panel1; + modifiedLayout[0].panels.panel11 = newPanel; + + rerender({ layout: modifiedLayout }); + + expect(getAllThePanelIds()).toEqual([ + 'panel11', + 'panel5', + 'panel2', + 'panel3', + 'panel7', + 'panel6', + 'panel8', + 'panel4', + 'panel9', + 'panel10', + ]); + }); + }); +}); diff --git a/packages/kbn-grid-layout/grid/grid_layout.tsx b/packages/kbn-grid-layout/grid/grid_layout.tsx index 2a14456b1ef62..1406d4b6eb55d 100644 --- a/packages/kbn-grid-layout/grid/grid_layout.tsx +++ b/packages/kbn-grid-layout/grid/grid_layout.tsx @@ -21,7 +21,7 @@ import { useGridLayoutState } from './use_grid_layout_state'; import { isLayoutEqual } from './utils/equality_checks'; import { resolveGridRow } from './utils/resolve_grid_row'; -interface GridLayoutProps { +export interface GridLayoutProps { layout: GridLayoutData; gridSettings: GridSettings; renderPanelContents: (panelId: string) => React.ReactNode; @@ -121,11 +121,6 @@ export const GridLayout = ({ rowIndex={rowIndex} renderPanelContents={renderPanelContents} gridLayoutStateManager={gridLayoutStateManager} - toggleIsCollapsed={() => { - const newLayout = cloneDeep(gridLayoutStateManager.gridLayout$.value); - newLayout[rowIndex].isCollapsed = !newLayout[rowIndex].isCollapsed; - gridLayoutStateManager.gridLayout$.next(newLayout); - }} setInteractionEvent={(nextInteractionEvent) => { if (!nextInteractionEvent) { gridLayoutStateManager.activePanel$.next(undefined); diff --git a/packages/kbn-grid-layout/grid/grid_panel/drag_handle.tsx b/packages/kbn-grid-layout/grid/grid_panel/drag_handle.tsx new file mode 100644 index 0000000000000..90305812ff8d5 --- /dev/null +++ b/packages/kbn-grid-layout/grid/grid_panel/drag_handle.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", 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 React from 'react'; + +import { EuiIcon, useEuiTheme } from '@elastic/eui'; +import { css } from '@emotion/react'; +import { euiThemeVars } from '@kbn/ui-theme'; +import { i18n } from '@kbn/i18n'; +import { PanelInteractionEvent } from '../types'; + +export const DragHandle = ({ + interactionStart, +}: { + interactionStart: ( + type: PanelInteractionEvent['type'] | 'drop', + e: React.MouseEvent + ) => void; +}) => { + const { euiTheme } = useEuiTheme(); + return ( + + ); +}; diff --git a/packages/kbn-grid-layout/grid/grid_panel/grid_panel.test.tsx b/packages/kbn-grid-layout/grid/grid_panel/grid_panel.test.tsx new file mode 100644 index 0000000000000..2829a320abab4 --- /dev/null +++ b/packages/kbn-grid-layout/grid/grid_panel/grid_panel.test.tsx @@ -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", 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 React from 'react'; +import { render, screen, fireEvent } from '@testing-library/react'; +import { GridPanel, GridPanelProps } from './grid_panel'; +import { gridLayoutStateManagerMock } from '../test_utils/mocks'; + +describe('GridPanel', () => { + const mockRenderPanelContents = jest.fn((panelId) =>
    Panel Content {panelId}
    ); + const mockInteractionStart = jest.fn(); + + const renderGridPanel = (propsOverrides: Partial = {}) => { + return render( + + ); + }; + afterEach(() => { + jest.clearAllMocks(); + }); + + it('renders panel contents correctly', () => { + renderGridPanel(); + expect(screen.getByText('Panel Content panel1')).toBeInTheDocument(); + }); + + describe('drag handle interaction', () => { + it('calls `drag` interactionStart on mouse down', () => { + renderGridPanel(); + const dragHandle = screen.getByRole('button', { name: /drag to move/i }); + fireEvent.mouseDown(dragHandle); + expect(mockInteractionStart).toHaveBeenCalledWith('drag', expect.any(Object)); + }); + it('calls `drop` interactionStart on mouse up', () => { + renderGridPanel(); + const dragHandle = screen.getByRole('button', { name: /drag to move/i }); + fireEvent.mouseUp(dragHandle); + expect(mockInteractionStart).toHaveBeenCalledWith('drop', expect.any(Object)); + }); + }); + describe('resize handle interaction', () => { + it('calls `resize` interactionStart on mouse down', () => { + renderGridPanel(); + const resizeHandle = screen.getByRole('button', { name: /resize/i }); + fireEvent.mouseDown(resizeHandle); + expect(mockInteractionStart).toHaveBeenCalledWith('resize', expect.any(Object)); + }); + it('calls `drop` interactionStart on mouse up', () => { + renderGridPanel(); + const resizeHandle = screen.getByRole('button', { name: /resize/i }); + fireEvent.mouseUp(resizeHandle); + expect(mockInteractionStart).toHaveBeenCalledWith('drop', expect.any(Object)); + }); + }); +}); diff --git a/packages/kbn-grid-layout/grid/grid_panel.tsx b/packages/kbn-grid-layout/grid/grid_panel/grid_panel.tsx similarity index 67% rename from packages/kbn-grid-layout/grid/grid_panel.tsx rename to packages/kbn-grid-layout/grid/grid_panel/grid_panel.tsx index 91f935f4507f1..e817f5fc3871b 100644 --- a/packages/kbn-grid-layout/grid/grid_panel.tsx +++ b/packages/kbn-grid-layout/grid/grid_panel/grid_panel.tsx @@ -10,39 +10,30 @@ import React, { forwardRef, useEffect, useMemo } from 'react'; import { combineLatest, skip } from 'rxjs'; -import { - EuiIcon, - EuiPanel, - euiFullHeight, - transparentize, - useEuiOverflowScroll, - useEuiTheme, -} from '@elastic/eui'; +import { EuiPanel, euiFullHeight, useEuiOverflowScroll } from '@elastic/eui'; import { css } from '@emotion/react'; import { euiThemeVars } from '@kbn/ui-theme'; - -import { GridLayoutStateManager, PanelInteractionEvent } from './types'; -import { getKeysInOrder } from './utils/resolve_grid_row'; - -export const GridPanel = forwardRef< - HTMLDivElement, - { - panelId: string; - rowIndex: number; - renderPanelContents: (panelId: string) => React.ReactNode; - interactionStart: ( - type: PanelInteractionEvent['type'] | 'drop', - e: React.MouseEvent - ) => void; - gridLayoutStateManager: GridLayoutStateManager; - } ->( +import { GridLayoutStateManager, PanelInteractionEvent } from '../types'; +import { getKeysInOrder } from '../utils/resolve_grid_row'; +import { DragHandle } from './drag_handle'; +import { ResizeHandle } from './resize_handle'; + +export interface GridPanelProps { + panelId: string; + rowIndex: number; + renderPanelContents: (panelId: string) => React.ReactNode; + interactionStart: ( + type: PanelInteractionEvent['type'] | 'drop', + e: React.MouseEvent + ) => void; + gridLayoutStateManager: GridLayoutStateManager; +} + +export const GridPanel = forwardRef( ( { panelId, rowIndex, renderPanelContents, interactionStart, gridLayoutStateManager }, panelRef ) => { - const { euiTheme } = useEuiTheme(); - /** Set initial styles based on state at mount to prevent styles from "blipping" */ const initialStyles = useMemo(() => { const initialPanel = gridLayoutStateManager.gridLayout$.getValue()[rowIndex].panels[panelId]; @@ -158,7 +149,7 @@ export const GridPanel = forwardRef< const panel = allPanels[panelId]; if (!ref || !panel) return; - const sortedKeys = getKeysInOrder(gridLayout[rowIndex]); + const sortedKeys = getKeysInOrder(gridLayout[rowIndex].panels); const currentPanelPosition = sortedKeys.indexOf(panelId); const sortedKeysBefore = sortedKeys.slice(0, currentPanelPosition); const responsiveGridRowStart = sortedKeysBefore.reduce( @@ -180,7 +171,6 @@ export const GridPanel = forwardRef< // eslint-disable-next-line react-hooks/exhaustive-deps [] ); - /** * Memoize panel contents to prevent unnecessary re-renders */ @@ -189,93 +179,29 @@ export const GridPanel = forwardRef< }, [panelId, renderPanelContents]); return ( - <> -
    - + + +
    - {/* drag handle */} -
    interactionStart('drag', e)} - onMouseUp={(e) => interactionStart('drop', e)} - > - -
    - {/* Resize handle */} -
    interactionStart('resize', e)} - onMouseUp={(e) => interactionStart('drop', e)} - css={css` - right: 0; - bottom: 0; - opacity: 0; - margin: -2px; - position: absolute; - width: ${euiThemeVars.euiSizeL}; - height: ${euiThemeVars.euiSizeL}; - transition: opacity 0.2s, border 0.2s; - border-radius: 7px 0 7px 0; - border-bottom: 2px solid ${euiThemeVars.euiColorSuccess}; - border-right: 2px solid ${euiThemeVars.euiColorSuccess}; - :hover { - opacity: 1; - background-color: ${transparentize(euiThemeVars.euiColorSuccess, 0.05)}; - cursor: se-resize; - } - .kbnGrid--static & { - opacity: 0 !important; - display: none; - } - `} - /> -
    - {panelContents} -
    - -
    - + {panelContents} +
    + +
    +
    ); } ); diff --git a/packages/kbn-grid-layout/grid/grid_panel/index.tsx b/packages/kbn-grid-layout/grid/grid_panel/index.tsx new file mode 100644 index 0000000000000..e286fc92fd9f7 --- /dev/null +++ b/packages/kbn-grid-layout/grid/grid_panel/index.tsx @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", 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 { GridPanel } from './grid_panel'; diff --git a/packages/kbn-grid-layout/grid/grid_panel/resize_handle.tsx b/packages/kbn-grid-layout/grid/grid_panel/resize_handle.tsx new file mode 100644 index 0000000000000..4c4a2d60ee5cb --- /dev/null +++ b/packages/kbn-grid-layout/grid/grid_panel/resize_handle.tsx @@ -0,0 +1,70 @@ +/* + * 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 React from 'react'; + +import { transparentize } from '@elastic/eui'; +import { css } from '@emotion/react'; +import { euiThemeVars } from '@kbn/ui-theme'; +import { i18n } from '@kbn/i18n'; +import { PanelInteractionEvent } from '../types'; + +export const ResizeHandle = ({ + interactionStart, +}: { + interactionStart: ( + type: PanelInteractionEvent['type'] | 'drop', + e: React.MouseEvent + ) => void; +}) => { + return ( + +)); + +const runtimeSettings$ = new BehaviorSubject({ + ...gridSettings, + columnPixelWidth: 0, +}); + +export const gridLayoutStateManagerMock: GridLayoutStateManager = { + expandedPanelId$: new BehaviorSubject(undefined), + isMobileView$: new BehaviorSubject(false), + gridLayout$, + runtimeSettings$, + panelRefs: { current: [] }, + rowRefs: { current: [] }, + interactionEvent$: new BehaviorSubject(undefined), + activePanel$: new BehaviorSubject(undefined), + gridDimensions$: new BehaviorSubject({ width: 600, height: 900 }), +}; diff --git a/packages/kbn-grid-layout/grid/test_utils/sample_layout.ts b/packages/kbn-grid-layout/grid/test_utils/sample_layout.ts new file mode 100644 index 0000000000000..035a6f1dda2ee --- /dev/null +++ b/packages/kbn-grid-layout/grid/test_utils/sample_layout.ts @@ -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", 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 { GridLayoutData } from '../types'; + +export const getSampleLayout = (): GridLayoutData => [ + { + title: 'Large section', + isCollapsed: false, + panels: { + panel1: { + id: 'panel1', + row: 0, + column: 0, + width: 12, + height: 6, + }, + panel2: { + id: 'panel2', + row: 6, + column: 0, + width: 8, + height: 4, + }, + panel3: { + id: 'panel3', + row: 6, + column: 8, + width: 12, + height: 4, + }, + panel4: { + id: 'panel4', + row: 10, + column: 0, + width: 48, + height: 4, + }, + panel5: { + id: 'panel5', + row: 0, + column: 12, + width: 36, + height: 6, + }, + panel6: { + id: 'panel6', + row: 6, + column: 24, + width: 24, + height: 4, + }, + panel7: { + id: 'panel7', + row: 6, + column: 20, + width: 4, + height: 2, + }, + panel8: { + id: 'panel8', + row: 8, + column: 20, + width: 4, + height: 2, + }, + }, + }, + { + title: 'Small section', + isCollapsed: false, + panels: { + panel9: { + id: 'panel9', + row: 0, + column: 0, + width: 12, + height: 16, + }, + }, + }, + { + title: 'Another small section', + isCollapsed: false, + panels: { + panel10: { + id: 'panel10', + row: 0, + column: 24, + width: 12, + height: 6, + }, + }, + }, +]; diff --git a/packages/kbn-grid-layout/grid/use_grid_layout_events.ts b/packages/kbn-grid-layout/grid/use_grid_layout_events.ts index 9a6d6d2303909..64cc8f482838e 100644 --- a/packages/kbn-grid-layout/grid/use_grid_layout_events.ts +++ b/packages/kbn-grid-layout/grid/use_grid_layout_events.ts @@ -87,6 +87,7 @@ export const useGridLayoutEvents = ({ bottom: mouseTargetPixel.y - interactionEvent.mouseOffsets.bottom, right: mouseTargetPixel.x - interactionEvent.mouseOffsets.right, }; + gridLayoutStateManager.activePanel$.next({ id: interactionEvent.id, position: previewRect }); // find the grid that the preview rect is over diff --git a/packages/kbn-grid-layout/grid/utils/resolve_grid_row.ts b/packages/kbn-grid-layout/grid/utils/resolve_grid_row.ts index 9a6f28d006e0a..38b778b5d0571 100644 --- a/packages/kbn-grid-layout/grid/utils/resolve_grid_row.ts +++ b/packages/kbn-grid-layout/grid/utils/resolve_grid_row.ts @@ -34,11 +34,11 @@ const getAllCollisionsWithPanel = ( return collidingPanels; }; -export const getKeysInOrder = (rowData: GridRowData, draggedId?: string): string[] => { - const panelKeys = Object.keys(rowData.panels); +export const getKeysInOrder = (panels: GridRowData['panels'], draggedId?: string): string[] => { + const panelKeys = Object.keys(panels); return panelKeys.sort((panelKeyA, panelKeyB) => { - const panelA = rowData.panels[panelKeyA]; - const panelB = rowData.panels[panelKeyB]; + const panelA = panels[panelKeyA]; + const panelB = panels[panelKeyB]; // sort by row first if (panelA.row > panelB.row) return 1; @@ -60,7 +60,7 @@ export const getKeysInOrder = (rowData: GridRowData, draggedId?: string): string const compactGridRow = (originalLayout: GridRowData) => { const nextRowData = { ...originalLayout, panels: { ...originalLayout.panels } }; // compact all vertical space. - const sortedKeysAfterMove = getKeysInOrder(nextRowData); + const sortedKeysAfterMove = getKeysInOrder(nextRowData.panels); for (const panelKey of sortedKeysAfterMove) { const panel = nextRowData.panels[panelKey]; // try moving panel up one row at a time until it collides @@ -90,7 +90,7 @@ export const resolveGridRow = ( // return nextRowData; // push all panels down if they collide with another panel - const sortedKeys = getKeysInOrder(nextRowData, dragRequest?.id); + const sortedKeys = getKeysInOrder(nextRowData.panels, dragRequest?.id); for (const key of sortedKeys) { const panel = nextRowData.panels[key]; diff --git a/packages/kbn-grid-layout/tsconfig.json b/packages/kbn-grid-layout/tsconfig.json index f0dd3232a42d5..bd16ae0f0adeb 100644 --- a/packages/kbn-grid-layout/tsconfig.json +++ b/packages/kbn-grid-layout/tsconfig.json @@ -2,12 +2,6 @@ "extends": "../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", - "types": [ - "jest", - "node", - "react", - "@emotion/react/types/css-prop" - ] }, "include": [ "**/*.ts", diff --git a/packages/kbn-monaco/src/console/lexer_rules/nested_painless.ts b/packages/kbn-monaco/src/console/lexer_rules/nested_painless.ts new file mode 100644 index 0000000000000..8b4fcda56a64a --- /dev/null +++ b/packages/kbn-monaco/src/console/lexer_rules/nested_painless.ts @@ -0,0 +1,71 @@ +/* + * 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 { lexerRules as painlessLexerRules } from '../../painless/lexer_rules'; + +/* + * This rule is used inside json root to start a painless highlighting sequence + */ +export const buildPainlessStartRule = (painlessRoot: string = 'painless_root') => { + return [ + /("(?:[^"]*_)?script"|"inline"|"source")(\s*?)(:)(\s*?)(""")/, + [ + 'variable', + 'whitespace', + 'punctuation.colon', + 'whitespace', + { + token: 'punctuation', + next: `@${painlessRoot}`, + }, + ], + ]; +}; + +/* + * This function creates a group of rules needed for painless highlighting in console. + * It reuses the lexer rules from the "painless" language, but since not all rules are referenced in the root + * tokenizer and to avoid conflicts with existing console rules, only selected rules are used. + */ +export const buildPainlessRules = (painlessRoot: string = 'painless_root') => { + // eslint-disable-next-line @typescript-eslint/naming-convention + const { root, comment, string_dq, string_sq } = painlessLexerRules.tokenizer; + return { + [painlessRoot]: [ + // the rule to end painless highlighting and get back to the previous tokenizer state + [ + /"""/, + { + token: 'punctuation', + next: '@pop', + }, + ], + ...root, + ], + comment, + string_dq, + string_sq, + }; +}; + +/* + * These language attributes need to be added to the console language definition for painless tokenizer + * to work correctly. + */ +export const painlessLanguageAttributes = { + keywords: painlessLexerRules.keywords, + primitives: painlessLexerRules.primitives, + constants: painlessLexerRules.constants, + operators: painlessLexerRules.operators, + symbols: painlessLexerRules.symbols, + digits: painlessLexerRules.digits, + octaldigits: painlessLexerRules.octaldigits, + binarydigits: painlessLexerRules.binarydigits, + hexdigits: painlessLexerRules.hexdigits, +}; diff --git a/packages/kbn-monaco/src/console/lexer_rules/shared.ts b/packages/kbn-monaco/src/console/lexer_rules/shared.ts index 62c8a28d31c65..b508d5954a3f7 100644 --- a/packages/kbn-monaco/src/console/lexer_rules/shared.ts +++ b/packages/kbn-monaco/src/console/lexer_rules/shared.ts @@ -8,6 +8,11 @@ */ import { buildSqlRules, buildSqlStartRule, sqlLanguageAttributes } from './nested_sql'; +import { + buildPainlessRules, + buildPainlessStartRule, + painlessLanguageAttributes, +} from './nested_painless'; import { monaco } from '../../..'; import { globals } from '../../common/lexer_rules'; import { buildXjsonRules } from '../../xjson/lexer_rules/xjson'; @@ -16,11 +21,13 @@ export const consoleSharedLanguageConfiguration: monaco.languages.LanguageConfig brackets: [ ['{', '}'], ['[', ']'], + ['(', ')'], ['"""', '"""\n'], ], autoClosingPairs: [ { open: '{', close: '}' }, { open: '[', close: ']' }, + { open: '(', close: ')' }, { open: '"', close: '"' }, { open: '"""', close: '"""' }, ], @@ -100,10 +107,13 @@ xjsonRules.json_root = [ matchToken('variable.template', /("\${\w+}")/), // @ts-expect-error include a rule to start sql highlighting buildSqlStartRule(), + // @ts-expect-error include a rule to start painless highlighting + buildPainlessStartRule(), ...xjsonRules.json_root, ]; const sqlRules = buildSqlRules(); +const painlessRules = buildPainlessRules(); /* Lexer rules that are shared between the Console editor and the Console output panel. */ @@ -111,6 +121,8 @@ export const consoleSharedLexerRules: monaco.languages.IMonarchLanguage = { ...(globals as any), defaultToken: 'invalid', ...sqlLanguageAttributes, + ...painlessLanguageAttributes, + keywords: [...sqlLanguageAttributes.keywords, ...painlessLanguageAttributes.keywords], tokenizer: { root: [ // warning comment @@ -138,5 +150,7 @@ export const consoleSharedLexerRules: monaco.languages.IMonarchLanguage = { ...xjsonRules, // include sql rules ...sqlRules, + // include painless rules + ...painlessRules, }, }; diff --git a/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.test.ts b/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.test.ts index 6eaa3e933980b..fec671825a0b8 100644 --- a/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.test.ts +++ b/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.test.ts @@ -119,7 +119,6 @@ describe('GetCsvReportPanelAction', () => { core, apiClient, startServices$: mockStartServices$, - usesUiCapabilities: true, csvConfig, }); @@ -154,7 +153,6 @@ describe('GetCsvReportPanelAction', () => { core, apiClient, startServices$: mockStartServices$, - usesUiCapabilities: true, csvConfig, }); @@ -177,7 +175,6 @@ describe('GetCsvReportPanelAction', () => { core, apiClient, startServices$: mockStartServices$, - usesUiCapabilities: true, csvConfig, }); @@ -197,7 +194,6 @@ describe('GetCsvReportPanelAction', () => { core, apiClient, startServices$: mockStartServices$, - usesUiCapabilities: true, csvConfig, }); @@ -219,7 +215,6 @@ describe('GetCsvReportPanelAction', () => { core, apiClient, startServices$: mockStartServices$, - usesUiCapabilities: true, csvConfig, }); @@ -232,7 +227,6 @@ describe('GetCsvReportPanelAction', () => { core, apiClient, startServices$: mockStartServices$, - usesUiCapabilities: true, csvConfig, }); @@ -249,7 +243,6 @@ describe('GetCsvReportPanelAction', () => { core, apiClient, startServices$: mockStartServices$, - usesUiCapabilities: true, csvConfig, }); @@ -263,7 +256,6 @@ describe('GetCsvReportPanelAction', () => { core, apiClient, startServices$: mockStartServices$, - usesUiCapabilities: true, csvConfig, }); @@ -271,17 +263,5 @@ describe('GetCsvReportPanelAction', () => { expect(await plugin.isCompatible(context)).toEqual(true); }); - - it(`allows csv generation when license is valid and deprecated roles config is enabled`, async () => { - const plugin = new ReportingCsvPanelAction({ - core, - apiClient, - startServices$: mockStartServices$, - usesUiCapabilities: false, - csvConfig, - }); - - expect(await plugin.isCompatible(context)).toEqual(true); - }); }); }); diff --git a/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx b/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx index 65712496519f7..19c6a190485e1 100644 --- a/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx +++ b/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx @@ -72,7 +72,6 @@ interface Params { csvConfig: ClientConfigType['csv']; core: CoreSetup; startServices$: Observable; - usesUiCapabilities: boolean; } interface ExecutionParams { @@ -104,15 +103,13 @@ export class ReportingCsvPanelAction implements ActionDefinition; @@ -38,7 +37,6 @@ export interface ExportModalShareOpts { export interface ExportPanelShareOpts { apiClient: ReportingAPIClient; - usesUiCapabilities: boolean; license: ILicense; application: ApplicationStart; startServices$: Rx.Observable; diff --git a/packages/kbn-reporting/public/share/share_context_menu/register_csv_modal_reporting.tsx b/packages/kbn-reporting/public/share/share_context_menu/register_csv_modal_reporting.tsx index d0a4544c3b0e0..bbefe333b49aa 100644 --- a/packages/kbn-reporting/public/share/share_context_menu/register_csv_modal_reporting.tsx +++ b/packages/kbn-reporting/public/share/share_context_menu/register_csv_modal_reporting.tsx @@ -24,7 +24,6 @@ export const reportingCsvShareProvider = ({ apiClient, application, license, - usesUiCapabilities, startServices$, }: ExportModalShareOpts) => { const getShareMenuItems = ({ objectType, sharingData, toasts }: ShareContext) => { @@ -76,12 +75,7 @@ export const reportingCsvShareProvider = ({ const licenseHasCsvReporting = licenseCheck.showLinks; const licenseDisabled = !licenseCheck.enableLinks; - let capabilityHasCsvReporting = false; - if (usesUiCapabilities) { - capabilityHasCsvReporting = application.capabilities.discover?.generateCsv === true; - } else { - capabilityHasCsvReporting = true; // deprecated - } + const capabilityHasCsvReporting = application.capabilities.discover?.generateCsv === true; const generateReportingJobCSV = ({ intl }: { intl: InjectedIntl }) => { const decoratedJobParams = apiClient.getDecoratedJobParams(getJobParams()); diff --git a/packages/kbn-reporting/public/share/share_context_menu/register_pdf_png_modal_reporting.tsx b/packages/kbn-reporting/public/share/share_context_menu/register_pdf_png_modal_reporting.tsx index 54ced9511d103..c2d5a88de9ecd 100644 --- a/packages/kbn-reporting/public/share/share_context_menu/register_pdf_png_modal_reporting.tsx +++ b/packages/kbn-reporting/public/share/share_context_menu/register_pdf_png_modal_reporting.tsx @@ -46,7 +46,6 @@ export const reportingExportModalProvider = ({ apiClient, license, application, - usesUiCapabilities, startServices$, }: ExportModalShareOpts): ShareMenuProvider => { const getShareMenuItems = ({ @@ -64,18 +63,10 @@ export const reportingExportModalProvider = ({ const licenseHasScreenshotReporting = showLinks; const licenseDisabled = !enableLinks; - let capabilityHasDashboardScreenshotReporting = false; - let capabilityHasVisualizeScreenshotReporting = false; - if (usesUiCapabilities) { - capabilityHasDashboardScreenshotReporting = - application.capabilities.dashboard?.generateScreenshot === true; - capabilityHasVisualizeScreenshotReporting = - application.capabilities.visualize?.generateScreenshot === true; - } else { - // deprecated - capabilityHasDashboardScreenshotReporting = true; - capabilityHasVisualizeScreenshotReporting = true; - } + const capabilityHasDashboardScreenshotReporting = + application.capabilities.dashboard?.generateScreenshot === true; + const capabilityHasVisualizeScreenshotReporting = + application.capabilities.visualize?.generateScreenshot === true; if (!licenseHasScreenshotReporting) { return []; diff --git a/packages/kbn-reporting/public/types.ts b/packages/kbn-reporting/public/types.ts index e01a1b55b0a1f..756c5e23eb57b 100644 --- a/packages/kbn-reporting/public/types.ts +++ b/packages/kbn-reporting/public/types.ts @@ -36,7 +36,6 @@ export interface ClientConfigType { intervalErrorMultiplier: number; }; }; - roles: { enabled: boolean }; export_types: { pdf: { enabled: boolean }; png: { enabled: boolean }; diff --git a/packages/kbn-reporting/server/__snapshots__/config_schema.test.ts.snap b/packages/kbn-reporting/server/__snapshots__/config_schema.test.ts.snap index d52630ab6820c..ae361b65f9f2f 100644 --- a/packages/kbn-reporting/server/__snapshots__/config_schema.test.ts.snap +++ b/packages/kbn-reporting/server/__snapshots__/config_schema.test.ts.snap @@ -50,12 +50,6 @@ Object { "pollIntervalErrorMultiplier": 10, "timeout": "PT4M", }, - "roles": Object { - "allow": Array [ - "reporting_user", - ], - "enabled": true, - }, "statefulSettings": Object { "enabled": true, }, @@ -111,12 +105,6 @@ Object { "pollIntervalErrorMultiplier": 10, "timeout": "PT4M", }, - "roles": Object { - "allow": Array [ - "reporting_user", - ], - "enabled": true, - }, "statefulSettings": Object { "enabled": true, }, diff --git a/packages/kbn-reporting/server/config_schema.test.ts b/packages/kbn-reporting/server/config_schema.test.ts index 63ca79cf819c5..fd3d974ef55af 100644 --- a/packages/kbn-reporting/server/config_schema.test.ts +++ b/packages/kbn-reporting/server/config_schema.test.ts @@ -122,14 +122,4 @@ describe('Reporting Config Schema', () => { ConfigSchema.validate({ export_types: { csv: { enabled: true } } }, { dev: true }) ).not.toThrow(); }); - - describe('roles', () => { - it('should have roles enabled set to false for serverless by default', () => { - expect(ConfigSchema.validate({}, { serverless: true }).roles.enabled).toBe(false); - }); - - it('should have roles enabled set to true for non-serverless by default', () => { - expect(ConfigSchema.validate({}).roles.enabled).toBe(true); - }); - }); }); diff --git a/packages/kbn-reporting/server/config_schema.ts b/packages/kbn-reporting/server/config_schema.ts index e14bc30ab56f7..cf4b509fdc44b 100644 --- a/packages/kbn-reporting/server/config_schema.ts +++ b/packages/kbn-reporting/server/config_schema.ts @@ -94,16 +94,12 @@ const EncryptionKeySchema = schema.conditional( schema.string({ defaultValue: 'a'.repeat(32) }) ); -const RolesSchema = schema.object({ - enabled: offeringBasedSchema({ - serverless: schema.boolean({ defaultValue: false }), - traditional: schema.boolean({ defaultValue: true }), - }), // true: use ES API for access control (deprecated in 7.x). false: use Kibana API for application features (8.0) - allow: offeringBasedSchema({ - serverless: schema.arrayOf(schema.string(), { defaultValue: [] }), - traditional: schema.arrayOf(schema.string(), { defaultValue: ['reporting_user'] }), - }), -}); +const RolesSchema = schema.maybe( + schema.object({ + enabled: schema.boolean(), + allow: schema.arrayOf(schema.string()), + }) +); // unused as of 9.0 // Browser side polling: job completion notifier, management table auto-refresh // NOTE: can not use schema.duration, a bug prevents it being passed to the browser correctly diff --git a/packages/kbn-reporting/server/types.ts b/packages/kbn-reporting/server/types.ts index c2f05be15d69f..c1d1ea0ec3828 100644 --- a/packages/kbn-reporting/server/types.ts +++ b/packages/kbn-reporting/server/types.ts @@ -25,10 +25,6 @@ import type { ExportType } from './export_type'; export interface ReportingServerPluginSetup { registerExportTypes: (item: ExportType) => void; - /** - * Used to inform plugins if Reporting config is compatible with UI Capabilities / Application Sub-Feature Controls - */ - usesUiCapabilities: () => boolean; } // standard type for create job function of any ExportType implementation diff --git a/packages/kbn-scout/src/playwright/fixtures/test/page.ts b/packages/kbn-scout/src/playwright/fixtures/test/page.ts index b41b8a92f2701..4cab61e4ffec5 100644 --- a/packages/kbn-scout/src/playwright/fixtures/test/page.ts +++ b/packages/kbn-scout/src/playwright/fixtures/test/page.ts @@ -9,7 +9,7 @@ import { Page, test as base } from '@playwright/test'; import { subj } from '@kbn/test-subj-selector'; -import { ScoutPage, KibanaUrl } from '../types'; +import { ScoutPage, KibanaUrl, ScoutTestFixtures, ScoutWorkerFixtures } from '../types'; /** * Instead of defining each method individually, we use a list of method names and loop through them, creating methods dynamically. @@ -95,17 +95,20 @@ function extendPageWithTestSubject(page: Page): ScoutPage['testSubj'] { * await page.gotoApp('discover); * ``` */ -export const scoutPageFixture = base.extend<{ page: ScoutPage; kbnUrl: KibanaUrl }>({ - page: async ({ page, kbnUrl }, use) => { +export const scoutPageFixture = base.extend({ + page: async ( + { page, kbnUrl }: { page: Page; kbnUrl: KibanaUrl }, + use: (extendedPage: ScoutPage) => Promise + ) => { + const extendedPage = page as ScoutPage; // Extend page with '@kbn/test-subj-selector' support - page.testSubj = extendPageWithTestSubject(page); - + extendedPage.testSubj = extendPageWithTestSubject(page); // Method to navigate to specific Kibana apps - page.gotoApp = (appName: string) => page.goto(kbnUrl.app(appName)); - - page.waitForLoadingIndicatorHidden = () => - page.testSubj.waitForSelector('globalLoadingIndicator-hidden', { state: 'attached' }); + extendedPage.gotoApp = (appName: string) => page.goto(kbnUrl.app(appName)); + // Method to wait for global loading indicator to be hidden + extendedPage.waitForLoadingIndicatorHidden = () => + extendedPage.testSubj.waitForSelector('globalLoadingIndicator-hidden', { state: 'attached' }); - await use(page); + await use(extendedPage); }, }); diff --git a/packages/kbn-scout/src/servers/run_elasticsearch.ts b/packages/kbn-scout/src/servers/run_elasticsearch.ts index 5406f755f5d72..24c8a49da2d9a 100644 --- a/packages/kbn-scout/src/servers/run_elasticsearch.ts +++ b/packages/kbn-scout/src/servers/run_elasticsearch.ts @@ -12,8 +12,8 @@ import { resolve } from 'path'; import type { ToolingLog } from '@kbn/tooling-log'; import { REPO_ROOT } from '@kbn/repo-info'; import type { ArtifactLicense, ServerlessProjectType } from '@kbn/es'; -import { isServerlessProjectType, extractAndArchiveLogs } from '@kbn/es/src/utils'; -import { createTestEsCluster, esTestConfig } from '@kbn/test'; +import { isServerlessProjectType } from '@kbn/es/src/utils'; +import { createTestEsCluster, esTestConfig, cleanupElasticsearch } from '@kbn/test'; import { Config } from '../config'; interface RunElasticsearchOptions { @@ -82,8 +82,7 @@ export async function runElasticsearch( config, }); return async () => { - await node.cleanup(); - await extractAndArchiveLogs({ outputFolder: logsDir, log }); + await cleanupElasticsearch(node, config.serverless, logsDir, log); }; } diff --git a/packages/kbn-securitysolution-utils/src/esql/index.ts b/packages/kbn-securitysolution-utils/src/esql/index.ts index 22c2cc42a9fed..930ff246988ea 100644 --- a/packages/kbn-securitysolution-utils/src/esql/index.ts +++ b/packages/kbn-securitysolution-utils/src/esql/index.ts @@ -9,3 +9,4 @@ export * from './compute_if_esql_query_aggregating'; export * from './get_index_list_from_esql_query'; +export * from './parse_esql_query'; diff --git a/packages/kbn-securitysolution-utils/src/esql/parse_esql_query.test.ts b/packages/kbn-securitysolution-utils/src/esql/parse_esql_query.test.ts new file mode 100644 index 0000000000000..6c4fdafd8e70b --- /dev/null +++ b/packages/kbn-securitysolution-utils/src/esql/parse_esql_query.test.ts @@ -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", 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 { parseEsqlQuery } from './parse_esql_query'; + +describe('parseEsqlQuery', () => { + describe('ES|QL query syntax', () => { + it.each([['incorrect syntax'], ['from test* metadata']])( + 'detects incorrect syntax in "%s"', + (esqlQuery) => { + const result = parseEsqlQuery(esqlQuery); + expect(result.errors.length).toEqual(1); + expect(result.errors[0].message.startsWith('SyntaxError:')).toBeTruthy(); + expect(parseEsqlQuery(esqlQuery)).toMatchObject({ + hasMetadataOperator: false, + isEsqlQueryAggregating: false, + }); + } + ); + + it.each([ + ['from test* metadata _id'], + [ + 'FROM kibana_sample_data_logs | STATS total_bytes = SUM(bytes) BY host | WHERE total_bytes > 200000 | SORT total_bytes DESC | LIMIT 10', + ], + [ + `from packetbeat* metadata + _id + | limit 100`, + ], + [ + `FROM kibana_sample_data_logs | + STATS total_bytes = SUM(bytes) BY host | + WHERE total_bytes > 200000 | + SORT total_bytes DESC | + LIMIT 10`, + ], + ])('parses correctly valid syntax in "%s"', (esqlQuery) => { + const result = parseEsqlQuery(esqlQuery); + expect(result.errors.length).toEqual(0); + expect(result).toMatchObject({ errors: [] }); + }); + }); + + describe('METADATA operator', () => { + it.each([ + ['from test*'], + ['from metadata*'], + ['from test* | keep metadata'], + ['from test* | eval x="metadata _id"'], + ])('detects when METADATA operator is missing in a NON aggregating query "%s"', (esqlQuery) => { + expect(parseEsqlQuery(esqlQuery)).toEqual({ + errors: [], + hasMetadataOperator: false, + isEsqlQueryAggregating: false, + }); + }); + + it.each([ + ['from test* metadata _id'], + ['from test* metadata _id, _index'], + ['from test* metadata _index, _id'], + ['from test* metadata _id '], + ['from test* metadata _id '], + ['from test* metadata _id | limit 10'], + [ + `from packetbeat* metadata + + _id + | limit 100`, + ], + ])('detects existin METADATA operator in a NON aggregating query "%s"', (esqlQuery) => + expect(parseEsqlQuery(esqlQuery)).toEqual({ + errors: [], + hasMetadataOperator: true, + isEsqlQueryAggregating: false, + }) + ); + + it('detects missing METADATA operator in an aggregating query "from test* | stats c = count(*) by fieldA"', () => + expect(parseEsqlQuery('from test* | stats c = count(*) by fieldA')).toEqual({ + errors: [], + hasMetadataOperator: false, + isEsqlQueryAggregating: true, + })); + }); + + describe('METADATA _id field for NON aggregating queries', () => { + it('detects missing METADATA "_id" field', () => { + expect(parseEsqlQuery('from test*')).toEqual({ + errors: [], + hasMetadataOperator: false, + isEsqlQueryAggregating: false, + }); + }); + + it('detects existing METADATA "_id" field', async () => { + expect(parseEsqlQuery('from test* metadata _id')).toEqual({ + errors: [], + hasMetadataOperator: true, + isEsqlQueryAggregating: false, + }); + }); + }); + + describe('METADATA _id field for aggregating queries', () => { + it('detects existing METADATA operator with missing "_id" field', () => { + expect( + parseEsqlQuery('from test* metadata someField | stats c = count(*) by fieldA') + ).toEqual({ errors: [], hasMetadataOperator: false, isEsqlQueryAggregating: true }); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/validation/esql_query.ts b/packages/kbn-securitysolution-utils/src/esql/parse_esql_query.ts similarity index 66% rename from x-pack/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/validation/esql_query.ts rename to packages/kbn-securitysolution-utils/src/esql/parse_esql_query.ts index a8c1d6acff408..2a62aed8873a0 100644 --- a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/validation/esql_query.ts +++ b/packages/kbn-securitysolution-utils/src/esql/parse_esql_query.ts @@ -1,21 +1,40 @@ /* * 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. + * 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 { ESQLAstQueryExpression, ESQLCommandOption, EditorError } from '@kbn/esql-ast'; -import { parse } from '@kbn/esql-ast'; +import { type ESQLAstQueryExpression, parse, ESQLCommandOption, EditorError } from '@kbn/esql-ast'; import { isColumnItem, isOptionItem } from '@kbn/esql-validation-autocomplete'; -import { isAggregatingQuery } from '@kbn/securitysolution-utils'; +import { isAggregatingQuery } from './compute_if_esql_query_aggregating'; -interface ParseEsqlQueryResult { +export interface ParseEsqlQueryResult { errors: EditorError[]; isEsqlQueryAggregating: boolean; hasMetadataOperator: boolean; } +/** + * check if esql query valid for Security rule: + * - if it's non aggregation query it must have metadata operator + */ +export const parseEsqlQuery = (query: string): ParseEsqlQueryResult => { + const { root, errors } = parse(query); + const isEsqlQueryAggregating = isAggregatingQuery(root); + + return { + errors, + isEsqlQueryAggregating, + hasMetadataOperator: computeHasMetadataOperator(root), + }; +}; + +/** + * checks whether query has metadata _id operator + */ function computeHasMetadataOperator(astExpression: ESQLAstQueryExpression): boolean { // Check whether the `from` command has `metadata` operator const metadataOption = getMetadataOption(astExpression); @@ -50,13 +69,3 @@ function getMetadataOption(astExpression: ESQLAstQueryExpression): ESQLCommandOp return undefined; } - -export const parseEsqlQuery = (query: string): ParseEsqlQueryResult => { - const { root, errors } = parse(query); - const isEsqlQueryAggregating = isAggregatingQuery(root); - return { - errors, - isEsqlQueryAggregating, - hasMetadataOperator: computeHasMetadataOperator(root), - }; -}; diff --git a/packages/kbn-securitysolution-utils/tsconfig.json b/packages/kbn-securitysolution-utils/tsconfig.json index 5b9520c487e31..d45b0c973af87 100644 --- a/packages/kbn-securitysolution-utils/tsconfig.json +++ b/packages/kbn-securitysolution-utils/tsconfig.json @@ -13,7 +13,8 @@ "kbn_references": [ "@kbn/i18n", "@kbn/esql-utils", - "@kbn/esql-ast" + "@kbn/esql-ast", + "@kbn/esql-validation-autocomplete" ], "exclude": [ "target/**/*", diff --git a/packages/kbn-server-route-repository-client/src/create_observable_from_http_response.ts b/packages/kbn-server-route-repository-client/src/create_observable_from_http_response.ts index 1690244ca19a7..ccd0980617f86 100644 --- a/packages/kbn-server-route-repository-client/src/create_observable_from_http_response.ts +++ b/packages/kbn-server-route-repository-client/src/create_observable_from_http_response.ts @@ -37,10 +37,10 @@ export function createObservableFromHttpResponse( } return new Observable((subscriber) => { - const parser = createParser((event) => { - if (event.type === 'event') { + const parser = createParser({ + onEvent: (event) => { subscriber.next(event.data); - } + }, }); const readStream = async () => { diff --git a/packages/kbn-sse-utils-client/src/create_observable_from_http_response.ts b/packages/kbn-sse-utils-client/src/create_observable_from_http_response.ts index 814a528535c75..cf9ef8ee30a7b 100644 --- a/packages/kbn-sse-utils-client/src/create_observable_from_http_response.ts +++ b/packages/kbn-sse-utils-client/src/create_observable_from_http_response.ts @@ -29,8 +29,8 @@ export function createObservableFromHttpResponse((subscriber) => { - const parser = createParser((event) => { - if (event.type === 'event') + const parser = createParser({ + onEvent: (event) => { try { const data = JSON.parse(event.data); if (event.event === 'error') { @@ -48,6 +48,7 @@ export function createObservableFromHttpResponse { diff --git a/packages/kbn-sse-utils-server/index.ts b/packages/kbn-sse-utils-server/index.ts index ec2c60a2fe81b..bf2718738f4f7 100644 --- a/packages/kbn-sse-utils-server/index.ts +++ b/packages/kbn-sse-utils-server/index.ts @@ -8,3 +8,4 @@ */ export { observableIntoEventSourceStream } from './src/observable_into_event_source_stream'; +export { supertestToObservable } from './src/supertest_to_observable'; diff --git a/packages/kbn-sse-utils-server/src/supertest_to_observable.ts b/packages/kbn-sse-utils-server/src/supertest_to_observable.ts new file mode 100644 index 0000000000000..f2dfce24c1d1b --- /dev/null +++ b/packages/kbn-sse-utils-server/src/supertest_to_observable.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", 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 supertest from 'supertest'; +import { PassThrough } from 'stream'; +import { createParser } from 'eventsource-parser'; +import { Observable } from 'rxjs'; + +/** + * Convert a supertest response to an SSE observable. + * + * Note: the supertest response should *NOT* be awaited when using that utility, + * or at least not before calling it. + * + * @example + * ```ts + * const response = supertest + * .post(`/some/sse/endpoint`) + * .set('kbn-xsrf', 'kibana') + * .send({ + * some: 'thing' + * }); + * const events = supertestIntoObservable(response); + * ``` + */ +export function supertestToObservable(response: supertest.Test): Observable { + const stream = new PassThrough(); + response.pipe(stream); + + return new Observable((subscriber) => { + const parser = createParser({ + onEvent: (event) => { + subscriber.next(JSON.parse(event.data)); + }, + }); + + const readStream = async () => { + return new Promise((resolve, reject) => { + const decoder = new TextDecoder(); + + const processChunk = (value: BufferSource) => { + parser.feed(decoder.decode(value, { stream: true })); + }; + + stream.on('data', (chunk) => { + processChunk(chunk); + }); + + stream.on('end', () => resolve()); + stream.on('error', (err) => reject(err)); + }); + }; + + readStream() + .then(() => { + subscriber.complete(); + }) + .catch((error) => { + subscriber.error(error); + }); + }); +} diff --git a/packages/kbn-test/index.ts b/packages/kbn-test/index.ts index bd196e27c8cb0..b5506cc804ad3 100644 --- a/packages/kbn-test/index.ts +++ b/packages/kbn-test/index.ts @@ -22,6 +22,7 @@ export { remapPluginPaths, getKibanaCliArg, getKibanaCliLoggers, + cleanupElasticsearch, } from './src/functional_tests/lib'; export { initLogsDir } from './src/functional_tests/lib'; diff --git a/packages/kbn-test/src/functional_tests/lib/index.ts b/packages/kbn-test/src/functional_tests/lib/index.ts index 23c6ec8331602..62275737f6d47 100644 --- a/packages/kbn-test/src/functional_tests/lib/index.ts +++ b/packages/kbn-test/src/functional_tests/lib/index.ts @@ -8,7 +8,7 @@ */ export { runKibanaServer } from './run_kibana_server'; -export { runElasticsearch } from './run_elasticsearch'; +export { runElasticsearch, cleanupElasticsearch } from './run_elasticsearch'; export * from './run_ftr'; export { parseRawFlags, diff --git a/packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts b/packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts index 964359cdb7ee5..6e082c7083b37 100644 --- a/packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts +++ b/packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts @@ -16,7 +16,7 @@ import { REPO_ROOT } from '@kbn/repo-info'; import type { ArtifactLicense, ServerlessProjectType } from '@kbn/es'; import { isServerlessProjectType, extractAndArchiveLogs } from '@kbn/es/src/utils'; import type { Config } from '../../functional_test_runner'; -import { createTestEsCluster, esTestConfig } from '../../es'; +import { ICluster, createTestEsCluster, esTestConfig } from '../../es'; interface RunElasticsearchOptions { log: ToolingLog; @@ -77,6 +77,19 @@ function getEsConfig({ }; } +export async function cleanupElasticsearch( + node: ICluster, + isServerless: boolean, + logsDir: string | undefined, + log: ToolingLog +): Promise { + await node.cleanup(); + + if (isServerless) { + await extractAndArchiveLogs({ outputFolder: logsDir, log }); + } +} + export async function runElasticsearch( options: RunElasticsearchOptions ): Promise<() => Promise> { @@ -91,8 +104,7 @@ export async function runElasticsearch( config, }); return async () => { - await node.cleanup(); - await extractAndArchiveLogs({ outputFolder: logsDir, log }); + await cleanupElasticsearch(node, config.serverless, logsDir, log); }; } diff --git a/packages/kbn-test/src/kbn_client/kbn_client_requester_error.ts b/packages/kbn-test/src/kbn_client/kbn_client_requester_error.ts index 265f2a60b02f5..f44bf2bcc53ed 100644 --- a/packages/kbn-test/src/kbn_client/kbn_client_requester_error.ts +++ b/packages/kbn-test/src/kbn_client/kbn_client_requester_error.ts @@ -18,6 +18,7 @@ export class KbnClientRequesterError extends Error { } function clean(error: Error): AxiosError { const _ = AxiosError.from(error); + delete _.cause; delete _.config; delete _.request; delete _.response; diff --git a/packages/kbn-triggers-actions-ui-types/rule_types.ts b/packages/kbn-triggers-actions-ui-types/rule_types.ts index 5fe3234e7a136..1d7f8e823b260 100644 --- a/packages/kbn-triggers-actions-ui-types/rule_types.ts +++ b/packages/kbn-triggers-actions-ui-types/rule_types.ts @@ -35,3 +35,7 @@ export interface RuleType< } export type RuleTypeIndex = Map; + +export type RuleTypeWithDescription = RuleType & { description?: string }; + +export type RuleTypeIndexWithDescriptions = Map; diff --git a/packages/kbn-visualization-ui-components/components/field_picker/field_picker.test.tsx b/packages/kbn-visualization-ui-components/components/field_picker/field_picker.test.tsx index 6cdcfaaa8d0ad..a19de192662c2 100644 --- a/packages/kbn-visualization-ui-components/components/field_picker/field_picker.test.tsx +++ b/packages/kbn-visualization-ui-components/components/field_picker/field_picker.test.tsx @@ -10,15 +10,15 @@ import React from 'react'; import { FieldPicker, FieldPickerProps } from './field_picker'; import { render, screen } from '@testing-library/react'; -import faker from 'faker'; +import { faker } from '@faker-js/faker'; import userEvent from '@testing-library/user-event'; import { DataType, FieldOptionValue } from './types'; const generateFieldWithLabelOfLength = (length: number) => ({ - label: faker.random.alpha({ count: length }), + label: faker.string.alpha(length), value: { type: 'field' as const, - field: faker.random.alpha({ count: length }), + field: faker.string.alpha(length), dataType: 'date' as DataType, operationType: 'count', }, diff --git a/packages/response-ops/rule_form/README.md b/packages/response-ops/rule_form/README.md new file mode 100644 index 0000000000000..5196cc65ceedd --- /dev/null +++ b/packages/response-ops/rule_form/README.md @@ -0,0 +1,3 @@ +# @kbn/response-ops-rule-form + +This package contains all components necessary to render the forms for creating and editing rules. diff --git a/packages/response-ops/rule_form/index.ts b/packages/response-ops/rule_form/index.ts new file mode 100644 index 0000000000000..9a654f12bba7b --- /dev/null +++ b/packages/response-ops/rule_form/index.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", 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 * from './src/types'; +export * from './src/rule_type_modal'; + +export { RuleForm } from './src/rule_form'; + +export { + fetchUiConfig, + createRule, + updateRule, + type CreateRuleBody, + UPDATE_FIELDS_WITH_ACTIONS, + transformCreateRuleBody, + transformUpdateRuleBody, + resolveRule, +} from './src/common/apis'; + +export { CREATE_RULE_ROUTE, EDIT_RULE_ROUTE } from './src/constants'; + +export { + RuleActionsNotifyWhen, + RuleActionsAlertsFilter, + RuleActionsAlertsFilterTimeframe, +} from './src/rule_actions'; diff --git a/packages/response-ops/rule_form/jest.config.js b/packages/response-ops/rule_form/jest.config.js new file mode 100644 index 0000000000000..babc1df67680c --- /dev/null +++ b/packages/response-ops/rule_form/jest.config.js @@ -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", 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/response-ops/rule_form'], + setupFilesAfterEnv: ['/packages/response-ops/rule_form/setup_tests.ts'], +}; diff --git a/packages/response-ops/rule_form/kibana.jsonc b/packages/response-ops/rule_form/kibana.jsonc new file mode 100644 index 0000000000000..e8538a088a557 --- /dev/null +++ b/packages/response-ops/rule_form/kibana.jsonc @@ -0,0 +1,5 @@ +{ + "type": "shared-browser", + "id": "@kbn/response-ops-rule-form", + "owner": "@elastic/response-ops" +} diff --git a/packages/response-ops/rule_form/package.json b/packages/response-ops/rule_form/package.json new file mode 100644 index 0000000000000..c3a412a09c9bb --- /dev/null +++ b/packages/response-ops/rule_form/package.json @@ -0,0 +1,6 @@ +{ + "name": "@kbn/response-ops-rule-form", + "private": true, + "version": "1.0.0", + "license": "Elastic License 2.0 OR AGPL-3.0-only OR SSPL-1.0" +} \ No newline at end of file diff --git a/packages/response-ops/rule_form/setup_tests.ts b/packages/response-ops/rule_form/setup_tests.ts new file mode 100644 index 0000000000000..5ebc6d3dac1ca --- /dev/null +++ b/packages/response-ops/rule_form/setup_tests.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", 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". + */ + +// eslint-disable-next-line import/no-extraneous-dependencies +import '@testing-library/jest-dom'; diff --git a/packages/kbn-alerts-ui-shared/src/common/apis/create_rule/create_rule.test.ts b/packages/response-ops/rule_form/src/common/apis/create_rule/create_rule.test.ts similarity index 100% rename from packages/kbn-alerts-ui-shared/src/common/apis/create_rule/create_rule.test.ts rename to packages/response-ops/rule_form/src/common/apis/create_rule/create_rule.test.ts diff --git a/packages/kbn-alerts-ui-shared/src/common/apis/create_rule/create_rule.ts b/packages/response-ops/rule_form/src/common/apis/create_rule/create_rule.ts similarity index 94% rename from packages/kbn-alerts-ui-shared/src/common/apis/create_rule/create_rule.ts rename to packages/response-ops/rule_form/src/common/apis/create_rule/create_rule.ts index 46bbdba958ff0..571bb0712f6aa 100644 --- a/packages/kbn-alerts-ui-shared/src/common/apis/create_rule/create_rule.ts +++ b/packages/response-ops/rule_form/src/common/apis/create_rule/create_rule.ts @@ -11,7 +11,7 @@ import type { HttpSetup } from '@kbn/core/public'; import type { AsApiContract } from '@kbn/actions-types'; import type { Rule } from '../../types'; import { CreateRuleBody, transformCreateRuleBody } from '.'; -import { BASE_ALERTING_API_PATH } from '../../constants'; +import { BASE_ALERTING_API_PATH } from '../../../constants'; import { transformRule } from '../../transformations'; export async function createRule({ diff --git a/packages/kbn-alerts-ui-shared/src/common/apis/create_rule/index.ts b/packages/response-ops/rule_form/src/common/apis/create_rule/index.ts similarity index 100% rename from packages/kbn-alerts-ui-shared/src/common/apis/create_rule/index.ts rename to packages/response-ops/rule_form/src/common/apis/create_rule/index.ts diff --git a/packages/kbn-alerts-ui-shared/src/common/apis/create_rule/transform_create_rule_body.test.ts b/packages/response-ops/rule_form/src/common/apis/create_rule/transform_create_rule_body.test.ts similarity index 100% rename from packages/kbn-alerts-ui-shared/src/common/apis/create_rule/transform_create_rule_body.test.ts rename to packages/response-ops/rule_form/src/common/apis/create_rule/transform_create_rule_body.test.ts diff --git a/packages/kbn-alerts-ui-shared/src/common/apis/create_rule/transform_create_rule_body.ts b/packages/response-ops/rule_form/src/common/apis/create_rule/transform_create_rule_body.ts similarity index 100% rename from packages/kbn-alerts-ui-shared/src/common/apis/create_rule/transform_create_rule_body.ts rename to packages/response-ops/rule_form/src/common/apis/create_rule/transform_create_rule_body.ts diff --git a/packages/kbn-alerts-ui-shared/src/common/apis/create_rule/types.ts b/packages/response-ops/rule_form/src/common/apis/create_rule/types.ts similarity index 100% rename from packages/kbn-alerts-ui-shared/src/common/apis/create_rule/types.ts rename to packages/response-ops/rule_form/src/common/apis/create_rule/types.ts diff --git a/packages/response-ops/rule_form/src/common/apis/fetch_rule_types.ts b/packages/response-ops/rule_form/src/common/apis/fetch_rule_types.ts new file mode 100644 index 0000000000000..bf2da123b8cf5 --- /dev/null +++ b/packages/response-ops/rule_form/src/common/apis/fetch_rule_types.ts @@ -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", 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 { HttpSetup } from '@kbn/core/public'; +import type { AsApiContract, RewriteRequestCase } from '@kbn/actions-types'; +import type { RuleType } from '@kbn/triggers-actions-ui-types'; +import { BASE_ALERTING_API_PATH } from '../../constants'; + +const rewriteResponseRes = (results: Array>): RuleType[] => { + return results.map((item) => rewriteBodyReq(item)); +}; + +const rewriteBodyReq: RewriteRequestCase = ({ + enabled_in_license: enabledInLicense, + recovery_action_group: recoveryActionGroup, + action_groups: actionGroups, + default_action_group_id: defaultActionGroupId, + minimum_license_required: minimumLicenseRequired, + action_variables: actionVariables, + authorized_consumers: authorizedConsumers, + rule_task_timeout: ruleTaskTimeout, + does_set_recovery_context: doesSetRecoveryContext, + default_schedule_interval: defaultScheduleInterval, + has_alerts_mappings: hasAlertsMappings, + has_fields_for_a_a_d: hasFieldsForAAD, + ...rest +}: AsApiContract) => ({ + enabledInLicense, + recoveryActionGroup, + actionGroups, + defaultActionGroupId, + minimumLicenseRequired, + actionVariables, + authorizedConsumers, + ruleTaskTimeout, + doesSetRecoveryContext, + defaultScheduleInterval, + hasAlertsMappings, + hasFieldsForAAD, + ...rest, +}); + +export async function fetchRuleTypes({ http }: { http: HttpSetup }): Promise { + const res = await http.get>>>( + `${BASE_ALERTING_API_PATH}/rule_types` + ); + return rewriteResponseRes(res); +} diff --git a/packages/kbn-alerts-ui-shared/src/common/apis/fetch_ui_config/fetch_ui_config.test.ts b/packages/response-ops/rule_form/src/common/apis/fetch_ui_config/fetch_ui_config.test.ts similarity index 100% rename from packages/kbn-alerts-ui-shared/src/common/apis/fetch_ui_config/fetch_ui_config.test.ts rename to packages/response-ops/rule_form/src/common/apis/fetch_ui_config/fetch_ui_config.test.ts diff --git a/packages/kbn-alerts-ui-shared/src/common/apis/fetch_ui_config/fetch_ui_config.ts b/packages/response-ops/rule_form/src/common/apis/fetch_ui_config/fetch_ui_config.ts similarity index 91% rename from packages/kbn-alerts-ui-shared/src/common/apis/fetch_ui_config/fetch_ui_config.ts rename to packages/response-ops/rule_form/src/common/apis/fetch_ui_config/fetch_ui_config.ts index 89bc5e0bbe5fe..0e33bd0c6497a 100644 --- a/packages/kbn-alerts-ui-shared/src/common/apis/fetch_ui_config/fetch_ui_config.ts +++ b/packages/response-ops/rule_form/src/common/apis/fetch_ui_config/fetch_ui_config.ts @@ -8,7 +8,7 @@ */ import type { HttpStart } from '@kbn/core-http-browser'; -import { BASE_TRIGGERS_ACTIONS_UI_API_PATH } from '../../constants'; +import { BASE_TRIGGERS_ACTIONS_UI_API_PATH } from '../../../constants'; import { UiConfig } from '.'; export const fetchUiConfig = async ({ http }: { http: HttpStart }): Promise => { diff --git a/packages/kbn-alerts-ui-shared/src/common/apis/fetch_ui_config/index.ts b/packages/response-ops/rule_form/src/common/apis/fetch_ui_config/index.ts similarity index 100% rename from packages/kbn-alerts-ui-shared/src/common/apis/fetch_ui_config/index.ts rename to packages/response-ops/rule_form/src/common/apis/fetch_ui_config/index.ts diff --git a/packages/kbn-alerts-ui-shared/src/common/apis/fetch_ui_config/types.ts b/packages/response-ops/rule_form/src/common/apis/fetch_ui_config/types.ts similarity index 100% rename from packages/kbn-alerts-ui-shared/src/common/apis/fetch_ui_config/types.ts rename to packages/response-ops/rule_form/src/common/apis/fetch_ui_config/types.ts diff --git a/packages/response-ops/rule_form/src/common/apis/index.ts b/packages/response-ops/rule_form/src/common/apis/index.ts new file mode 100644 index 0000000000000..58b53aa6aee43 --- /dev/null +++ b/packages/response-ops/rule_form/src/common/apis/index.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", 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 * from './create_rule'; +export * from './fetch_ui_config'; +export * from './resolve_rule'; +export * from './update_rule'; diff --git a/packages/kbn-alerts-ui-shared/src/common/apis/resolve_rule/index.ts b/packages/response-ops/rule_form/src/common/apis/resolve_rule/index.ts similarity index 100% rename from packages/kbn-alerts-ui-shared/src/common/apis/resolve_rule/index.ts rename to packages/response-ops/rule_form/src/common/apis/resolve_rule/index.ts diff --git a/packages/kbn-alerts-ui-shared/src/common/apis/resolve_rule/resolve_rule.test.ts b/packages/response-ops/rule_form/src/common/apis/resolve_rule/resolve_rule.test.ts similarity index 100% rename from packages/kbn-alerts-ui-shared/src/common/apis/resolve_rule/resolve_rule.test.ts rename to packages/response-ops/rule_form/src/common/apis/resolve_rule/resolve_rule.test.ts diff --git a/packages/kbn-alerts-ui-shared/src/common/apis/resolve_rule/resolve_rule.ts b/packages/response-ops/rule_form/src/common/apis/resolve_rule/resolve_rule.ts similarity index 93% rename from packages/kbn-alerts-ui-shared/src/common/apis/resolve_rule/resolve_rule.ts rename to packages/response-ops/rule_form/src/common/apis/resolve_rule/resolve_rule.ts index 6446d27136ee1..9d9141eae9765 100644 --- a/packages/kbn-alerts-ui-shared/src/common/apis/resolve_rule/resolve_rule.ts +++ b/packages/response-ops/rule_form/src/common/apis/resolve_rule/resolve_rule.ts @@ -9,7 +9,7 @@ import { HttpSetup } from '@kbn/core-http-browser'; import { AsApiContract } from '@kbn/actions-types'; -import { INTERNAL_BASE_ALERTING_API_PATH } from '../../constants'; +import { INTERNAL_BASE_ALERTING_API_PATH } from '../../../constants'; import { transformResolvedRule } from '../../transformations'; import { ResolvedRule } from '../../types'; diff --git a/packages/kbn-alerts-ui-shared/src/common/apis/update_rule/index.ts b/packages/response-ops/rule_form/src/common/apis/update_rule/index.ts similarity index 100% rename from packages/kbn-alerts-ui-shared/src/common/apis/update_rule/index.ts rename to packages/response-ops/rule_form/src/common/apis/update_rule/index.ts diff --git a/packages/kbn-alerts-ui-shared/src/common/apis/update_rule/transform_update_rule_body.test.ts b/packages/response-ops/rule_form/src/common/apis/update_rule/transform_update_rule_body.test.ts similarity index 100% rename from packages/kbn-alerts-ui-shared/src/common/apis/update_rule/transform_update_rule_body.test.ts rename to packages/response-ops/rule_form/src/common/apis/update_rule/transform_update_rule_body.test.ts diff --git a/packages/kbn-alerts-ui-shared/src/common/apis/update_rule/transform_update_rule_body.ts b/packages/response-ops/rule_form/src/common/apis/update_rule/transform_update_rule_body.ts similarity index 100% rename from packages/kbn-alerts-ui-shared/src/common/apis/update_rule/transform_update_rule_body.ts rename to packages/response-ops/rule_form/src/common/apis/update_rule/transform_update_rule_body.ts diff --git a/packages/kbn-alerts-ui-shared/src/common/apis/update_rule/types.ts b/packages/response-ops/rule_form/src/common/apis/update_rule/types.ts similarity index 100% rename from packages/kbn-alerts-ui-shared/src/common/apis/update_rule/types.ts rename to packages/response-ops/rule_form/src/common/apis/update_rule/types.ts diff --git a/packages/kbn-alerts-ui-shared/src/common/apis/update_rule/update_rule.test.ts b/packages/response-ops/rule_form/src/common/apis/update_rule/update_rule.test.ts similarity index 100% rename from packages/kbn-alerts-ui-shared/src/common/apis/update_rule/update_rule.test.ts rename to packages/response-ops/rule_form/src/common/apis/update_rule/update_rule.test.ts diff --git a/packages/kbn-alerts-ui-shared/src/common/apis/update_rule/update_rule.ts b/packages/response-ops/rule_form/src/common/apis/update_rule/update_rule.ts similarity index 96% rename from packages/kbn-alerts-ui-shared/src/common/apis/update_rule/update_rule.ts rename to packages/response-ops/rule_form/src/common/apis/update_rule/update_rule.ts index d5fd360a0c949..413a23e5fb279 100644 --- a/packages/kbn-alerts-ui-shared/src/common/apis/update_rule/update_rule.ts +++ b/packages/response-ops/rule_form/src/common/apis/update_rule/update_rule.ts @@ -11,7 +11,7 @@ import { HttpSetup } from '@kbn/core/public'; import { pick } from 'lodash'; import { AsApiContract } from '@kbn/actions-types'; import { UpdateRuleBody } from './types'; -import { BASE_ALERTING_API_PATH } from '../../constants'; +import { BASE_ALERTING_API_PATH } from '../../../constants'; import { transformUpdateRuleBody } from './transform_update_rule_body'; import { transformRule } from '../../transformations'; import { Rule } from '../../types'; diff --git a/packages/response-ops/rule_form/src/common/hooks/index.ts b/packages/response-ops/rule_form/src/common/hooks/index.ts new file mode 100644 index 0000000000000..57a70045552a8 --- /dev/null +++ b/packages/response-ops/rule_form/src/common/hooks/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", 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 * from './use_create_rule'; +export * from './use_load_connector_types'; +export * from './use_load_connectors'; +export * from './use_load_ui_config'; +export * from './use_resolve_rule'; +export * from './use_update_rule'; diff --git a/packages/kbn-alerts-ui-shared/src/common/hooks/use_create_rule.test.tsx b/packages/response-ops/rule_form/src/common/hooks/use_create_rule.test.tsx similarity index 100% rename from packages/kbn-alerts-ui-shared/src/common/hooks/use_create_rule.test.tsx rename to packages/response-ops/rule_form/src/common/hooks/use_create_rule.test.tsx diff --git a/packages/kbn-alerts-ui-shared/src/common/hooks/use_create_rule.ts b/packages/response-ops/rule_form/src/common/hooks/use_create_rule.ts similarity index 100% rename from packages/kbn-alerts-ui-shared/src/common/hooks/use_create_rule.ts rename to packages/response-ops/rule_form/src/common/hooks/use_create_rule.ts diff --git a/packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connector_types.test.tsx b/packages/response-ops/rule_form/src/common/hooks/use_load_connector_types.test.tsx similarity index 100% rename from packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connector_types.test.tsx rename to packages/response-ops/rule_form/src/common/hooks/use_load_connector_types.test.tsx diff --git a/packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connector_types.ts b/packages/response-ops/rule_form/src/common/hooks/use_load_connector_types.ts similarity index 92% rename from packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connector_types.ts rename to packages/response-ops/rule_form/src/common/hooks/use_load_connector_types.ts index a72315c19e798..950f77346ef68 100644 --- a/packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connector_types.ts +++ b/packages/response-ops/rule_form/src/common/hooks/use_load_connector_types.ts @@ -9,7 +9,7 @@ import { useQuery } from '@tanstack/react-query'; import type { HttpStart } from '@kbn/core-http-browser'; -import { fetchConnectorTypes } from '../apis'; +import { fetchConnectorTypes } from '@kbn/alerts-ui-shared/src/common/apis/fetch_connector_types'; export interface UseLoadConnectorTypesProps { http: HttpStart; diff --git a/packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connectors.test.tsx b/packages/response-ops/rule_form/src/common/hooks/use_load_connectors.test.tsx similarity index 100% rename from packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connectors.test.tsx rename to packages/response-ops/rule_form/src/common/hooks/use_load_connectors.test.tsx diff --git a/packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connectors.ts b/packages/response-ops/rule_form/src/common/hooks/use_load_connectors.ts similarity index 93% rename from packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connectors.ts rename to packages/response-ops/rule_form/src/common/hooks/use_load_connectors.ts index 8c93881762b1a..d6e77b5b42571 100644 --- a/packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connectors.ts +++ b/packages/response-ops/rule_form/src/common/hooks/use_load_connectors.ts @@ -9,7 +9,7 @@ import { useQuery } from '@tanstack/react-query'; import type { HttpStart } from '@kbn/core-http-browser'; -import { fetchConnectors } from '../apis'; +import { fetchConnectors } from '@kbn/alerts-ui-shared/src/common/apis/fetch_connectors'; export interface UseLoadConnectorsProps { http: HttpStart; diff --git a/packages/kbn-alerts-ui-shared/src/common/hooks/use_load_rule_type_aad_template_fields.test.tsx b/packages/response-ops/rule_form/src/common/hooks/use_load_rule_type_aad_template_fields.test.tsx similarity index 100% rename from packages/kbn-alerts-ui-shared/src/common/hooks/use_load_rule_type_aad_template_fields.test.tsx rename to packages/response-ops/rule_form/src/common/hooks/use_load_rule_type_aad_template_fields.test.tsx diff --git a/packages/kbn-alerts-ui-shared/src/common/hooks/use_load_rule_type_aad_template_fields.ts b/packages/response-ops/rule_form/src/common/hooks/use_load_rule_type_aad_template_fields.ts similarity index 91% rename from packages/kbn-alerts-ui-shared/src/common/hooks/use_load_rule_type_aad_template_fields.ts rename to packages/response-ops/rule_form/src/common/hooks/use_load_rule_type_aad_template_fields.ts index c9dbc6c75ff35..90c98d3c8153d 100644 --- a/packages/kbn-alerts-ui-shared/src/common/hooks/use_load_rule_type_aad_template_fields.ts +++ b/packages/response-ops/rule_form/src/common/hooks/use_load_rule_type_aad_template_fields.ts @@ -11,7 +11,10 @@ import { EcsFlat } from '@elastic/ecs'; import { ActionVariable } from '@kbn/alerting-types'; import type { HttpStart } from '@kbn/core-http-browser'; import { useQuery } from '@tanstack/react-query'; -import { fetchRuleTypeAadTemplateFields, getDescription } from '../apis'; +import { + fetchRuleTypeAadTemplateFields, + getDescription, +} from '@kbn/alerts-ui-shared/src/common/apis'; export interface UseLoadRuleTypeAadTemplateFieldProps { http: HttpStart; @@ -23,7 +26,7 @@ export interface UseLoadRuleTypeAadTemplateFieldProps { export const useLoadRuleTypeAadTemplateField = (props: UseLoadRuleTypeAadTemplateFieldProps) => { const { http, ruleTypeId, enabled, cacheTime } = props; - const queryFn = () => { + const queryFn = async () => { if (!ruleTypeId) { return; } diff --git a/packages/kbn-alerts-ui-shared/src/common/hooks/use_load_ui_config.ts b/packages/response-ops/rule_form/src/common/hooks/use_load_ui_config.ts similarity index 100% rename from packages/kbn-alerts-ui-shared/src/common/hooks/use_load_ui_config.ts rename to packages/response-ops/rule_form/src/common/hooks/use_load_ui_config.ts diff --git a/packages/kbn-alerts-ui-shared/src/common/hooks/use_resolve_rule.test.tsx b/packages/response-ops/rule_form/src/common/hooks/use_resolve_rule.test.tsx similarity index 100% rename from packages/kbn-alerts-ui-shared/src/common/hooks/use_resolve_rule.test.tsx rename to packages/response-ops/rule_form/src/common/hooks/use_resolve_rule.test.tsx diff --git a/packages/kbn-alerts-ui-shared/src/common/hooks/use_resolve_rule.ts b/packages/response-ops/rule_form/src/common/hooks/use_resolve_rule.ts similarity index 97% rename from packages/kbn-alerts-ui-shared/src/common/hooks/use_resolve_rule.ts rename to packages/response-ops/rule_form/src/common/hooks/use_resolve_rule.ts index 95c3ca6baad02..ea480b4039e86 100644 --- a/packages/kbn-alerts-ui-shared/src/common/hooks/use_resolve_rule.ts +++ b/packages/response-ops/rule_form/src/common/hooks/use_resolve_rule.ts @@ -10,7 +10,7 @@ import { useQuery } from '@tanstack/react-query'; import type { HttpStart } from '@kbn/core-http-browser'; import { resolveRule } from '../apis/resolve_rule'; -import { RuleFormData } from '../../rule_form'; +import { RuleFormData } from '../../types'; export interface UseResolveProps { http: HttpStart; diff --git a/packages/kbn-alerts-ui-shared/src/common/hooks/use_update_rule.test.tsx b/packages/response-ops/rule_form/src/common/hooks/use_update_rule.test.tsx similarity index 100% rename from packages/kbn-alerts-ui-shared/src/common/hooks/use_update_rule.test.tsx rename to packages/response-ops/rule_form/src/common/hooks/use_update_rule.test.tsx diff --git a/packages/kbn-alerts-ui-shared/src/common/hooks/use_update_rule.ts b/packages/response-ops/rule_form/src/common/hooks/use_update_rule.ts similarity index 100% rename from packages/kbn-alerts-ui-shared/src/common/hooks/use_update_rule.ts rename to packages/response-ops/rule_form/src/common/hooks/use_update_rule.ts diff --git a/packages/kbn-alerts-ui-shared/src/common/i18n.ts b/packages/response-ops/rule_form/src/common/i18n.ts similarity index 53% rename from packages/kbn-alerts-ui-shared/src/common/i18n.ts rename to packages/response-ops/rule_form/src/common/i18n.ts index 754ab78e12249..9cb100485ebbc 100644 --- a/packages/kbn-alerts-ui-shared/src/common/i18n.ts +++ b/packages/response-ops/rule_form/src/common/i18n.ts @@ -10,37 +10,37 @@ import { i18n } from '@kbn/i18n'; export const PRODUCER_DISPLAY_NAMES = { - apm: i18n.translate('alertsUIShared.producerDisplayNames.apm', { + apm: i18n.translate('responseOpsRuleForm.producerDisplayNames.apm', { defaultMessage: 'APM and User Experience', }), - uptime: i18n.translate('alertsUIShared.producerDisplayNames.uptime', { + uptime: i18n.translate('responseOpsRuleForm.producerDisplayNames.uptime', { defaultMessage: 'Synthetics and Uptime', }), - stackAlerts: i18n.translate('alertsUIShared.producerDisplayNames.stackAlerts', { + stackAlerts: i18n.translate('responseOpsRuleForm.producerDisplayNames.stackAlerts', { defaultMessage: 'Stack Alerts', }), - metrics: i18n.translate('alertsUIShared.producerDisplayNames.metrics', { + metrics: i18n.translate('responseOpsRuleForm.producerDisplayNames.metrics', { defaultMessage: 'Metrics', }), - logs: i18n.translate('alertsUIShared.producerDisplayNames.logs', { + logs: i18n.translate('responseOpsRuleForm.producerDisplayNames.logs', { defaultMessage: 'Logs', }), - siem: i18n.translate('alertsUIShared.producerDisplayNames.siem', { + siem: i18n.translate('responseOpsRuleForm.producerDisplayNames.siem', { defaultMessage: 'Security', }), - observability: i18n.translate('alertsUIShared.producerDisplayNames.observability', { + observability: i18n.translate('responseOpsRuleForm.producerDisplayNames.observability', { defaultMessage: 'Observability', }), - ml: i18n.translate('alertsUIShared.producerDisplayNames.ml', { + ml: i18n.translate('responseOpsRuleForm.producerDisplayNames.ml', { defaultMessage: 'Machine Learning', }), - slo: i18n.translate('alertsUIShared.producerDisplayNames.slo', { + slo: i18n.translate('responseOpsRuleForm.producerDisplayNames.slo', { defaultMessage: 'SLOs', }), - infrastructure: i18n.translate('alertsUIShared.producerDisplayNames.infrastructure', { + infrastructure: i18n.translate('responseOpsRuleForm.producerDisplayNames.infrastructure', { defaultMessage: 'Infrastructure', }), - monitoring: i18n.translate('alertsUIShared.producerDisplayNames.monitoring', { + monitoring: i18n.translate('responseOpsRuleForm.producerDisplayNames.monitoring', { defaultMessage: 'Stack Monitoring', }), }; diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/index.ts b/packages/response-ops/rule_form/src/common/index.ts similarity index 93% rename from packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/index.ts rename to packages/response-ops/rule_form/src/common/index.ts index f250421b5e716..34d385a3f5d62 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/index.ts +++ b/packages/response-ops/rule_form/src/common/index.ts @@ -7,4 +7,4 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -export * from './rule_actions'; +export * from './types'; diff --git a/packages/kbn-alerts-ui-shared/src/common/test_utils/actions_test_utils.ts b/packages/response-ops/rule_form/src/common/test_utils/actions_test_utils.ts similarity index 91% rename from packages/kbn-alerts-ui-shared/src/common/test_utils/actions_test_utils.ts rename to packages/response-ops/rule_form/src/common/test_utils/actions_test_utils.ts index 01f88ab1e01b4..1551541013064 100644 --- a/packages/kbn-alerts-ui-shared/src/common/test_utils/actions_test_utils.ts +++ b/packages/response-ops/rule_form/src/common/test_utils/actions_test_utils.ts @@ -9,8 +9,13 @@ import { ActionType } from '@kbn/actions-types'; import { RuleSystemAction } from '@kbn/alerting-types'; -import { ActionConnector, ActionTypeModel, GenericValidationResult, RuleAction } from '../types'; -import { actionTypeRegistryMock } from './action_type_registry.mock'; +import { + ActionConnector, + ActionTypeModel, + GenericValidationResult, + RuleAction, +} from '@kbn/alerts-ui-shared'; +import { actionTypeRegistryMock } from '@kbn/alerts-ui-shared/src/common/test_utils/action_type_registry.mock'; export const getConnector = ( id: string, diff --git a/packages/response-ops/rule_form/src/common/transformations/index.ts b/packages/response-ops/rule_form/src/common/transformations/index.ts new file mode 100644 index 0000000000000..2f0fd7d84539b --- /dev/null +++ b/packages/response-ops/rule_form/src/common/transformations/index.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", 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 * from './transform_rule'; diff --git a/packages/kbn-alerts-ui-shared/src/common/transformations/transform_rule.ts b/packages/response-ops/rule_form/src/common/transformations/transform_rule.ts similarity index 95% rename from packages/kbn-alerts-ui-shared/src/common/transformations/transform_rule.ts rename to packages/response-ops/rule_form/src/common/transformations/transform_rule.ts index b04e98887f2e5..d1f11c4109ed1 100644 --- a/packages/kbn-alerts-ui-shared/src/common/transformations/transform_rule.ts +++ b/packages/response-ops/rule_form/src/common/transformations/transform_rule.ts @@ -9,8 +9,8 @@ import { AsApiContract, RewriteRequestCase } from '@kbn/actions-types'; import { RuleExecutionStatus, RuleLastRun } from '@kbn/alerting-types'; -import type { ResolvedRule, RuleUiAction, Rule } from '..'; -import { transformAction } from '.'; +import { transformAction } from '@kbn/alerts-ui-shared/src/common/transformations'; +import type { ResolvedRule, Rule, RuleUiAction } from '..'; const transformExecutionStatus: RewriteRequestCase = ({ last_execution_date: lastExecutionDate, diff --git a/packages/response-ops/rule_form/src/common/types/index.ts b/packages/response-ops/rule_form/src/common/types/index.ts new file mode 100644 index 0000000000000..a9486c387724a --- /dev/null +++ b/packages/response-ops/rule_form/src/common/types/index.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", 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 * from '@kbn/alerts-ui-shared/src/common/types/rule_types'; diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/constants.ts b/packages/response-ops/rule_form/src/constants/index.ts similarity index 84% rename from packages/kbn-alerts-ui-shared/src/rule_form/constants.ts rename to packages/response-ops/rule_form/src/constants/index.ts index a3748eeabe697..78718f7e11de1 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/constants.ts +++ b/packages/response-ops/rule_form/src/constants/index.ts @@ -7,15 +7,20 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import { RuleNotifyWhen } from '@kbn/alerting-types'; import { + AlertConsumers, ES_QUERY_ID, - OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, ML_ANOMALY_DETECTION_RULE_TYPE_ID, + OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, RuleCreationValidConsumer, - AlertConsumers, } from '@kbn/rule-data-utils'; -import { RuleNotifyWhen } from '@kbn/alerting-types'; -import { RuleFormData } from './types'; +import { RuleFormData } from '../types'; + +export * from './routes'; +export * from './rule_flapping'; + +export const VIEW_LICENSE_OPTIONS_LINK = 'https://www.elastic.co/subscriptions'; export const DEFAULT_RULE_INTERVAL = '1m'; @@ -67,5 +72,5 @@ export const DEFAULT_VALID_CONSUMERS: RuleCreationValidConsumer[] = [ 'alerts', ]; -export const createRuleRoute = '/rule/create/:ruleTypeId' as const; -export const editRuleRoute = '/rule/edit/:id' as const; +export const CREATE_RULE_ROUTE = '/rule/create/:ruleTypeId' as const; +export const EDIT_RULE_ROUTE = '/rule/edit/:id' as const; diff --git a/packages/response-ops/rule_form/src/constants/routes.ts b/packages/response-ops/rule_form/src/constants/routes.ts new file mode 100644 index 0000000000000..a447f83c13ef2 --- /dev/null +++ b/packages/response-ops/rule_form/src/constants/routes.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", 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 const BASE_ALERTING_API_PATH = '/api/alerting'; +export const INTERNAL_BASE_ALERTING_API_PATH = '/internal/alerting'; +export const BASE_TRIGGERS_ACTIONS_UI_API_PATH = '/internal/triggers_actions_ui'; diff --git a/packages/response-ops/rule_form/src/constants/rule_flapping.ts b/packages/response-ops/rule_form/src/constants/rule_flapping.ts new file mode 100644 index 0000000000000..542bb055fd431 --- /dev/null +++ b/packages/response-ops/rule_form/src/constants/rule_flapping.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", 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". + */ + +// Feature flag for frontend rule specific flapping in rule flyout +export const IS_RULE_SPECIFIC_FLAPPING_ENABLED = true; diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/create_rule_form.tsx b/packages/response-ops/rule_form/src/create_rule_form.tsx similarity index 99% rename from packages/kbn-alerts-ui-shared/src/rule_form/create_rule_form.tsx rename to packages/response-ops/rule_form/src/create_rule_form.tsx index b0d95a7d5c2c9..d7ba545935495 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/create_rule_form.tsx +++ b/packages/response-ops/rule_form/src/create_rule_form.tsx @@ -14,7 +14,7 @@ import { type RuleCreationValidConsumer } from '@kbn/rule-data-utils'; import type { RuleFormData, RuleFormPlugins } from './types'; import { DEFAULT_VALID_CONSUMERS, getDefaultFormData } from './constants'; import { RuleFormStateProvider } from './rule_form_state'; -import { useCreateRule } from '../common/hooks'; +import { useCreateRule } from './common/hooks'; import { RulePage } from './rule_page'; import { RuleFormCircuitBreakerError, diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/edit_rule_form.tsx b/packages/response-ops/rule_form/src/edit_rule_form.tsx similarity index 99% rename from packages/kbn-alerts-ui-shared/src/rule_form/edit_rule_form.tsx rename to packages/response-ops/rule_form/src/edit_rule_form.tsx index ace31d1b7b6fb..7350a42475b69 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/edit_rule_form.tsx +++ b/packages/response-ops/rule_form/src/edit_rule_form.tsx @@ -12,7 +12,7 @@ import { EuiLoadingElastic } from '@elastic/eui'; import { toMountPoint } from '@kbn/react-kibana-mount'; import type { RuleFormData, RuleFormPlugins } from './types'; import { RuleFormStateProvider } from './rule_form_state'; -import { useUpdateRule } from '../common/hooks'; +import { useUpdateRule } from './common/hooks'; import { RulePage } from './rule_page'; import { RuleFormHealthCheckError } from './rule_form_errors/rule_form_health_check_error'; import { useLoadDependencies } from './hooks/use_load_dependencies'; diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/hooks/index.ts b/packages/response-ops/rule_form/src/hooks/index.ts similarity index 100% rename from packages/kbn-alerts-ui-shared/src/rule_form/hooks/index.ts rename to packages/response-ops/rule_form/src/hooks/index.ts diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/hooks/use_load_dependencies.test.tsx b/packages/response-ops/rule_form/src/hooks/use_load_dependencies.test.tsx similarity index 88% rename from packages/kbn-alerts-ui-shared/src/rule_form/hooks/use_load_dependencies.test.tsx rename to packages/response-ops/rule_form/src/hooks/use_load_dependencies.test.tsx index 3dd6a6a3cee11..227240efbf8e7 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/hooks/use_load_dependencies.test.tsx +++ b/packages/response-ops/rule_form/src/hooks/use_load_dependencies.test.tsx @@ -14,52 +14,56 @@ import type { HttpStart } from '@kbn/core-http-browser'; import type { ToastsStart } from '@kbn/core-notifications-browser'; import { useLoadDependencies } from './use_load_dependencies'; -import { RuleTypeRegistryContract } from '../../common'; +import type { RuleTypeRegistryContract } from '../common/types'; import { ApplicationStart } from '@kbn/core-application-browser'; -jest.mock('../../common/hooks/use_load_ui_config', () => ({ +jest.mock('../common/hooks/use_load_ui_config', () => ({ useLoadUiConfig: jest.fn(), })); -jest.mock('../../common/hooks/use_health_check', () => ({ +jest.mock('@kbn/alerts-ui-shared/src/common/hooks/use_health_check', () => ({ useHealthCheck: jest.fn(), })); -jest.mock('../../common/hooks/use_resolve_rule', () => ({ +jest.mock('../common/hooks/use_resolve_rule', () => ({ useResolveRule: jest.fn(), })); -jest.mock('../../common/hooks/use_load_rule_types_query', () => ({ +jest.mock('@kbn/alerts-ui-shared/src/common/hooks/use_load_rule_types_query', () => ({ useLoadRuleTypesQuery: jest.fn(), })); -jest.mock('../../common/hooks/use_load_connectors', () => ({ +jest.mock('../common/hooks/use_load_connectors', () => ({ useLoadConnectors: jest.fn(), })); -jest.mock('../../common/hooks/use_load_connector_types', () => ({ +jest.mock('../common/hooks/use_load_connector_types', () => ({ useLoadConnectorTypes: jest.fn(), })); -jest.mock('../../common/hooks/use_load_rule_type_aad_template_fields', () => ({ +jest.mock('../common/hooks/use_load_rule_type_aad_template_fields', () => ({ useLoadRuleTypeAadTemplateField: jest.fn(), })); -jest.mock('../../common/hooks/use_fetch_flapping_settings', () => ({ +jest.mock('@kbn/alerts-ui-shared/src/common/hooks/use_fetch_flapping_settings', () => ({ useFetchFlappingSettings: jest.fn(), })); -const { useLoadUiConfig } = jest.requireMock('../../common/hooks/use_load_ui_config'); -const { useHealthCheck } = jest.requireMock('../../common/hooks/use_health_check'); -const { useResolveRule } = jest.requireMock('../../common/hooks/use_resolve_rule'); -const { useLoadConnectors } = jest.requireMock('../../common/hooks/use_load_connectors'); -const { useLoadConnectorTypes } = jest.requireMock('../../common/hooks/use_load_connector_types'); +const { useLoadUiConfig } = jest.requireMock('../common/hooks/use_load_ui_config'); +const { useHealthCheck } = jest.requireMock( + '@kbn/alerts-ui-shared/src/common/hooks/use_health_check' +); +const { useResolveRule } = jest.requireMock('../common/hooks/use_resolve_rule'); +const { useLoadConnectors } = jest.requireMock('../common/hooks/use_load_connectors'); +const { useLoadConnectorTypes } = jest.requireMock('../common/hooks/use_load_connector_types'); const { useLoadRuleTypeAadTemplateField } = jest.requireMock( - '../../common/hooks/use_load_rule_type_aad_template_fields' + '../common/hooks/use_load_rule_type_aad_template_fields' +); +const { useLoadRuleTypesQuery } = jest.requireMock( + '@kbn/alerts-ui-shared/src/common/hooks/use_load_rule_types_query' ); -const { useLoadRuleTypesQuery } = jest.requireMock('../../common/hooks/use_load_rule_types_query'); const { useFetchFlappingSettings } = jest.requireMock( - '../../common/hooks/use_fetch_flapping_settings' + '@kbn/alerts-ui-shared/src/common/hooks/use_fetch_flapping_settings' ); const uiConfigMock = { diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/hooks/use_load_dependencies.ts b/packages/response-ops/rule_form/src/hooks/use_load_dependencies.ts similarity index 92% rename from packages/kbn-alerts-ui-shared/src/rule_form/hooks/use_load_dependencies.ts rename to packages/response-ops/rule_form/src/hooks/use_load_dependencies.ts index b4a7d3bb777b0..1cd734f9c837a 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/hooks/use_load_dependencies.ts +++ b/packages/response-ops/rule_form/src/hooks/use_load_dependencies.ts @@ -7,23 +7,25 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { HttpStart } from '@kbn/core-http-browser'; +import type { HttpStart } from '@kbn/core-http-browser'; import type { ToastsStart } from '@kbn/core-notifications-browser'; -import { ApplicationStart } from '@kbn/core-application-browser'; +import type { ApplicationStart } from '@kbn/core-application-browser'; import { RuleCreationValidConsumer } from '@kbn/rule-data-utils'; import { useMemo } from 'react'; import { useHealthCheck, + useLoadRuleTypesQuery, + useFetchFlappingSettings, +} from '@kbn/alerts-ui-shared'; +import { useLoadConnectors, useLoadConnectorTypes, - useLoadRuleTypesQuery, useLoadUiConfig, useResolveRule, -} from '../../common/hooks'; -import { RuleTypeRegistryContract } from '../../common'; -import { useFetchFlappingSettings } from '../../common/hooks/use_fetch_flapping_settings'; -import { IS_RULE_SPECIFIC_FLAPPING_ENABLED } from '../../common/constants/rule_flapping'; -import { useLoadRuleTypeAadTemplateField } from '../../common/hooks/use_load_rule_type_aad_template_fields'; +} from '../common/hooks'; +import type { RuleTypeRegistryContract } from '../common/types'; +import { IS_RULE_SPECIFIC_FLAPPING_ENABLED } from '../constants'; +import { useLoadRuleTypeAadTemplateField } from '../common/hooks/use_load_rule_type_aad_template_fields'; export interface UseLoadDependencies { http: HttpStart; diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/hooks/use_rule_form_dispatch.ts b/packages/response-ops/rule_form/src/hooks/use_rule_form_dispatch.ts similarity index 100% rename from packages/kbn-alerts-ui-shared/src/rule_form/hooks/use_rule_form_dispatch.ts rename to packages/response-ops/rule_form/src/hooks/use_rule_form_dispatch.ts diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/hooks/use_rule_form_state.ts b/packages/response-ops/rule_form/src/hooks/use_rule_form_state.ts similarity index 100% rename from packages/kbn-alerts-ui-shared/src/rule_form/hooks/use_rule_form_state.ts rename to packages/response-ops/rule_form/src/hooks/use_rule_form_state.ts diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/index.ts b/packages/response-ops/rule_form/src/rule_actions/index.ts similarity index 71% rename from packages/kbn-alerts-ui-shared/src/rule_form/index.ts rename to packages/response-ops/rule_form/src/rule_actions/index.ts index cb175c6827459..6269ff1b48fbd 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/index.ts +++ b/packages/response-ops/rule_form/src/rule_actions/index.ts @@ -7,11 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -export * from './rule_definition'; export * from './rule_actions'; -export * from './rule_details'; -export * from './rule_page'; -export * from './rule_form'; -export * from './utils'; -export * from './types'; -export * from './constants'; +export * from './rule_actions_notify_when'; +export * from './rule_actions_alerts_filter'; +export * from './rule_actions_alerts_filter_timeframe'; diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions.test.tsx b/packages/response-ops/rule_form/src/rule_actions/rule_actions.test.tsx similarity index 96% rename from packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions.test.tsx rename to packages/response-ops/rule_form/src/rule_actions/rule_actions.test.tsx index 9560d933060f6..e172405e3695b 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions.test.tsx +++ b/packages/response-ops/rule_form/src/rule_actions/rule_actions.test.tsx @@ -17,11 +17,11 @@ import { getSystemAction, getConnector, getActionTypeModel, -} from '../../common/test_utils/actions_test_utils'; +} from '../common/test_utils/actions_test_utils'; import userEvent from '@testing-library/user-event'; -import { ActionConnector, ActionTypeModel } from '../../common/types'; +import type { ActionConnector, ActionTypeModel } from '@kbn/alerts-ui-shared'; +import { TypeRegistry } from '@kbn/alerts-ui-shared/lib'; import { RuleActionsItemProps } from './rule_actions_item'; -import { TypeRegistry } from '../../common/type_registry'; const http = httpServiceMock.createStartContract(); @@ -84,7 +84,7 @@ jest.mock('uuid', () => ({ v4: jest.fn().mockReturnValue('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'), })); -jest.mock('../../common/hooks', () => ({ +jest.mock('../common/hooks', () => ({ useLoadConnectors: jest.fn(), useLoadConnectorTypes: jest.fn(), useLoadRuleTypeAadTemplateField: jest.fn(), @@ -96,7 +96,7 @@ const mockValidate = jest.fn().mockResolvedValue({ const { useRuleFormState, useRuleFormDispatch } = jest.requireMock('../hooks'); const { useLoadConnectors, useLoadConnectorTypes, useLoadRuleTypeAadTemplateField } = - jest.requireMock('../../common/hooks'); + jest.requireMock('../common/hooks'); const mockConnectors = [getConnector('1')]; const mockConnectorTypes = [ diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions.tsx b/packages/response-ops/rule_form/src/rule_actions/rule_actions.tsx similarity index 97% rename from packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions.tsx rename to packages/response-ops/rule_form/src/rule_actions/rule_actions.tsx index 47588b487be6d..2479c07edfb5f 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions.tsx +++ b/packages/response-ops/rule_form/src/rule_actions/rule_actions.tsx @@ -11,10 +11,11 @@ import React, { useCallback, useMemo, useState } from 'react'; import { EuiButton, EuiSpacer, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { v4 as uuidv4 } from 'uuid'; import { RuleSystemAction } from '@kbn/alerting-types'; +import { ActionConnector } from '@kbn/alerts-ui-shared'; import { ADD_ACTION_TEXT } from '../translations'; import { RuleActionsConnectorsModal } from './rule_actions_connectors_modal'; import { useRuleFormDispatch, useRuleFormState } from '../hooks'; -import { ActionConnector, RuleAction, RuleFormParamsErrors } from '../../common/types'; +import { RuleAction, RuleFormParamsErrors } from '../common/types'; import { DEFAULT_FREQUENCY, MULTI_CONSUMER_RULE_TYPE_IDS } from '../constants'; import { RuleActionsItem } from './rule_actions_item'; import { RuleActionsSystemActionsItem } from './rule_actions_system_actions_item'; diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_alerts_filter.test.tsx b/packages/response-ops/rule_form/src/rule_actions/rule_actions_alerts_filter.test.tsx similarity index 97% rename from packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_alerts_filter.test.tsx rename to packages/response-ops/rule_form/src/rule_actions/rule_actions_alerts_filter.test.tsx index 0d97c7b5a1e12..947508751fe9f 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_alerts_filter.test.tsx +++ b/packages/response-ops/rule_form/src/rule_actions/rule_actions_alerts_filter.test.tsx @@ -12,8 +12,8 @@ import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { httpServiceMock } from '@kbn/core/public/mocks'; import { FilterStateStore } from '@kbn/es-query'; -import { AlertsSearchBarProps, AlertsSearchBar } from '../../alerts_search_bar'; -import { getAction } from '../../common/test_utils/actions_test_utils'; +import { AlertsSearchBarProps, AlertsSearchBar } from '@kbn/alerts-ui-shared'; +import { getAction } from '../common/test_utils/actions_test_utils'; import { RuleActionsAlertsFilter } from './rule_actions_alerts_filter'; const http = httpServiceMock.createStartContract(); @@ -22,7 +22,7 @@ jest.mock('../hooks', () => ({ useRuleFormState: jest.fn(), })); -jest.mock('../../alerts_search_bar', () => ({ +jest.mock('@kbn/alerts-ui-shared', () => ({ AlertsSearchBar: jest.fn(), })); diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_alerts_filter.tsx b/packages/response-ops/rule_form/src/rule_actions/rule_actions_alerts_filter.tsx similarity index 91% rename from packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_alerts_filter.tsx rename to packages/response-ops/rule_form/src/rule_actions/rule_actions_alerts_filter.tsx index a305c45d7961a..1fb4806b2aff8 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_alerts_filter.tsx +++ b/packages/response-ops/rule_form/src/rule_actions/rule_actions_alerts_filter.tsx @@ -7,16 +7,16 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import React, { useCallback, useEffect, useMemo, useState } from 'react'; +import { EuiSpacer, EuiSwitch } from '@elastic/eui'; +import type { AlertsFilter } from '@kbn/alerting-types'; +import { AlertsSearchBar, type AlertsSearchBarProps } from '@kbn/alerts-ui-shared'; import { Filter } from '@kbn/es-query'; import { i18n } from '@kbn/i18n'; -import { EuiSwitch, EuiSpacer } from '@elastic/eui'; -import type { AlertsFilter } from '@kbn/alerting-types'; import deepEqual from 'fast-deep-equal'; +import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { useRuleFormState } from '../hooks'; -import { RuleAction } from '../../common'; +import type { RuleAction } from '../types'; import { RuleFormPlugins } from '../types'; -import { AlertsSearchBar, AlertsSearchBarProps } from '../../alerts_search_bar'; const DEFAULT_QUERY = { kql: '', filters: [] }; @@ -104,7 +104,7 @@ export const RuleActionsAlertsFilter = ({ <> { async function setup(timeframe?: AlertsFilterTimeframe) { diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_alerts_filter_timeframe.tsx b/packages/response-ops/rule_form/src/rule_actions/rule_actions_alerts_filter_timeframe.tsx similarity index 94% rename from packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_alerts_filter_timeframe.tsx rename to packages/response-ops/rule_form/src/rule_actions/rule_actions_alerts_filter_timeframe.tsx index 2c37b7de470e4..79c0287adabc1 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_alerts_filter_timeframe.tsx +++ b/packages/response-ops/rule_form/src/rule_actions/rule_actions_alerts_filter_timeframe.tsx @@ -23,8 +23,8 @@ import { } from '@elastic/eui'; import deepEqual from 'fast-deep-equal'; import { ISO_WEEKDAYS, type IsoWeekday, type AlertsFilterTimeframe } from '@kbn/alerting-types'; -import { I18N_WEEKDAY_OPTIONS_DDD } from '../../common/constants'; -import { RuleAction } from '../../common'; +import { I18N_WEEKDAY_OPTIONS_DDD } from '@kbn/alerts-ui-shared/src/common/constants'; +import type { RuleAction } from '../types'; export interface RuleActionsAlertsFilterTimeframeProps { action: RuleAction; @@ -159,7 +159,7 @@ export const RuleActionsAlertsFilterTimeframe: React.FC ({ useRuleFormState: jest.fn(), @@ -195,6 +195,92 @@ describe('ruleActionsConnectorsModal', () => { expect(screen.queryByText('connector2')).not.toBeInTheDocument(); }); + test('should not render connector filter if hideInUi is true', async () => { + const actionTypeRegistry = new TypeRegistry(); + actionTypeRegistry.register( + getActionTypeModel('1', { + id: 'actionType-1', + subtype: [ + { id: 'actionType-1', name: 'connector-1' }, + { id: 'actionType-2', name: 'connector-2' }, + ], + }) + ); + actionTypeRegistry.register( + getActionTypeModel('2', { + id: 'actionType-2', + hideInUi: true, + subtype: [ + { id: 'actionType-1', name: 'connector-1' }, + { id: 'actionType-2', name: 'connector-2' }, + ], + }) + ); + useRuleFormState.mockReturnValue({ + plugins: { + actionTypeRegistry, + }, + formData: { + actions: [], + }, + connectors: mockConnectors, + connectorTypes: mockActionTypes, + }); + + render( + + ); + const filterButtonGroup = screen.getByTestId('ruleActionsConnectorsModalFilterButtonGroup'); + expect(within(filterButtonGroup).getByText('actionType: 1')).toBeInTheDocument(); + expect(within(filterButtonGroup).queryByText('actionType: 2')).not.toBeInTheDocument(); + expect(within(filterButtonGroup).getByText('All')).toBeInTheDocument(); + + expect(screen.getAllByTestId('ruleActionsConnectorsModalFilterButton').length).toEqual(2); + }); + + test('should display connectors if hideInUi is true and it has subtype', async () => { + const actionTypeRegistry = new TypeRegistry(); + actionTypeRegistry.register( + getActionTypeModel('1', { + id: 'actionType-1', + subtype: [ + { id: 'actionType-1', name: 'connector-1' }, + { id: 'actionType-2', name: 'connector-2' }, + ], + }) + ); + actionTypeRegistry.register( + getActionTypeModel('2', { + id: 'actionType-2', + hideInUi: true, + subtype: [ + { id: 'actionType-1', name: 'connector-1' }, + { id: 'actionType-2', name: 'connector-2' }, + ], + }) + ); + useRuleFormState.mockReturnValue({ + plugins: { + actionTypeRegistry, + }, + formData: { + actions: [], + }, + connectors: mockConnectors, + connectorTypes: mockActionTypes, + }); + + render( + + ); + const filterButtonGroup = screen.getByTestId('ruleActionsConnectorsModalFilterButtonGroup'); + + await userEvent.click(within(filterButtonGroup).getByText('actionType: 1')); + expect(screen.getAllByTestId('ruleActionsConnectorsModalCard').length).toEqual(2); + expect(screen.getByText('connector-1')).toBeInTheDocument(); + expect(screen.getByText('connector-2')).toBeInTheDocument(); + }); + test('should not render connector if actionsParamsField doesnt exist', () => { const actionTypeRegistry = new TypeRegistry(); actionTypeRegistry.register(getActionTypeModel('1', { id: 'actionType-1' })); diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_connectors_modal.tsx b/packages/response-ops/rule_form/src/rule_actions/rule_actions_connectors_modal.tsx similarity index 90% rename from packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_connectors_modal.tsx rename to packages/response-ops/rule_form/src/rule_actions/rule_actions_connectors_modal.tsx index 82496d9578ff0..d411e468a8a83 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_connectors_modal.tsx +++ b/packages/response-ops/rule_form/src/rule_actions/rule_actions_connectors_modal.tsx @@ -7,30 +7,30 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import React, { useState, useCallback, useMemo, Suspense } from 'react'; import { + EuiButton, + EuiCard, + EuiEmptyPrompt, + EuiFacetButton, + EuiFacetGroup, + EuiFieldSearch, EuiFlexGroup, EuiFlexItem, + EuiHorizontalRule, + EuiIcon, + EuiLoadingSpinner, EuiModal, - EuiModalHeader, - EuiFieldSearch, - EuiFacetButton, EuiModalBody, - EuiHorizontalRule, + EuiModalHeader, EuiModalHeaderTitle, - useEuiTheme, - EuiEmptyPrompt, - EuiFacetGroup, - EuiCard, - EuiIcon, - EuiText, EuiSpacer, - useCurrentEuiBreakpoint, - EuiButton, - EuiLoadingSpinner, + EuiText, EuiToolTip, + useCurrentEuiBreakpoint, + useEuiTheme, } from '@elastic/eui'; -import { ActionConnector } from '../../common'; +import { ActionConnector, checkActionFormActionTypeEnabled } from '@kbn/alerts-ui-shared'; +import React, { Suspense, useCallback, useMemo, useState } from 'react'; import { useRuleFormState } from '../hooks'; import { ACTION_TYPE_MODAL_EMPTY_TEXT, @@ -40,7 +40,6 @@ import { MODAL_SEARCH_CLEAR_FILTERS_TEXT, MODAL_SEARCH_PLACEHOLDER, } from '../translations'; -import { checkActionFormActionTypeEnabled } from '../utils/check_action_type_enabled'; type ConnectorsMap = Record; @@ -78,9 +77,7 @@ export const RuleActionsConnectorsModal = (props: RuleActionsConnectorsModalProp if (!actionType) { return false; } - if (actionTypeModel.hideInUi) { - return false; - } + if (!actionTypeModel.actionParamsFields) { return false; } @@ -93,6 +90,7 @@ export const RuleActionsConnectorsModal = (props: RuleActionsConnectorsModalProp if (!actionType.enabledInConfig && !checkEnabledResult.isEnabled) { return false; } + return true; }); }, [connectors, connectorTypes, preconfiguredConnectors, actionTypeRegistry]); @@ -120,29 +118,43 @@ export const RuleActionsConnectorsModal = (props: RuleActionsConnectorsModalProp const connectorsMap: ConnectorsMap | null = useMemo(() => { return availableConnectors.reduce((result, { actionTypeId }) => { - if (result[actionTypeId]) { - result[actionTypeId].total += 1; + const actionTypeModel = actionTypeRegistry.get(actionTypeId); + const subtype = actionTypeModel.subtype; + + const shownActionTypeId = actionTypeModel.hideInUi + ? subtype?.filter((type) => type.id !== actionTypeId)[0].id + : undefined; + + const currentActionTypeId = shownActionTypeId ? shownActionTypeId : actionTypeId; + + if (result[currentActionTypeId]) { + result[currentActionTypeId].total += 1; } else { - result[actionTypeId] = { - actionTypeId, + result[currentActionTypeId] = { + actionTypeId: currentActionTypeId, total: 1, - name: connectorTypes.find(({ id }) => actionTypeId === id)?.name || '', + name: connectorTypes.find(({ id }) => id === currentActionTypeId)?.name || '', }; } + return result; }, {}); - }, [availableConnectors, connectorTypes]); + }, [availableConnectors, connectorTypes, actionTypeRegistry]); const filteredConnectors = useMemo(() => { return availableConnectors .filter(({ actionTypeId }) => { + const subtype = actionTypeRegistry.get(actionTypeId).subtype?.map((type) => type.id); + if (selectedConnectorType === 'all' || selectedConnectorType === '') { return true; } - if (selectedConnectorType === actionTypeId) { - return true; + + if (subtype?.includes(selectedConnectorType)) { + return subtype.includes(actionTypeId); } - return false; + + return selectedConnectorType === actionTypeId; }) .filter(({ actionTypeId, name }) => { const trimmedSearchValue = searchValue.trim().toLocaleLowerCase(); diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_item.test.tsx b/packages/response-ops/rule_form/src/rule_actions/rule_actions_item.test.tsx similarity index 96% rename from packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_item.test.tsx rename to packages/response-ops/rule_form/src/rule_actions/rule_actions_item.test.tsx index fb162cd606406..a26f5c08ba515 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_item.test.tsx +++ b/packages/response-ops/rule_form/src/rule_actions/rule_actions_item.test.tsx @@ -10,14 +10,14 @@ import React from 'react'; import { render, screen } from '@testing-library/react'; import { RuleType } from '@kbn/alerting-types'; -import { ActionTypeModel, RuleTypeModel } from '../../common'; -import { TypeRegistry } from '../../common/type_registry'; +import type { ActionTypeModel, RuleTypeModel } from '@kbn/alerts-ui-shared'; +import { TypeRegistry } from '@kbn/alerts-ui-shared/lib'; import { getAction, getActionType, getActionTypeModel, getConnector, -} from '../../common/test_utils/actions_test_utils'; +} from '../common/test_utils/actions_test_utils'; import { RuleActionsItem } from './rule_actions_item'; import userEvent from '@testing-library/user-event'; @@ -93,7 +93,7 @@ jest.mock('../validation/validate_params_for_warnings', () => ({ validateParamsForWarnings: jest.fn(), })); -jest.mock('../../action_variables/get_available_action_variables', () => ({ +jest.mock('@kbn/alerts-ui-shared/src/action_variables/get_available_action_variables', () => ({ getAvailableActionVariables: jest.fn(), })); @@ -149,7 +149,7 @@ const { validateParamsForWarnings } = jest.requireMock( ); const { getAvailableActionVariables } = jest.requireMock( - '../../action_variables/get_available_action_variables' + '@kbn/alerts-ui-shared/src/action_variables/get_available_action_variables' ); const mockConnectors = [getConnector('1', { id: 'action-1' })]; diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_item.tsx b/packages/response-ops/rule_form/src/rule_actions/rule_actions_item.tsx similarity index 96% rename from packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_item.tsx rename to packages/response-ops/rule_form/src/rule_actions/rule_actions_item.tsx index 41c8d1b904cd1..d3a77b21c1379 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_item.tsx +++ b/packages/response-ops/rule_form/src/rule_actions/rule_actions_item.tsx @@ -36,12 +36,16 @@ import { RuleActionParam, RuleActionParams, } from '@kbn/alerting-types'; +import { + ActionConnector, + checkActionFormActionTypeEnabled, + getAvailableActionVariables, +} from '@kbn/alerts-ui-shared'; import { isEmpty, some } from 'lodash'; import { css } from '@emotion/react'; import { SavedObjectAttribute } from '@kbn/core/types'; import { useRuleFormDispatch, useRuleFormState } from '../hooks'; -import { ActionConnector, RuleFormParamsErrors } from '../../common/types'; -import { getAvailableActionVariables } from '../../action_variables'; +import { RuleFormParamsErrors } from '../common/types'; import { validateAction, validateParamsForWarnings } from '../validation'; import { RuleActionsSettings } from './rule_actions_settings'; @@ -55,14 +59,16 @@ import { TECH_PREVIEW_DESCRIPTION, TECH_PREVIEW_LABEL, } from '../translations'; -import { checkActionFormActionTypeEnabled } from '../utils/check_action_type_enabled'; -const SUMMARY_GROUP_TITLE = i18n.translate('alertsUIShared.ruleActionsItem.summaryGroupTitle', { - defaultMessage: 'Summary of alerts', -}); +const SUMMARY_GROUP_TITLE = i18n.translate( + 'responseOpsRuleForm.ruleActionsItem.summaryGroupTitle', + { + defaultMessage: 'Summary of alerts', + } +); const RUN_WHEN_GROUP_TITLE = (groupName: string) => - i18n.translate('alertsUIShared.ruleActionsItem.runWhenGroupTitle', { + i18n.translate('responseOpsRuleForm.ruleActionsItem.runWhenGroupTitle', { defaultMessage: 'Run when {groupName}', values: { groupName, @@ -70,7 +76,7 @@ const RUN_WHEN_GROUP_TITLE = (groupName: string) => }); const ACTION_TITLE = (connector: ActionConnector) => - i18n.translate('alertsUIShared.ruleActionsItem.existingAlertActionTypeEditTitle', { + i18n.translate('responseOpsRuleForm.ruleActionsItem.existingAlertActionTypeEditTitle', { defaultMessage: '{actionConnectorName}', values: { actionConnectorName: `${connector.name} ${ @@ -674,7 +680,7 @@ export const RuleActionsItem = (props: RuleActionsItemProps) => { marginRight: euiTheme.size.l, }} aria-label={i18n.translate( - 'alertsUIShared.ruleActionsSystemActionsItem.deleteActionAriaLabel', + 'responseOpsRuleForm.ruleActionsSystemActionsItem.deleteActionAriaLabel', { defaultMessage: 'delete action', } diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_message.test.tsx b/packages/response-ops/rule_form/src/rule_actions/rule_actions_message.test.tsx similarity index 98% rename from packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_message.test.tsx rename to packages/response-ops/rule_form/src/rule_actions/rule_actions_message.test.tsx index d2c064cba2aad..f3ceafd98a72e 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_message.test.tsx +++ b/packages/response-ops/rule_form/src/rule_actions/rule_actions_message.test.tsx @@ -11,15 +11,15 @@ import React, { lazy } from 'react'; import { render, screen, waitFor } from '@testing-library/react'; import { RuleActionsMessage } from './rule_actions_message'; import { RuleType } from '@kbn/alerting-types'; -import { ActionParamsProps, ActionTypeModel, RuleTypeModel } from '../../common'; -import { TypeRegistry } from '../../common/type_registry'; +import type { ActionParamsProps, ActionTypeModel, RuleTypeModel } from '@kbn/alerts-ui-shared'; +import { TypeRegistry } from '@kbn/alerts-ui-shared/lib'; import { getAction, getActionType, getActionTypeModel, getConnector, getSystemAction, -} from '../../common/test_utils/actions_test_utils'; +} from '../common/test_utils/actions_test_utils'; import userEvent from '@testing-library/user-event'; jest.mock('../hooks', () => ({ diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_message.tsx b/packages/response-ops/rule_form/src/rule_actions/rule_actions_message.tsx similarity index 97% rename from packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_message.tsx rename to packages/response-ops/rule_form/src/rule_actions/rule_actions_message.tsx index e828f0bb22cf8..039e3d79258b7 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_message.tsx +++ b/packages/response-ops/rule_form/src/rule_actions/rule_actions_message.tsx @@ -17,8 +17,9 @@ import { EuiSwitch, } from '@elastic/eui'; import { ActionVariable, RuleActionParam } from '@kbn/alerting-types'; +import { ActionConnector, ActionConnectorMode } from '@kbn/alerts-ui-shared'; import { useRuleFormState } from '../hooks'; -import { ActionConnector, ActionConnectorMode, RuleAction, RuleUiAction } from '../../common'; +import { RuleAction, RuleUiAction } from '../common'; import { getSelectedActionGroup } from '../utils'; import { ACTION_USE_AAD_TEMPLATE_FIELDS_LABEL } from '../translations'; diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_notify_when.test.tsx b/packages/response-ops/rule_form/src/rule_actions/rule_actions_notify_when.test.tsx similarity index 100% rename from packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_notify_when.test.tsx rename to packages/response-ops/rule_form/src/rule_actions/rule_actions_notify_when.test.tsx diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_notify_when.tsx b/packages/response-ops/rule_form/src/rule_actions/rule_actions_notify_when.tsx similarity index 88% rename from packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_notify_when.tsx rename to packages/response-ops/rule_form/src/rule_actions/rule_actions_notify_when.tsx index d3695ba28a8db..cdd1a51e646c2 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_notify_when.tsx +++ b/packages/response-ops/rule_form/src/rule_actions/rule_actions_notify_when.tsx @@ -38,12 +38,15 @@ import { pipe } from 'fp-ts/lib/pipeable'; import { DEFAULT_FREQUENCY } from '../constants'; import { getTimeOptions } from '../utils'; -const FOR_EACH_ALERT = i18n.translate('alertsUIShared.actiActionsonNotifyWhen.forEachOption', { +const FOR_EACH_ALERT = i18n.translate('responseOpsRuleForm.actiActionsonNotifyWhen.forEachOption', { defaultMessage: 'For each alert', }); -const SUMMARY_OF_ALERTS = i18n.translate('alertsUIShared.actiActionsonNotifyWhen.summaryOption', { - defaultMessage: 'Summary of alerts', -}); +const SUMMARY_OF_ALERTS = i18n.translate( + 'responseOpsRuleForm.actiActionsonNotifyWhen.summaryOption', + { + defaultMessage: 'Summary of alerts', + } +); export interface NotifyWhenSelectOptions { isSummaryOption?: boolean; @@ -58,7 +61,7 @@ export const NOTIFY_WHEN_OPTIONS: NotifyWhenSelectOptions[] = [ value: { value: 'onActionGroupChange', inputDisplay: i18n.translate( - 'alertsUIShared.ruleActionsNotifyWhen.onActionGroupChange.display', + 'responseOpsRuleForm.ruleActionsNotifyWhen.onActionGroupChange.display', { defaultMessage: 'On status changes', } @@ -69,14 +72,14 @@ export const NOTIFY_WHEN_OPTIONS: NotifyWhenSelectOptions[] = [

    @@ -89,23 +92,26 @@ export const NOTIFY_WHEN_OPTIONS: NotifyWhenSelectOptions[] = [ isForEachAlertOption: true, value: { value: 'onActiveAlert', - inputDisplay: i18n.translate('alertsUIShared.ruleActionsNotifyWhen.onActiveAlert.display', { - defaultMessage: 'On check intervals', - }), + inputDisplay: i18n.translate( + 'responseOpsRuleForm.ruleActionsNotifyWhen.onActiveAlert.display', + { + defaultMessage: 'On check intervals', + } + ), 'data-test-subj': 'onActiveAlert', dropdownDisplay: ( <>

    @@ -119,7 +125,7 @@ export const NOTIFY_WHEN_OPTIONS: NotifyWhenSelectOptions[] = [ value: { value: 'onThrottleInterval', inputDisplay: i18n.translate( - 'alertsUIShared.ruleActionsNotifyWhen.onThrottleInterval.display', + 'responseOpsRuleForm.ruleActionsNotifyWhen.onThrottleInterval.display', { defaultMessage: 'On custom action intervals', } @@ -130,14 +136,14 @@ export const NOTIFY_WHEN_OPTIONS: NotifyWhenSelectOptions[] = [

    @@ -290,7 +296,7 @@ export const RuleActionsNotifyWhen = ({ anchorPosition="downLeft" aria-label={frequency.summary ? SUMMARY_OF_ALERTS : FOR_EACH_ALERT} aria-roledescription={i18n.translate( - 'alertsUIShared.ruleActionsNotifyWhen.summaryOrRulePerSelectRoleDescription', + 'responseOpsRuleForm.ruleActionsNotifyWhen.summaryOrRulePerSelectRoleDescription', { defaultMessage: 'Action frequency type select' } )} button={ @@ -311,7 +317,7 @@ export const RuleActionsNotifyWhen = ({ return ( @@ -338,7 +344,7 @@ export const RuleActionsNotifyWhen = ({ name="throttle" data-test-subj="throttleInput" prepend={i18n.translate( - 'alertsUIShared.ruleActionsNotifyWhen.frequencyNotifyWhen.label', + 'responseOpsRuleForm.ruleActionsNotifyWhen.frequencyNotifyWhen.label', { defaultMessage: 'Run every', } @@ -380,7 +386,7 @@ export const RuleActionsNotifyWhen = ({ {i18n.translate( - 'alertsUIShared.ruleActionsNotifyWhen.notifyWhenThrottleWarning', + 'responseOpsRuleForm.ruleActionsNotifyWhen.notifyWhenThrottleWarning', { defaultMessage: "Custom action intervals cannot be shorter than the rule's check interval", diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_settings.test.tsx b/packages/response-ops/rule_form/src/rule_actions/rule_actions_settings.test.tsx similarity index 99% rename from packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_settings.test.tsx rename to packages/response-ops/rule_form/src/rule_actions/rule_actions_settings.test.tsx index cd1c7dd95f26d..ce2976ff08cf5 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_settings.test.tsx +++ b/packages/response-ops/rule_form/src/rule_actions/rule_actions_settings.test.tsx @@ -10,8 +10,8 @@ import React from 'react'; import { render, screen } from '@testing-library/react'; import { RuleActionsSettings } from './rule_actions_settings'; -import { getAction } from '../../common/test_utils/actions_test_utils'; -import { RuleTypeModel } from '../../common'; +import { getAction } from '../common/test_utils/actions_test_utils'; +import { RuleTypeModel } from '../common'; import { RuleType } from '@kbn/alerting-types'; import userEvent from '@testing-library/user-event'; import type { RuleActionsNotifyWhenProps } from './rule_actions_notify_when'; diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_settings.tsx b/packages/response-ops/rule_form/src/rule_actions/rule_actions_settings.tsx similarity index 97% rename from packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_settings.tsx rename to packages/response-ops/rule_form/src/rule_actions/rule_actions_settings.tsx index a7c0fae73e964..5f12271cc20cb 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_settings.tsx +++ b/packages/response-ops/rule_form/src/rule_actions/rule_actions_settings.tsx @@ -18,7 +18,7 @@ import { } from '@kbn/alerting-types'; import { isSiemRuleType } from '@kbn/rule-data-utils'; import { useRuleFormState } from '../hooks'; -import { RuleAction, RuleTypeWithDescription } from '../../common'; +import { RuleAction, RuleTypeWithDescription } from '../common'; import { getActionGroups, getDurationNumberInItsUnit, @@ -63,13 +63,13 @@ const getMinimumThrottleWarnings = ({ }; const ACTION_GROUP_NOT_SUPPORTED = (actionGroupName: string) => - i18n.translate('alertsUIShared.ruleActionsSetting.actionGroupNotSupported', { + i18n.translate('responseOpsRuleForm.ruleActionsSetting.actionGroupNotSupported', { defaultMessage: '{actionGroupName} (Not Currently Supported)', values: { actionGroupName }, }); const ACTION_GROUP_RUN_WHEN = i18n.translate( - 'alertsUIShared.ruleActionsSetting.actionGroupRunWhen', + 'responseOpsRuleForm.ruleActionsSetting.actionGroupRunWhen', { defaultMessage: 'Run when', } diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_system_actions_item.test.tsx b/packages/response-ops/rule_form/src/rule_actions/rule_actions_system_actions_item.test.tsx similarity index 98% rename from packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_system_actions_item.test.tsx rename to packages/response-ops/rule_form/src/rule_actions/rule_actions_system_actions_item.test.tsx index c94062e320a8d..f6e76538eba97 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_system_actions_item.test.tsx +++ b/packages/response-ops/rule_form/src/rule_actions/rule_actions_system_actions_item.test.tsx @@ -11,14 +11,14 @@ import React from 'react'; import { render, screen } from '@testing-library/react'; import { RuleType } from '@kbn/alerting-types'; import userEvent from '@testing-library/user-event'; -import { TypeRegistry } from '../../common/type_registry'; +import type { ActionTypeModel } from '@kbn/alerts-ui-shared'; +import { TypeRegistry } from '@kbn/alerts-ui-shared/lib'; import { getAction, getActionType, getActionTypeModel, getConnector, -} from '../../common/test_utils/actions_test_utils'; -import { ActionTypeModel } from '../../common'; +} from '../common/test_utils/actions_test_utils'; import { RuleActionsMessageProps } from './rule_actions_message'; import { RuleActionsSystemActionsItem } from './rule_actions_system_actions_item'; import { I18nProvider } from '@kbn/i18n-react'; diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_system_actions_item.tsx b/packages/response-ops/rule_form/src/rule_actions/rule_actions_system_actions_item.tsx similarity index 97% rename from packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_system_actions_item.tsx rename to packages/response-ops/rule_form/src/rule_actions/rule_actions_system_actions_item.tsx index 7432aa4c4343d..4ed0305ec6e8d 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_system_actions_item.tsx +++ b/packages/response-ops/rule_form/src/rule_actions/rule_actions_system_actions_item.tsx @@ -7,9 +7,6 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import React, { Suspense, useCallback, useMemo, useState } from 'react'; -import { i18n } from '@kbn/i18n'; -import { isEmpty, some } from 'lodash'; import { EuiAccordion, EuiBadge, @@ -24,25 +21,29 @@ import { useEuiBackgroundColor, useEuiTheme, } from '@elastic/eui'; +import { css } from '@emotion/react'; import { RuleActionParam, RuleSystemAction } from '@kbn/alerting-types'; +import { + getAvailableActionVariables, + IsDisabledResult, + IsEnabledResult, + checkActionFormActionTypeEnabled, + ActionConnector, +} from '@kbn/alerts-ui-shared'; import { SavedObjectAttribute } from '@kbn/core/types'; -import { css } from '@emotion/react'; +import { i18n } from '@kbn/i18n'; +import { isEmpty, some } from 'lodash'; +import React, { Suspense, useCallback, useMemo, useState } from 'react'; import { useRuleFormDispatch, useRuleFormState } from '../hooks'; -import { ActionConnector, RuleFormParamsErrors } from '../../common'; +import { RuleFormParamsErrors } from '../common'; import { ACTION_ERROR_TOOLTIP, ACTION_WARNING_TITLE, TECH_PREVIEW_DESCRIPTION, TECH_PREVIEW_LABEL, } from '../translations'; -import { RuleActionsMessage } from './rule_actions_message'; import { validateParamsForWarnings } from '../validation'; -import { getAvailableActionVariables } from '../../action_variables'; -import { - IsDisabledResult, - IsEnabledResult, - checkActionFormActionTypeEnabled, -} from '../utils/check_action_type_enabled'; +import { RuleActionsMessage } from './rule_actions_message'; interface RuleActionsSystemActionsItemProps { action: RuleSystemAction; @@ -252,7 +253,7 @@ export const RuleActionsSystemActionsItem = (props: RuleActionsSystemActionsItem marginRight: euiTheme.size.l, }} aria-label={i18n.translate( - 'alertsUIShared.ruleActionsSystemActionsItem.deleteActionAriaLabel', + 'responseOpsRuleForm.ruleActionsSystemActionsItem.deleteActionAriaLabel', { defaultMessage: 'delete action', } diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_definition/index.ts b/packages/response-ops/rule_form/src/rule_definition/index.ts similarity index 100% rename from packages/kbn-alerts-ui-shared/src/rule_form/rule_definition/index.ts rename to packages/response-ops/rule_form/src/rule_definition/index.ts diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_definition/rule_alert_delay.test.tsx b/packages/response-ops/rule_form/src/rule_definition/rule_alert_delay.test.tsx similarity index 100% rename from packages/kbn-alerts-ui-shared/src/rule_form/rule_definition/rule_alert_delay.test.tsx rename to packages/response-ops/rule_form/src/rule_definition/rule_alert_delay.test.tsx diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_definition/rule_alert_delay.tsx b/packages/response-ops/rule_form/src/rule_definition/rule_alert_delay.tsx similarity index 100% rename from packages/kbn-alerts-ui-shared/src/rule_form/rule_definition/rule_alert_delay.tsx rename to packages/response-ops/rule_form/src/rule_definition/rule_alert_delay.tsx diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_definition/rule_consumer_selection.test.tsx b/packages/response-ops/rule_form/src/rule_definition/rule_consumer_selection.test.tsx similarity index 100% rename from packages/kbn-alerts-ui-shared/src/rule_form/rule_definition/rule_consumer_selection.test.tsx rename to packages/response-ops/rule_form/src/rule_definition/rule_consumer_selection.test.tsx diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_definition/rule_consumer_selection.tsx b/packages/response-ops/rule_form/src/rule_definition/rule_consumer_selection.tsx similarity index 100% rename from packages/kbn-alerts-ui-shared/src/rule_form/rule_definition/rule_consumer_selection.tsx rename to packages/response-ops/rule_form/src/rule_definition/rule_consumer_selection.tsx diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_definition/rule_definition.test.tsx b/packages/response-ops/rule_form/src/rule_definition/rule_definition.test.tsx similarity index 97% rename from packages/kbn-alerts-ui-shared/src/rule_form/rule_definition/rule_definition.test.tsx rename to packages/response-ops/rule_form/src/rule_definition/rule_definition.test.tsx index f45d1d0ae00fc..ca01bbc484570 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_definition/rule_definition.test.tsx +++ b/packages/response-ops/rule_form/src/rule_definition/rule_definition.test.tsx @@ -18,8 +18,8 @@ import type { DocLinksStart } from '@kbn/core-doc-links-browser'; import { RuleDefinition } from './rule_definition'; import { RuleType } from '@kbn/alerting-types'; -import { RuleTypeModel } from '../../common/types'; -import { RuleSettingsFlappingFormProps } from '../../rule_settings/rule_settings_flapping_form'; +import { RuleTypeModel } from '../common/types'; +import { RuleSettingsFlappingFormProps } from '@kbn/alerts-ui-shared/src/rule_settings/rule_settings_flapping_form'; import { ALERT_FLAPPING_DETECTION_TITLE } from '../translations'; import userEvent from '@testing-library/user-event'; import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; @@ -29,11 +29,11 @@ jest.mock('../hooks', () => ({ useRuleFormDispatch: jest.fn(), })); -jest.mock('../../common/constants/rule_flapping', () => ({ +jest.mock('../constants/rule_flapping', () => ({ IS_RULE_SPECIFIC_FLAPPING_ENABLED: true, })); -jest.mock('../../rule_settings/rule_settings_flapping_form', () => ({ +jest.mock('@kbn/alerts-ui-shared/src/rule_settings/rule_settings_flapping_form', () => ({ RuleSettingsFlappingForm: (props: RuleSettingsFlappingFormProps) => (
    diff --git a/x-pack/plugins/cases/public/components/custom_fields/index.tsx b/x-pack/plugins/cases/public/components/custom_fields/index.tsx index d749a7aba9bea..f93c72eb6a18e 100644 --- a/x-pack/plugins/cases/public/components/custom_fields/index.tsx +++ b/x-pack/plugins/cases/public/components/custom_fields/index.tsx @@ -17,7 +17,6 @@ import { } from '@elastic/eui'; import * as i18n from './translations'; -import { useCasesContext } from '../cases_context/use_cases_context'; import type { CustomFieldsConfiguration } from '../../../common/types/domain'; import { MAX_CUSTOM_FIELDS_PER_CASE } from '../../../common/constants'; import { CustomFieldsList } from './custom_fields_list'; @@ -38,8 +37,6 @@ const CustomFieldsComponent: React.FC = ({ handleEditCustomField, customFields, }) => { - const { permissions } = useCasesContext(); - const canAddCustomFields = permissions.create && permissions.update; const [error, setError] = useState(false); const onAddCustomField = useCallback(() => { @@ -64,7 +61,7 @@ const CustomFieldsComponent: React.FC = ({ setError(false); } - return canAddCustomFields ? ( + return ( {i18n.TITLE}} @@ -113,10 +110,11 @@ const CustomFieldsComponent: React.FC = ({ )} + - ) : null; + ); }; CustomFieldsComponent.displayName = 'CustomFields'; diff --git a/x-pack/plugins/cases/public/components/files/file_download_button.test.tsx b/x-pack/plugins/cases/public/components/files/file_download_button.test.tsx index 0c729900a9ea6..da80fbdfaa578 100644 --- a/x-pack/plugins/cases/public/components/files/file_download_button.test.tsx +++ b/x-pack/plugins/cases/public/components/files/file_download_button.test.tsx @@ -36,7 +36,8 @@ describe('FileDownloadButton', () => { }); }); - describe('not isIcon', () => { + // FLAKY: https://github.com/elastic/kibana/issues/201611 + describe.skip('not isIcon', () => { beforeEach(() => { jest.clearAllMocks(); appMockRender = createAppMockRenderer(); diff --git a/x-pack/plugins/cases/public/components/templates/index.tsx b/x-pack/plugins/cases/public/components/templates/index.tsx index 479101d2889ad..6c15f1e9ef464 100644 --- a/x-pack/plugins/cases/public/components/templates/index.tsx +++ b/x-pack/plugins/cases/public/components/templates/index.tsx @@ -17,7 +17,6 @@ import { } from '@elastic/eui'; import { MAX_TEMPLATES_LENGTH } from '../../../common/constants'; import type { CasesConfigurationUITemplate } from '../../../common/ui'; -import { useCasesContext } from '../cases_context/use_cases_context'; import { ExperimentalBadge } from '../experimental_badge/experimental_badge'; import * as i18n from './translations'; import { TemplatesList } from './templates_list'; @@ -39,8 +38,6 @@ const TemplatesComponent: React.FC = ({ onEditTemplate, onDeleteTemplate, }) => { - const { permissions } = useCasesContext(); - const canAddTemplates = permissions.create && permissions.update; const [error, setError] = useState(false); const handleAddTemplate = useCallback(() => { @@ -103,31 +100,29 @@ const TemplatesComponent: React.FC = ({ ) : null} - {canAddTemplates ? ( - - - {templates.length < MAX_TEMPLATES_LENGTH ? ( - - {i18n.ADD_TEMPLATE} - - ) : ( - - - {i18n.MAX_TEMPLATE_LIMIT(MAX_TEMPLATES_LENGTH)} - - - )} - - - - ) : null} + + + {templates.length < MAX_TEMPLATES_LENGTH ? ( + + {i18n.ADD_TEMPLATE} + + ) : ( + + + {i18n.MAX_TEMPLATE_LIMIT(MAX_TEMPLATES_LENGTH)} + + + )} + + + ); diff --git a/x-pack/plugins/discover_enhanced/ui_tests/fixtures/index.ts b/x-pack/plugins/discover_enhanced/ui_tests/fixtures/index.ts index 4cff802b3b89f..cf12a98368b90 100644 --- a/x-pack/plugins/discover_enhanced/ui_tests/fixtures/index.ts +++ b/x-pack/plugins/discover_enhanced/ui_tests/fixtures/index.ts @@ -21,7 +21,16 @@ export interface ExtendedScoutTestFixtures extends ScoutTestFixtures { } export const test = base.extend({ - pageObjects: async ({ pageObjects, page }, use) => { + pageObjects: async ( + { + pageObjects, + page, + }: { + pageObjects: ExtendedScoutTestFixtures['pageObjects']; + page: ExtendedScoutTestFixtures['page']; + }, + use: (pageObjects: ExtendedScoutTestFixtures['pageObjects']) => Promise + ) => { const extendedPageObjects = { ...pageObjects, demo: createLazyPageObject(DemoPage, page), diff --git a/x-pack/plugins/elastic_assistant/kibana.jsonc b/x-pack/plugins/elastic_assistant/kibana.jsonc index 435ec0b916d01..2b06f1e0db65e 100644 --- a/x-pack/plugins/elastic_assistant/kibana.jsonc +++ b/x-pack/plugins/elastic_assistant/kibana.jsonc @@ -17,9 +17,11 @@ "ml", "taskManager", "licensing", + "llmTasks", "inference", + "productDocBase", "spaces", "security" ] } -} \ No newline at end of file +} diff --git a/x-pack/plugins/elastic_assistant/server/__mocks__/request_context.ts b/x-pack/plugins/elastic_assistant/server/__mocks__/request_context.ts index 77bd6b00105b6..3837c158ba199 100644 --- a/x-pack/plugins/elastic_assistant/server/__mocks__/request_context.ts +++ b/x-pack/plugins/elastic_assistant/server/__mocks__/request_context.ts @@ -53,6 +53,7 @@ export const createMockClients = () => { getSpaceId: jest.fn(), getCurrentUser: jest.fn(), inference: jest.fn(), + llmTasks: jest.fn(), }, savedObjectsClient: core.savedObjects.client, @@ -145,6 +146,7 @@ const createElasticAssistantRequestContextMock = ( getServerBasePath: jest.fn(), getSpaceId: jest.fn().mockReturnValue('default'), inference: { getClient: jest.fn() }, + llmTasks: { retrieveDocumentationAvailable: jest.fn(), retrieveDocumentation: jest.fn() }, core: clients.core, telemetry: clients.elasticAssistant.telemetry, }; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_service/helpers.test.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_service/helpers.test.ts new file mode 100644 index 0000000000000..8cd020149c433 --- /dev/null +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_service/helpers.test.ts @@ -0,0 +1,79 @@ +/* + * 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 { ensureProductDocumentationInstalled } from './helpers'; +import { loggerMock } from '@kbn/logging-mocks'; + +const mockLogger = loggerMock.create(); +const mockProductDocManager = { + getStatus: jest.fn(), + install: jest.fn(), + uninstall: jest.fn(), + update: jest.fn(), +}; + +describe('helpers', () => { + describe('ensureProductDocumentationInstalled', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should install product documentation if not installed', async () => { + mockProductDocManager.getStatus.mockResolvedValue({ status: 'uninstalled' }); + mockProductDocManager.install.mockResolvedValue(null); + + await ensureProductDocumentationInstalled(mockProductDocManager, mockLogger); + + expect(mockProductDocManager.getStatus).toHaveBeenCalled(); + expect(mockLogger.debug).toHaveBeenCalledWith( + 'Installing product documentation for AIAssistantService' + ); + expect(mockProductDocManager.install).toHaveBeenCalled(); + expect(mockLogger.debug).toHaveBeenNthCalledWith( + 2, + 'Successfully installed product documentation for AIAssistantService' + ); + }); + + it('should not install product documentation if already installed', async () => { + mockProductDocManager.getStatus.mockResolvedValue({ status: 'installed' }); + + await ensureProductDocumentationInstalled(mockProductDocManager, mockLogger); + + expect(mockProductDocManager.getStatus).toHaveBeenCalled(); + expect(mockProductDocManager.install).not.toHaveBeenCalled(); + expect(mockLogger.debug).not.toHaveBeenCalledWith( + 'Installing product documentation for AIAssistantService' + ); + }); + it('should log a warning if install fails', async () => { + mockProductDocManager.getStatus.mockResolvedValue({ status: 'not_installed' }); + mockProductDocManager.install.mockRejectedValue(new Error('Install failed')); + + await ensureProductDocumentationInstalled(mockProductDocManager, mockLogger); + + expect(mockProductDocManager.getStatus).toHaveBeenCalled(); + expect(mockProductDocManager.install).toHaveBeenCalled(); + + expect(mockLogger.warn).toHaveBeenCalledWith( + 'Failed to install product documentation for AIAssistantService: Install failed' + ); + }); + + it('should log a warning if getStatus fails', async () => { + mockProductDocManager.getStatus.mockRejectedValue(new Error('Status check failed')); + + await ensureProductDocumentationInstalled(mockProductDocManager, mockLogger); + + expect(mockProductDocManager.getStatus).toHaveBeenCalled(); + expect(mockLogger.warn).toHaveBeenCalledWith( + 'Failed to get status of product documentation installation for AIAssistantService: Status check failed' + ); + expect(mockProductDocManager.install).not.toHaveBeenCalled(); + }); + }); +}); diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_service/helpers.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_service/helpers.ts index 2a4ad628eb757..9067e42ca88bb 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_service/helpers.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_service/helpers.ts @@ -11,6 +11,8 @@ import type { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-ser import type { MlPluginSetup } from '@kbn/ml-plugin/server'; import { DeleteByQueryRequest } from '@elastic/elasticsearch/lib/api/types'; import { i18n } from '@kbn/i18n'; +import { ProductDocBaseStartContract } from '@kbn/product-doc-base-plugin/server'; +import type { Logger } from '@kbn/logging'; import { getResourceName } from '.'; import { knowledgeBaseIngestPipeline } from '../ai_assistant_data_clients/knowledge_base/ingest_pipeline'; import { GetElser } from '../types'; @@ -141,3 +143,25 @@ const ESQL_QUERY_GENERATION_TITLE = i18n.translate( defaultMessage: 'ES|QL Query Generation', } ); + +export const ensureProductDocumentationInstalled = async ( + productDocManager: ProductDocBaseStartContract['management'], + logger: Logger +) => { + try { + const { status } = await productDocManager.getStatus(); + if (status !== 'installed') { + logger.debug(`Installing product documentation for AIAssistantService`); + try { + await productDocManager.install(); + logger.debug(`Successfully installed product documentation for AIAssistantService`); + } catch (e) { + logger.warn(`Failed to install product documentation for AIAssistantService: ${e.message}`); + } + } + } catch (e) { + logger.warn( + `Failed to get status of product documentation installation for AIAssistantService: ${e.message}` + ); + } +}; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.test.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.test.ts index 4bfd4da6cfcbf..c60fe9a220482 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.test.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.test.ts @@ -122,6 +122,12 @@ describe('AI Assistant Service', () => { kibanaVersion: '8.8.0', ml, taskManager: taskManagerMock.createSetup(), + productDocManager: Promise.resolve({ + getStatus: jest.fn(), + install: jest.fn(), + update: jest.fn(), + uninstall: jest.fn(), + }), }; }); diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.ts index 233b5781ddf68..ff0f95340d466 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.ts @@ -12,6 +12,7 @@ import type { TaskManagerSetupContract } from '@kbn/task-manager-plugin/server'; import type { MlPluginSetup } from '@kbn/ml-plugin/server'; import { Subject } from 'rxjs'; import { LicensingApiRequestHandlerContext } from '@kbn/licensing-plugin/server'; +import { ProductDocBaseStartContract } from '@kbn/product-doc-base-plugin/server'; import { attackDiscoveryFieldMap } from '../lib/attack_discovery/persistence/field_maps_configuration/field_maps_configuration'; import { defendInsightsFieldMap } from '../ai_assistant_data_clients/defend_insights/field_maps_configuration'; import { getDefaultAnonymizationFields } from '../../common/anonymization'; @@ -35,7 +36,12 @@ import { } from '../ai_assistant_data_clients/knowledge_base'; import { AttackDiscoveryDataClient } from '../lib/attack_discovery/persistence'; import { DefendInsightsDataClient } from '../ai_assistant_data_clients/defend_insights'; -import { createGetElserId, createPipeline, pipelineExists } from './helpers'; +import { + createGetElserId, + createPipeline, + ensureProductDocumentationInstalled, + pipelineExists, +} from './helpers'; import { hasAIAssistantLicense } from '../routes/helpers'; const TOTAL_FIELDS_LIMIT = 2500; @@ -51,6 +57,7 @@ export interface AIAssistantServiceOpts { ml: MlPluginSetup; taskManager: TaskManagerSetupContract; pluginStop$: Subject; + productDocManager: Promise; } export interface CreateAIAssistantClientParams { @@ -87,6 +94,7 @@ export class AIAssistantService { private initPromise: Promise; private isKBSetupInProgress: boolean = false; private hasInitializedV2KnowledgeBase: boolean = false; + private productDocManager?: ProductDocBaseStartContract['management']; constructor(private readonly options: AIAssistantServiceOpts) { this.initialized = false; @@ -129,6 +137,13 @@ export class AIAssistantService { this.initPromise, this.installAndUpdateSpaceLevelResources.bind(this) ); + options.productDocManager + .then((productDocManager) => { + this.productDocManager = productDocManager; + }) + .catch((error) => { + this.options.logger.warn(`Failed to initialize productDocManager: ${error.message}`); + }); } public isInitialized() { @@ -183,6 +198,11 @@ export class AIAssistantService { this.options.logger.debug(`Initializing resources for AIAssistantService`); const esClient = await this.options.elasticsearchClientPromise; + if (this.productDocManager) { + // install product documentation without blocking other resources + void ensureProductDocumentationInstalled(this.productDocManager, this.options.logger); + } + await this.conversationsDataStream.install({ esClient, logger: this.options.logger, diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/types.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/types.ts index 7dea19755a686..abef39d8b2e25 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/types.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/types.ts @@ -17,6 +17,7 @@ import { PublicMethodsOf } from '@kbn/utility-types'; import type { InferenceServerStart } from '@kbn/inference-plugin/server'; import { AnalyticsServiceSetup } from '@kbn/core-analytics-server'; import { TelemetryParams } from '@kbn/langchain/server/tracers/telemetry/telemetry_tracer'; +import type { LlmTasksPluginStart } from '@kbn/llm-tasks-plugin/server'; import { ResponseBody } from '../types'; import type { AssistantTool } from '../../../types'; import { AIAssistantKnowledgeBaseDataClient } from '../../../ai_assistant_data_clients/knowledge_base'; @@ -45,10 +46,11 @@ export interface AgentExecutorParams { dataClients?: AssistantDataClients; esClient: ElasticsearchClient; langChainMessages: BaseMessage[]; + llmTasks?: LlmTasksPluginStart; llmType?: string; isOssModel?: boolean; - logger: Logger; inference: InferenceServerStart; + logger: Logger; onNewReplacements?: (newReplacements: Replacements) => void; replacements: Replacements; isStream?: T; diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts index e9d2c1dd2618b..4ddd3eae11624 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts @@ -35,6 +35,7 @@ export const callAssistantGraph: AgentExecutor = async ({ esClient, inference, langChainMessages, + llmTasks, llmType, isOssModel, logger: parentLogger, @@ -106,6 +107,7 @@ export const callAssistantGraph: AgentExecutor = async ({ inference, isEnabledKnowledgeBase, kbDataClient: dataClients?.kbDataClient, + llmTasks, logger, onNewReplacements, replacements, diff --git a/x-pack/plugins/elastic_assistant/server/plugin.ts b/x-pack/plugins/elastic_assistant/server/plugin.ts index 110dbbc05f2a6..e93e3786b123c 100755 --- a/x-pack/plugins/elastic_assistant/server/plugin.ts +++ b/x-pack/plugins/elastic_assistant/server/plugin.ts @@ -63,6 +63,9 @@ export class ElasticAssistantPlugin elasticsearchClientPromise: core .getStartServices() .then(([{ elasticsearch }]) => elasticsearch.client.asInternalUser), + productDocManager: core + .getStartServices() + .then(([_, { productDocBase }]) => productDocBase.management), pluginStop$: this.pluginStop$, }); diff --git a/x-pack/plugins/elastic_assistant/server/routes/chat/chat_complete_route.test.ts b/x-pack/plugins/elastic_assistant/server/routes/chat/chat_complete_route.test.ts index 5d277abb00667..8cd2f0fd801d0 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/chat/chat_complete_route.test.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/chat/chat_complete_route.test.ts @@ -61,6 +61,7 @@ const mockContext = { getRegisteredFeatures: jest.fn(() => defaultAssistantFeatures), logger: loggingSystemMock.createLogger(), telemetry: { ...coreMock.createSetup().analytics, reportEvent }, + llmTasks: { retrieveDocumentationAvailable: jest.fn(), retrieveDocumentation: jest.fn() }, getCurrentUser: () => ({ username: 'user', email: 'email', diff --git a/x-pack/plugins/elastic_assistant/server/routes/chat/chat_complete_route.ts b/x-pack/plugins/elastic_assistant/server/routes/chat/chat_complete_route.ts index 35b4999a30249..cf1cff3d6201d 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/chat/chat_complete_route.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/chat/chat_complete_route.ts @@ -69,6 +69,8 @@ export const chatCompleteRoute = ( try { telemetry = ctx.elasticAssistant.telemetry; const inference = ctx.elasticAssistant.inference; + const productDocsAvailable = + (await ctx.elasticAssistant.llmTasks.retrieveDocumentationAvailable()) ?? false; // Perform license and authenticated user checks const checkResponse = performChecks({ @@ -217,6 +219,7 @@ export const chatCompleteRoute = ( response, telemetry, responseLanguage: request.body.responseLanguage, + ...(productDocsAvailable ? { llmTasks: ctx.elasticAssistant.llmTasks } : {}), }); } catch (err) { const error = transformError(err as Error); diff --git a/x-pack/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.ts b/x-pack/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.ts index 4e4b7e5fcd251..3c61fe75f6d00 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.ts @@ -150,6 +150,8 @@ export const postEvaluateRoute = ( const esClient = ctx.core.elasticsearch.client.asCurrentUser; const inference = ctx.elasticAssistant.inference; + const productDocsAvailable = + (await ctx.elasticAssistant.llmTasks.retrieveDocumentationAvailable()) ?? false; // Data clients const anonymizationFieldsDataClient = @@ -280,6 +282,7 @@ export const postEvaluateRoute = ( connectorId: connector.id, size, telemetry: ctx.elasticAssistant.telemetry, + ...(productDocsAvailable ? { llmTasks: ctx.elasticAssistant.llmTasks } : {}), }; const tools: StructuredTool[] = assistantTools.flatMap( diff --git a/x-pack/plugins/elastic_assistant/server/routes/helpers.ts b/x-pack/plugins/elastic_assistant/server/routes/helpers.ts index 23ec7011be5b7..25d4ce1a2ec45 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/helpers.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/helpers.ts @@ -29,6 +29,7 @@ import { ActionsClient } from '@kbn/actions-plugin/server'; import { AssistantFeatureKey } from '@kbn/elastic-assistant-common/impl/capabilities'; import { getLangSmithTracer } from '@kbn/langchain/server/tracers/langsmith'; import type { InferenceServerStart } from '@kbn/inference-plugin/server'; +import type { LlmTasksPluginStart } from '@kbn/llm-tasks-plugin/server'; import { INVOKE_ASSISTANT_SUCCESS_EVENT } from '../lib/telemetry/event_based_telemetry'; import { AIAssistantKnowledgeBaseDataClient } from '../ai_assistant_data_clients/knowledge_base'; import { FindResponse } from '../ai_assistant_data_clients/find'; @@ -215,6 +216,7 @@ export interface LangChainExecuteParams { telemetry: AnalyticsServiceSetup; actionTypeId: string; connectorId: string; + llmTasks?: LlmTasksPluginStart; inference: InferenceServerStart; isOssModel?: boolean; conversationId?: string; @@ -246,6 +248,7 @@ export const langChainExecute = async ({ isOssModel, context, actionsClient, + llmTasks, inference, request, logger, @@ -301,6 +304,7 @@ export const langChainExecute = async ({ conversationId, connectorId, esClient, + llmTasks, inference, isStream, llmType: getLlmType(actionTypeId), diff --git a/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.test.ts b/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.test.ts index a7abac27dac6f..9f4d0beb3caff 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.test.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.test.ts @@ -67,6 +67,7 @@ const mockContext = { actions: { getActionsClientWithRequest: jest.fn().mockResolvedValue(actionsClient), }, + llmTasks: { retrieveDocumentationAvailable: jest.fn(), retrieveDocumentation: jest.fn() }, getRegisteredTools: jest.fn(() => []), getRegisteredFeatures: jest.fn(() => defaultAssistantFeatures), logger: loggingSystemMock.createLogger(), diff --git a/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts b/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts index 43264a6c1f54b..55c23629c5de1 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts @@ -97,6 +97,8 @@ export const postActionsConnectorExecuteRoute = ( // get the actions plugin start contract from the request context: const actions = ctx.elasticAssistant.actions; const inference = ctx.elasticAssistant.inference; + const productDocsAvailable = + (await ctx.elasticAssistant.llmTasks.retrieveDocumentationAvailable()) ?? false; const actionsClient = await actions.getActionsClientWithRequest(request); const connectors = await actionsClient.getBulk({ ids: [connectorId] }); const connector = connectors.length > 0 ? connectors[0] : undefined; @@ -150,6 +152,7 @@ export const postActionsConnectorExecuteRoute = ( response, telemetry, systemPrompt, + ...(productDocsAvailable ? { llmTasks: ctx.elasticAssistant.llmTasks } : {}), }); } catch (err) { logger.error(err); diff --git a/x-pack/plugins/elastic_assistant/server/routes/request_context_factory.ts b/x-pack/plugins/elastic_assistant/server/routes/request_context_factory.ts index ef921d7c91a28..30045b3da8ad9 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/request_context_factory.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/request_context_factory.ts @@ -78,7 +78,7 @@ export class RequestContextFactory implements IRequestContextFactory { getRegisteredFeatures: (pluginName: string) => { return appContextService.getRegisteredFeatures(pluginName); }, - + llmTasks: startPlugins.llmTasks, inference: startPlugins.inference, telemetry: core.analytics, diff --git a/x-pack/plugins/elastic_assistant/server/types.ts b/x-pack/plugins/elastic_assistant/server/types.ts index 93f35d11eb877..6158acde679ff 100755 --- a/x-pack/plugins/elastic_assistant/server/types.ts +++ b/x-pack/plugins/elastic_assistant/server/types.ts @@ -20,6 +20,7 @@ import type { Logger, SecurityServiceStart, } from '@kbn/core/server'; +import type { LlmTasksPluginStart } from '@kbn/llm-tasks-plugin/server'; import { type MlPluginSetup } from '@kbn/ml-plugin/server'; import { DynamicStructuredTool, Tool } from '@langchain/core/tools'; import { SpacesPluginSetup, SpacesPluginStart } from '@kbn/spaces-plugin/server'; @@ -46,6 +47,7 @@ import { } from '@kbn/langchain/server'; import type { InferenceServerStart } from '@kbn/inference-plugin/server'; +import { ProductDocBaseStartContract } from '@kbn/product-doc-base-plugin/server'; import type { GetAIAssistantKnowledgeBaseDataClientParams } from './ai_assistant_data_clients/knowledge_base'; import { AttackDiscoveryDataClient } from './lib/attack_discovery/persistence'; import { AIAssistantConversationsDataClient } from './ai_assistant_data_clients/conversations'; @@ -111,10 +113,12 @@ export interface ElasticAssistantPluginSetupDependencies { } export interface ElasticAssistantPluginStartDependencies { actions: ActionsPluginStart; + llmTasks: LlmTasksPluginStart; inference: InferenceServerStart; spaces?: SpacesPluginStart; security: SecurityServiceStart; licensing: LicensingPluginStart; + productDocBase: ProductDocBaseStartContract; } export interface ElasticAssistantApiRequestHandlerContext { @@ -134,6 +138,7 @@ export interface ElasticAssistantApiRequestHandlerContext { getDefendInsightsDataClient: () => Promise; getAIAssistantPromptsDataClient: () => Promise; getAIAssistantAnonymizationFieldsDataClient: () => Promise; + llmTasks: LlmTasksPluginStart; inference: InferenceServerStart; telemetry: AnalyticsServiceSetup; } @@ -230,6 +235,7 @@ export interface AssistantToolParams { kbDataClient?: AIAssistantKnowledgeBaseDataClient; langChainTimeout?: number; llm?: ActionsClientLlm | AssistantToolLlm; + llmTasks?: LlmTasksPluginStart; isOssModel?: boolean; logger: Logger; onNewReplacements?: (newReplacements: Replacements) => void; diff --git a/x-pack/plugins/elastic_assistant/tsconfig.json b/x-pack/plugins/elastic_assistant/tsconfig.json index 52ed30dde67f8..5b9a7cb3466db 100644 --- a/x-pack/plugins/elastic_assistant/tsconfig.json +++ b/x-pack/plugins/elastic_assistant/tsconfig.json @@ -50,7 +50,9 @@ "@kbn/zod", "@kbn/inference-plugin", "@kbn/data-views-plugin", - "@kbn/core-analytics-server" + "@kbn/core-analytics-server", + "@kbn/llm-tasks-plugin", + "@kbn/product-doc-base-plugin" ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/embeddable_enhanced/kibana.jsonc b/x-pack/plugins/embeddable_enhanced/kibana.jsonc index d795afa4d7938..3b9632d4bf36c 100644 --- a/x-pack/plugins/embeddable_enhanced/kibana.jsonc +++ b/x-pack/plugins/embeddable_enhanced/kibana.jsonc @@ -5,7 +5,7 @@ "@elastic/kibana-presentation" ], "group": "platform", - "visibility": "private", + "visibility": "shared", "description": "Extends embeddable plugin with more functionality", "plugin": { "id": "embeddableEnhanced", diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/multi_input_rows/constants.ts b/x-pack/plugins/enterprise_search/public/applications/app_search/components/multi_input_rows/constants.ts index f0c077c5bfaf2..1b16ec0082f85 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/multi_input_rows/constants.ts +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/multi_input_rows/constants.ts @@ -12,12 +12,18 @@ export const ADD_VALUE_BUTTON_LABEL = i18n.translate( { defaultMessage: 'Add value' } ); -export const DELETE_VALUE_BUTTON_LABEL = i18n.translate( - 'xpack.enterpriseSearch.appSearch.multiInputRows.removeValueButtonLabel', - { defaultMessage: 'Remove value' } -); +export const DELETE_ROW_VALUE_BUTTON_LABEL = (index: number) => + i18n.translate('xpack.enterpriseSearch.appSearch.multiInputRows.removeRowValueButtonLabel', { + defaultMessage: 'Remove value, row {index}', + values: { index }, + }); export const INPUT_ROW_PLACEHOLDER = i18n.translate( 'xpack.enterpriseSearch.appSearch.multiInputRows.inputRowPlaceholder', { defaultMessage: 'Enter a value' } ); + +export const INPUT_ROW_CONTAINER_ARIA_LABEL = i18n.translate( + 'xpack.enterpriseSearch.appSearch.multiInputRows.inputRowContainerAriaLabel', + { defaultMessage: 'Multiple input rows' } +); diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/multi_input_rows/multi_input_rows.tsx b/x-pack/plugins/enterprise_search/public/applications/app_search/components/multi_input_rows/multi_input_rows.tsx index 257f4b637f3e0..f80b9cc07a218 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/multi_input_rows/multi_input_rows.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/multi_input_rows/multi_input_rows.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React from 'react'; +import React, { useRef } from 'react'; import { useValues, useActions } from 'kea'; import useUpdateEffect from 'react-use/lib/useUpdateEffect'; @@ -16,8 +16,9 @@ import { CONTINUE_BUTTON_LABEL } from '../../../shared/constants'; import { ADD_VALUE_BUTTON_LABEL, - DELETE_VALUE_BUTTON_LABEL, + DELETE_ROW_VALUE_BUTTON_LABEL, INPUT_ROW_PLACEHOLDER, + INPUT_ROW_CONTAINER_ARIA_LABEL, } from './constants'; import { InputRow } from './input_row'; import { MultiInputRowsLogic } from './multi_input_rows_logic'; @@ -43,12 +44,13 @@ export const MultiInputRows: React.FC = ({ showSubmitButton = true, submitButtonText = CONTINUE_BUTTON_LABEL, addRowText = ADD_VALUE_BUTTON_LABEL, - deleteRowLabel = DELETE_VALUE_BUTTON_LABEL, + deleteRowLabel, inputPlaceholder = INPUT_ROW_PLACEHOLDER, }) => { const logic = MultiInputRowsLogic({ id, values: initialValues }); const { values, addedNewRow, hasEmptyValues, hasOnlyOneValue } = useValues(logic); const { addValue, editValue, deleteValue } = useActions(logic); + const valuesContainerRef = useRef(null); useUpdateEffect(() => { if (onChange) { @@ -69,22 +71,32 @@ export const MultiInputRows: React.FC = ({ : undefined } > - {values.map((value: string, index: number) => { - const firstRow = index === 0; - const lastRow = index === values.length - 1; - return ( - editValue(index, newValue)} - onDelete={() => deleteValue(index)} - disableDelete={hasOnlyOneValue} - deleteLabel={deleteRowLabel} - /> - ); - })} +
    + {values.map((value: string, index: number) => { + const firstRow = index === 0; + const lastRow = index === values.length - 1; + return ( + editValue(index, newValue)} + onDelete={() => { + deleteValue(index); + valuesContainerRef.current?.focus(); + }} + disableDelete={hasOnlyOneValue} + deleteLabel={deleteRowLabel || DELETE_ROW_VALUE_BUTTON_LABEL(index + 1)} + /> + ); + })} +
    ) => { const { EntityManagerServerPlugin } = await import('./plugin'); return new EntityManagerServerPlugin(context); diff --git a/x-pack/plugins/entity_manager/server/lib/client/index.ts b/x-pack/plugins/entity_manager/server/lib/client/index.ts deleted file mode 100644 index 90562264851ce..0000000000000 --- a/x-pack/plugins/entity_manager/server/lib/client/index.ts +++ /dev/null @@ -1,29 +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 { IScopedClusterClient, SavedObjectsClientContract } from '@kbn/core/server'; -import { EntityDefinition } from '@kbn/entities-schema'; -import { findEntityDefinitions } from '../entities/find_entity_definition'; -import type { EntityDefinitionWithState } from '../entities/types'; - -export class EntityManagerClient { - constructor( - private readonly esClient: IScopedClusterClient, - private readonly soClient: SavedObjectsClientContract - ) {} - - findEntityDefinitions({ page, perPage }: { page?: number; perPage?: number } = {}): Promise< - EntityDefinition[] | EntityDefinitionWithState[] - > { - return findEntityDefinitions({ - esClient: this.esClient.asCurrentUser, - soClient: this.soClient, - page, - perPage, - }); - } -} diff --git a/x-pack/plugins/entity_manager/server/lib/entity_client.ts b/x-pack/plugins/entity_manager/server/lib/entity_client.ts index 35abe63c5fd23..dd4eeedbc4fc2 100644 --- a/x-pack/plugins/entity_manager/server/lib/entity_client.ts +++ b/x-pack/plugins/entity_manager/server/lib/entity_client.ts @@ -5,10 +5,9 @@ * 2.0. */ -import { without } from 'lodash'; -import { EntityV2, EntityDefinition, EntityDefinitionUpdate } from '@kbn/entities-schema'; +import { EntityDefinition, EntityDefinitionUpdate } from '@kbn/entities-schema'; import { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; -import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; +import { IScopedClusterClient } from '@kbn/core-elasticsearch-server'; import { Logger } from '@kbn/logging'; import { installEntityDefinition, @@ -19,40 +18,24 @@ import { startTransforms } from './entities/start_transforms'; import { findEntityDefinitionById, findEntityDefinitions } from './entities/find_entity_definition'; import { uninstallEntityDefinition } from './entities/uninstall_entity_definition'; import { EntityDefinitionNotFound } from './entities/errors/entity_not_found'; - import { stopTransforms } from './entities/stop_transforms'; import { deleteIndices } from './entities/delete_index'; import { EntityDefinitionWithState } from './entities/types'; import { EntityDefinitionUpdateConflict } from './entities/errors/entity_definition_update_conflict'; -import { EntitySource, SortBy, getEntityInstancesQuery } from './queries'; -import { mergeEntitiesList, runESQLQuery } from './queries/utils'; -import { UnknownEntityType } from './entities/errors/unknown_entity_type'; - -interface SearchCommon { - start: string; - end: string; - sort?: SortBy; - metadataFields?: string[]; - filters?: string[]; - limit?: number; -} - -export type SearchByType = SearchCommon & { - type: string; -}; - -export type SearchBySources = SearchCommon & { - sources: EntitySource[]; -}; +import { EntityClient as EntityClient_v2 } from './v2/entity_client'; export class EntityClient { + public v2: EntityClient_v2; + constructor( private options: { - esClient: ElasticsearchClient; + clusterClient: IScopedClusterClient; soClient: SavedObjectsClientContract; logger: Logger; } - ) {} + ) { + this.v2 = new EntityClient_v2(options); + } async createEntityDefinition({ definition, @@ -66,13 +49,17 @@ export class EntityClient { ); const installedDefinition = await installEntityDefinition({ definition, - esClient: this.options.esClient, + esClient: this.options.clusterClient.asCurrentUser, soClient: this.options.soClient, logger: this.options.logger, }); if (!installOnly) { - await startTransforms(this.options.esClient, installedDefinition, this.options.logger); + await startTransforms( + this.options.clusterClient.asCurrentUser, + installedDefinition, + this.options.logger + ); } return installedDefinition; @@ -88,7 +75,7 @@ export class EntityClient { const definition = await findEntityDefinitionById({ id, soClient: this.options.soClient, - esClient: this.options.esClient, + esClient: this.options.clusterClient.asCurrentUser, includeState: true, }); @@ -115,12 +102,16 @@ export class EntityClient { definition, definitionUpdate, soClient: this.options.soClient, - esClient: this.options.esClient, + esClient: this.options.clusterClient.asCurrentUser, logger: this.options.logger, }); if (shouldRestartTransforms) { - await startTransforms(this.options.esClient, updatedDefinition, this.options.logger); + await startTransforms( + this.options.clusterClient.asCurrentUser, + updatedDefinition, + this.options.logger + ); } return updatedDefinition; } @@ -128,7 +119,7 @@ export class EntityClient { async deleteEntityDefinition({ id, deleteData = false }: { id: string; deleteData?: boolean }) { const definition = await findEntityDefinitionById({ id, - esClient: this.options.esClient, + esClient: this.options.clusterClient.asCurrentUser, soClient: this.options.soClient, }); @@ -141,13 +132,17 @@ export class EntityClient { ); await uninstallEntityDefinition({ definition, - esClient: this.options.esClient, + esClient: this.options.clusterClient.asCurrentUser, soClient: this.options.soClient, logger: this.options.logger, }); if (deleteData) { - await deleteIndices(this.options.esClient, definition, this.options.logger); + await deleteIndices( + this.options.clusterClient.asCurrentUser, + definition, + this.options.logger + ); } } @@ -167,7 +162,7 @@ export class EntityClient { builtIn?: boolean; }) { const definitions = await findEntityDefinitions({ - esClient: this.options.esClient, + esClient: this.options.clusterClient.asCurrentUser, soClient: this.options.soClient, page, perPage, @@ -182,124 +177,19 @@ export class EntityClient { async startEntityDefinition(definition: EntityDefinition) { this.options.logger.info(`Starting transforms for definition [${definition.id}]`); - return startTransforms(this.options.esClient, definition, this.options.logger); + return startTransforms( + this.options.clusterClient.asCurrentUser, + definition, + this.options.logger + ); } async stopEntityDefinition(definition: EntityDefinition) { this.options.logger.info(`Stopping transforms for definition [${definition.id}]`); - return stopTransforms(this.options.esClient, definition, this.options.logger); - } - - async getEntitySources({ type }: { type: string }) { - const result = await this.options.esClient.search({ - index: 'kibana_entity_definitions', - query: { - bool: { - must: { - term: { entity_type: type }, - }, - }, - }, - }); - - return result.hits.hits.map((hit) => hit._source) as EntitySource[]; - } - - async searchEntities({ - type, - start, - end, - sort, - metadataFields = [], - filters = [], - limit = 10, - }: SearchByType) { - const sources = await this.getEntitySources({ type }); - if (sources.length === 0) { - throw new UnknownEntityType(`No sources found for entity type [${type}]`); - } - - return this.searchEntitiesBySources({ - sources, - start, - end, - metadataFields, - filters, - sort, - limit, - }); - } - - async searchEntitiesBySources({ - sources, - start, - end, - sort, - metadataFields = [], - filters = [], - limit = 10, - }: SearchBySources) { - const entities = await Promise.all( - sources.map(async (source) => { - const mandatoryFields = [ - ...source.identity_fields, - ...(source.timestamp_field ? [source.timestamp_field] : []), - ...(source.display_name ? [source.display_name] : []), - ]; - const metaFields = [...metadataFields, ...source.metadata_fields]; - - // operations on an unmapped field result in a failing query so we verify - // field capabilities beforehand - const { fields } = await this.options.esClient.fieldCaps({ - index: source.index_patterns, - fields: [...mandatoryFields, ...metaFields], - }); - - const sourceHasMandatoryFields = mandatoryFields.every((field) => !!fields[field]); - if (!sourceHasMandatoryFields) { - // we can't build entities without id fields so we ignore the source. - // TODO filters should likely behave similarly. we should also throw - const missingFields = mandatoryFields.filter((field) => !fields[field]); - this.options.logger.info( - `Ignoring source for type [${source.type}] with index_patterns [${ - source.index_patterns - }] because some mandatory fields [${missingFields.join(', ')}] are not mapped` - ); - return []; - } - - // but metadata field not being available is fine - const availableMetadataFields = metaFields.filter((field) => fields[field]); - if (availableMetadataFields.length < metaFields.length) { - this.options.logger.info( - `Ignoring unmapped fields [${without(metaFields, ...availableMetadataFields).join( - ', ' - )}]` - ); - } - - const query = getEntityInstancesQuery({ - source: { - ...source, - metadata_fields: availableMetadataFields, - filters: [...source.filters, ...filters], - }, - start, - end, - sort, - limit, - }); - this.options.logger.debug(`Entity query: ${query}`); - - const rawEntities = await runESQLQuery({ - query, - esClient: this.options.esClient, - }); - - return rawEntities; - }) - ).then((results) => results.flat()); - - return mergeEntitiesList(sources, entities).slice(0, limit); + return stopTransforms( + this.options.clusterClient.asCurrentUser, + definition, + this.options.logger + ); } } diff --git a/x-pack/plugins/entity_manager/server/lib/v2/constants.ts b/x-pack/plugins/entity_manager/server/lib/v2/constants.ts new file mode 100644 index 0000000000000..71d9369318225 --- /dev/null +++ b/x-pack/plugins/entity_manager/server/lib/v2/constants.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. + */ + +// Definitions index + +export const DEFINITIONS_ALIAS = '.kibana-entities-definitions'; +export const TEMPLATE_VERSION = 1; + +// Privileges + +export const CREATE_ENTITY_TYPE_DEFINITION_PRIVILEGE = 'create_entity_type_definition'; +export const CREATE_ENTITY_SOURCE_DEFINITION_PRIVILEGE = 'create_entity_source_definition'; +export const READ_ENTITY_TYPE_DEFINITION_PRIVILEGE = 'read_entity_type_definition'; +export const READ_ENTITY_SOURCE_DEFINITION_PRIVILEGE = 'read_entity_source_definition'; +export const READ_ENTITIES_PRIVILEGE = 'read_entities'; diff --git a/x-pack/plugins/entity_manager/server/lib/v2/definitions/setup_entity_definitions_index.ts b/x-pack/plugins/entity_manager/server/lib/v2/definitions/setup_entity_definitions_index.ts new file mode 100644 index 0000000000000..b9e3f39a3dd62 --- /dev/null +++ b/x-pack/plugins/entity_manager/server/lib/v2/definitions/setup_entity_definitions_index.ts @@ -0,0 +1,81 @@ +/* + * 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 { errors } from '@elastic/elasticsearch'; +import { IClusterClient, Logger } from '@kbn/core/server'; +import { DEFINITIONS_ALIAS, TEMPLATE_VERSION } from '../constants'; + +const definitionsIndexTemplate = { + name: `${DEFINITIONS_ALIAS}-template`, + index_patterns: [`${DEFINITIONS_ALIAS}-*`], + _meta: { + description: "Index template for the Elastic Entity Model's entity definitions index.", + managed: true, + managed_by: 'elastic_entity_model', + }, + version: TEMPLATE_VERSION, + template: { + settings: { + hidden: true, + }, + aliases: { + [DEFINITIONS_ALIAS]: { + is_hidden: true, + }, + }, + mappings: { + dynamic: false, + properties: { + template_version: { + type: 'short', + }, + definition_type: { + type: 'keyword', + }, + source: { + type: 'object', + properties: { + type_id: { + type: 'keyword', + }, + }, + }, + }, + }, + }, +}; + +const CURRENT_INDEX = `${DEFINITIONS_ALIAS}-${TEMPLATE_VERSION}` as const; + +export async function setupEntityDefinitionsIndex(clusterClient: IClusterClient, logger: Logger) { + const esClient = clusterClient.asInternalUser; + try { + logger.debug(`Installing entity definitions index template for version ${TEMPLATE_VERSION}`); + await esClient.indices.putIndexTemplate(definitionsIndexTemplate); + + await esClient.indices.get({ + index: CURRENT_INDEX, + }); + + logger.debug(`Entity definitions index already exists (${CURRENT_INDEX})`); + } catch (error) { + if ( + error instanceof errors.ResponseError && + error.message.includes('index_not_found_exception') + ) { + logger.debug(`Creating entity definitions index (${CURRENT_INDEX})`); + + await esClient.indices.create({ + index: CURRENT_INDEX, + }); + + return; + } + + throw error; + } +} diff --git a/x-pack/plugins/entity_manager/server/lib/v2/definitions/source_definition.ts b/x-pack/plugins/entity_manager/server/lib/v2/definitions/source_definition.ts new file mode 100644 index 0000000000000..7ed1779708e54 --- /dev/null +++ b/x-pack/plugins/entity_manager/server/lib/v2/definitions/source_definition.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 { IScopedClusterClient, Logger } from '@kbn/core/server'; +import { DEFINITIONS_ALIAS, TEMPLATE_VERSION } from '../constants'; +import { EntitySourceDefinition, StoredEntitySourceDefinition } from '../types'; +import { SourceAs, runESQLQuery } from '../run_esql_query'; +import { EntityDefinitionConflict } from '../errors/entity_definition_conflict'; + +export async function storeSourceDefinition( + source: EntitySourceDefinition, + clusterClient: IScopedClusterClient, + logger: Logger +): Promise { + const esClient = clusterClient.asInternalUser; + + const sources = await runESQLQuery('fetch source definition for conflict check', { + esClient, + query: `FROM ${DEFINITIONS_ALIAS} METADATA _id | WHERE definition_type == "source" AND _id == "source:${source.id}" | KEEP _id`, + logger, + }); + + if (sources.length !== 0) { + throw new EntityDefinitionConflict('source', source.id); + } + + const definition: StoredEntitySourceDefinition = { + template_version: TEMPLATE_VERSION, + definition_type: 'source', + source, + }; + + await esClient.index({ + index: DEFINITIONS_ALIAS, + id: `source:${definition.source.id}`, + document: definition, + }); + + return definition.source; +} + +export interface ReadSourceDefinitionOptions { + type?: string; +} + +export async function readSourceDefinitions( + clusterClient: IScopedClusterClient, + logger: Logger, + options?: ReadSourceDefinitionOptions +): Promise { + const esClient = clusterClient.asInternalUser; + + const typeFilter = options?.type ? `AND source.type_id == "${options.type}"` : ''; + const sources = await runESQLQuery>( + 'fetch all source definitions', + { + esClient, + query: `FROM ${DEFINITIONS_ALIAS} METADATA _source | WHERE definition_type == "source" ${typeFilter} | KEEP _source`, + logger, + } + ); + + return sources.map((storedTypeDefinition) => storedTypeDefinition._source.source); +} diff --git a/x-pack/plugins/entity_manager/server/lib/v2/definitions/type_definition.ts b/x-pack/plugins/entity_manager/server/lib/v2/definitions/type_definition.ts new file mode 100644 index 0000000000000..710e176a4a128 --- /dev/null +++ b/x-pack/plugins/entity_manager/server/lib/v2/definitions/type_definition.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 { IScopedClusterClient, Logger } from '@kbn/core/server'; +import { DEFINITIONS_ALIAS, TEMPLATE_VERSION } from '../constants'; +import { EntityTypeDefinition, StoredEntityTypeDefinition } from '../types'; +import { SourceAs, runESQLQuery } from '../run_esql_query'; +import { EntityDefinitionConflict } from '../errors/entity_definition_conflict'; + +export async function storeTypeDefinition( + type: EntityTypeDefinition, + clusterClient: IScopedClusterClient, + logger: Logger +): Promise { + const esClient = clusterClient.asInternalUser; + + const types = await runESQLQuery('fetch type definition for conflict check', { + esClient, + query: `FROM ${DEFINITIONS_ALIAS} METADATA _id | WHERE definition_type == "type" AND _id == "type:${type.id}" | KEEP _id`, + logger, + }); + + if (types.length !== 0) { + throw new EntityDefinitionConflict('type', type.id); + } + + const definition: StoredEntityTypeDefinition = { + template_version: TEMPLATE_VERSION, + definition_type: 'type', + type, + }; + + await esClient.index({ + index: DEFINITIONS_ALIAS, + id: `type:${definition.type.id}`, + document: definition, + }); + + return definition.type; +} + +export async function readTypeDefinitions( + clusterClient: IScopedClusterClient, + logger: Logger +): Promise { + const esClient = clusterClient.asInternalUser; + + const types = await runESQLQuery>( + 'fetch all type definitions', + { + esClient, + query: `FROM ${DEFINITIONS_ALIAS} METADATA _source | WHERE definition_type == "type" | KEEP _source`, + logger, + } + ); + + return types.map((storedTypeDefinition) => storedTypeDefinition._source.type); +} diff --git a/x-pack/plugins/entity_manager/server/lib/v2/entity_client.ts b/x-pack/plugins/entity_manager/server/lib/v2/entity_client.ts new file mode 100644 index 0000000000000..9eb2127ddc818 --- /dev/null +++ b/x-pack/plugins/entity_manager/server/lib/v2/entity_client.ts @@ -0,0 +1,142 @@ +/* + * 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 { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; +import { IScopedClusterClient, Logger } from '@kbn/core/server'; +import { EntityV2 } from '@kbn/entities-schema'; +import { without } from 'lodash'; +import { + ReadSourceDefinitionOptions, + readSourceDefinitions, + storeSourceDefinition, +} from './definitions/source_definition'; +import { readTypeDefinitions, storeTypeDefinition } from './definitions/type_definition'; +import { getEntityInstancesQuery } from './queries'; +import { mergeEntitiesList } from './queries/utils'; +import { + EntitySourceDefinition, + EntityTypeDefinition, + SearchByType, + SearchBySources, +} from './types'; +import { UnknownEntityType } from './errors/unknown_entity_type'; +import { runESQLQuery } from './run_esql_query'; + +export class EntityClient { + constructor( + private options: { + clusterClient: IScopedClusterClient; + soClient: SavedObjectsClientContract; + logger: Logger; + } + ) {} + + async searchEntities({ type, ...options }: SearchByType) { + const sources = await this.readSourceDefinitions({ + type, + }); + + if (sources.length === 0) { + throw new UnknownEntityType(`No sources found for entity type [${type}]`); + } + + return this.searchEntitiesBySources({ + sources, + ...options, + }); + } + + async searchEntitiesBySources({ + sources, + metadata_fields: metadataFields, + filters, + start, + end, + sort, + limit, + }: SearchBySources) { + const entities = await Promise.all( + sources.map(async (source) => { + const mandatoryFields = [ + ...source.identity_fields, + ...(source.timestamp_field ? [source.timestamp_field] : []), + ...(source.display_name ? [source.display_name] : []), + ]; + const metaFields = [...metadataFields, ...source.metadata_fields]; + + // operations on an unmapped field result in a failing query so we verify + // field capabilities beforehand + const { fields } = await this.options.clusterClient.asCurrentUser.fieldCaps({ + index: source.index_patterns, + fields: [...mandatoryFields, ...metaFields], + }); + + const sourceHasMandatoryFields = mandatoryFields.every((field) => !!fields[field]); + if (!sourceHasMandatoryFields) { + // we can't build entities without id fields so we ignore the source. + // TODO filters should likely behave similarly. we should also throw + const missingFields = mandatoryFields.filter((field) => !fields[field]); + this.options.logger.info( + `Ignoring source for type [${source.type_id}] with index_patterns [${ + source.index_patterns + }] because some mandatory fields [${missingFields.join(', ')}] are not mapped` + ); + return []; + } + + // but metadata field not being available is fine + const availableMetadataFields = metaFields.filter((field) => fields[field]); + if (availableMetadataFields.length < metaFields.length) { + this.options.logger.info( + `Ignoring unmapped fields [${without(metaFields, ...availableMetadataFields).join( + ', ' + )}]` + ); + } + + const query = getEntityInstancesQuery({ + source: { + ...source, + metadata_fields: availableMetadataFields, + filters: [...source.filters, ...filters], + }, + start, + end, + sort, + limit, + }); + this.options.logger.debug(`Entity query: ${query}`); + + const rawEntities = await runESQLQuery('resolve entities', { + query, + esClient: this.options.clusterClient.asCurrentUser, + logger: this.options.logger, + }); + + return rawEntities; + }) + ).then((results) => results.flat()); + + return mergeEntitiesList(sources, entities).slice(0, limit); + } + + async storeTypeDefinition(type: EntityTypeDefinition) { + return storeTypeDefinition(type, this.options.clusterClient, this.options.logger); + } + + async readTypeDefinitions() { + return readTypeDefinitions(this.options.clusterClient, this.options.logger); + } + + async storeSourceDefinition(source: EntitySourceDefinition) { + return storeSourceDefinition(source, this.options.clusterClient, this.options.logger); + } + + async readSourceDefinitions(options?: ReadSourceDefinitionOptions) { + return readSourceDefinitions(this.options.clusterClient, this.options.logger, options); + } +} diff --git a/x-pack/plugins/entity_manager/server/lib/v2/errors/entity_definition_conflict.ts b/x-pack/plugins/entity_manager/server/lib/v2/errors/entity_definition_conflict.ts new file mode 100644 index 0000000000000..9000685713e36 --- /dev/null +++ b/x-pack/plugins/entity_manager/server/lib/v2/errors/entity_definition_conflict.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 { DefinitionType } from '../types'; + +export class EntityDefinitionConflict extends Error { + constructor(definitionType: DefinitionType, id: string) { + super(`An entity ${definitionType} definition with the ID "${id}" already exists.`); + this.name = 'EntityDefinitionConflict'; + } +} diff --git a/x-pack/plugins/entity_manager/server/lib/entities/errors/unknown_entity_type.ts b/x-pack/plugins/entity_manager/server/lib/v2/errors/unknown_entity_type.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/errors/unknown_entity_type.ts rename to x-pack/plugins/entity_manager/server/lib/v2/errors/unknown_entity_type.ts diff --git a/x-pack/plugins/entity_manager/server/lib/queries/index.test.ts b/x-pack/plugins/entity_manager/server/lib/v2/queries/index.test.ts similarity index 96% rename from x-pack/plugins/entity_manager/server/lib/queries/index.test.ts rename to x-pack/plugins/entity_manager/server/lib/v2/queries/index.test.ts index d8b3c9347cdd1..7485b19a2c7c0 100644 --- a/x-pack/plugins/entity_manager/server/lib/queries/index.test.ts +++ b/x-pack/plugins/entity_manager/server/lib/v2/queries/index.test.ts @@ -12,7 +12,8 @@ describe('getEntityInstancesQuery', () => { it('generates a valid esql query', () => { const query = getEntityInstancesQuery({ source: { - type: 'service', + id: 'service_source', + type_id: 'service', index_patterns: ['logs-*', 'metrics-*'], identity_fields: ['service.name'], metadata_fields: ['host.name'], diff --git a/x-pack/plugins/entity_manager/server/lib/queries/index.ts b/x-pack/plugins/entity_manager/server/lib/v2/queries/index.ts similarity index 75% rename from x-pack/plugins/entity_manager/server/lib/queries/index.ts rename to x-pack/plugins/entity_manager/server/lib/v2/queries/index.ts index 83c25d756c170..7926b67849f5d 100644 --- a/x-pack/plugins/entity_manager/server/lib/queries/index.ts +++ b/x-pack/plugins/entity_manager/server/lib/v2/queries/index.ts @@ -5,26 +5,9 @@ * 2.0. */ -import { z } from '@kbn/zod'; - -export const entitySourceSchema = z.object({ - type: z.string(), - timestamp_field: z.optional(z.string()), - index_patterns: z.array(z.string()), - identity_fields: z.array(z.string()), - metadata_fields: z.array(z.string()), - filters: z.array(z.string()), - display_name: z.optional(z.string()), -}); - -export interface SortBy { - field: string; - direction: 'ASC' | 'DESC'; -} - -export type EntitySource = z.infer; +import { EntitySourceDefinition, SortBy } from '../types'; -const sourceCommand = ({ source }: { source: EntitySource }) => { +const sourceCommand = ({ source }: { source: EntitySourceDefinition }) => { let query = `FROM ${source.index_patterns.join(', ')}`; const esMetadataFields = source.metadata_fields.filter((field) => @@ -42,7 +25,7 @@ const whereCommand = ({ start, end, }: { - source: EntitySource; + source: EntitySourceDefinition; start: string; end: string; }) => { @@ -60,7 +43,7 @@ const whereCommand = ({ return filters.map((filter) => `WHERE ${filter}`).join(' | '); }; -const statsCommand = ({ source }: { source: EntitySource }) => { +const statsCommand = ({ source }: { source: EntitySourceDefinition }) => { const aggs = source.metadata_fields .filter((field) => !source.identity_fields.some((idField) => idField === field)) .map((field) => `${field} = VALUES(${field})`); @@ -78,7 +61,7 @@ const statsCommand = ({ source }: { source: EntitySource }) => { return `STATS ${aggs.join(', ')} BY ${source.identity_fields.join(', ')}`; }; -const evalCommand = ({ source }: { source: EntitySource }) => { +const evalCommand = ({ source }: { source: EntitySourceDefinition }) => { const id = source.identity_fields.length === 1 ? source.identity_fields[0] @@ -89,13 +72,13 @@ const evalCommand = ({ source }: { source: EntitySource }) => { : 'entity.id'; return `EVAL ${[ - `entity.type = "${source.type}"`, + `entity.type = "${source.type_id}"`, `entity.id = ${id}`, `entity.display_name = ${displayName}`, ].join(', ')}`; }; -const sortCommand = ({ source, sort }: { source: EntitySource; sort?: SortBy }) => { +const sortCommand = ({ source, sort }: { source: EntitySourceDefinition; sort?: SortBy }) => { if (sort) { return `SORT ${sort.field} ${sort.direction}`; } @@ -114,7 +97,7 @@ export function getEntityInstancesQuery({ end, sort, }: { - source: EntitySource; + source: EntitySourceDefinition; limit: number; start: string; end: string; diff --git a/x-pack/plugins/entity_manager/server/lib/queries/utils.test.ts b/x-pack/plugins/entity_manager/server/lib/v2/queries/utils.test.ts similarity index 95% rename from x-pack/plugins/entity_manager/server/lib/queries/utils.test.ts rename to x-pack/plugins/entity_manager/server/lib/v2/queries/utils.test.ts index df5c8a2a4a826..295ab7796585c 100644 --- a/x-pack/plugins/entity_manager/server/lib/queries/utils.test.ts +++ b/x-pack/plugins/entity_manager/server/lib/v2/queries/utils.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { EntitySource } from '.'; +import { EntitySourceDefinition } from '../types'; import { mergeEntitiesList } from './utils'; describe('mergeEntitiesList', () => { @@ -68,7 +68,7 @@ describe('mergeEntitiesList', () => { { metadata_fields: ['host.name', 'agent.name', 'service.environment', 'only_in_record_2'], }, - ] as EntitySource[], + ] as EntitySourceDefinition[], entities ); expect(mergedEntities.length).toEqual(1); @@ -124,7 +124,7 @@ describe('mergeEntitiesList', () => { { metadata_fields: ['host.name'], }, - ] as EntitySource[], + ] as EntitySourceDefinition[], entities ); expect(mergedEntities.length).toEqual(1); @@ -154,7 +154,10 @@ describe('mergeEntitiesList', () => { ]; const mergedEntities = mergeEntitiesList( - [{ metadata_fields: ['host.name'] }, { metadata_fields: ['host.name'] }] as EntitySource[], + [ + { metadata_fields: ['host.name'] }, + { metadata_fields: ['host.name'] }, + ] as EntitySourceDefinition[], entities ); expect(mergedEntities.length).toEqual(1); @@ -199,7 +202,7 @@ describe('mergeEntitiesList', () => { { metadata_fields: ['host.name'], }, - ] as EntitySource[], + ] as EntitySourceDefinition[], entities ); expect(mergedEntities.length).toEqual(1); diff --git a/x-pack/plugins/entity_manager/server/lib/queries/utils.ts b/x-pack/plugins/entity_manager/server/lib/v2/queries/utils.ts similarity index 63% rename from x-pack/plugins/entity_manager/server/lib/queries/utils.ts rename to x-pack/plugins/entity_manager/server/lib/v2/queries/utils.ts index a18f6fb837140..1d20d3caea0dc 100644 --- a/x-pack/plugins/entity_manager/server/lib/queries/utils.ts +++ b/x-pack/plugins/entity_manager/server/lib/v2/queries/utils.ts @@ -5,11 +5,9 @@ * 2.0. */ -import { compact, uniq } from 'lodash'; -import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; import { EntityV2 } from '@kbn/entities-schema'; -import { ESQLSearchResponse } from '@kbn/es-types'; -import { EntitySource } from '.'; +import { compact, uniq } from 'lodash'; +import { EntitySourceDefinition } from '../types'; function getLatestDate(date1?: string, date2?: string) { if (!date1 && !date2) return; @@ -45,7 +43,10 @@ function mergeEntities(metadataFields: string[], entity1: EntityV2, entity2: Ent return merged; } -export function mergeEntitiesList(sources: EntitySource[], entities: EntityV2[]): EntityV2[] { +export function mergeEntitiesList( + sources: EntitySourceDefinition[], + entities: EntityV2[] +): EntityV2[] { const metadataFields = uniq( sources.flatMap((source) => compact([source.timestamp_field, ...source.metadata_fields])) ); @@ -64,39 +65,3 @@ export function mergeEntitiesList(sources: EntitySource[], entities: EntityV2[]) return Object.values(instances); } - -export async function runESQLQuery({ - esClient, - query, -}: { - esClient: ElasticsearchClient; - query: string; -}): Promise { - const esqlResponse = (await esClient.esql.query( - { - query, - format: 'json', - }, - { querystring: { drop_null_columns: true } } - )) as unknown as ESQLSearchResponse; - - const documents = esqlResponse.values.map((row) => - row.reduce>((acc, value, index) => { - const column = esqlResponse.columns[index]; - - if (!column) { - return acc; - } - - // Removes the type suffix from the column name - const name = column.name.replace(/\.(text|keyword)$/, ''); - if (!acc[name]) { - acc[name] = value; - } - - return acc; - }, {}) - ) as T[]; - - return documents; -} diff --git a/x-pack/plugins/entity_manager/server/lib/v2/run_esql_query.ts b/x-pack/plugins/entity_manager/server/lib/v2/run_esql_query.ts new file mode 100644 index 0000000000000..eda36a007ffe6 --- /dev/null +++ b/x-pack/plugins/entity_manager/server/lib/v2/run_esql_query.ts @@ -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 { withSpan } from '@kbn/apm-utils'; +import { ElasticsearchClient, Logger } from '@kbn/core/server'; +import { ESQLColumn, ESQLRow, ESQLSearchResponse } from '@kbn/es-types'; + +export interface SourceAs { + _source: T; +} + +export async function runESQLQuery( + operationName: string, + { + esClient, + logger, + query, + }: { + esClient: ElasticsearchClient; + logger: Logger; + query: string; + } +): Promise { + logger.trace(() => `Request (${operationName}):\n${query}`); + return withSpan( + { name: operationName, labels: { plugin: '@kbn/entityManager-plugin' } }, + async () => + esClient.esql.query( + { + query, + format: 'json', + }, + { querystring: { drop_null_columns: true } } + ) + ) + .then((response) => { + logger.trace(() => `Response (${operationName}):\n${JSON.stringify(response, null, 2)}`); + + const esqlResponse = response as unknown as ESQLSearchResponse; + + const documents = esqlResponse.values.map((row) => + rowToObject(row, esqlResponse.columns) + ) as T[]; + + return documents; + }) + .catch((error) => { + logger.trace(() => `Error (${operationName}):\n${error.message}`); + throw error; + }); +} + +function rowToObject(row: ESQLRow, columns: ESQLColumn[]) { + return row.reduce>((object, value, index) => { + const column = columns[index]; + + if (!column) { + return object; + } + + // Removes the type suffix from the column name + const name = column.name.replace(/\.(text|keyword)$/, ''); + if (!object[name]) { + object[name] = value; + } + + return object; + }, {}); +} diff --git a/x-pack/plugins/entity_manager/server/lib/v2/types.ts b/x-pack/plugins/entity_manager/server/lib/v2/types.ts new file mode 100644 index 0000000000000..e9815942592de --- /dev/null +++ b/x-pack/plugins/entity_manager/server/lib/v2/types.ts @@ -0,0 +1,93 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { z } from '@kbn/zod'; +import moment from 'moment'; + +// Definitions + +export const entityTypeDefinitionRt = z.object({ + id: z.string(), +}); + +export type EntityTypeDefinition = z.TypeOf; + +export const entitySourceDefinitionRt = z.object({ + id: z.string(), + type_id: z.string(), + index_patterns: z.array(z.string()), + identity_fields: z.array(z.string()), + metadata_fields: z.array(z.string()), + filters: z.array(z.string()), + timestamp_field: z.optional(z.string()), + display_name: z.optional(z.string()), +}); + +export type EntitySourceDefinition = z.TypeOf; + +// Stored definitions + +export type DefinitionType = 'type' | 'source'; + +export interface BaseEntityDefinition { + definition_type: DefinitionType; + template_version: number; +} + +export interface StoredEntityTypeDefinition extends BaseEntityDefinition { + type: EntityTypeDefinition; +} + +export interface StoredEntitySourceDefinition extends BaseEntityDefinition { + source: EntitySourceDefinition; +} + +// API parameters + +const sortByRt = z.object({ + field: z.string(), + direction: z.enum(['ASC', 'DESC']), +}); + +export type SortBy = z.TypeOf; + +const searchCommonRt = z.object({ + start: z + .optional(z.string()) + .default(() => moment().subtract(5, 'minutes').toISOString()) + .refine((val) => moment(val).isValid(), { + message: '[start] should be a date in ISO format', + }), + end: z + .optional(z.string()) + .default(() => moment().toISOString()) + .refine((val) => moment(val).isValid(), { + message: '[end] should be a date in ISO format', + }), + sort: z.optional(sortByRt), + limit: z.optional(z.number()).default(10), + metadata_fields: z.optional(z.array(z.string())).default([]), + filters: z.optional(z.array(z.string())).default([]), +}); + +export const searchByTypeRt = z.intersection( + searchCommonRt, + z.object({ + type: z.string(), + }) +); + +export type SearchByType = z.output; + +export const searchBySourcesRt = z.intersection( + searchCommonRt, + z.object({ + sources: z.array(entitySourceDefinitionRt), + }) +); + +export type SearchBySources = z.output; diff --git a/x-pack/plugins/entity_manager/server/plugin.ts b/x-pack/plugins/entity_manager/server/plugin.ts index 101fdde95c9dc..d2e9d12a33797 100644 --- a/x-pack/plugins/entity_manager/server/plugin.ts +++ b/x-pack/plugins/entity_manager/server/plugin.ts @@ -8,6 +8,7 @@ import { CoreSetup, CoreStart, + DEFAULT_APP_CATEGORIES, KibanaRequest, Logger, Plugin, @@ -16,6 +17,7 @@ import { } from '@kbn/core/server'; import { registerRoutes } from '@kbn/server-route-repository'; import { firstValueFrom } from 'rxjs'; +import { KibanaFeatureScope } from '@kbn/features-plugin/common'; import { EntityManagerConfig, configSchema, exposeToBrowserConfig } from '../common/config'; import { builtInDefinitions } from './lib/entities/built_in'; import { upgradeBuiltInEntityDefinitions } from './lib/entities/upgrade_entity_definition'; @@ -29,6 +31,14 @@ import { EntityManagerPluginStartDependencies, EntityManagerServerSetup, } from './types'; +import { setupEntityDefinitionsIndex } from './lib/v2/definitions/setup_entity_definitions_index'; +import { + CREATE_ENTITY_TYPE_DEFINITION_PRIVILEGE, + CREATE_ENTITY_SOURCE_DEFINITION_PRIVILEGE, + READ_ENTITY_TYPE_DEFINITION_PRIVILEGE, + READ_ENTITY_SOURCE_DEFINITION_PRIVILEGE, + READ_ENTITIES_PRIVILEGE, +} from './lib/v2/constants'; // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface EntityManagerServerPluginSetup {} @@ -63,6 +73,46 @@ export class EntityManagerServerPlugin core: CoreSetup, plugins: EntityManagerPluginSetupDependencies ): EntityManagerServerPluginSetup { + const ENTITY_MANAGER_FEATURE_ID = 'entityManager'; + plugins.features.registerKibanaFeature({ + id: ENTITY_MANAGER_FEATURE_ID, + name: 'Entity Manager', + description: 'All features related to the Elastic Entity model', + category: DEFAULT_APP_CATEGORIES.management, + scope: [KibanaFeatureScope.Spaces, KibanaFeatureScope.Security], + app: [ENTITY_MANAGER_FEATURE_ID], + privileges: { + all: { + app: [ENTITY_MANAGER_FEATURE_ID], + api: [ + CREATE_ENTITY_TYPE_DEFINITION_PRIVILEGE, + CREATE_ENTITY_SOURCE_DEFINITION_PRIVILEGE, + READ_ENTITY_TYPE_DEFINITION_PRIVILEGE, + READ_ENTITY_SOURCE_DEFINITION_PRIVILEGE, + READ_ENTITIES_PRIVILEGE, + ], + ui: [], + savedObject: { + all: [], + read: [], + }, + }, + read: { + app: [ENTITY_MANAGER_FEATURE_ID], + api: [ + READ_ENTITY_TYPE_DEFINITION_PRIVILEGE, + READ_ENTITY_SOURCE_DEFINITION_PRIVILEGE, + READ_ENTITIES_PRIVILEGE, + ], + ui: [], + savedObject: { + all: [], + read: [], + }, + }, + }, + }); + core.savedObjects.registerType(entityDefinition); core.savedObjects.registerType(EntityDiscoveryApiKeyType); plugins.encryptedSavedObjects.registerType({ @@ -99,9 +149,9 @@ export class EntityManagerServerPlugin request: KibanaRequest; coreStart: CoreStart; }) { - const esClient = coreStart.elasticsearch.client.asScoped(request).asCurrentUser; + const clusterClient = coreStart.elasticsearch.client.asScoped(request); const soClient = coreStart.savedObjects.getScopedClient(request); - return new EntityClient({ esClient, soClient, logger: this.logger }); + return new EntityClient({ clusterClient, soClient, logger: this.logger }); } public start( @@ -117,6 +167,7 @@ export class EntityManagerServerPlugin const esClient = core.elasticsearch.client.asInternalUser; + // Setup v1 definitions index installEntityManagerTemplates({ esClient, logger: this.logger }) .then(async () => { // the api key validation requires a check against the cluster license @@ -133,6 +184,11 @@ export class EntityManagerServerPlugin }) .catch((err) => this.logger.error(err)); + // Setup v2 definitions index + setupEntityDefinitionsIndex(core.elasticsearch.client, this.logger).catch((error) => { + this.logger.error(error); + }); + return { getScopedClient: async ({ request }: { request: KibanaRequest }) => { return this.getScopedClient({ request, coreStart: core }); diff --git a/x-pack/plugins/entity_manager/server/routes/entities/index.ts b/x-pack/plugins/entity_manager/server/routes/entities/index.ts index 52300ab2601b6..539423c6a5e17 100644 --- a/x-pack/plugins/entity_manager/server/routes/entities/index.ts +++ b/x-pack/plugins/entity_manager/server/routes/entities/index.ts @@ -10,7 +10,6 @@ import { deleteEntityDefinitionRoute } from './delete'; import { getEntityDefinitionRoute } from './get'; import { resetEntityDefinitionRoute } from './reset'; import { updateEntityDefinitionRoute } from './update'; -import { searchEntitiesRoute, searchEntitiesPreviewRoute } from '../v2/search'; export const entitiesRoutes = { ...createEntityDefinitionRoute, @@ -18,6 +17,4 @@ export const entitiesRoutes = { ...getEntityDefinitionRoute, ...resetEntityDefinitionRoute, ...updateEntityDefinitionRoute, - ...searchEntitiesRoute, - ...searchEntitiesPreviewRoute, }; diff --git a/x-pack/plugins/entity_manager/server/routes/index.ts b/x-pack/plugins/entity_manager/server/routes/index.ts index e3f2d3a75bbef..487dfe86028d7 100644 --- a/x-pack/plugins/entity_manager/server/routes/index.ts +++ b/x-pack/plugins/entity_manager/server/routes/index.ts @@ -7,10 +7,12 @@ import { enablementRoutes } from './enablement'; import { entitiesRoutes } from './entities'; +import { v2Routes } from './v2'; export const entityManagerRouteRepository = { ...enablementRoutes, ...entitiesRoutes, + ...v2Routes, }; export type EntityManagerRouteRepository = typeof entityManagerRouteRepository; diff --git a/x-pack/plugins/entity_manager/server/routes/v2/index.ts b/x-pack/plugins/entity_manager/server/routes/v2/index.ts new file mode 100644 index 0000000000000..c601ebe988a29 --- /dev/null +++ b/x-pack/plugins/entity_manager/server/routes/v2/index.ts @@ -0,0 +1,16 @@ +/* + * 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 { searchRoutes } from './search'; +import { typeDefinitionRoutes } from './type_definition_routes'; +import { sourceDefinitionRoutes } from './source_definition_routes'; + +export const v2Routes = { + ...searchRoutes, + ...typeDefinitionRoutes, + ...sourceDefinitionRoutes, +}; diff --git a/x-pack/plugins/entity_manager/server/routes/v2/search.ts b/x-pack/plugins/entity_manager/server/routes/v2/search.ts index 451ff7cfff43f..82d0e5e84f2da 100644 --- a/x-pack/plugins/entity_manager/server/routes/v2/search.ts +++ b/x-pack/plugins/entity_manager/server/routes/v2/search.ts @@ -5,62 +5,26 @@ * 2.0. */ -import moment from 'moment'; import { z } from '@kbn/zod'; import { createEntityManagerServerRoute } from '../create_entity_manager_server_route'; -import { entitySourceSchema } from '../../lib/queries'; -import { UnknownEntityType } from '../../lib/entities/errors/unknown_entity_type'; +import { UnknownEntityType } from '../../lib/v2/errors/unknown_entity_type'; +import { searchBySourcesRt, searchByTypeRt } from '../../lib/v2/types'; +import { READ_ENTITIES_PRIVILEGE } from '../../lib/v2/constants'; export const searchEntitiesRoute = createEntityManagerServerRoute({ endpoint: 'POST /internal/entities/v2/_search', + security: { + authz: { + requiredPrivileges: [READ_ENTITIES_PRIVILEGE], + }, + }, params: z.object({ - body: z.object({ - type: z.string(), - metadata_fields: z.optional(z.array(z.string())).default([]), - filters: z.optional(z.array(z.string())).default([]), - start: z - .optional(z.string()) - .default(() => moment().subtract(5, 'minutes').toISOString()) - .refine((val) => moment(val).isValid(), { - message: '[start] should be a date in ISO format', - }), - end: z - .optional(z.string()) - .default(() => moment().toISOString()) - .refine((val) => moment(val).isValid(), { - message: '[end] should be a date in ISO format', - }), - sort: z.optional( - z.object({ - field: z.string(), - direction: z.enum(['ASC', 'DESC']), - }) - ), - limit: z.optional(z.number()).default(10), - }), + body: searchByTypeRt, }), handler: async ({ request, response, params, logger, getScopedClient }) => { try { - const { - type, - start, - end, - limit, - filters, - sort, - metadata_fields: metadataFields, - } = params.body; - const client = await getScopedClient({ request }); - const entities = await client.searchEntities({ - type, - filters, - metadataFields, - start, - end, - sort, - limit, - }); + const entities = await client.v2.searchEntities(params.body); return response.ok({ body: { entities } }); } catch (e) { @@ -77,42 +41,23 @@ export const searchEntitiesRoute = createEntityManagerServerRoute({ export const searchEntitiesPreviewRoute = createEntityManagerServerRoute({ endpoint: 'POST /internal/entities/v2/_search/preview', + security: { + authz: { + requiredPrivileges: [READ_ENTITIES_PRIVILEGE], + }, + }, params: z.object({ - body: z.object({ - sources: z.array(entitySourceSchema), - start: z - .optional(z.string()) - .default(() => moment().subtract(5, 'minutes').toISOString()) - .refine((val) => moment(val).isValid(), { - message: '[start] should be a date in ISO format', - }), - end: z - .optional(z.string()) - .default(() => moment().toISOString()) - .refine((val) => moment(val).isValid(), { - message: '[end] should be a date in ISO format', - }), - sort: z.optional( - z.object({ - field: z.string(), - direction: z.enum(['ASC', 'DESC']), - }) - ), - limit: z.optional(z.number()).default(10), - }), + body: searchBySourcesRt, }), handler: async ({ request, response, params, getScopedClient }) => { - const { sources, start, end, limit, sort } = params.body; - const client = await getScopedClient({ request }); - const entities = await client.searchEntitiesBySources({ - sources, - start, - end, - sort, - limit, - }); + const entities = await client.v2.searchEntitiesBySources(params.body); return response.ok({ body: { entities } }); }, }); + +export const searchRoutes = { + ...searchEntitiesRoute, + ...searchEntitiesPreviewRoute, +}; diff --git a/x-pack/plugins/entity_manager/server/routes/v2/source_definition_routes.ts b/x-pack/plugins/entity_manager/server/routes/v2/source_definition_routes.ts new file mode 100644 index 0000000000000..4fdfa281cfd72 --- /dev/null +++ b/x-pack/plugins/entity_manager/server/routes/v2/source_definition_routes.ts @@ -0,0 +1,78 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { z } from '@kbn/zod'; +import { + CREATE_ENTITY_SOURCE_DEFINITION_PRIVILEGE, + READ_ENTITY_SOURCE_DEFINITION_PRIVILEGE, +} from '../../lib/v2/constants'; +import { entitySourceDefinitionRt } from '../../lib/v2/types'; +import { createEntityManagerServerRoute } from '../create_entity_manager_server_route'; +import { EntityDefinitionConflict } from '../../lib/v2/errors/entity_definition_conflict'; + +const createSourceDefinitionRoute = createEntityManagerServerRoute({ + endpoint: 'POST /internal/entities/v2/definitions/sources', + security: { + authz: { + requiredPrivileges: [CREATE_ENTITY_SOURCE_DEFINITION_PRIVILEGE], + }, + }, + params: z.object({ + body: z.object({ + source: entitySourceDefinitionRt, + }), + }), + handler: async ({ request, response, params, getScopedClient }) => { + try { + const client = await getScopedClient({ request }); + const source = await client.v2.storeSourceDefinition(params.body.source); + + return response.created({ + body: { + source, + }, + headers: { + location: `GET /internal/entities/v2/definitions/sources/${source.id}`, + }, + }); + } catch (error) { + if (error instanceof EntityDefinitionConflict) { + response.conflict({ + body: { + message: error.message, + }, + }); + } + + throw error; + } + }, +}); + +const readSourceDefinitionsRoute = createEntityManagerServerRoute({ + endpoint: 'GET /internal/entities/v2/definitions/sources', + security: { + authz: { + requiredPrivileges: [READ_ENTITY_SOURCE_DEFINITION_PRIVILEGE], + }, + }, + handler: async ({ request, response, getScopedClient }) => { + const client = await getScopedClient({ request }); + const sources = await client.v2.readSourceDefinitions(); + + return response.ok({ + body: { + sources, + }, + }); + }, +}); + +export const sourceDefinitionRoutes = { + ...createSourceDefinitionRoute, + ...readSourceDefinitionsRoute, +}; diff --git a/x-pack/plugins/entity_manager/server/routes/v2/type_definition_routes.ts b/x-pack/plugins/entity_manager/server/routes/v2/type_definition_routes.ts new file mode 100644 index 0000000000000..8de41f7caf62f --- /dev/null +++ b/x-pack/plugins/entity_manager/server/routes/v2/type_definition_routes.ts @@ -0,0 +1,78 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { z } from '@kbn/zod'; +import { + CREATE_ENTITY_TYPE_DEFINITION_PRIVILEGE, + READ_ENTITY_TYPE_DEFINITION_PRIVILEGE, +} from '../../lib/v2/constants'; +import { entityTypeDefinitionRt } from '../../lib/v2/types'; +import { createEntityManagerServerRoute } from '../create_entity_manager_server_route'; +import { EntityDefinitionConflict } from '../../lib/v2/errors/entity_definition_conflict'; + +const createTypeDefinitionRoute = createEntityManagerServerRoute({ + endpoint: 'POST /internal/entities/v2/definitions/types', + security: { + authz: { + requiredPrivileges: [CREATE_ENTITY_TYPE_DEFINITION_PRIVILEGE], + }, + }, + params: z.object({ + body: z.object({ + type: entityTypeDefinitionRt, + }), + }), + handler: async ({ request, response, params, getScopedClient }) => { + try { + const client = await getScopedClient({ request }); + const type = await client.v2.storeTypeDefinition(params.body.type); + + return response.created({ + body: { + type, + }, + headers: { + location: `GET /internal/entities/v2/definitions/types/${type.id}`, + }, + }); + } catch (error) { + if (error instanceof EntityDefinitionConflict) { + return response.conflict({ + body: { + message: error.message, + }, + }); + } + + throw error; + } + }, +}); + +const readTypeDefinitionsRoute = createEntityManagerServerRoute({ + endpoint: 'GET /internal/entities/v2/definitions/types', + security: { + authz: { + requiredPrivileges: [READ_ENTITY_TYPE_DEFINITION_PRIVILEGE], + }, + }, + handler: async ({ request, response, getScopedClient }) => { + const client = await getScopedClient({ request }); + const types = await client.v2.readTypeDefinitions(); + + return response.ok({ + body: { + types, + }, + }); + }, +}); + +export const typeDefinitionRoutes = { + ...createTypeDefinitionRoute, + ...readTypeDefinitionsRoute, +}; diff --git a/x-pack/plugins/entity_manager/server/types.ts b/x-pack/plugins/entity_manager/server/types.ts index cd7a4a49b9882..0841ba8a2c950 100644 --- a/x-pack/plugins/entity_manager/server/types.ts +++ b/x-pack/plugins/entity_manager/server/types.ts @@ -12,6 +12,7 @@ import { EncryptedSavedObjectsPluginStart, } from '@kbn/encrypted-saved-objects-plugin/server'; import { LicensingPluginStart } from '@kbn/licensing-plugin/server'; +import { FeaturesPluginSetup } from '@kbn/features-plugin/server'; import { EntityManagerConfig } from '../common/config'; export interface EntityManagerServerSetup { @@ -29,6 +30,7 @@ export interface ElasticsearchAccessorOptions { export interface EntityManagerPluginSetupDependencies { encryptedSavedObjects: EncryptedSavedObjectsPluginSetup; + features: FeaturesPluginSetup; } export interface EntityManagerPluginStartDependencies { diff --git a/x-pack/plugins/entity_manager/tsconfig.json b/x-pack/plugins/entity_manager/tsconfig.json index 2ef8551f373fd..4c75ac101f6ad 100644 --- a/x-pack/plugins/entity_manager/tsconfig.json +++ b/x-pack/plugins/entity_manager/tsconfig.json @@ -36,5 +36,7 @@ "@kbn/licensing-plugin", "@kbn/core-saved-objects-server", "@kbn/es-types", + "@kbn/apm-utils", + "@kbn/features-plugin", ] } diff --git a/x-pack/plugins/features/server/__snapshots__/oss_features.test.ts.snap b/x-pack/plugins/features/server/__snapshots__/oss_features.test.ts.snap index b5614562f18a4..140d20f8ebdb8 100644 --- a/x-pack/plugins/features/server/__snapshots__/oss_features.test.ts.snap +++ b/x-pack/plugins/features/server/__snapshots__/oss_features.test.ts.snap @@ -548,6 +548,8 @@ Array [ "api": Array [ "bulkGetUserProfiles", "dashboardUsageStats", + "savedQuery:manage", + "savedQuery:read", "store_search_session", ], "app": Array [ @@ -607,6 +609,7 @@ Array [ "api": Array [ "bulkGetUserProfiles", "dashboardUsageStats", + "savedQuery:read", ], "app": Array [ "dashboards", @@ -709,6 +712,8 @@ Array [ }, "api": Array [ "fileUpload:analyzeFile", + "savedQuery:manage", + "savedQuery:read", "store_search_session", ], "app": Array [ @@ -757,6 +762,9 @@ Array [ }, Object { "privilege": Object { + "api": Array [ + "savedQuery:read", + ], "app": Array [ "discover", "kibana", @@ -1004,6 +1012,10 @@ exports[`buildOSSFeatures with a basic license returns the savedQueryManagement Array [ Object { "privilege": Object { + "api": Array [ + "savedQuery:manage", + "savedQuery:read", + ], "app": Array [ "kibana", ], @@ -1022,10 +1034,14 @@ Array [ }, Object { "privilege": Object { - "disabled": true, + "api": Array [ + "savedQuery:read", + ], "savedObject": Object { "all": Array [], - "read": Array [], + "read": Array [ + "query", + ], }, "ui": Array [], }, @@ -1048,7 +1064,10 @@ Array [ "read": Array [], }, }, - "api": Array [], + "api": Array [ + "savedQuery:manage", + "savedQuery:read", + ], "app": Array [ "visualize", "lens", @@ -1094,6 +1113,9 @@ Array [ }, Object { "privilege": Object { + "api": Array [ + "savedQuery:read", + ], "app": Array [ "visualize", "lens", @@ -1190,6 +1212,8 @@ Array [ "api": Array [ "bulkGetUserProfiles", "dashboardUsageStats", + "savedQuery:manage", + "savedQuery:read", "store_search_session", ], "app": Array [ @@ -1249,6 +1273,7 @@ Array [ "api": Array [ "bulkGetUserProfiles", "dashboardUsageStats", + "savedQuery:read", ], "app": Array [ "dashboards", @@ -1351,6 +1376,8 @@ Array [ }, "api": Array [ "fileUpload:analyzeFile", + "savedQuery:manage", + "savedQuery:read", "store_search_session", ], "app": Array [ @@ -1399,6 +1426,9 @@ Array [ }, Object { "privilege": Object { + "api": Array [ + "savedQuery:read", + ], "app": Array [ "discover", "kibana", @@ -1646,6 +1676,10 @@ exports[`buildOSSFeatures with a enterprise license returns the savedQueryManage Array [ Object { "privilege": Object { + "api": Array [ + "savedQuery:manage", + "savedQuery:read", + ], "app": Array [ "kibana", ], @@ -1664,10 +1698,14 @@ Array [ }, Object { "privilege": Object { - "disabled": true, + "api": Array [ + "savedQuery:read", + ], "savedObject": Object { "all": Array [], - "read": Array [], + "read": Array [ + "query", + ], }, "ui": Array [], }, @@ -1690,7 +1728,10 @@ Array [ "read": Array [], }, }, - "api": Array [], + "api": Array [ + "savedQuery:manage", + "savedQuery:read", + ], "app": Array [ "visualize", "lens", @@ -1736,6 +1777,9 @@ Array [ }, Object { "privilege": Object { + "api": Array [ + "savedQuery:read", + ], "app": Array [ "visualize", "lens", diff --git a/x-pack/plugins/features/server/oss_features.ts b/x-pack/plugins/features/server/oss_features.ts index 0f243e7e6bda8..12978c35777e7 100644 --- a/x-pack/plugins/features/server/oss_features.ts +++ b/x-pack/plugins/features/server/oss_features.ts @@ -37,7 +37,7 @@ export const buildOSSFeatures = ({ privileges: { all: { app: ['discover', 'kibana'], - api: ['fileUpload:analyzeFile'], + api: ['fileUpload:analyzeFile', 'savedQuery:manage', 'savedQuery:read'], catalogue: ['discover'], savedObject: { all: ['search', 'query'], @@ -53,6 +53,7 @@ export const buildOSSFeatures = ({ read: ['index-pattern', 'search', 'query'], }, ui: ['show'], + api: ['savedQuery:read'], }, }, subFeatures: [ @@ -139,6 +140,7 @@ export const buildOSSFeatures = ({ read: ['index-pattern', 'search', 'tag'], }, ui: ['show', 'delete', 'save', 'saveQuery'], + api: ['savedQuery:manage', 'savedQuery:read'], }, read: { app: ['visualize', 'lens', 'kibana'], @@ -148,6 +150,7 @@ export const buildOSSFeatures = ({ read: ['index-pattern', 'search', 'visualization', 'query', 'lens', 'tag'], }, ui: ['show'], + api: ['savedQuery:read'], }, }, subFeatures: [ @@ -213,7 +216,12 @@ export const buildOSSFeatures = ({ ], }, ui: ['createNew', 'show', 'showWriteControls', 'saveQuery'], - api: ['bulkGetUserProfiles', 'dashboardUsageStats'], + api: [ + 'bulkGetUserProfiles', + 'dashboardUsageStats', + 'savedQuery:manage', + 'savedQuery:read', + ], }, read: { app: ['dashboards', 'kibana'], @@ -234,7 +242,7 @@ export const buildOSSFeatures = ({ ], }, ui: ['show'], - api: ['bulkGetUserProfiles', 'dashboardUsageStats'], + api: ['bulkGetUserProfiles', 'dashboardUsageStats', 'savedQuery:read'], }, }, subFeatures: [ @@ -545,7 +553,7 @@ export const buildOSSFeatures = ({ catalogue: [], privilegesTooltip: i18n.translate('xpack.features.savedQueryManagementTooltip', { defaultMessage: - 'If set to "All", saved queries can be managed across Kibana in all applications that support them. If set to "None", saved query privileges will be determined independently by each application.', + 'If set to "All", saved queries can be managed across Kibana in all applications that support them. Otherwise, saved query privileges will be determined independently by each application.', }), privileges: { all: { @@ -556,9 +564,16 @@ export const buildOSSFeatures = ({ read: [], }, ui: ['saveQuery'], + api: ['savedQuery:manage', 'savedQuery:read'], + }, + read: { + savedObject: { + all: [], + read: ['query'], + }, + ui: [], + api: ['savedQuery:read'], }, - // No read-only mode supported - read: { disabled: true, savedObject: { all: [], read: [] }, ui: [] }, }, }, ]; diff --git a/x-pack/plugins/fleet/common/types/models/agent_policy.ts b/x-pack/plugins/fleet/common/types/models/agent_policy.ts index fb19953a1f731..0d180a0f4935a 100644 --- a/x-pack/plugins/fleet/common/types/models/agent_policy.ts +++ b/x-pack/plugins/fleet/common/types/models/agent_policy.ts @@ -46,7 +46,7 @@ export interface NewAgentPolicy { global_data_tags?: GlobalDataTag[]; monitoring_pprof_enabled?: boolean; monitoring_http?: { - enabled: boolean; + enabled?: boolean; host?: string; port?: number; buffer?: { diff --git a/x-pack/plugins/fleet/public/components/package_policy_delete_provider.test.tsx b/x-pack/plugins/fleet/public/components/package_policy_delete_provider.test.tsx index 75fce0507f5af..d76f13ee78811 100644 --- a/x-pack/plugins/fleet/public/components/package_policy_delete_provider.test.tsx +++ b/x-pack/plugins/fleet/public/components/package_policy_delete_provider.test.tsx @@ -137,7 +137,8 @@ function createMockAgentPolicies( } } -describe('PackagePolicyDeleteProvider', () => { +// FLAKY: https://github.com/elastic/kibana/issues/199204 +describe.skip('PackagePolicyDeleteProvider', () => { it('Should show delete integrations action and cancel modal', async () => { useMultipleAgentPoliciesMock.mockReturnValue({ canUseMultipleAgentPolicies: false }); sendGetAgentsMock.mockResolvedValue({ diff --git a/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/install.test.ts b/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/install.test.ts index 3b4b74cf772e5..f735e8638b583 100644 --- a/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/install.test.ts +++ b/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/install.test.ts @@ -124,12 +124,13 @@ describe('EPM index template install', () => { const packageTemplate = componentTemplates['metrics-package.dataset@package'].template; - if (!('mappings' in packageTemplate)) { + if (!('settings' in packageTemplate)) { throw new Error('no mappings on package template'); } - expect(packageTemplate.mappings).toHaveProperty('_source'); - expect(packageTemplate.mappings._source).toEqual({ mode: 'synthetic' }); + expect(packageTemplate.settings?.index?.mapping).toHaveProperty('source'); + // @ts-expect-error esclient mapping out-of-date + expect(packageTemplate.settings?.index?.mapping?.source).toEqual({ mode: 'synthetic' }); }); it('tests prepareTemplate to set source mode to synthetics if index_mode:time_series', async () => { @@ -154,12 +155,13 @@ describe('EPM index template install', () => { const packageTemplate = componentTemplates['metrics-package.dataset@package'].template; - if (!('mappings' in packageTemplate)) { - throw new Error('no mappings on package template'); + if (!('settings' in packageTemplate)) { + throw new Error('no settings on package template'); } - expect(packageTemplate.mappings).toHaveProperty('_source'); - expect(packageTemplate.mappings._source).toEqual({ mode: 'synthetic' }); + expect(packageTemplate.settings?.index?.mapping).toHaveProperty('source'); + // @ts-expect-error esclient mapping out-of-date + expect(packageTemplate.settings?.index?.mapping?.source).toEqual({ mode: 'synthetic' }); }); it('tests prepareTemplate to not set source mode to synthetics if index_mode:time_series and user disabled synthetic', async () => { @@ -193,11 +195,11 @@ describe('EPM index template install', () => { const packageTemplate = componentTemplates['metrics-package.dataset@package'].template; - if (!('mappings' in packageTemplate)) { - throw new Error('no mappings on package template'); + if (!('settings' in packageTemplate)) { + throw new Error('no settings on package template'); } - expect(packageTemplate.mappings).not.toHaveProperty('_source'); + expect(packageTemplate.settings?.index?.mapping).not.toHaveProperty('source'); }); it('tests prepareTemplate to not set source mode to synthetics if specified but user disabled it', async () => { @@ -231,11 +233,11 @@ describe('EPM index template install', () => { const packageTemplate = componentTemplates['metrics-package.dataset@package'].template; - if (!('mappings' in packageTemplate)) { - throw new Error('no mappings on package template'); + if (!('settings' in packageTemplate)) { + throw new Error('no settings on package template'); } - expect(packageTemplate.mappings).not.toHaveProperty('_source'); + expect(packageTemplate.settings?.index?.mapping).not.toHaveProperty('source'); }); it('tests prepareTemplate to set index_mode time series if index_mode:time_series', async () => { diff --git a/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/install.ts b/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/install.ts index a15e8cb71923c..f17a05a6837aa 100644 --- a/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/install.ts +++ b/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/install.ts @@ -409,6 +409,14 @@ export function buildComponentTemplates(params: { templateSettings.index?.mapping?.total_fields?.limit ), }, + ...(templateSettings.index?.mapping?.source || sourceModeSynthetic + ? { + source: { + ...templateSettings.index?.mapping?.source, + ...(sourceModeSynthetic ? { mode: 'synthetic' } : {}), + }, + } + : {}), }, }, }, @@ -418,15 +426,7 @@ export function buildComponentTemplates(params: { ? { runtime: mappingsRuntimeFields } : {}), dynamic_templates: mappingsDynamicTemplates.length ? mappingsDynamicTemplates : undefined, - ...omit(indexTemplateMappings, 'properties', 'dynamic_templates', '_source', 'runtime'), - ...(indexTemplateMappings?._source || sourceModeSynthetic - ? { - _source: { - ...indexTemplateMappings?._source, - ...(sourceModeSynthetic ? { mode: 'synthetic' } : {}), - }, - } - : {}), + ...omit(indexTemplateMappings, 'properties', 'dynamic_templates', 'runtime'), }, ...(lifecycle ? { lifecycle } : {}), }, diff --git a/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/template.test.ts b/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/template.test.ts index dbc93e35c8218..9fc5383902ff3 100644 --- a/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/template.test.ts +++ b/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/template.test.ts @@ -2105,6 +2105,57 @@ describe('EPM template', () => { }) ); }); + it('should rollover on mapper exception with subobjects in reason', 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: + "the [subobjects] parameter can't be updated for the object mapping [okta.debug_context.debug_data]", + }, + }, + } 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/plugins/fleet/server/services/epm/elasticsearch/template/template.ts b/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/template.ts index b6d357193b14d..d44cd57a2c5ba 100644 --- a/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/template.ts +++ b/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/template.ts @@ -1031,8 +1031,8 @@ const updateExistingDataStream = async ({ const existingDsConfig = Object.values(existingDs); const currentBackingIndexConfig = existingDsConfig.at(-1); const currentIndexMode = currentBackingIndexConfig?.settings?.index?.mode; - // @ts-expect-error Property 'mode' does not exist on type 'MappingSourceField' - const currentSourceType = currentBackingIndexConfig.mappings?._source?.mode; + // @ts-expect-error Property 'source.mode' does not exist on type 'IndicesMappingLimitSettings' + const currentSourceType = currentBackingIndexConfig?.settings?.index?.mapping?.source?.mode; let settings: IndicesIndexSettings; let mappings: MappingTypeMapping = {}; @@ -1084,6 +1084,10 @@ 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 && @@ -1137,7 +1141,7 @@ const updateExistingDataStream = async ({ // Trigger a rollover if the index mode or source type has changed if ( currentIndexMode !== settings?.index?.mode || - currentSourceType !== mappings?._source?.mode || + currentSourceType !== settings?.index?.source?.mode || dynamicDimensionMappingsChanged ) { if (options?.skipDataStreamRollover === true) { diff --git a/x-pack/plugins/fleet/server/types/models/agent_policy.ts b/x-pack/plugins/fleet/server/types/models/agent_policy.ts index 4f131d00bdf38..cc7dabe253ec1 100644 --- a/x-pack/plugins/fleet/server/types/models/agent_policy.ts +++ b/x-pack/plugins/fleet/server/types/models/agent_policy.ts @@ -135,7 +135,7 @@ export const AgentPolicyBaseSchema = { monitoring_pprof_enabled: schema.maybe(schema.boolean()), monitoring_http: schema.maybe( schema.object({ - enabled: schema.boolean(), + enabled: schema.maybe(schema.boolean()), host: schema.maybe(schema.string({ defaultValue: 'localhost' })), port: schema.maybe(schema.number({ min: 0, max: 65353, defaultValue: 6791 })), buffer: schema.maybe(schema.object({ enabled: schema.boolean({ defaultValue: false }) })), diff --git a/x-pack/plugins/fleet/server/types/rest_spec/agent.ts b/x-pack/plugins/fleet/server/types/rest_spec/agent.ts index a5fb3e9e034ed..9df9b73b3f49b 100644 --- a/x-pack/plugins/fleet/server/types/rest_spec/agent.ts +++ b/x-pack/plugins/fleet/server/types/rest_spec/agent.ts @@ -138,22 +138,25 @@ export const AgentResponseSchema = schema.object({ upgraded_at: schema.maybe(schema.oneOf([schema.literal(null), schema.string()])), upgrade_started_at: schema.maybe(schema.oneOf([schema.literal(null), schema.string()])), upgrade_details: schema.maybe( - schema.object({ - target_version: schema.string(), - action_id: schema.string(), - state: AgentUpgradeStateTypeSchema, - metadata: schema.maybe( - schema.object({ - scheduled_at: schema.maybe(schema.string()), - download_percent: schema.maybe(schema.number()), - download_rate: schema.maybe(schema.number()), - failed_state: schema.maybe(AgentUpgradeStateTypeSchema), - error_msg: schema.maybe(schema.string()), - retry_error_msg: schema.maybe(schema.string()), - retry_until: schema.maybe(schema.string()), - }) - ), - }) + schema.oneOf([ + schema.literal(null), + schema.object({ + target_version: schema.string(), + action_id: schema.string(), + state: AgentUpgradeStateTypeSchema, + metadata: schema.maybe( + schema.object({ + scheduled_at: schema.maybe(schema.string()), + download_percent: schema.maybe(schema.number()), + download_rate: schema.maybe(schema.number()), + failed_state: schema.maybe(AgentUpgradeStateTypeSchema), + error_msg: schema.maybe(schema.string()), + retry_error_msg: schema.maybe(schema.string()), + retry_until: schema.maybe(schema.string()), + }) + ), + }), + ]) ), access_api_key_id: schema.maybe(schema.string()), default_api_key: schema.maybe(schema.string()), diff --git a/x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/search_fields/search_result_item.tsx b/x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/search_fields/search_result_item.tsx index a66811d41b94f..428189acf8559 100644 --- a/x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/search_fields/search_result_item.tsx +++ b/x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/search_fields/search_result_item.tsx @@ -108,6 +108,7 @@ export const SearchResultItem = React.memo(function FieldListItemFlatComponent({ 'mappingsEditor__fieldsListItem__content--toggle': hasChildFields || hasMultiFields, 'mappingsEditor__fieldsListItem__content--multiField': isMultiField, })} + tabIndex={0} > ((subscriber) => { - const parser = createParser((event) => { - if (event.type === 'event') { + const parser = createParser({ + onEvent: (event) => { subscriber.next(event.data); - } + }, }); const readStream = async () => { diff --git a/x-pack/plugins/inference/server/chat_complete/adapters/gemini/process_vertex_stream.test.ts b/x-pack/plugins/inference/server/chat_complete/adapters/gemini/process_vertex_stream.test.ts index 8613799846e3b..01c93107a199a 100644 --- a/x-pack/plugins/inference/server/chat_complete/adapters/gemini/process_vertex_stream.test.ts +++ b/x-pack/plugins/inference/server/chat_complete/adapters/gemini/process_vertex_stream.test.ts @@ -97,6 +97,11 @@ describe('processVertexStream', () => { expectObservable(processed$).toBe('--(ab)', { a: { + content: 'last chunk', + tool_calls: [], + type: ChatCompletionEventType.ChatCompletionChunk, + }, + b: { tokens: { completion: 1, prompt: 2, @@ -104,11 +109,6 @@ describe('processVertexStream', () => { }, type: ChatCompletionEventType.ChatCompletionTokenCount, }, - b: { - content: 'last chunk', - tool_calls: [], - type: ChatCompletionEventType.ChatCompletionChunk, - }, }); }); }); diff --git a/x-pack/plugins/inference/server/chat_complete/adapters/gemini/process_vertex_stream.ts b/x-pack/plugins/inference/server/chat_complete/adapters/gemini/process_vertex_stream.ts index 3081317882c65..7b2ed2869c21d 100644 --- a/x-pack/plugins/inference/server/chat_complete/adapters/gemini/process_vertex_stream.ts +++ b/x-pack/plugins/inference/server/chat_complete/adapters/gemini/process_vertex_stream.ts @@ -18,18 +18,6 @@ export function processVertexStream() { return (source: Observable) => new Observable((subscriber) => { function handleNext(value: GenerateContentResponseChunk) { - // completion: only present on last chunk - if (value.usageMetadata) { - subscriber.next({ - type: ChatCompletionEventType.ChatCompletionTokenCount, - tokens: { - prompt: value.usageMetadata.promptTokenCount, - completion: value.usageMetadata.candidatesTokenCount, - total: value.usageMetadata.totalTokenCount, - }, - }); - } - const contentPart = value.candidates?.[0].content.parts[0]; const completion = contentPart?.text; const toolCall = contentPart?.functionCall; @@ -49,6 +37,18 @@ export function processVertexStream() { : [], }); } + + // completion: only present on last chunk + if (value.usageMetadata) { + subscriber.next({ + type: ChatCompletionEventType.ChatCompletionTokenCount, + tokens: { + prompt: value.usageMetadata.promptTokenCount, + completion: value.usageMetadata.candidatesTokenCount, + total: value.usageMetadata.totalTokenCount, + }, + }); + } } source.subscribe({ diff --git a/x-pack/plugins/inference/server/routes/chat_complete.ts b/x-pack/plugins/inference/server/routes/chat_complete.ts index b363c88352994..8b4cc49dfaa46 100644 --- a/x-pack/plugins/inference/server/routes/chat_complete.ts +++ b/x-pack/plugins/inference/server/routes/chat_complete.ts @@ -13,7 +13,13 @@ import type { RequestHandlerContext, KibanaRequest, } from '@kbn/core/server'; -import { MessageRole, ToolCall, ToolChoiceType } from '@kbn/inference-common'; +import { + MessageRole, + ToolCall, + ToolChoiceType, + InferenceTaskEventType, + isInferenceError, +} from '@kbn/inference-common'; import type { ChatCompleteRequestBody } from '../../common/http_apis'; import { createClient as createInferenceClient } from '../inference_client'; import { InferenceServerStart, InferenceStartDependencies } from '../types'; @@ -130,10 +136,22 @@ export function registerChatCompleteRoute({ }, }, async (context, request, response) => { - const chatCompleteResponse = await callChatComplete({ request, stream: false }); - return response.ok({ - body: chatCompleteResponse, - }); + try { + const chatCompleteResponse = await callChatComplete({ request, stream: false }); + return response.ok({ + body: chatCompleteResponse, + }); + } catch (e) { + return response.custom({ + statusCode: isInferenceError(e) ? e.meta?.status ?? 500 : 500, + bypassErrorFormat: true, + body: { + type: InferenceTaskEventType.error, + code: e.code ?? 'unknown', + message: e.message, + }, + }); + } } ); @@ -145,9 +163,9 @@ export function registerChatCompleteRoute({ }, }, async (context, request, response) => { - const chatCompleteResponse = await callChatComplete({ request, stream: true }); + const chatCompleteEvents$ = await callChatComplete({ request, stream: true }); return response.ok({ - body: observableIntoEventSourceStream(chatCompleteResponse, logger), + body: observableIntoEventSourceStream(chatCompleteEvents$, logger), }); } ); diff --git a/x-pack/plugins/inference/server/util/event_source_stream_into_observable.ts b/x-pack/plugins/inference/server/util/event_source_stream_into_observable.ts index cad0a8e84d6a7..42844632aa03b 100644 --- a/x-pack/plugins/inference/server/util/event_source_stream_into_observable.ts +++ b/x-pack/plugins/inference/server/util/event_source_stream_into_observable.ts @@ -11,10 +11,10 @@ import { Observable } from 'rxjs'; export function eventSourceStreamIntoObservable(readable: Readable) { return new Observable((subscriber) => { - const parser = createParser((event) => { - if (event.type === 'event') { + const parser = createParser({ + onEvent: (event) => { subscriber.next(event.data); - } + }, }); async function processStream() { diff --git a/x-pack/plugins/inference/server/util/observable_into_event_source_stream.test.ts b/x-pack/plugins/inference/server/util/observable_into_event_source_stream.test.ts index 8ece214c27599..a815b22854118 100644 --- a/x-pack/plugins/inference/server/util/observable_into_event_source_stream.test.ts +++ b/x-pack/plugins/inference/server/util/observable_into_event_source_stream.test.ts @@ -72,10 +72,10 @@ describe('observableIntoEventSourceStream', () => { const events: Array> = []; - const parser = createParser((event) => { - if (event.type === 'event') { + const parser = createParser({ + onEvent: (event) => { events.push(JSON.parse(event.data)); - } + }, }); chunks.forEach((chunk) => { diff --git a/x-pack/plugins/lens/public/app_plugin/app.test.tsx b/x-pack/plugins/lens/public/app_plugin/app.test.tsx index 73fb52bbe6683..c146352ede566 100644 --- a/x-pack/plugins/lens/public/app_plugin/app.test.tsx +++ b/x-pack/plugins/lens/public/app_plugin/app.test.tsx @@ -34,7 +34,7 @@ import { setState, LensAppState } from '../state_management'; import { coreMock } from '@kbn/core/public/mocks'; import { LensSerializedState } from '..'; import { createMockedField, createMockedIndexPattern } from '../datasources/form_based/mocks'; -import faker from 'faker'; +import { faker } from '@faker-js/faker'; import { screen, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { VisualizeEditorContext } from '../types'; @@ -48,7 +48,7 @@ jest.mock('lodash', () => ({ debounce: (fn: unknown) => fn, })); -const defaultSavedObjectId: string = faker.random.uuid(); +const defaultSavedObjectId: string = faker.string.uuid(); const waitToLoad = async () => await act(async () => new Promise((resolve) => setTimeout(resolve, 0))); @@ -233,7 +233,7 @@ describe('Lens App', () => { }); describe('breadcrumbs', () => { - const breadcrumbDocSavedObjectId = faker.random.uuid(); + const breadcrumbDocSavedObjectId = faker.string.uuid(); const breadcrumbDoc = getLensDocumentMock({ savedObjectId: breadcrumbDocSavedObjectId, title: 'Daaaaaaadaumching!', @@ -601,7 +601,7 @@ describe('Lens App', () => { expect(lensStore.getState().lens.applyChangesCounter).toBe(1); }); it('adds to the recently accessed list on save', async () => { - const savedObjectId = faker.random.uuid(); + const savedObjectId = faker.string.uuid(); await save({ savedObjectId, prevSavedObjectId: 'prevId', comesFromDashboard: false }); expect(services.chrome.recentlyAccessed.add).toHaveBeenCalledWith( `/app/lens#/edit/${savedObjectId}`, diff --git a/x-pack/plugins/lens/public/app_plugin/app_helpers.test.ts b/x-pack/plugins/lens/public/app_plugin/app_helpers.test.ts index 7dc4e8cfda78c..773276710f48d 100644 --- a/x-pack/plugins/lens/public/app_plugin/app_helpers.test.ts +++ b/x-pack/plugins/lens/public/app_plugin/app_helpers.test.ts @@ -6,7 +6,7 @@ */ import { renderHook, act } from '@testing-library/react-hooks'; -import faker from 'faker'; +import { faker } from '@faker-js/faker'; import { UseNavigateBackToAppProps, useNavigateBackToApp } from './app_helpers'; import { defaultDoc, makeDefaultServices } from '../mocks/services_mock'; import { cloneDeep } from 'lodash'; diff --git a/x-pack/plugins/lens/public/app_plugin/save_modal_container.test.tsx b/x-pack/plugins/lens/public/app_plugin/save_modal_container.test.tsx index 987b320b3abf1..5d9c833174ed5 100644 --- a/x-pack/plugins/lens/public/app_plugin/save_modal_container.test.tsx +++ b/x-pack/plugins/lens/public/app_plugin/save_modal_container.test.tsx @@ -8,7 +8,7 @@ import { SaveProps } from './app'; import { type SaveVisualizationProps, runSaveLensVisualization } from './save_modal_container'; import { defaultDoc, makeDefaultServices } from '../mocks'; -import faker from 'faker'; +import { faker } from '@faker-js/faker'; import { makeAttributeService } from '../mocks/services_mock'; jest.mock('../persistence/saved_objects_utils/check_for_duplicate_title', () => ({ @@ -241,7 +241,7 @@ describe('runSaveLensVisualization', () => { }); // save the current document as a new by-value copy and add it to a dashboard it('should save as a new by-value copy and redirect to the dashboard', async () => { - const dashboardId = faker.random.uuid(); + const dashboardId = faker.string.uuid(); const { props, saveProps, options, redirectToDashboardFn, saveToLibraryFn, toasts } = getDefaultArgs( { @@ -271,7 +271,7 @@ describe('runSaveLensVisualization', () => { // save the current document as a new by-ref copy and add it to a dashboard it('should save as a new by-ref copy and redirect to the dashboard', async () => { - const dashboardId = faker.random.uuid(); + const dashboardId = faker.string.uuid(); const { props, saveProps, options, redirectToDashboardFn, saveToLibraryFn, toasts } = getDefaultArgs( { @@ -376,7 +376,7 @@ describe('runSaveLensVisualization', () => { // simulate a new save const attributeServiceMock = makeAttributeService({ ...defaultDoc, - savedObjectId: faker.random.uuid(), + savedObjectId: faker.string.uuid(), }); const { props, saveProps, options, saveToLibraryFn, cleanupEditor } = getDefaultArgs( diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/percentile.test.tsx b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/percentile.test.tsx index a140ca22db2b5..b8d3af522c455 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/percentile.test.tsx +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/percentile.test.tsx @@ -12,7 +12,7 @@ import { unifiedSearchPluginMock } from '@kbn/unified-search-plugin/public/mocks import { IStorageWrapper } from '@kbn/kibana-utils-plugin/public'; import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; import { dataViewPluginMocks } from '@kbn/data-views-plugin/public/mocks'; -import faker from 'faker'; +import { faker } from '@faker-js/faker'; import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { createMockedIndexPattern } from '../../mocks'; @@ -402,7 +402,7 @@ describe('percentile', () => { it('should update order-by references for any terms columns', () => { const field1 = 'foo'; const field2 = 'bar'; - const percentile = faker.random.number(100); + const percentile = faker.number.int(100); const aggs = [ makeEsAggBuilder('aggTerms', { diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/chart_switch/chart_switch.test.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/chart_switch/chart_switch.test.tsx index 6795cd8caaa83..5686d94f52d49 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/chart_switch/chart_switch.test.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/chart_switch/chart_switch.test.tsx @@ -21,7 +21,7 @@ import { DatasourcePublicAPI, SuggestionRequest, DatasourceSuggestion } from '.. import { ChartSwitchProps } from './chart_switch'; import { ChartSwitchPopover } from './chart_switch_popover'; import { LensAppState, applyChanges } from '../../../../state_management'; -import faker from 'faker'; +import { faker } from '@faker-js/faker'; const mockFrame = (layers: string[]) => ({ ...createMockFramePublicAPI(), diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_header.test.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_header.test.tsx index 6f0edd6cbcd16..bcd21c71312ce 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_header.test.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_header.test.tsx @@ -7,7 +7,7 @@ import React from 'react'; import { screen } from '@testing-library/react'; -import faker from 'faker'; +import { faker } from '@faker-js/faker'; import { createMockDatasource, createMockFramePublicAPI, diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.test.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.test.tsx index 9c3457dacc6d4..9cfb1597ffdd4 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.test.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.test.tsx @@ -12,7 +12,7 @@ import { ChildDragDropProvider, Droppable, Draggable } from '@kbn/dom-drag-drop' import { FramePublicAPI, Visualization, VisualizationConfigProps } from '../../../types'; import { LayerPanel } from './layer_panel'; import { coreMock } from '@kbn/core/public/mocks'; -import faker from 'faker'; +import { faker } from '@faker-js/faker'; import { generateId } from '../../../id_generator'; import { createMockVisualization, @@ -144,7 +144,7 @@ describe('LayerPanel', () => { }; beforeEach(() => { - mockVisualization = createMockVisualization(faker.random.alphaNumeric()); + mockVisualization = createMockVisualization(faker.string.alphanumeric()); mockVisualization.getLayerIds.mockReturnValue(['first']); mockDatasource = createMockDatasource(); }); diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.test.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.test.tsx index 42abcdf8fe56c..e44e528e5a33c 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.test.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel.test.tsx @@ -39,7 +39,7 @@ import { getLensInspectorService } from '../../../lens_inspector_service'; import { inspectorPluginMock } from '@kbn/inspector-plugin/public/mocks'; import { disableAutoApply, enableAutoApply } from '../../../state_management/lens_slice'; import { Ast, toExpression } from '@kbn/interpreter'; -import faker from 'faker'; +import { faker } from '@faker-js/faker'; const defaultPermissions: Record>> = { navLinks: { management: true }, diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel_wrapper.test.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel_wrapper.test.tsx index 8694cc7c27dcf..c5cabaa053c4b 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel_wrapper.test.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel_wrapper.test.tsx @@ -18,7 +18,7 @@ import { updateVisualizationState, LensAppState } from '../../../state_managemen import { setChangesApplied } from '../../../state_management/lens_slice'; import { LensInspector } from '../../../lens_inspector_service'; import { screen } from '@testing-library/react'; -import faker from 'faker'; +import { faker } from '@faker-js/faker'; import { SettingsMenu } from '../../../app_plugin/settings_menu'; describe('workspace_panel_wrapper', () => { @@ -98,7 +98,7 @@ describe('workspace_panel_wrapper', () => { }); it('should render its children', async () => { - const customElementText = faker.random.word(); + const customElementText = faker.word.words(); renderWorkspacePanelWrapper({ children: {customElementText} }); expect(screen.getByText(customElementText)).toBeInTheDocument(); }); diff --git a/x-pack/plugins/lens/public/lens_ui_telemetry/color_telemetry_helpers.test.ts b/x-pack/plugins/lens/public/lens_ui_telemetry/color_telemetry_helpers.test.ts index 47eba8b0252ef..8719c54f6f1dd 100644 --- a/x-pack/plugins/lens/public/lens_ui_telemetry/color_telemetry_helpers.test.ts +++ b/x-pack/plugins/lens/public/lens_ui_telemetry/color_telemetry_helpers.test.ts @@ -13,7 +13,7 @@ import { DEFAULT_COLOR_MAPPING_CONFIG, DEFAULT_OTHER_ASSIGNMENT_INDEX, } from '@kbn/coloring'; -import faker from 'faker'; +import { faker } from '@faker-js/faker'; const exampleAssignment = ( valuesCount = 1, @@ -35,7 +35,7 @@ const exampleAssignment = ( return { rule: { type: 'matchExactly', - values: Array.from({ length: valuesCount }, () => faker.random.alpha()), + values: Array.from({ length: valuesCount }, () => faker.string.alpha()), }, color, touched: false, diff --git a/x-pack/plugins/lens/public/mocks/visualization_mock.tsx b/x-pack/plugins/lens/public/mocks/visualization_mock.tsx index f0513e66de0c5..9810b916d5ea6 100644 --- a/x-pack/plugins/lens/public/mocks/visualization_mock.tsx +++ b/x-pack/plugins/lens/public/mocks/visualization_mock.tsx @@ -7,7 +7,7 @@ import React from 'react'; import { LayerTypes } from '@kbn/expression-xy-plugin/public'; import { toExpression } from '@kbn/interpreter'; -import faker from 'faker'; +import { faker } from '@faker-js/faker'; import { Visualization, VisualizationMap } from '../types'; export function createMockVisualization( diff --git a/x-pack/plugins/lens/public/react_embeddable/expressions/on_event.test.ts b/x-pack/plugins/lens/public/react_embeddable/expressions/on_event.test.ts index dfddfe84b57cc..aba94db03de88 100644 --- a/x-pack/plugins/lens/public/react_embeddable/expressions/on_event.test.ts +++ b/x-pack/plugins/lens/public/react_embeddable/expressions/on_event.test.ts @@ -9,7 +9,7 @@ import { ExpressionRendererEvent } from '@kbn/expressions-plugin/public'; import { getLensApiMock, getLensRuntimeStateMock, makeEmbeddableServices } from '../mocks'; import { LensApi, LensEmbeddableStartServices, LensPublicCallbacks } from '../types'; import { prepareEventHandler } from './on_event'; -import faker from 'faker'; +import { faker } from '@faker-js/faker'; import { LENS_EDIT_PAGESIZE_ACTION, LENS_EDIT_RESIZE_ACTION, @@ -109,7 +109,7 @@ describe('Embeddable interaction event handlers', () => { const event = { name: 'filter', data: { - data: [{ value: faker.random.number(), row: 1, column: 'test', table: getTable() }], + data: [{ value: faker.number.int(), row: 1, column: 'test', table: getTable() }], }, }; const { callbacks } = await submitEvent(event); @@ -119,7 +119,7 @@ describe('Embeddable interaction event handlers', () => { const event = { name: 'filter', data: { - data: [{ value: faker.random.number(), row: 1, column: 'test', table: getTable() }], + data: [{ value: faker.number.int(), row: 1, column: 'test', table: getTable() }], }, }; const { getTrigger } = await submitEvent(event, true); @@ -171,7 +171,7 @@ describe('Embeddable interaction event handlers', () => { await reSubmit({ name: 'filter', data: { - data: [{ value: faker.random.number(), row: 1, column: 'test', table: getTable() }], + data: [{ value: faker.number.int(), row: 1, column: 'test', table: getTable() }], }, }); diff --git a/x-pack/plugins/lens/public/react_embeddable/initializers/initialize_actions.test.ts b/x-pack/plugins/lens/public/react_embeddable/initializers/initialize_actions.test.ts index a4f84c329bd3c..016bc0e87f11d 100644 --- a/x-pack/plugins/lens/public/react_embeddable/initializers/initialize_actions.test.ts +++ b/x-pack/plugins/lens/public/react_embeddable/initializers/initialize_actions.test.ts @@ -6,7 +6,7 @@ */ import { pick } from 'lodash'; -import faker from 'faker'; +import { faker } from '@faker-js/faker'; import type { LensRuntimeState, VisualizationContext } from '../types'; import { initializeActionApi } from './initialize_actions'; import { @@ -42,7 +42,7 @@ function setupActionsApi( visOverrides: { id: 'lnsXY' }, dataOverrides: { id: 'form_based' }, }); - const uuid = faker.random.uuid(); + const uuid = faker.string.uuid(); const runtimeState = getLensRuntimeStateMock(stateOverrides); const apiMock = getLensApiMock(); diff --git a/x-pack/plugins/lens/public/react_embeddable/initializers/initialize_dashboard_service.test.ts b/x-pack/plugins/lens/public/react_embeddable/initializers/initialize_dashboard_service.test.ts index 2a0c469b3bbfb..af68f887bff54 100644 --- a/x-pack/plugins/lens/public/react_embeddable/initializers/initialize_dashboard_service.test.ts +++ b/x-pack/plugins/lens/public/react_embeddable/initializers/initialize_dashboard_service.test.ts @@ -9,7 +9,7 @@ import type { LensRuntimeState } from '../types'; import { getLensRuntimeStateMock, getLensInternalApiMock, makeEmbeddableServices } from '../mocks'; import { initializeStateManagement } from './initialize_state_management'; import { initializeDashboardServices } from './initialize_dashboard_services'; -import faker from 'faker'; +import { faker } from '@faker-js/faker'; import { createEmptyLensState } from '../helper'; function setupDashboardServicesApi(runtimeOverrides?: Partial) { @@ -30,7 +30,7 @@ function setupDashboardServicesApi(runtimeOverrides?: Partial) describe('Transformation API', () => { it("should not save to library if there's already a saveObjectId", async () => { - const api = setupDashboardServicesApi({ savedObjectId: faker.random.uuid() }); + const api = setupDashboardServicesApi({ savedObjectId: faker.string.uuid() }); expect(await api.canLinkToLibrary()).toBe(false); }); diff --git a/x-pack/plugins/lens/public/react_embeddable/mocks/index.tsx b/x-pack/plugins/lens/public/react_embeddable/mocks/index.tsx index ddcd5e6089592..ca8f489a711aa 100644 --- a/x-pack/plugins/lens/public/react_embeddable/mocks/index.tsx +++ b/x-pack/plugins/lens/public/react_embeddable/mocks/index.tsx @@ -8,7 +8,7 @@ import { BehaviorSubject, Subject } from 'rxjs'; import deepMerge from 'deepmerge'; import React from 'react'; -import faker from 'faker'; +import { faker } from '@faker-js/faker'; import { Query, Filter, AggregateQuery, TimeRange } from '@kbn/es-query'; import { PhaseEvent, ViewMode } from '@kbn/presentation-publishing'; import { DataView } from '@kbn/data-views-plugin/common'; @@ -49,7 +49,7 @@ import { const LensApiMock: LensApi = { // Static props type: DOC_TYPE, - uuid: faker.random.uuid(), + uuid: faker.string.uuid(), // Shared Embeddable Observables panelTitle: new BehaviorSubject(faker.lorem.words()), hidePanelTitle: new BehaviorSubject(false), @@ -94,7 +94,7 @@ const LensApiMock: LensApi = { setPanelTitle: jest.fn(), setHidePanelTitle: jest.fn(), phase$: new BehaviorSubject({ - id: faker.random.uuid(), + id: faker.string.uuid(), status: 'rendered', timeToEvent: 1000, }), @@ -138,7 +138,7 @@ export function getLensApiMock(overrides: Partial = {}) { export function getLensSerializedStateMock(overrides: Partial = {}) { return { - savedObjectId: faker.random.uuid(), + savedObjectId: faker.string.uuid(), ...LensSerializedStateMock, ...overrides, }; diff --git a/x-pack/plugins/lens/public/state_management/load_initial.test.tsx b/x-pack/plugins/lens/public/state_management/load_initial.test.tsx index 1514a508b8781..0a47af299d136 100644 --- a/x-pack/plugins/lens/public/state_management/load_initial.test.tsx +++ b/x-pack/plugins/lens/public/state_management/load_initial.test.tsx @@ -17,7 +17,7 @@ import { Location, History } from 'history'; import { act } from 'react-dom/test-utils'; import { InitialAppState, loadInitial } from './lens_slice'; import { Filter } from '@kbn/es-query'; -import faker from 'faker'; +import { faker } from '@faker-js/faker'; import { DOC_TYPE } from '../../common/constants'; const history = { diff --git a/x-pack/plugins/lens/public/visualizations/datatable/components/table_basic.test.tsx b/x-pack/plugins/lens/public/visualizations/datatable/components/table_basic.test.tsx index 14b3796fbd145..992e79681d415 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/components/table_basic.test.tsx +++ b/x-pack/plugins/lens/public/visualizations/datatable/components/table_basic.test.tsx @@ -9,7 +9,7 @@ import React from 'react'; import { fireEvent, render, screen, within } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { I18nProvider } from '@kbn/i18n-react'; -import faker from 'faker'; +import { faker } from '@faker-js/faker'; import { act } from 'react-dom/test-utils'; import { IFieldFormat } from '@kbn/field-formats-plugin/common'; import { coreMock } from '@kbn/core/public/mocks'; @@ -504,7 +504,7 @@ describe('DatatableComponent', () => { data.rows = new Array(rowNumbers).fill({ a: 'shoes', b: 1588024800000, - c: faker.random.number(), + c: faker.number.int(), }); args.pageSize = pageSize; @@ -537,7 +537,7 @@ describe('DatatableComponent', () => { data.rows = new Array(rowNumbers).fill({ a: 'shoes', b: 1588024800000, - c: faker.random.number(), + c: faker.number.int(), }); args.pageSize = pageSize; @@ -558,7 +558,7 @@ describe('DatatableComponent', () => { data.rows = new Array(20).fill({ a: 'shoes', b: 1588024800000, - c: faker.random.number(), + c: faker.number.int(), }); renderDatatableComponent({ args, @@ -584,7 +584,7 @@ describe('DatatableComponent', () => { data.rows = new Array(rowNumbers).fill({ a: 'shoes', b: 1588024800000, - c: faker.random.number(), + c: faker.number.int(), }); args.pageSize = pageSize; @@ -624,7 +624,7 @@ describe('DatatableComponent', () => { data.rows = new Array(rowNumbers).fill({ a: 'shoes', b: 1588024800000, - c: faker.random.number(), + c: faker.number.int(), }); args.pageSize = pageSize; diff --git a/x-pack/plugins/lens/public/visualizations/metric/dimension_editor.test.tsx b/x-pack/plugins/lens/public/visualizations/metric/dimension_editor.test.tsx index 73f07d66bcb8b..7a143d3c9ba8a 100644 --- a/x-pack/plugins/lens/public/visualizations/metric/dimension_editor.test.tsx +++ b/x-pack/plugins/lens/public/visualizations/metric/dimension_editor.test.tsx @@ -7,7 +7,7 @@ import React from 'react'; import { render, screen, waitFor } from '@testing-library/react'; -import faker from 'faker'; +import { faker } from '@faker-js/faker'; import userEvent from '@testing-library/user-event'; import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; import { euiLightVars } from '@kbn/ui-theme'; @@ -77,7 +77,7 @@ describe('dimension editor', () => { id: 'first', rows: Array(3).fill({ 'metric-col-id': faker.lorem.word(3), - 'max-col-id': faker.random.number(), + 'max-col-id': faker.number.int(), }), }, ]), @@ -106,8 +106,8 @@ describe('dimension editor', () => { { id: 'first', rows: Array(3).fill({ - 'metric-col-id': faker.random.number(), - 'secondary-metric-col-id': faker.random.number(), + 'metric-col-id': faker.number.int(), + 'secondary-metric-col-id': faker.number.int(), }), }, ]), diff --git a/x-pack/plugins/maps/server/plugin.ts b/x-pack/plugins/maps/server/plugin.ts index 1b98310f798e4..9d82aa0cc931e 100644 --- a/x-pack/plugins/maps/server/plugin.ts +++ b/x-pack/plugins/maps/server/plugin.ts @@ -188,6 +188,7 @@ export class MapsPlugin implements Plugin { read: ['index-pattern', 'tag'], }, ui: ['save', 'show', 'saveQuery'], + api: ['savedQuery:manage', 'savedQuery:read'], }, read: { app: [APP_ID, 'kibana'], @@ -197,6 +198,7 @@ export class MapsPlugin implements Plugin { read: [MAP_SAVED_OBJECT_TYPE, 'index-pattern', 'query', 'tag'], }, ui: ['show'], + api: ['savedQuery:read'], }, }, }); diff --git a/x-pack/plugins/ml/common/constants/trained_models.ts b/x-pack/plugins/ml/common/constants/trained_models.ts new file mode 100644 index 0000000000000..c6092037cbfb4 --- /dev/null +++ b/x-pack/plugins/ml/common/constants/trained_models.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. + */ + +/** + * Default page for the trained_models endpoint is 100, + * which is too small for the most cases, so we set it to 10000. + */ +export const DEFAULT_TRAINED_MODELS_PAGE_SIZE = 10000; diff --git a/x-pack/plugins/ml/common/types/trained_models.ts b/x-pack/plugins/ml/common/types/trained_models.ts index f4ed52ff21f52..25d7e231bf166 100644 --- a/x-pack/plugins/ml/common/types/trained_models.ts +++ b/x-pack/plugins/ml/common/types/trained_models.ts @@ -5,14 +5,25 @@ * 2.0. */ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import type { TrainedModelType } from '@kbn/ml-trained-models-utils'; +import type { + InferenceInferenceEndpointInfo, + MlInferenceConfigCreateContainer, +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import type { + ModelDefinitionResponse, + ModelState, + TrainedModelType, +} from '@kbn/ml-trained-models-utils'; +import { + BUILT_IN_MODEL_TAG, + ELASTIC_MODEL_TAG, + TRAINED_MODEL_TYPE, +} from '@kbn/ml-trained-models-utils'; import type { DataFrameAnalyticsConfig, FeatureImportanceBaseline, TotalFeatureImportance, } from '@kbn/ml-data-frame-analytics-utils'; -import type { IndexName, IndicesIndexState } from '@elastic/elasticsearch/lib/api/types'; -import type { InferenceAPIConfigResponse } from '@kbn/ml-trained-models-utils'; import type { XOR } from './common'; import type { MlSavedObjectType } from './saved_objects'; @@ -95,33 +106,12 @@ export type PutTrainedModelConfig = { >; // compressed_definition and definition are mutually exclusive export type TrainedModelConfigResponse = estypes.MlTrainedModelConfig & { - /** - * Associated pipelines. Extends response from the ES endpoint. - */ - pipelines?: Record | null; - origin_job_exists?: boolean; - - metadata?: { - analytics_config: DataFrameAnalyticsConfig; + metadata?: estypes.MlTrainedModelConfig['metadata'] & { + analytics_config?: DataFrameAnalyticsConfig; input: unknown; total_feature_importance?: TotalFeatureImportance[]; feature_importance_baseline?: FeatureImportanceBaseline; - model_aliases?: string[]; } & Record; - model_id: string; - model_type: TrainedModelType; - tags: string[]; - version: string; - inference_config?: Record; - indices?: Array>; - /** - * Whether the model has inference services - */ - hasInferenceServices?: boolean; - /** - * Inference services associated with the model - */ - inference_apis?: InferenceAPIConfigResponse[]; }; export interface PipelineDefinition { @@ -309,3 +299,125 @@ export interface ModelDownloadState { total_parts: number; downloaded_parts: number; } + +export type Stats = Omit; + +/** + * Additional properties for all items in the Trained models table + * */ +interface BaseModelItem { + type?: string[]; + tags: string[]; + /** + * Whether the model has inference services + */ + hasInferenceServices?: boolean; + /** + * Inference services associated with the model + */ + inference_apis?: InferenceInferenceEndpointInfo[]; + /** + * Associated pipelines. Extends response from the ES endpoint. + */ + pipelines?: Record; + /** + * Indices with associated pipelines that have inference processors utilizing the model deployments. + */ + indices?: string[]; +} + +/** Common properties for existing NLP models and NLP model download configs */ +interface BaseNLPModelItem extends BaseModelItem { + disclaimer?: string; + recommended?: boolean; + supported?: boolean; + state: ModelState | undefined; + downloadState?: ModelDownloadState; +} + +/** Model available for download */ +export type ModelDownloadItem = BaseNLPModelItem & + Omit & { + putModelConfig?: object; + softwareLicense?: string; + }; +/** Trained NLP model, i.e. pytorch model returned by the trained_models API */ +export type NLPModelItem = BaseNLPModelItem & + TrainedModelItem & { + stats: Stats & { deployment_stats: TrainedModelDeploymentStatsResponse[] }; + /** + * Description of the current model state + */ + stateDescription?: string; + /** + * Deployment ids extracted from the deployment stats + */ + deployment_ids: string[]; + }; + +export function isBaseNLPModelItem(item: unknown): item is BaseNLPModelItem { + return ( + typeof item === 'object' && + item !== null && + 'type' in item && + Array.isArray(item.type) && + item.type.includes(TRAINED_MODEL_TYPE.PYTORCH) + ); +} + +export function isNLPModelItem(item: unknown): item is NLPModelItem { + return isExistingModel(item) && item.model_type === TRAINED_MODEL_TYPE.PYTORCH; +} + +export const isElasticModel = (item: TrainedModelConfigResponse) => + item.tags.includes(ELASTIC_MODEL_TAG); + +export type ExistingModelBase = TrainedModelConfigResponse & BaseModelItem; + +/** Any model returned by the trained_models API, e.g. lang_ident, elser, dfa model */ +export type TrainedModelItem = ExistingModelBase & { stats: Stats }; + +/** Trained DFA model */ +export type DFAModelItem = Omit & { + origin_job_exists?: boolean; + inference_config?: Pick; + metadata?: estypes.MlTrainedModelConfig['metadata'] & { + analytics_config: DataFrameAnalyticsConfig; + input: unknown; + total_feature_importance?: TotalFeatureImportance[]; + feature_importance_baseline?: FeatureImportanceBaseline; + } & Record; +}; + +export type TrainedModelWithPipelines = TrainedModelItem & { + pipelines: Record; +}; + +export function isExistingModel(item: unknown): item is TrainedModelItem { + return ( + typeof item === 'object' && + item !== null && + 'model_type' in item && + 'create_time' in item && + !!item.create_time + ); +} + +export function isDFAModelItem(item: unknown): item is DFAModelItem { + return isExistingModel(item) && item.model_type === TRAINED_MODEL_TYPE.TREE_ENSEMBLE; +} + +export function isModelDownloadItem(item: TrainedModelUIItem): item is ModelDownloadItem { + return 'putModelConfig' in item && !!item.type?.includes(TRAINED_MODEL_TYPE.PYTORCH); +} + +export const isBuiltInModel = (item: TrainedModelConfigResponse | TrainedModelUIItem) => + item.tags.includes(BUILT_IN_MODEL_TAG); +/** + * This type represents a union of different model entities: + * - Any existing trained model returned by the API, e.g., lang_ident_model_1, DFA models, etc. + * - Hosted model configurations available for download, e.g., ELSER or E5 + * - NLP models already downloaded into Elasticsearch + * - DFA models + */ +export type TrainedModelUIItem = TrainedModelItem | ModelDownloadItem | NLPModelItem | DFAModelItem; diff --git a/x-pack/plugins/ml/public/application/components/ml_inference/add_inference_pipeline_flyout.tsx b/x-pack/plugins/ml/public/application/components/ml_inference/add_inference_pipeline_flyout.tsx index 1d58dce866449..5bd47702ed3f0 100644 --- a/x-pack/plugins/ml/public/application/components/ml_inference/add_inference_pipeline_flyout.tsx +++ b/x-pack/plugins/ml/public/application/components/ml_inference/add_inference_pipeline_flyout.tsx @@ -20,7 +20,7 @@ import { import { i18n } from '@kbn/i18n'; import { extractErrorProperties } from '@kbn/ml-error-utils'; -import type { ModelItem } from '../../model_management/models_list'; +import type { DFAModelItem } from '../../../../common/types/trained_models'; import type { AddInferencePipelineSteps } from './types'; import { ADD_INFERENCE_PIPELINE_STEPS } from './constants'; import { AddInferencePipelineFooter } from '../shared'; @@ -39,7 +39,7 @@ import { useFetchPipelines } from './hooks/use_fetch_pipelines'; export interface AddInferencePipelineFlyoutProps { onClose: () => void; - model: ModelItem; + model: DFAModelItem; } export const AddInferencePipelineFlyout: FC = ({ diff --git a/x-pack/plugins/ml/public/application/components/ml_inference/components/processor_configuration.tsx b/x-pack/plugins/ml/public/application/components/ml_inference/components/processor_configuration.tsx index cd8bdf52166e0..0803cd98679a8 100644 --- a/x-pack/plugins/ml/public/application/components/ml_inference/components/processor_configuration.tsx +++ b/x-pack/plugins/ml/public/application/components/ml_inference/components/processor_configuration.tsx @@ -25,7 +25,7 @@ import { import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { CodeEditor } from '@kbn/code-editor'; -import type { ModelItem } from '../../../model_management/models_list'; +import type { DFAModelItem } from '../../../../../common/types/trained_models'; import { EDIT_MESSAGE, CANCEL_EDIT_MESSAGE, @@ -56,9 +56,9 @@ interface Props { condition?: string; fieldMap: MlInferenceState['fieldMap']; handleAdvancedConfigUpdate: (configUpdate: Partial) => void; - inferenceConfig: ModelItem['inference_config']; - modelInferenceConfig: ModelItem['inference_config']; - modelInputFields: ModelItem['input']; + inferenceConfig: DFAModelItem['inference_config']; + modelInferenceConfig: DFAModelItem['inference_config']; + modelInputFields: DFAModelItem['input']; modelType?: InferenceModelTypes; setHasUnsavedChanges: React.Dispatch>; tag?: string; diff --git a/x-pack/plugins/ml/public/application/components/ml_inference/state.ts b/x-pack/plugins/ml/public/application/components/ml_inference/state.ts index 787a2335717df..26bfe934eb46b 100644 --- a/x-pack/plugins/ml/public/application/components/ml_inference/state.ts +++ b/x-pack/plugins/ml/public/application/components/ml_inference/state.ts @@ -6,10 +6,10 @@ */ import { getAnalysisType } from '@kbn/ml-data-frame-analytics-utils'; +import type { DFAModelItem } from '../../../../common/types/trained_models'; import type { MlInferenceState } from './types'; -import type { ModelItem } from '../../model_management/models_list'; -export const getModelType = (model: ModelItem): string | undefined => { +export const getModelType = (model: DFAModelItem): string | undefined => { const analysisConfig = model.metadata?.analytics_config?.analysis; return analysisConfig !== undefined ? getAnalysisType(analysisConfig) : undefined; }; @@ -54,13 +54,17 @@ export const getDefaultOnFailureConfiguration = (): MlInferenceState['onFailure' }, ]; -export const getInitialState = (model: ModelItem): MlInferenceState => { +export const getInitialState = (model: DFAModelItem): MlInferenceState => { const modelType = getModelType(model); let targetField; if (modelType !== undefined) { targetField = model.inference_config - ? `ml.inference.${model.inference_config[modelType].results_field}` + ? `ml.inference.${ + model.inference_config[ + modelType as keyof Exclude + ]!.results_field + }` : undefined; } diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/components/analytics_selector/analytics_id_selector.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/components/analytics_selector/analytics_id_selector.tsx index bf786436919a9..9fe4da68aa6f8 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/components/analytics_selector/analytics_id_selector.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/components/analytics_selector/analytics_id_selector.tsx @@ -154,6 +154,7 @@ export function AnalyticsIdSelector({ async function fetchAnalyticsModels() { setIsLoading(true); try { + // FIXME should if fetch all trained models? const response = await trainedModelsApiService.getTrainedModels(); setTrainedModels(response); } catch (e) { diff --git a/x-pack/plugins/ml/public/application/model_management/add_model_flyout.tsx b/x-pack/plugins/ml/public/application/model_management/add_model_flyout.tsx index 5a92a67962579..24c8ce0915234 100644 --- a/x-pack/plugins/ml/public/application/model_management/add_model_flyout.tsx +++ b/x-pack/plugins/ml/public/application/model_management/add_model_flyout.tsx @@ -30,12 +30,12 @@ import { FormattedMessage } from '@kbn/i18n-react'; import React, { type FC, useMemo, useState } from 'react'; import { groupBy } from 'lodash'; import { ElandPythonClient } from '@kbn/inference_integration_flyout'; +import type { ModelDownloadItem } from '../../../common/types/trained_models'; import { usePermissionCheck } from '../capabilities/check_capabilities'; import { useMlKibana } from '../contexts/kibana'; -import type { ModelItem } from './models_list'; export interface AddModelFlyoutProps { - modelDownloads: ModelItem[]; + modelDownloads: ModelDownloadItem[]; onClose: () => void; onSubmit: (modelId: string) => void; } @@ -138,7 +138,7 @@ export const AddModelFlyout: FC = ({ onClose, onSubmit, mod }; interface ClickToDownloadTabContentProps { - modelDownloads: ModelItem[]; + modelDownloads: ModelDownloadItem[]; onModelDownload: (modelId: string) => void; } diff --git a/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/create_pipeline_for_model_flyout.tsx b/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/create_pipeline_for_model_flyout.tsx index 21fac6f6a28f8..580341800f3b5 100644 --- a/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/create_pipeline_for_model_flyout.tsx +++ b/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/create_pipeline_for_model_flyout.tsx @@ -21,7 +21,7 @@ import { i18n } from '@kbn/i18n'; import { extractErrorProperties } from '@kbn/ml-error-utils'; import type { SupportedPytorchTasksType } from '@kbn/ml-trained-models-utils'; -import type { ModelItem } from '../models_list'; +import type { TrainedModelItem } from '../../../../common/types/trained_models'; import type { AddInferencePipelineSteps } from '../../components/ml_inference/types'; import { ADD_INFERENCE_PIPELINE_STEPS } from '../../components/ml_inference/constants'; import { AddInferencePipelineFooter } from '../../components/shared'; @@ -40,7 +40,7 @@ import { useTestTrainedModelsContext } from '../test_models/test_trained_models_ export interface CreatePipelineForModelFlyoutProps { onClose: (refreshList?: boolean) => void; - model: ModelItem; + model: TrainedModelItem; } export const CreatePipelineForModelFlyout: FC = ({ diff --git a/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/state.ts b/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/state.ts index 603a542e7964f..586537222c3c5 100644 --- a/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/state.ts +++ b/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/state.ts @@ -7,8 +7,8 @@ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { IngestInferenceProcessor } from '@elastic/elasticsearch/lib/api/types'; +import type { TrainedModelItem } from '../../../../common/types/trained_models'; import { getDefaultOnFailureConfiguration } from '../../components/ml_inference/state'; -import type { ModelItem } from '../models_list'; export interface InferecePipelineCreationState { creatingPipeline: boolean; @@ -26,7 +26,7 @@ export interface InferecePipelineCreationState { } export const getInitialState = ( - model: ModelItem, + model: TrainedModelItem, initialPipelineConfig: estypes.IngestPipeline | undefined ): InferecePipelineCreationState => ({ creatingPipeline: false, diff --git a/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/test_trained_model.tsx b/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/test_trained_model.tsx index 46ec8a6060ac5..ba25e3b26f920 100644 --- a/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/test_trained_model.tsx +++ b/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/test_trained_model.tsx @@ -12,13 +12,13 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import type { ModelItem } from '../models_list'; +import type { TrainedModelItem } from '../../../../common/types/trained_models'; import { TestTrainedModelContent } from '../test_models/test_trained_model_content'; import { useMlKibana } from '../../contexts/kibana'; import { type InferecePipelineCreationState } from './state'; interface ContentProps { - model: ModelItem; + model: TrainedModelItem; handlePipelineConfigUpdate: (configUpdate: Partial) => void; externalPipelineConfig?: estypes.IngestPipeline; } diff --git a/x-pack/plugins/ml/public/application/model_management/delete_models_modal.tsx b/x-pack/plugins/ml/public/application/model_management/delete_models_modal.tsx index 0f5c515c22776..7afad711521dc 100644 --- a/x-pack/plugins/ml/public/application/model_management/delete_models_modal.tsx +++ b/x-pack/plugins/ml/public/application/model_management/delete_models_modal.tsx @@ -22,14 +22,15 @@ import { EuiSpacer, } from '@elastic/eui'; import { isPopulatedObject } from '@kbn/ml-is-populated-object'; +import type { TrainedModelItem, TrainedModelUIItem } from '../../../common/types/trained_models'; +import { isExistingModel } from '../../../common/types/trained_models'; import { type WithRequired } from '../../../common/types/common'; import { useTrainedModelsApiService } from '../services/ml_api_service/trained_models'; import { useToastNotificationService } from '../services/toast_notification_service'; import { DeleteSpaceAwareItemCheckModal } from '../components/delete_space_aware_item_check_modal'; -import { type ModelItem } from './models_list'; interface DeleteModelsModalProps { - models: ModelItem[]; + models: TrainedModelUIItem[]; onClose: (refreshList?: boolean) => void; } @@ -42,11 +43,14 @@ export const DeleteModelsModal: FC = ({ models, onClose const modelIds = models.map((m) => m.model_id); - const modelsWithPipelines = models.filter((m) => isPopulatedObject(m.pipelines)) as Array< - WithRequired - >; + const modelsWithPipelines = models.filter( + (m): m is WithRequired => + isExistingModel(m) && isPopulatedObject(m.pipelines) + ); - const modelsWithInferenceAPIs = models.filter((m) => m.hasInferenceServices); + const modelsWithInferenceAPIs = models.filter( + (m): m is TrainedModelItem => isExistingModel(m) && !!m.hasInferenceServices + ); const inferenceAPIsIDs: string[] = modelsWithInferenceAPIs.flatMap((model) => { return (model.inference_apis ?? []).map((inference) => inference.inference_id); diff --git a/x-pack/plugins/ml/public/application/model_management/deployment_setup.tsx b/x-pack/plugins/ml/public/application/model_management/deployment_setup.tsx index 87fff2bf3eb75..c5b38feb4c799 100644 --- a/x-pack/plugins/ml/public/application/model_management/deployment_setup.tsx +++ b/x-pack/plugins/ml/public/application/model_management/deployment_setup.tsx @@ -42,9 +42,11 @@ import { css } from '@emotion/react'; import { toMountPoint } from '@kbn/react-kibana-mount'; import { dictionaryValidator } from '@kbn/ml-validators'; import type { NLPSettings } from '../../../common/constants/app'; -import type { TrainedModelDeploymentStatsResponse } from '../../../common/types/trained_models'; +import type { + NLPModelItem, + TrainedModelDeploymentStatsResponse, +} from '../../../common/types/trained_models'; import { type CloudInfo, getNewJobLimits } from '../services/ml_server_info'; -import type { ModelItem } from './models_list'; import type { MlStartTrainedModelDeploymentRequestNew } from './deployment_params_mapper'; import { DeploymentParamsMapper } from './deployment_params_mapper'; @@ -645,7 +647,7 @@ export const DeploymentSetup: FC = ({ }; interface StartDeploymentModalProps { - model: ModelItem; + model: NLPModelItem; startModelDeploymentDocUrl: string; onConfigChange: (config: DeploymentParamsUI) => void; onClose: () => void; @@ -845,7 +847,7 @@ export const getUserInputModelDeploymentParamsProvider = nlpSettings: NLPSettings ) => ( - model: ModelItem, + model: NLPModelItem, initialParams?: TrainedModelDeploymentStatsResponse, deploymentIds?: string[] ): Promise => { diff --git a/x-pack/plugins/ml/public/application/model_management/expanded_row.tsx b/x-pack/plugins/ml/public/application/model_management/expanded_row.tsx index f44dc55dab2df..4304e9e207e20 100644 --- a/x-pack/plugins/ml/public/application/model_management/expanded_row.tsx +++ b/x-pack/plugins/ml/public/application/model_management/expanded_row.tsx @@ -26,18 +26,23 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { FIELD_FORMAT_IDS } from '@kbn/field-formats-plugin/common'; import { isPopulatedObject } from '@kbn/ml-is-populated-object'; import { isDefined } from '@kbn/ml-is-defined'; -import { TRAINED_MODEL_TYPE } from '@kbn/ml-trained-models-utils'; +import { MODEL_STATE, TRAINED_MODEL_TYPE } from '@kbn/ml-trained-models-utils'; import { dynamic } from '@kbn/shared-ux-utility'; import { InferenceApi } from './inference_api_tab'; -import type { ModelItemFull } from './models_list'; import { ModelPipelines } from './pipelines'; import { AllocatedModels } from '../memory_usage/nodes_overview/allocated_models'; -import type { AllocatedModel, TrainedModelStat } from '../../../common/types/trained_models'; +import type { + AllocatedModel, + NLPModelItem, + TrainedModelItem, + TrainedModelStat, +} from '../../../common/types/trained_models'; import { useFieldFormatter } from '../contexts/kibana/use_field_formatter'; import { useEnabledFeatures } from '../contexts/ml'; +import { isNLPModelItem } from '../../../common/types/trained_models'; interface ExpandedRowProps { - item: ModelItemFull; + item: TrainedModelItem; } const JobMap = dynamic(async () => ({ @@ -169,8 +174,14 @@ export const ExpandedRow: FC = ({ item }) => { license_level, ]); + const hideColumns = useMemo(() => { + return showNodeInfo ? ['model_id'] : ['model_id', 'node_name']; + }, [showNodeInfo]); + const deploymentStatItems = useMemo(() => { - const deploymentStats = stats.deployment_stats; + if (!isNLPModelItem(item)) return []; + + const deploymentStats = (stats as NLPModelItem['stats'])!.deployment_stats; const modelSizeStats = stats.model_size_stats; if (!deploymentStats || !modelSizeStats) return []; @@ -228,11 +239,7 @@ export const ExpandedRow: FC = ({ item }) => { }; }); }); - }, [stats]); - - const hideColumns = useMemo(() => { - return showNodeInfo ? ['model_id'] : ['model_id', 'node_name']; - }, [showNodeInfo]); + }, [stats, item]); const tabs = useMemo(() => { return [ @@ -320,9 +327,7 @@ export const ExpandedRow: FC = ({ item }) => { @@ -529,7 +534,9 @@ export const ExpandedRow: FC = ({ item }) => { ]); const initialSelectedTab = - item.state === 'started' ? tabs.find((t) => t.id === 'stats') : tabs[0]; + isNLPModelItem(item) && item.state === MODEL_STATE.STARTED + ? tabs.find((t) => t.id === 'stats') + : tabs[0]; return ( void; onConfirm: (deploymentIds: string[]) => void; } @@ -220,7 +220,7 @@ export const StopModelDeploymentsConfirmDialog: FC) => - async (forceStopModel: ModelItem): Promise => { + async (forceStopModel: NLPModelItem): Promise => { return new Promise(async (resolve, reject) => { try { const modalSession = overlays.openModal( diff --git a/x-pack/plugins/ml/public/application/model_management/get_model_state.tsx b/x-pack/plugins/ml/public/application/model_management/get_model_state.tsx index d8bf2b8084a6a..75f8f9faa7a91 100644 --- a/x-pack/plugins/ml/public/application/model_management/get_model_state.tsx +++ b/x-pack/plugins/ml/public/application/model_management/get_model_state.tsx @@ -5,40 +5,18 @@ * 2.0. */ -import React from 'react'; -import { DEPLOYMENT_STATE, MODEL_STATE, type ModelState } from '@kbn/ml-trained-models-utils'; import { EuiBadge, - EuiHealth, - EuiLoadingSpinner, - type EuiHealthProps, EuiFlexGroup, EuiFlexItem, + EuiHealth, + EuiLoadingSpinner, EuiText, + type EuiHealthProps, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import type { ModelItem } from './models_list'; - -/** - * Resolves result model state based on the state of each deployment. - * - * If at least one deployment is in the STARTED state, the model state is STARTED. - * Then if none of the deployments are in the STARTED state, but at least one is in the STARTING state, the model state is STARTING. - * If all deployments are in the STOPPING state, the model state is STOPPING. - */ -export const getModelDeploymentState = (model: ModelItem): ModelState | undefined => { - if (!model.stats?.deployment_stats?.length) return; - - if (model.stats?.deployment_stats?.some((v) => v.state === DEPLOYMENT_STATE.STARTED)) { - return MODEL_STATE.STARTED; - } - if (model.stats?.deployment_stats?.some((v) => v.state === DEPLOYMENT_STATE.STARTING)) { - return MODEL_STATE.STARTING; - } - if (model.stats?.deployment_stats?.every((v) => v.state === DEPLOYMENT_STATE.STOPPING)) { - return MODEL_STATE.STOPPING; - } -}; +import { MODEL_STATE, type ModelState } from '@kbn/ml-trained-models-utils'; +import React from 'react'; export const getModelStateColor = ( state: ModelState | undefined diff --git a/x-pack/plugins/ml/public/application/model_management/inference_api_tab.tsx b/x-pack/plugins/ml/public/application/model_management/inference_api_tab.tsx index dc86c359bb1aa..3f55871a93e44 100644 --- a/x-pack/plugins/ml/public/application/model_management/inference_api_tab.tsx +++ b/x-pack/plugins/ml/public/application/model_management/inference_api_tab.tsx @@ -16,10 +16,10 @@ import { EuiTitle, } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; -import type { InferenceAPIConfigResponse } from '@kbn/ml-trained-models-utils'; +import type { InferenceInferenceEndpointInfo } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; export interface InferenceAPITabProps { - inferenceApis: InferenceAPIConfigResponse[]; + inferenceApis: InferenceInferenceEndpointInfo[]; } export const InferenceApi: FC = ({ inferenceApis }) => { diff --git a/x-pack/plugins/ml/public/application/model_management/model_actions.tsx b/x-pack/plugins/ml/public/application/model_management/model_actions.tsx index 133698b0e72f1..1fe008871b0ef 100644 --- a/x-pack/plugins/ml/public/application/model_management/model_actions.tsx +++ b/x-pack/plugins/ml/public/application/model_management/model_actions.tsx @@ -8,18 +8,28 @@ import type { Action } from '@elastic/eui/src/components/basic_table/action_types'; import { i18n } from '@kbn/i18n'; import { isPopulatedObject } from '@kbn/ml-is-populated-object'; -import { EuiToolTip, useIsWithinMaxBreakpoint } from '@elastic/eui'; -import React, { useCallback, useMemo, useEffect, useState } from 'react'; -import { - BUILT_IN_MODEL_TAG, - DEPLOYMENT_STATE, - TRAINED_MODEL_TYPE, -} from '@kbn/ml-trained-models-utils'; +import { useIsWithinMaxBreakpoint } from '@elastic/eui'; +import React, { useMemo, useEffect, useState } from 'react'; +import { DEPLOYMENT_STATE } from '@kbn/ml-trained-models-utils'; import { MODEL_STATE } from '@kbn/ml-trained-models-utils/src/constants/trained_models'; import { getAnalysisType, type DataFrameAnalysisConfigType, } from '@kbn/ml-data-frame-analytics-utils'; +import useMountedState from 'react-use/lib/useMountedState'; +import type { + DFAModelItem, + NLPModelItem, + TrainedModelItem, + TrainedModelUIItem, +} from '../../../common/types/trained_models'; +import { + isBuiltInModel, + isDFAModelItem, + isExistingModel, + isModelDownloadItem, + isNLPModelItem, +} from '../../../common/types/trained_models'; import { useEnabledFeatures, useMlServerInfo } from '../contexts/ml'; import { useTrainedModelsApiService } from '../services/ml_api_service/trained_models'; import { getUserConfirmationProvider } from './force_stop_dialog'; @@ -27,8 +37,7 @@ import { useToastNotificationService } from '../services/toast_notification_serv import { getUserInputModelDeploymentParamsProvider } from './deployment_setup'; import { useMlKibana, useMlLocator, useNavigateToPath } from '../contexts/kibana'; import { ML_PAGES } from '../../../common/constants/locator'; -import { isTestable, isDfaTrainedModel } from './test_models'; -import type { ModelItem } from './models_list'; +import { isTestable } from './test_models'; import { usePermissionCheck } from '../capabilities/check_capabilities'; import { useCloudCheck } from '../components/node_available_warning/hooks'; @@ -44,16 +53,17 @@ export function useModelActions({ onModelDownloadRequest, }: { isLoading: boolean; - onDfaTestAction: (model: ModelItem) => void; - onTestAction: (model: ModelItem) => void; - onModelsDeleteRequest: (models: ModelItem[]) => void; - onModelDeployRequest: (model: ModelItem) => void; + onDfaTestAction: (model: DFAModelItem) => void; + onTestAction: (model: TrainedModelItem) => void; + onModelsDeleteRequest: (models: TrainedModelUIItem[]) => void; + onModelDeployRequest: (model: DFAModelItem) => void; onModelDownloadRequest: (modelId: string) => void; onLoading: (isLoading: boolean) => void; fetchModels: () => Promise; modelAndDeploymentIds: string[]; -}): Array> { +}): Array> { const isMobileLayout = useIsWithinMaxBreakpoint('l'); + const isMounted = useMountedState(); const { services: { @@ -95,23 +105,19 @@ export function useModelActions({ const trainedModelsApiService = useTrainedModelsApiService(); useEffect(() => { - let isMounted = true; mlApi .hasPrivileges({ cluster: ['manage_ingest_pipelines'], }) .then((result) => { - if (isMounted) { + if (isMounted()) { setCanManageIngestPipelines( result.hasPrivileges === undefined || result.hasPrivileges.cluster?.manage_ingest_pipelines === true ); } }); - return () => { - isMounted = false; - }; - }, [mlApi]); + }, [mlApi, isMounted]); const getUserConfirmation = useMemo( () => getUserConfirmationProvider(overlays, startServices), @@ -131,12 +137,7 @@ export function useModelActions({ [overlays, startServices, startModelDeploymentDocUrl, cloudInfo, showNodeInfo, nlpSettings] ); - const isBuiltInModel = useCallback( - (item: ModelItem) => item.tags.includes(BUILT_IN_MODEL_TAG), - [] - ); - - return useMemo>>( + return useMemo>>( () => [ { name: i18n.translate('xpack.ml.trainedModels.modelsList.viewTrainingDataNameActionLabel', { @@ -150,10 +151,10 @@ export function useModelActions({ ), icon: 'visTable', type: 'icon', - available: (item) => !!item.metadata?.analytics_config?.id, - enabled: (item) => item.origin_job_exists === true, + available: (item) => isDFAModelItem(item) && !!item.metadata?.analytics_config?.id, + enabled: (item) => isDFAModelItem(item) && item.origin_job_exists === true, onClick: async (item) => { - if (item.metadata?.analytics_config === undefined) return; + if (!isDFAModelItem(item) || item.metadata?.analytics_config === undefined) return; const analysisType = getAnalysisType( item.metadata?.analytics_config.analysis @@ -185,7 +186,7 @@ export function useModelActions({ icon: 'graphApp', type: 'icon', isPrimary: true, - available: (item) => !!item.metadata?.analytics_config?.id, + available: (item) => isDFAModelItem(item) && !!item.metadata?.analytics_config?.id, onClick: async (item) => { const path = await urlLocator.getUrl({ page: ML_PAGES.DATA_FRAME_ANALYTICS_MAP, @@ -216,15 +217,14 @@ export function useModelActions({ }, available: (item) => { return ( - item.model_type === TRAINED_MODEL_TYPE.PYTORCH && - !!item.state && + isNLPModelItem(item) && item.state !== MODEL_STATE.DOWNLOADING && item.state !== MODEL_STATE.NOT_DOWNLOADED ); }, onClick: async (item) => { const modelDeploymentParams = await getUserInputModelDeploymentParams( - item, + item as NLPModelItem, undefined, modelAndDeploymentIds ); @@ -277,11 +277,13 @@ export function useModelActions({ type: 'icon', isPrimary: false, available: (item) => - item.model_type === TRAINED_MODEL_TYPE.PYTORCH && + isNLPModelItem(item) && canStartStopTrainedModels && !isLoading && !!item.stats?.deployment_stats?.some((v) => v.state === DEPLOYMENT_STATE.STARTED), onClick: async (item) => { + if (!isNLPModelItem(item)) return; + const deploymentIdToUpdate = item.deployment_ids[0]; const targetDeployment = item.stats!.deployment_stats.find( @@ -345,7 +347,7 @@ export function useModelActions({ type: 'icon', isPrimary: false, available: (item) => - item.model_type === TRAINED_MODEL_TYPE.PYTORCH && + isNLPModelItem(item) && canStartStopTrainedModels && // Deployment can be either started, starting, or exist in a failed state (item.state === MODEL_STATE.STARTED || item.state === MODEL_STATE.STARTING) && @@ -358,6 +360,8 @@ export function useModelActions({ )), enabled: (item) => !isLoading, onClick: async (item) => { + if (!isNLPModelItem(item)) return; + const requireForceStop = isPopulatedObject(item.pipelines); const hasMultipleDeployments = item.deployment_ids.length > 1; @@ -423,7 +427,10 @@ export function useModelActions({ // @ts-ignore type: isMobileLayout ? 'icon' : 'button', isPrimary: true, - available: (item) => canCreateTrainedModels && item.state === MODEL_STATE.NOT_DOWNLOADED, + available: (item) => + canCreateTrainedModels && + isModelDownloadItem(item) && + item.state === MODEL_STATE.NOT_DOWNLOADED, enabled: (item) => !isLoading, onClick: async (item) => { onModelDownloadRequest(item.model_id); @@ -431,28 +438,9 @@ export function useModelActions({ }, { name: (model) => { - const hasDeployments = model.state === MODEL_STATE.STARTED; - return ( - - <> - {i18n.translate('xpack.ml.trainedModels.modelsList.deployModelActionLabel', { - defaultMessage: 'Deploy model', - })} - - - ); + return i18n.translate('xpack.ml.trainedModels.modelsList.deployModelActionLabel', { + defaultMessage: 'Deploy model', + }); }, description: i18n.translate('xpack.ml.trainedModels.modelsList.deployModelActionLabel', { defaultMessage: 'Deploy model', @@ -462,23 +450,18 @@ export function useModelActions({ type: 'icon', isPrimary: false, onClick: (model) => { - onModelDeployRequest(model); + onModelDeployRequest(model as DFAModelItem); }, available: (item) => { - return ( - isDfaTrainedModel(item) && - !isBuiltInModel(item) && - !item.putModelConfig && - canManageIngestPipelines - ); + return isDFAModelItem(item) && canManageIngestPipelines; }, enabled: (item) => { - return canStartStopTrainedModels && item.state !== MODEL_STATE.STARTED; + return canStartStopTrainedModels; }, }, { name: (model) => { - return model.state === MODEL_STATE.DOWNLOADING ? ( + return isModelDownloadItem(model) && model.state === MODEL_STATE.DOWNLOADING ? ( <> {i18n.translate('xpack.ml.trainedModels.modelsList.deleteModelActionLabel', { defaultMessage: 'Cancel', @@ -492,33 +475,33 @@ export function useModelActions({ ); }, - description: (model: ModelItem) => { - const hasDeployments = model.deployment_ids.length > 0; - const { hasInferenceServices } = model; - - if (model.state === MODEL_STATE.DOWNLOADING) { + description: (model: TrainedModelUIItem) => { + if (isModelDownloadItem(model) && model.state === MODEL_STATE.DOWNLOADING) { return i18n.translate('xpack.ml.trainedModels.modelsList.cancelDownloadActionLabel', { defaultMessage: 'Cancel download', }); - } else if (hasInferenceServices) { - return i18n.translate( - 'xpack.ml.trainedModels.modelsList.deleteDisabledWithInferenceServicesTooltip', - { - defaultMessage: 'Model is used by the _inference API', - } - ); - } else if (hasDeployments) { - return i18n.translate( - 'xpack.ml.trainedModels.modelsList.deleteDisabledWithDeploymentsTooltip', - { - defaultMessage: 'Model has started deployments', - } - ); - } else { - return i18n.translate('xpack.ml.trainedModels.modelsList.deleteModelActionLabel', { - defaultMessage: 'Delete model', - }); + } else if (isNLPModelItem(model)) { + const hasDeployments = model.deployment_ids?.length ?? 0 > 0; + const { hasInferenceServices } = model; + if (hasInferenceServices) { + return i18n.translate( + 'xpack.ml.trainedModels.modelsList.deleteDisabledWithInferenceServicesTooltip', + { + defaultMessage: 'Model is used by the _inference API', + } + ); + } else if (hasDeployments) { + return i18n.translate( + 'xpack.ml.trainedModels.modelsList.deleteDisabledWithDeploymentsTooltip', + { + defaultMessage: 'Model has started deployments', + } + ); + } } + return i18n.translate('xpack.ml.trainedModels.modelsList.deleteModelActionLabel', { + defaultMessage: 'Delete model', + }); }, 'data-test-subj': 'mlModelsTableRowDeleteAction', icon: 'trash', @@ -530,16 +513,17 @@ export function useModelActions({ onModelsDeleteRequest([model]); }, available: (item) => { - const hasZeroPipelines = Object.keys(item.pipelines ?? {}).length === 0; - return ( - canDeleteTrainedModels && - !isBuiltInModel(item) && - !item.putModelConfig && - (hasZeroPipelines || canManageIngestPipelines) - ); + if (!canDeleteTrainedModels || isBuiltInModel(item)) return false; + + if (isModelDownloadItem(item)) { + return !!item.downloadState; + } else { + const hasZeroPipelines = Object.keys(item.pipelines ?? {}).length === 0; + return hasZeroPipelines || canManageIngestPipelines; + } }, enabled: (item) => { - return item.state !== MODEL_STATE.STARTED; + return !isNLPModelItem(item) || item.state !== MODEL_STATE.STARTED; }, }, { @@ -556,9 +540,9 @@ export function useModelActions({ isPrimary: true, available: (item) => isTestable(item, true), onClick: (item) => { - if (isDfaTrainedModel(item) && !isBuiltInModel(item)) { + if (isDFAModelItem(item)) { onDfaTestAction(item); - } else { + } else if (isExistingModel(item)) { onTestAction(item); } }, @@ -579,19 +563,20 @@ export function useModelActions({ isPrimary: true, available: (item) => { return ( - item?.metadata?.analytics_config !== undefined || - (Array.isArray(item.indices) && item.indices.length > 0) + isDFAModelItem(item) || + (isExistingModel(item) && Array.isArray(item.indices) && item.indices.length > 0) ); }, onClick: async (item) => { - let indexPatterns: string[] | undefined = item?.indices - ?.map((o) => Object.keys(o)) - .flat(); + if (!isDFAModelItem(item) || !isExistingModel(item)) return; - if (item?.metadata?.analytics_config?.dest?.index !== undefined) { + let indexPatterns: string[] | undefined = item.indices; + + if (isDFAModelItem(item) && item?.metadata?.analytics_config?.dest?.index !== undefined) { const destIndex = item.metadata.analytics_config.dest?.index; indexPatterns = [destIndex]; } + const path = await urlLocator.getUrl({ page: ML_PAGES.DATA_DRIFT_CUSTOM, pageState: indexPatterns ? { comparison: indexPatterns.join(',') } : {}, @@ -612,7 +597,6 @@ export function useModelActions({ fetchModels, getUserConfirmation, getUserInputModelDeploymentParams, - isBuiltInModel, isLoading, modelAndDeploymentIds, navigateToPath, diff --git a/x-pack/plugins/ml/public/application/model_management/models_list.tsx b/x-pack/plugins/ml/public/application/model_management/models_list.tsx index d66ab1ab3db16..9547e7c6473bd 100644 --- a/x-pack/plugins/ml/public/application/model_management/models_list.tsx +++ b/x-pack/plugins/ml/public/application/model_management/models_list.tsx @@ -29,33 +29,29 @@ import type { EuiTableSelectionType } from '@elastic/eui/src/components/basic_ta import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { useTimefilter } from '@kbn/ml-date-picker'; -import { isDefined } from '@kbn/ml-is-defined'; import { isPopulatedObject } from '@kbn/ml-is-populated-object'; import { useStorage } from '@kbn/ml-local-storage'; -import { - BUILT_IN_MODEL_TAG, - BUILT_IN_MODEL_TYPE, - ELASTIC_MODEL_TAG, - ELASTIC_MODEL_TYPE, - ELSER_ID_V1, - MODEL_STATE, - type ModelState, -} from '@kbn/ml-trained-models-utils'; +import { ELSER_ID_V1, MODEL_STATE } from '@kbn/ml-trained-models-utils'; import type { ListingPageUrlState } from '@kbn/ml-url-state'; import { usePageUrlState } from '@kbn/ml-url-state'; import { dynamic } from '@kbn/shared-ux-utility'; -import { cloneDeep, groupBy, isEmpty, memoize } from 'lodash'; +import { cloneDeep, isEmpty } from 'lodash'; import type { FC } from 'react'; import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import useMountedState from 'react-use/lib/useMountedState'; import { ML_PAGES } from '../../../common/constants/locator'; import { ML_ELSER_CALLOUT_DISMISSED } from '../../../common/types/storage'; import type { - ModelDownloadState, - ModelPipelines, - TrainedModelConfigResponse, - TrainedModelDeploymentStatsResponse, - TrainedModelStat, + DFAModelItem, + NLPModelItem, + TrainedModelItem, + TrainedModelUIItem, +} from '../../../common/types/trained_models'; +import { + isBaseNLPModelItem, + isBuiltInModel, + isModelDownloadItem, + isNLPModelItem, } from '../../../common/types/trained_models'; import { AddInferencePipelineFlyout } from '../components/ml_inference'; import { SavedObjectsWarning } from '../components/saved_objects_warning'; @@ -70,41 +66,11 @@ import { useTrainedModelsApiService } from '../services/ml_api_service/trained_m import { useToastNotificationService } from '../services/toast_notification_service'; import { ModelsTableToConfigMapping } from './config_mapping'; import { DeleteModelsModal } from './delete_models_modal'; -import { getModelDeploymentState, getModelStateColor } from './get_model_state'; +import { getModelStateColor } from './get_model_state'; import { useModelActions } from './model_actions'; import { TestDfaModelsFlyout } from './test_dfa_models_flyout'; import { TestModelAndPipelineCreationFlyout } from './test_models'; -type Stats = Omit; - -export type ModelItem = TrainedModelConfigResponse & { - type?: string[]; - stats?: Stats & { deployment_stats: TrainedModelDeploymentStatsResponse[] }; - pipelines?: ModelPipelines['pipelines'] | null; - origin_job_exists?: boolean; - deployment_ids: string[]; - putModelConfig?: object; - state: ModelState | undefined; - /** - * Description of the current model state - */ - stateDescription?: string; - recommended?: boolean; - supported: boolean; - /** - * Model name, e.g. elser - */ - modelName?: string; - os?: string; - arch?: string; - softwareLicense?: string; - licenseUrl?: string; - downloadState?: ModelDownloadState; - disclaimer?: string; -}; - -export type ModelItemFull = Required; - interface PageUrlState { pageKey: typeof ML_PAGES.TRAINED_MODELS_MANAGE; pageUrlState: ListingPageUrlState; @@ -185,120 +151,29 @@ export const ModelsList: FC = ({ const [isInitialized, setIsInitialized] = useState(false); const [isLoading, setIsLoading] = useState(false); - const [items, setItems] = useState([]); - const [selectedModels, setSelectedModels] = useState([]); - const [modelsToDelete, setModelsToDelete] = useState([]); - const [modelToDeploy, setModelToDeploy] = useState(); + const [items, setItems] = useState([]); + const [selectedModels, setSelectedModels] = useState([]); + const [modelsToDelete, setModelsToDelete] = useState([]); + const [modelToDeploy, setModelToDeploy] = useState(); const [itemIdToExpandedRowMap, setItemIdToExpandedRowMap] = useState>( {} ); - const [modelToTest, setModelToTest] = useState(null); - const [dfaModelToTest, setDfaModelToTest] = useState(null); + const [modelToTest, setModelToTest] = useState(null); + const [dfaModelToTest, setDfaModelToTest] = useState(null); const [isAddModelFlyoutVisible, setIsAddModelFlyoutVisible] = useState(false); - const isBuiltInModel = useCallback( - (item: ModelItem) => item.tags.includes(BUILT_IN_MODEL_TAG), - [] - ); - - const isElasticModel = useCallback( - (item: ModelItem) => item.tags.includes(ELASTIC_MODEL_TAG), - [] - ); - // List of downloaded/existing models - const existingModels = useMemo(() => { - return items.filter((i) => !i.putModelConfig); + const existingModels = useMemo>(() => { + return items.filter((i): i is NLPModelItem | DFAModelItem => !isModelDownloadItem(i)); }, [items]); - /** - * Fetch of model definitions available for download needs to happen only once - */ - const getTrainedModelDownloads = memoize(trainedModelsApiService.getTrainedModelDownloads); - /** * Fetches trained models. */ const fetchModelsData = useCallback(async () => { setIsLoading(true); try { - const response = await trainedModelsApiService.getTrainedModels(undefined, { - with_pipelines: true, - with_indices: true, - }); - - const newItems: ModelItem[] = []; - const expandedItemsToRefresh = []; - - for (const model of response) { - const tableItem: ModelItem = { - ...model, - // Extract model types - ...(typeof model.inference_config === 'object' - ? { - type: [ - model.model_type, - ...Object.keys(model.inference_config), - ...(isBuiltInModel(model as ModelItem) ? [BUILT_IN_MODEL_TYPE] : []), - ...(isElasticModel(model as ModelItem) ? [ELASTIC_MODEL_TYPE] : []), - ], - } - : {}), - } as ModelItem; - newItems.push(tableItem); - - if (itemIdToExpandedRowMap[model.model_id]) { - expandedItemsToRefresh.push(tableItem); - } - } - - // Need to fetch stats for all models to enable/disable actions - // TODO combine fetching models definitions and stats into a single function - await fetchModelsStats(newItems); - - let resultItems = newItems; - // don't add any of the built-in models (e.g. elser) if NLP is disabled - if (isNLPEnabled) { - const idMap = new Map( - resultItems.map((model) => [model.model_id, model]) - ); - /** - * Fetches model definitions available for download - */ - const forDownload = await getTrainedModelDownloads(); - - const notDownloaded: ModelItem[] = forDownload - .filter(({ model_id: modelId, hidden, recommended, supported, disclaimer }) => { - if (idMap.has(modelId)) { - const model = idMap.get(modelId)!; - if (recommended) { - model.recommended = true; - } - model.supported = supported; - model.disclaimer = disclaimer; - } - return !idMap.has(modelId) && !hidden; - }) - .map((modelDefinition) => { - return { - model_id: modelDefinition.model_id, - type: modelDefinition.type, - tags: modelDefinition.type?.includes(ELASTIC_MODEL_TAG) ? [ELASTIC_MODEL_TAG] : [], - putModelConfig: modelDefinition.config, - description: modelDefinition.description, - state: MODEL_STATE.NOT_DOWNLOADED, - recommended: !!modelDefinition.recommended, - modelName: modelDefinition.modelName, - os: modelDefinition.os, - arch: modelDefinition.arch, - softwareLicense: modelDefinition.license, - licenseUrl: modelDefinition.licenseUrl, - supported: modelDefinition.supported, - disclaimer: modelDefinition.disclaimer, - } as ModelItem; - }); - resultItems = [...resultItems, ...notDownloaded]; - } + const resultItems = await trainedModelsApiService.getTrainedModelsList(); setItems((prevItems) => { // Need to merge existing items with new items @@ -307,7 +182,7 @@ export const ModelsList: FC = ({ const prevItem = prevItems.find((i) => i.model_id === item.model_id); return { ...item, - ...(prevItem?.state === MODEL_STATE.DOWNLOADING + ...(isBaseNLPModelItem(prevItem) && prevItem?.state === MODEL_STATE.DOWNLOADING ? { state: prevItem.state, downloadState: prevItem.downloadState, @@ -322,7 +197,7 @@ export const ModelsList: FC = ({ return Object.fromEntries( Object.keys(prev).map((modelId) => { const item = resultItems.find((i) => i.model_id === modelId); - return item ? [modelId, ] : []; + return item ? [modelId, ] : []; }) ); }); @@ -365,51 +240,6 @@ export const ModelsList: FC = ({ }; }, [existingModels]); - /** - * Fetches models stats and update the original object - */ - const fetchModelsStats = useCallback(async (models: ModelItem[]) => { - try { - if (models) { - const { trained_model_stats: modelsStatsResponse } = - await trainedModelsApiService.getTrainedModelStats(); - - const groupByModelId = groupBy(modelsStatsResponse, 'model_id'); - - models.forEach((model) => { - const modelStats = groupByModelId[model.model_id]; - model.stats = { - ...(model.stats ?? {}), - ...modelStats[0], - deployment_stats: modelStats.map((d) => d.deployment_stats).filter(isDefined), - }; - - // Extract deployment ids from deployment stats - model.deployment_ids = modelStats - .map((v) => v.deployment_stats?.deployment_id) - .filter(isDefined); - - model.state = getModelDeploymentState(model); - model.stateDescription = model.stats.deployment_stats.reduce((acc, c) => { - if (acc) return acc; - return c.reason ?? ''; - }, ''); - }); - } - - return true; - } catch (error) { - displayErrorToast( - error, - i18n.translate('xpack.ml.trainedModels.modelsList.fetchModelStatsErrorMessage', { - defaultMessage: 'Error loading trained models statistics', - }) - ); - return false; - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - const downLoadStatusFetchInProgress = useRef(false); const abortedDownload = useRef(new Set()); @@ -432,7 +262,7 @@ export const ModelsList: FC = ({ if (isMounted()) { setItems((prevItems) => { return prevItems.map((item) => { - if (!item.type?.includes('pytorch')) { + if (!isBaseNLPModelItem(item)) { return item; } const newItem = cloneDeep(item); @@ -493,7 +323,9 @@ export const ModelsList: FC = ({ if (type) { acc.add(type); } - acc.add(item.model_type); + if (item.model_type) { + acc.add(item.model_type); + } return acc; }, new Set()); return [...result] @@ -504,15 +336,15 @@ export const ModelsList: FC = ({ })); }, [existingModels]); - const modelAndDeploymentIds = useMemo( - () => [ + const modelAndDeploymentIds = useMemo(() => { + const nlpModels = existingModels.filter(isNLPModelItem); + return [ ...new Set([ - ...existingModels.flatMap((v) => v.deployment_ids), - ...existingModels.map((i) => i.model_id), + ...nlpModels.flatMap((v) => v.deployment_ids), + ...nlpModels.map((i) => i.model_id), ]), - ], - [existingModels] - ); + ]; + }, [existingModels]); const onModelDownloadRequest = useCallback( async (modelId: string) => { @@ -550,22 +382,22 @@ export const ModelsList: FC = ({ onModelDownloadRequest, }); - const toggleDetails = async (item: ModelItem) => { + const toggleDetails = async (item: TrainedModelUIItem) => { const itemIdToExpandedRowMapValues = { ...itemIdToExpandedRowMap }; if (itemIdToExpandedRowMapValues[item.model_id]) { delete itemIdToExpandedRowMapValues[item.model_id]; } else { - itemIdToExpandedRowMapValues[item.model_id] = ; + itemIdToExpandedRowMapValues[item.model_id] = ; } setItemIdToExpandedRowMap(itemIdToExpandedRowMapValues); }; - const columns: Array> = [ + const columns: Array> = [ { isExpander: true, align: 'center', - render: (item: ModelItem) => { - if (!item.stats) { + render: (item: TrainedModelUIItem) => { + if (isModelDownloadItem(item) || !item.stats) { return null; } return ( @@ -588,38 +420,38 @@ export const ModelsList: FC = ({ }, { name: modelIdColumnName, - sortable: ({ model_id: modelId }: ModelItem) => modelId, + sortable: ({ model_id: modelId }: TrainedModelUIItem) => modelId, truncateText: false, textOnly: false, 'data-test-subj': 'mlModelsTableColumnId', - render: ({ - description, - model_id: modelId, - recommended, - supported, - type, - disclaimer, - }: ModelItem) => { + render: (item: TrainedModelUIItem) => { + const { description, model_id: modelId, type } = item; + const isTechPreview = description?.includes('(Tech Preview)'); let descriptionText = description?.replace('(Tech Preview)', ''); - if (disclaimer) { - descriptionText += '. ' + disclaimer; - } + let tooltipContent = null; - const tooltipContent = - supported === false ? ( - - ) : recommended === false ? ( - - ) : null; + if (isBaseNLPModelItem(item)) { + const { disclaimer, recommended, supported } = item; + if (disclaimer) { + descriptionText += '. ' + disclaimer; + } + + tooltipContent = + supported === false ? ( + + ) : recommended === false ? ( + + ) : null; + } return ( @@ -675,7 +507,10 @@ export const ModelsList: FC = ({ }), truncateText: false, width: '150px', - render: ({ state, downloadState }: ModelItem) => { + render: (item: TrainedModelUIItem) => { + if (!isBaseNLPModelItem(item)) return null; + + const { state, downloadState } = item; const config = getModelStateColor(state); if (!config) return null; @@ -776,7 +611,7 @@ export const ModelsList: FC = ({ const isSelectionAllowed = canDeleteTrainedModels; - const selection: EuiTableSelectionType | undefined = isSelectionAllowed + const selection: EuiTableSelectionType | undefined = isSelectionAllowed ? { selectableMessage: (selectable, item) => { if (selectable) { @@ -784,31 +619,28 @@ export const ModelsList: FC = ({ defaultMessage: 'Select a model', }); } - if (isPopulatedObject(item.pipelines)) { + // TODO support multiple model downloads with selection + if (!isModelDownloadItem(item) && isPopulatedObject(item.pipelines)) { return i18n.translate('xpack.ml.trainedModels.modelsList.disableSelectableMessage', { defaultMessage: 'Model has associated pipelines', }); } - if (isBuiltInModel(item)) { return i18n.translate('xpack.ml.trainedModels.modelsList.builtInModelMessage', { defaultMessage: 'Built-in model', }); } - return ''; }, selectable: (item) => - !isPopulatedObject(item.pipelines) && - !isBuiltInModel(item) && - !(isElasticModel(item) && !item.state), + !isModelDownloadItem(item) && !isPopulatedObject(item.pipelines) && !isBuiltInModel(item), onSelectionChange: (selectedItems) => { setSelectedModels(selectedItems); }, } : undefined; - const { onTableChange, pagination, sorting } = useTableSettings( + const { onTableChange, pagination, sorting } = useTableSettings( items.length, pageState, updatePageState, @@ -847,7 +679,7 @@ export const ModelsList: FC = ({ return items; } else { // by default show only deployed models or recommended for download - return items.filter((item) => item.create_time || item.recommended); + return items.filter((item) => !isModelDownloadItem(item) || item.recommended); } }, [items, pageState.showAll]); @@ -896,7 +728,7 @@ export const ModelsList: FC = ({
    - + tableLayout={'auto'} responsiveBreakpoint={'xl'} allowNeutralSort={false} @@ -952,7 +784,7 @@ export const ModelsList: FC = ({ { modelsToDelete.forEach((model) => { - if (model.state === MODEL_STATE.DOWNLOADING) { + if (isBaseNLPModelItem(model) && model.state === MODEL_STATE.DOWNLOADING) { abortedDownload.current.add(model.model_id); } }); @@ -996,7 +828,7 @@ export const ModelsList: FC = ({ ) : null} {isAddModelFlyoutVisible ? ( i.state === MODEL_STATE.NOT_DOWNLOADED)} + modelDownloads={items.filter(isModelDownloadItem)} onClose={setIsAddModelFlyoutVisible.bind(null, false)} onSubmit={(modelId) => { onModelDownloadRequest(modelId); diff --git a/x-pack/plugins/ml/public/application/model_management/pipelines/pipelines.tsx b/x-pack/plugins/ml/public/application/model_management/pipelines/pipelines.tsx index d144bf2aaf558..384a0736ed6f2 100644 --- a/x-pack/plugins/ml/public/application/model_management/pipelines/pipelines.tsx +++ b/x-pack/plugins/ml/public/application/model_management/pipelines/pipelines.tsx @@ -17,14 +17,14 @@ import { EuiAccordion, } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; +import type { TrainedModelItem } from '../../../../common/types/trained_models'; import { useMlKibana } from '../../contexts/kibana'; -import type { ModelItem } from '../models_list'; import { ProcessorsStats } from './expanded_row'; -export type IngestStatsResponse = Exclude['ingest']; +export type IngestStatsResponse = Exclude['ingest']; interface ModelPipelinesProps { - pipelines: ModelItem['pipelines']; + pipelines: TrainedModelItem['pipelines']; ingestStats: IngestStatsResponse; } diff --git a/x-pack/plugins/ml/public/application/model_management/test_dfa_models_flyout.tsx b/x-pack/plugins/ml/public/application/model_management/test_dfa_models_flyout.tsx index 86ddd16e620ad..4593413154bd5 100644 --- a/x-pack/plugins/ml/public/application/model_management/test_dfa_models_flyout.tsx +++ b/x-pack/plugins/ml/public/application/model_management/test_dfa_models_flyout.tsx @@ -9,14 +9,13 @@ import type { FC } from 'react'; import React, { useMemo } from 'react'; import { EuiFlyout, EuiFlyoutBody, EuiFlyoutHeader, EuiSpacer, EuiTitle } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; - +import type { DFAModelItem } from '../../../common/types/trained_models'; import { TestPipeline } from '../components/ml_inference/components/test_pipeline'; import { getInitialState } from '../components/ml_inference/state'; -import type { ModelItem } from './models_list'; import { TEST_PIPELINE_MODE } from '../components/ml_inference/types'; interface Props { - model: ModelItem; + model: DFAModelItem; onClose: () => void; } diff --git a/x-pack/plugins/ml/public/application/model_management/test_models/index.ts b/x-pack/plugins/ml/public/application/model_management/test_models/index.ts index 4b238f477092e..209704581f489 100644 --- a/x-pack/plugins/ml/public/application/model_management/test_models/index.ts +++ b/x-pack/plugins/ml/public/application/model_management/test_models/index.ts @@ -6,4 +6,4 @@ */ export { TestModelAndPipelineCreationFlyout } from './test_model_and_pipeline_creation_flyout'; -export { isTestable, isDfaTrainedModel } from './utils'; +export { isTestable } from './utils'; diff --git a/x-pack/plugins/ml/public/application/model_management/test_models/test_flyout.tsx b/x-pack/plugins/ml/public/application/model_management/test_models/test_flyout.tsx index b8bc2d706b8c0..3b8d3cc7bdea9 100644 --- a/x-pack/plugins/ml/public/application/model_management/test_models/test_flyout.tsx +++ b/x-pack/plugins/ml/public/application/model_management/test_models/test_flyout.tsx @@ -7,15 +7,13 @@ import type { FC } from 'react'; import React from 'react'; - import { FormattedMessage } from '@kbn/i18n-react'; import { EuiFlyout, EuiFlyoutBody, EuiFlyoutHeader, EuiSpacer, EuiTitle } from '@elastic/eui'; - -import { type ModelItem } from '../models_list'; +import type { TrainedModelItem } from '../../../../common/types/trained_models'; import { TestTrainedModelContent } from './test_trained_model_content'; interface Props { - model: ModelItem; + model: TrainedModelItem; onClose: () => void; } export const TestTrainedModelFlyout: FC = ({ model, onClose }) => ( diff --git a/x-pack/plugins/ml/public/application/model_management/test_models/test_model_and_pipeline_creation_flyout.tsx b/x-pack/plugins/ml/public/application/model_management/test_models/test_model_and_pipeline_creation_flyout.tsx index 240c2545f3d8e..f78f12cf88211 100644 --- a/x-pack/plugins/ml/public/application/model_management/test_models/test_model_and_pipeline_creation_flyout.tsx +++ b/x-pack/plugins/ml/public/application/model_management/test_models/test_model_and_pipeline_creation_flyout.tsx @@ -7,17 +7,16 @@ import type { FC } from 'react'; import React, { useState } from 'react'; - +import type { TrainedModelItem } from '../../../../common/types/trained_models'; import { type TestTrainedModelsContextType, TestTrainedModelsContext, } from './test_trained_models_context'; -import type { ModelItem } from '../models_list'; import { TestTrainedModelFlyout } from './test_flyout'; import { CreatePipelineForModelFlyout } from '../create_pipeline_for_model/create_pipeline_for_model_flyout'; interface Props { - model: ModelItem; + model: TrainedModelItem; onClose: (refreshList?: boolean) => void; } export const TestModelAndPipelineCreationFlyout: FC = ({ model, onClose }) => { diff --git a/x-pack/plugins/ml/public/application/model_management/test_models/test_trained_model_content.tsx b/x-pack/plugins/ml/public/application/model_management/test_models/test_trained_model_content.tsx index da4c496700687..3c829c8f7cd49 100644 --- a/x-pack/plugins/ml/public/application/model_management/test_models/test_trained_model_content.tsx +++ b/x-pack/plugins/ml/public/application/model_management/test_models/test_trained_model_content.tsx @@ -12,14 +12,15 @@ import { SUPPORTED_PYTORCH_TASKS } from '@kbn/ml-trained-models-utils'; import { FormattedMessage } from '@kbn/i18n-react'; import { EuiFormRow, EuiSelect, EuiSpacer, EuiTab, EuiTabs, useEuiPaddingSize } from '@elastic/eui'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import type { TrainedModelItem } from '../../../../common/types/trained_models'; +import { isNLPModelItem } from '../../../../common/types/trained_models'; import { SelectedModel } from './selected_model'; -import { type ModelItem } from '../models_list'; import { INPUT_TYPE } from './models/inference_base'; import { useTestTrainedModelsContext } from './test_trained_models_context'; import { type InferecePipelineCreationState } from '../create_pipeline_for_model/state'; interface ContentProps { - model: ModelItem; + model: TrainedModelItem; handlePipelineConfigUpdate?: (configUpdate: Partial) => void; externalPipelineConfig?: estypes.IngestPipeline; } @@ -29,7 +30,9 @@ export const TestTrainedModelContent: FC = ({ handlePipelineConfigUpdate, externalPipelineConfig, }) => { - const [deploymentId, setDeploymentId] = useState(model.deployment_ids[0]); + const [deploymentId, setDeploymentId] = useState( + isNLPModelItem(model) ? model.deployment_ids[0] : model.model_id + ); const mediumPadding = useEuiPaddingSize('m'); const [inputType, setInputType] = useState(INPUT_TYPE.TEXT); @@ -46,8 +49,7 @@ export const TestTrainedModelContent: FC = ({ }, [model, createPipelineFlyoutOpen]); return ( <> - {' '} - {model.deployment_ids.length > 1 ? ( + {isNLPModelItem(model) && model.deployment_ids.length > 1 ? ( <> ({ + path: `${ML_INTERNAL_BASE_PATH}/trained_models_list`, + method: 'GET', + version: '1', + }); + }, + /** * Fetches usage information for trained inference models. * @param modelId - Model ID, collection of Model IDs or Model ID pattern. diff --git a/x-pack/plugins/ml/server/models/data_frame_analytics/analytics_manager.ts b/x-pack/plugins/ml/server/models/data_frame_analytics/analytics_manager.ts index 4e112a2ff313b..04a14c7f235ff 100644 --- a/x-pack/plugins/ml/server/models/data_frame_analytics/analytics_manager.ts +++ b/x-pack/plugins/ml/server/models/data_frame_analytics/analytics_manager.ts @@ -20,6 +20,7 @@ import { } from '@kbn/ml-data-frame-analytics-utils'; import { isPopulatedObject } from '@kbn/ml-is-populated-object'; import type { CloudSetup } from '@kbn/cloud-plugin/server'; +import { DEFAULT_TRAINED_MODELS_PAGE_SIZE } from '../../../common/constants/trained_models'; import type { MlFeatures } from '../../../common/constants/app'; import type { ModelService } from '../model_management/models_provider'; import { modelsProvider } from '../model_management'; @@ -38,7 +39,6 @@ import { isTransformLinkReturnType, } from './types'; import type { MlClient } from '../../lib/ml_client'; -import { DEFAULT_TRAINED_MODELS_PAGE_SIZE } from '../../routes/trained_models'; export class AnalyticsManager { private _trainedModels: estypes.MlTrainedModelConfig[] = []; @@ -51,7 +51,12 @@ export class AnalyticsManager { private readonly _enabledFeatures: MlFeatures, cloud: CloudSetup ) { - this._modelsProvider = modelsProvider(this._client, this._mlClient, cloud); + this._modelsProvider = modelsProvider( + this._client, + this._mlClient, + cloud, + this._enabledFeatures + ); } private async initData() { diff --git a/x-pack/plugins/ml/public/application/model_management/get_model_state.test.tsx b/x-pack/plugins/ml/server/models/model_management/get_model_state.test.tsx similarity index 94% rename from x-pack/plugins/ml/public/application/model_management/get_model_state.test.tsx rename to x-pack/plugins/ml/server/models/model_management/get_model_state.test.tsx index 1431b2da0439c..16c30395d1b15 100644 --- a/x-pack/plugins/ml/public/application/model_management/get_model_state.test.tsx +++ b/x-pack/plugins/ml/server/models/model_management/get_model_state.test.tsx @@ -5,9 +5,9 @@ * 2.0. */ -import { getModelDeploymentState } from './get_model_state'; import { MODEL_STATE } from '@kbn/ml-trained-models-utils'; -import type { ModelItem } from './models_list'; +import type { NLPModelItem } from '../../../common/types/trained_models'; +import { getModelDeploymentState } from './get_model_state'; describe('getModelDeploymentState', () => { it('returns STARTED if any deployment is in STARTED state', () => { @@ -37,7 +37,7 @@ describe('getModelDeploymentState', () => { }, ], }, - } as unknown as ModelItem; + } as unknown as NLPModelItem; const result = getModelDeploymentState(model); expect(result).toEqual(MODEL_STATE.STARTED); }); @@ -69,7 +69,7 @@ describe('getModelDeploymentState', () => { }, ], }, - } as unknown as ModelItem; + } as unknown as NLPModelItem; const result = getModelDeploymentState(model); expect(result).toEqual(MODEL_STATE.STARTING); }); @@ -96,7 +96,7 @@ describe('getModelDeploymentState', () => { }, ], }, - } as unknown as ModelItem; + } as unknown as NLPModelItem; const result = getModelDeploymentState(model); expect(result).toEqual(MODEL_STATE.STOPPING); }); @@ -112,7 +112,7 @@ describe('getModelDeploymentState', () => { deployment_stats: [], }, - } as unknown as ModelItem; + } as unknown as NLPModelItem; const result = getModelDeploymentState(model); expect(result).toEqual(undefined); }); diff --git a/x-pack/plugins/ml/server/models/model_management/get_model_state.ts b/x-pack/plugins/ml/server/models/model_management/get_model_state.ts new file mode 100644 index 0000000000000..2ee2bf8cb4532 --- /dev/null +++ b/x-pack/plugins/ml/server/models/model_management/get_model_state.ts @@ -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 { DEPLOYMENT_STATE, MODEL_STATE, type ModelState } from '@kbn/ml-trained-models-utils'; +import type { NLPModelItem } from '../../../common/types/trained_models'; + +/** + * Resolves result model state based on the state of each deployment. + * + * If at least one deployment is in the STARTED state, the model state is STARTED. + * Then if none of the deployments are in the STARTED state, but at least one is in the STARTING state, the model state is STARTING. + * If all deployments are in the STOPPING state, the model state is STOPPING. + */ +export const getModelDeploymentState = (model: NLPModelItem): ModelState | undefined => { + if (!model.stats?.deployment_stats?.length) return; + + if (model.stats?.deployment_stats?.some((v) => v.state === DEPLOYMENT_STATE.STARTED)) { + return MODEL_STATE.STARTED; + } + if (model.stats?.deployment_stats?.some((v) => v.state === DEPLOYMENT_STATE.STARTING)) { + return MODEL_STATE.STARTING; + } + if (model.stats?.deployment_stats?.every((v) => v.state === DEPLOYMENT_STATE.STOPPING)) { + return MODEL_STATE.STOPPING; + } +}; diff --git a/x-pack/plugins/ml/server/models/model_management/model_provider.test.ts b/x-pack/plugins/ml/server/models/model_management/model_provider.test.ts index 0b9b93720234d..0a73dfa3053db 100644 --- a/x-pack/plugins/ml/server/models/model_management/model_provider.test.ts +++ b/x-pack/plugins/ml/server/models/model_management/model_provider.test.ts @@ -6,45 +6,54 @@ */ import { modelsProvider } from './models_provider'; -import { type IScopedClusterClient } from '@kbn/core/server'; import { cloudMock } from '@kbn/cloud-plugin/server/mocks'; import type { MlClient } from '../../lib/ml_client'; import downloadTasksResponse from './__mocks__/mock_download_tasks.json'; +import type { MlFeatures } from '../../../common/constants/app'; +import { mlLog } from '../../lib/log'; +import { errors } from '@elastic/elasticsearch'; +import { elasticsearchClientMock } from '@kbn/core-elasticsearch-client-server-mocks'; +import type { ExistingModelBase } from '../../../common/types/trained_models'; +import type { InferenceInferenceEndpointInfo } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; + +jest.mock('../../lib/log'); describe('modelsProvider', () => { - const mockClient = { - asInternalUser: { - transport: { - request: jest.fn().mockResolvedValue({ - _nodes: { - total: 1, - successful: 1, - failed: 0, - }, - cluster_name: 'default', - nodes: { - yYmqBqjpQG2rXsmMSPb9pQ: { - name: 'node-0', - roles: ['ml'], - attributes: {}, - os: { - name: 'Linux', - arch: 'amd64', - }, - }, - }, - }), - }, - tasks: { - list: jest.fn().mockResolvedValue({ tasks: [] }), + const mockClient = elasticsearchClientMock.createScopedClusterClient(); + + mockClient.asInternalUser.transport.request.mockResolvedValue({ + _nodes: { + total: 1, + successful: 1, + failed: 0, + }, + cluster_name: 'default', + nodes: { + yYmqBqjpQG2rXsmMSPb9pQ: { + name: 'node-0', + roles: ['ml'], + attributes: {}, + os: { + name: 'Linux', + arch: 'amd64', + }, }, }, - } as unknown as jest.Mocked; + }); + + mockClient.asInternalUser.tasks.list.mockResolvedValue({ tasks: [] }); const mockMlClient = {} as unknown as jest.Mocked; const mockCloud = cloudMock.createSetup(); - const modelService = modelsProvider(mockClient, mockMlClient, mockCloud); + + const enabledMlFeatures: MlFeatures = { + ad: false, + dfa: true, + nlp: true, + }; + + const modelService = modelsProvider(mockClient, mockMlClient, mockCloud, enabledMlFeatures); afterEach(() => { jest.clearAllMocks(); @@ -122,7 +131,7 @@ describe('modelsProvider', () => { test('provides a list of models with default model as recommended', async () => { mockCloud.cloudId = undefined; - (mockClient.asInternalUser.transport.request as jest.Mock).mockResolvedValueOnce({ + mockClient.asInternalUser.transport.request.mockResolvedValueOnce({ _nodes: { total: 1, successful: 1, @@ -218,7 +227,7 @@ describe('modelsProvider', () => { test('provides a default version if there is no recommended', async () => { mockCloud.cloudId = undefined; - (mockClient.asInternalUser.transport.request as jest.Mock).mockResolvedValueOnce({ + mockClient.asInternalUser.transport.request.mockResolvedValueOnce({ _nodes: { total: 1, successful: 1, @@ -261,7 +270,7 @@ describe('modelsProvider', () => { test('provides a default version if there is no recommended', async () => { mockCloud.cloudId = undefined; - (mockClient.asInternalUser.transport.request as jest.Mock).mockResolvedValueOnce({ + mockClient.asInternalUser.transport.request.mockResolvedValueOnce({ _nodes: { total: 1, successful: 1, @@ -292,9 +301,7 @@ describe('modelsProvider', () => { expect(result).toEqual({}); }); test('provides download status for all models', async () => { - (mockClient.asInternalUser.tasks.list as jest.Mock).mockResolvedValueOnce( - downloadTasksResponse - ); + mockClient.asInternalUser.tasks.list.mockResolvedValueOnce(downloadTasksResponse); const result = await modelService.getModelsDownloadStatus(); expect(result).toEqual({ '.elser_model_2': { downloaded_parts: 0, total_parts: 418 }, @@ -302,4 +309,124 @@ describe('modelsProvider', () => { }); }); }); + + describe('#assignInferenceEndpoints', () => { + let trainedModels: ExistingModelBase[]; + + const inferenceServices = [ + { + service: 'elser', + model_id: 'elser_test', + service_settings: { model_id: '.elser_model_2' }, + }, + { service: 'open_api_01', service_settings: {} }, + ] as InferenceInferenceEndpointInfo[]; + + beforeEach(() => { + trainedModels = [ + { model_id: '.elser_model_2' }, + { model_id: 'model2' }, + ] as ExistingModelBase[]; + + mockClient.asInternalUser.inference.get.mockResolvedValue({ + endpoints: inferenceServices, + }); + + jest.clearAllMocks(); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + describe('when the user has required privileges', () => { + beforeEach(() => { + mockClient.asCurrentUser.inference.get.mockResolvedValue({ + endpoints: inferenceServices, + }); + }); + + test('should populate inference services for trained models', async () => { + // act + await modelService.assignInferenceEndpoints(trainedModels, false); + + // assert + expect(mockClient.asCurrentUser.inference.get).toHaveBeenCalledWith({ + inference_id: '_all', + }); + + expect(mockClient.asInternalUser.inference.get).not.toHaveBeenCalled(); + + expect(trainedModels[0].inference_apis).toEqual([ + { + model_id: 'elser_test', + service: 'elser', + service_settings: { model_id: '.elser_model_2' }, + }, + ]); + expect(trainedModels[0].hasInferenceServices).toBe(true); + + expect(trainedModels[1].inference_apis).toEqual(undefined); + expect(trainedModels[1].hasInferenceServices).toBe(false); + + expect(mlLog.error).not.toHaveBeenCalled(); + }); + }); + + describe('when the user does not have required privileges', () => { + beforeEach(() => { + mockClient.asCurrentUser.inference.get.mockRejectedValue( + new errors.ResponseError( + elasticsearchClientMock.createApiResponse({ + statusCode: 403, + body: { message: 'not allowed' }, + }) + ) + ); + }); + + test('should retry with internal user if an error occurs', async () => { + await modelService.assignInferenceEndpoints(trainedModels, false); + + // assert + expect(mockClient.asCurrentUser.inference.get).toHaveBeenCalledWith({ + inference_id: '_all', + }); + + expect(mockClient.asInternalUser.inference.get).toHaveBeenCalledWith({ + inference_id: '_all', + }); + + expect(trainedModels[0].inference_apis).toEqual(undefined); + expect(trainedModels[0].hasInferenceServices).toBe(true); + + expect(trainedModels[1].inference_apis).toEqual(undefined); + expect(trainedModels[1].hasInferenceServices).toBe(false); + + expect(mlLog.error).not.toHaveBeenCalled(); + }); + }); + + test('should not retry on any other error than 403', async () => { + const notFoundError = new errors.ResponseError( + elasticsearchClientMock.createApiResponse({ + statusCode: 404, + body: { message: 'not found' }, + }) + ); + + mockClient.asCurrentUser.inference.get.mockRejectedValue(notFoundError); + + await modelService.assignInferenceEndpoints(trainedModels, false); + + // assert + expect(mockClient.asCurrentUser.inference.get).toHaveBeenCalledWith({ + inference_id: '_all', + }); + + expect(mockClient.asInternalUser.inference.get).not.toHaveBeenCalled(); + + expect(mlLog.error).toHaveBeenCalledWith(notFoundError); + }); + }); }); diff --git a/x-pack/plugins/ml/server/models/model_management/models_provider.ts b/x-pack/plugins/ml/server/models/model_management/models_provider.ts index 1c175cee26d14..0f302363f66ea 100644 --- a/x-pack/plugins/ml/server/models/model_management/models_provider.ts +++ b/x-pack/plugins/ml/server/models/model_management/models_provider.ts @@ -8,10 +8,11 @@ import Boom from '@hapi/boom'; import type { IScopedClusterClient } from '@kbn/core/server'; import { JOB_MAP_NODE_TYPES, type MapElements } from '@kbn/ml-data-frame-analytics-utils'; -import { flatten } from 'lodash'; +import { flatten, groupBy, isEmpty } from 'lodash'; import type { InferenceInferenceEndpoint, InferenceTaskType, + MlGetTrainedModelsRequest, TasksTaskInfo, TransformGetTransformTransformSummary, } from '@elastic/elasticsearch/lib/api/types'; @@ -24,22 +25,50 @@ import type { } from '@elastic/elasticsearch/lib/api/types'; import { ELASTIC_MODEL_DEFINITIONS, + ELASTIC_MODEL_TAG, + MODEL_STATE, type GetModelDownloadConfigOptions, type ModelDefinitionResponse, + ELASTIC_MODEL_TYPE, + BUILT_IN_MODEL_TYPE, } from '@kbn/ml-trained-models-utils'; import type { CloudSetup } from '@kbn/cloud-plugin/server'; import type { ElasticCuratedModelName } from '@kbn/ml-trained-models-utils'; -import type { ModelDownloadState, PipelineDefinition } from '../../../common/types/trained_models'; +import { isDefined } from '@kbn/ml-is-defined'; +import { DEFAULT_TRAINED_MODELS_PAGE_SIZE } from '../../../common/constants/trained_models'; +import type { MlFeatures } from '../../../common/constants/app'; +import type { + DFAModelItem, + ExistingModelBase, + ModelDownloadItem, + NLPModelItem, + TrainedModelItem, + TrainedModelUIItem, + TrainedModelWithPipelines, +} from '../../../common/types/trained_models'; +import { isBuiltInModel, isExistingModel } from '../../../common/types/trained_models'; +import { + isDFAModelItem, + isElasticModel, + isNLPModelItem, + type ModelDownloadState, + type PipelineDefinition, + type TrainedModelConfigResponse, +} from '../../../common/types/trained_models'; import type { MlClient } from '../../lib/ml_client'; import type { MLSavedObjectService } from '../../saved_objects'; +import { filterForEnabledFeatureModels } from '../../routes/trained_models'; +import { mlLog } from '../../lib/log'; +import { getModelDeploymentState } from './get_model_state'; export type ModelService = ReturnType; export const modelsProvider = ( client: IScopedClusterClient, mlClient: MlClient, - cloud: CloudSetup -) => new ModelsProvider(client, mlClient, cloud); + cloud: CloudSetup, + enabledFeatures: MlFeatures +) => new ModelsProvider(client, mlClient, cloud, enabledFeatures); interface ModelMapResult { ingestPipelines: Map | null>; @@ -66,7 +95,8 @@ export class ModelsProvider { constructor( private _client: IScopedClusterClient, private _mlClient: MlClient, - private _cloud: CloudSetup + private _cloud: CloudSetup, + private _enabledFeatures: MlFeatures ) {} private async initTransformData() { @@ -110,6 +140,291 @@ export class ModelsProvider { return `${elementOriginalId}-${nodeType}`; } + /** + * Assigns inference endpoints to trained models + * @param trainedModels + * @param asInternal + */ + async assignInferenceEndpoints(trainedModels: ExistingModelBase[], asInternal: boolean = false) { + const esClient = asInternal ? this._client.asInternalUser : this._client.asCurrentUser; + + try { + // Check if model is used by an inference service + const { endpoints } = await esClient.inference.get({ + inference_id: '_all', + }); + + const inferenceAPIMap = groupBy( + endpoints, + (endpoint) => endpoint.service === 'elser' && endpoint.service_settings.model_id + ); + + for (const model of trainedModels) { + const inferenceApis = inferenceAPIMap[model.model_id]; + model.hasInferenceServices = !!inferenceApis; + if (model.hasInferenceServices && !asInternal) { + model.inference_apis = inferenceApis; + } + } + } catch (e) { + if (!asInternal && e.statusCode === 403) { + // retry with internal user to get an indicator if models has associated inference services, without mentioning the names + await this.assignInferenceEndpoints(trainedModels, true); + } else { + mlLog.error(e); + } + } + } + + /** + * Assigns trained model stats to trained models + * @param trainedModels + */ + async assignModelStats(trainedModels: ExistingModelBase[]): Promise { + const { trained_model_stats: modelsStatsResponse } = await this._mlClient.getTrainedModelsStats( + { + size: DEFAULT_TRAINED_MODELS_PAGE_SIZE, + } + ); + + const groupByModelId = groupBy(modelsStatsResponse, 'model_id'); + + return trainedModels.map((model) => { + const modelStats = groupByModelId[model.model_id]; + + const completeModelItem: TrainedModelItem = { + ...model, + // @ts-ignore FIXME: fix modelStats type + stats: { + ...modelStats[0], + ...(isNLPModelItem(model) + ? { deployment_stats: modelStats.map((d) => d.deployment_stats).filter(isDefined) } + : {}), + }, + }; + + if (isNLPModelItem(completeModelItem)) { + // Extract deployment ids from deployment stats + completeModelItem.deployment_ids = modelStats + .map((v) => v.deployment_stats?.deployment_id) + .filter(isDefined); + + completeModelItem.state = getModelDeploymentState(completeModelItem); + + completeModelItem.stateDescription = completeModelItem.stats.deployment_stats.reduce( + (acc, c) => { + if (acc) return acc; + return c.reason ?? ''; + }, + '' + ); + } + + return completeModelItem; + }); + } + + /** + * Merges the list of models with the list of models available for download. + */ + async includeModelDownloads(resultItems: TrainedModelUIItem[]): Promise { + const idMap = new Map( + resultItems.map((model) => [model.model_id, model]) + ); + /** + * Fetches model definitions available for download + */ + const forDownload = await this.getModelDownloads(); + + const notDownloaded: TrainedModelUIItem[] = forDownload + .filter(({ model_id: modelId, hidden, recommended, supported, disclaimer }) => { + if (idMap.has(modelId)) { + const model = idMap.get(modelId)! as NLPModelItem; + if (recommended) { + model.recommended = true; + } + model.supported = supported; + model.disclaimer = disclaimer; + } + return !idMap.has(modelId) && !hidden; + }) + .map((modelDefinition) => { + return { + model_id: modelDefinition.model_id, + type: modelDefinition.type, + tags: modelDefinition.type?.includes(ELASTIC_MODEL_TAG) ? [ELASTIC_MODEL_TAG] : [], + putModelConfig: modelDefinition.config, + description: modelDefinition.description, + state: MODEL_STATE.NOT_DOWNLOADED, + recommended: !!modelDefinition.recommended, + modelName: modelDefinition.modelName, + os: modelDefinition.os, + arch: modelDefinition.arch, + softwareLicense: modelDefinition.license, + licenseUrl: modelDefinition.licenseUrl, + supported: modelDefinition.supported, + disclaimer: modelDefinition.disclaimer, + } as ModelDownloadItem; + }); + + // show model downloads first + return [...notDownloaded, ...resultItems]; + } + + /** + * Assigns pipelines to trained models + */ + async assignPipelines(trainedModels: TrainedModelItem[]): Promise { + // For each model create a dict with model aliases and deployment ids for faster lookup + const modelToAliasesAndDeployments: Record> = Object.fromEntries( + trainedModels.map((model) => [ + model.model_id, + new Set([ + model.model_id, + ...(model.metadata?.model_aliases ?? []), + ...(isNLPModelItem(model) ? model.deployment_ids : []), + ]), + ]) + ); + + // Set of unique model ids, aliases, and deployment ids. + const modelIdsAndAliases: string[] = Object.values(modelToAliasesAndDeployments).flatMap((s) => + Array.from(s) + ); + + try { + // Get all pipelines first in one call: + const modelPipelinesMap = await this.getModelsPipelines(modelIdsAndAliases); + + trainedModels.forEach((model) => { + const modelAliasesAndDeployments = modelToAliasesAndDeployments[model.model_id]; + // Check model pipelines map for any pipelines associated with the model + for (const [modelEntityId, pipelines] of modelPipelinesMap) { + if (modelAliasesAndDeployments.has(modelEntityId)) { + // Merge pipeline definitions into the model + model.pipelines = model.pipelines + ? Object.assign(model.pipelines, pipelines) + : pipelines; + } + } + }); + } catch (e) { + // the user might not have required permissions to fetch pipelines + // log the error to the debug log as this might be a common situation and + // we don't need to fill kibana's log with these messages. + mlLog.debug(e); + } + } + + /** + * Assigns indices to trained models + */ + async assignModelIndices(trainedModels: TrainedModelItem[]): Promise { + // Get a list of all uniquer pipeline ids to retrieve mapping with indices + const pipelineIds = new Set( + trainedModels + .filter((model): model is TrainedModelWithPipelines => isDefined(model.pipelines)) + .flatMap((model) => Object.keys(model.pipelines)) + ); + + const pipelineToIndicesMap = await this.getPipelineToIndicesMap(pipelineIds); + + trainedModels.forEach((model) => { + if (!isEmpty(model.pipelines)) { + model.indices = Object.entries(pipelineToIndicesMap) + .filter(([pipelineId]) => !isEmpty(model.pipelines?.[pipelineId])) + .flatMap(([_, indices]) => indices); + } + }); + } + + /** + * Assign a check for each DFA model if origin job exists + */ + async assignDFAJobCheck(trainedModels: DFAModelItem[]): Promise { + try { + const dfaJobIds = trainedModels + .map((model) => { + const id = model.metadata?.analytics_config?.id; + if (id) { + return `${id}*`; + } + }) + .filter(isDefined); + + if (dfaJobIds.length > 0) { + const { data_frame_analytics: jobs } = await this._mlClient.getDataFrameAnalytics({ + id: dfaJobIds.join(','), + allow_no_match: true, + }); + + trainedModels.forEach((model) => { + const dfaId = model?.metadata?.analytics_config?.id; + if (dfaId !== undefined) { + // if this is a dfa model, set origin_job_exists + model.origin_job_exists = jobs.find((job) => job.id === dfaId) !== undefined; + } + }); + } + } catch (e) { + return; + } + } + + /** + * Returns a complete list of entities for the Trained Models UI + */ + async getTrainedModelList(): Promise { + const resp = await this._mlClient.getTrainedModels({ + size: 1000, + } as MlGetTrainedModelsRequest); + + let resultItems: TrainedModelUIItem[] = []; + + // Filter models based on enabled features + const filteredModels = filterForEnabledFeatureModels( + resp.trained_model_configs, + this._enabledFeatures + ) as TrainedModelConfigResponse[]; + + const formattedModels = filteredModels.map((model) => { + return { + ...model, + // Extract model types + type: [ + model.model_type, + ...(isBuiltInModel(model) ? [BUILT_IN_MODEL_TYPE] : []), + ...(isElasticModel(model) ? [ELASTIC_MODEL_TYPE] : []), + ...(typeof model.inference_config === 'object' + ? Object.keys(model.inference_config) + : []), + ].filter(isDefined), + }; + }); + + // Update inference endpoints info + await this.assignInferenceEndpoints(formattedModels); + + // Assign model stats + resultItems = await this.assignModelStats(formattedModels); + + if (this._enabledFeatures.nlp) { + resultItems = await this.includeModelDownloads(resultItems); + } + + const existingModels = resultItems.filter(isExistingModel); + + // Assign pipelines to existing models + await this.assignPipelines(existingModels); + + // Assign indices + await this.assignModelIndices(existingModels); + + await this.assignDFAJobCheck(resultItems.filter(isDFAModelItem)); + + return resultItems; + } + /** * Simulates the effect of the pipeline on given document. * @@ -170,12 +485,13 @@ export class ModelsProvider { } /** - * Retrieves the map of model ids and aliases with associated pipelines. + * Retrieves the map of model ids and aliases with associated pipelines, + * where key is a model, alias or deployment id, and value is a map of pipeline ids and pipeline definitions. * @param modelIds - Array of models ids and model aliases. */ async getModelsPipelines(modelIds: string[]) { - const modelIdsMap = new Map | null>( - modelIds.map((id: string) => [id, null]) + const modelIdsMap = new Map>( + modelIds.map((id: string) => [id, {}]) ); try { @@ -208,6 +524,53 @@ export class ModelsProvider { return modelIdsMap; } + /** + * Match pipelines to indices based on the default_pipeline setting in the index settings. + */ + async getPipelineToIndicesMap(pipelineIds: Set): Promise> { + const pipelineIdsToDestinationIndices: Record = {}; + + let indicesPermissions; + let indicesSettings; + + try { + indicesSettings = await this._client.asInternalUser.indices.getSettings(); + const hasPrivilegesResponse = await this._client.asCurrentUser.security.hasPrivileges({ + index: [ + { + names: Object.keys(indicesSettings), + privileges: ['read'], + }, + ], + }); + indicesPermissions = hasPrivilegesResponse.index; + } catch (e) { + // Possible that the user doesn't have permissions to view + if (e.meta?.statusCode !== 403) { + mlLog.error(e); + } + return pipelineIdsToDestinationIndices; + } + + // From list of model pipelines, find all indices that have pipeline set as index.default_pipeline + for (const [indexName, { settings }] of Object.entries(indicesSettings)) { + const defaultPipeline = settings?.index?.default_pipeline; + if ( + defaultPipeline && + pipelineIds.has(defaultPipeline) && + indicesPermissions[indexName]?.read === true + ) { + if (Array.isArray(pipelineIdsToDestinationIndices[defaultPipeline])) { + pipelineIdsToDestinationIndices[defaultPipeline].push(indexName); + } else { + pipelineIdsToDestinationIndices[defaultPipeline] = [indexName]; + } + } + } + + return pipelineIdsToDestinationIndices; + } + /** * Retrieves the network map and metadata of model ids, pipelines, and indices that are tied to the model ids. * @param modelIds - Array of models ids and model aliases. @@ -229,7 +592,6 @@ export class ModelsProvider { }; let pipelinesResponse; - let indicesSettings; try { pipelinesResponse = await this.getModelsPipelines([modelId]); @@ -264,44 +626,8 @@ export class ModelsProvider { } if (withIndices === true) { - const pipelineIdsToDestinationIndices: Record = {}; - - let indicesPermissions; - try { - indicesSettings = await this._client.asInternalUser.indices.getSettings(); - const hasPrivilegesResponse = await this._client.asCurrentUser.security.hasPrivileges({ - index: [ - { - names: Object.keys(indicesSettings), - privileges: ['read'], - }, - ], - }); - indicesPermissions = hasPrivilegesResponse.index; - } catch (e) { - // Possible that the user doesn't have permissions to view - // If so, gracefully exit - if (e.meta?.statusCode !== 403) { - // eslint-disable-next-line no-console - console.error(e); - } - return result; - } - - // 2. From list of model pipelines, find all indices that have pipeline set as index.default_pipeline - for (const [indexName, { settings }] of Object.entries(indicesSettings)) { - if ( - settings?.index?.default_pipeline && - pipelineIds.has(settings.index.default_pipeline) && - indicesPermissions[indexName]?.read === true - ) { - if (Array.isArray(pipelineIdsToDestinationIndices[settings.index.default_pipeline])) { - pipelineIdsToDestinationIndices[settings.index.default_pipeline].push(indexName); - } else { - pipelineIdsToDestinationIndices[settings.index.default_pipeline] = [indexName]; - } - } - } + const pipelineIdsToDestinationIndices: Record = + await this.getPipelineToIndicesMap(pipelineIds); // 3. Grab index information for all the indices found, and add their info to the map for (const [pipelineId, indexIds] of Object.entries(pipelineIdsToDestinationIndices)) { diff --git a/x-pack/plugins/ml/server/plugin.ts b/x-pack/plugins/ml/server/plugin.ts index ba6c5387a93cb..e40bed733f0da 100644 --- a/x-pack/plugins/ml/server/plugin.ts +++ b/x-pack/plugins/ml/server/plugin.ts @@ -226,7 +226,8 @@ export class MlServerPlugin getDataViews, () => this.auditService, () => this.isMlReady, - this.compatibleModuleType + this.compatibleModuleType, + this.enabledFeatures ); const routeInit: RouteInitialization = { diff --git a/x-pack/plugins/ml/server/routes/inference_models.ts b/x-pack/plugins/ml/server/routes/inference_models.ts index 866398ac56ce9..8318fadee8ebd 100644 --- a/x-pack/plugins/ml/server/routes/inference_models.ts +++ b/x-pack/plugins/ml/server/routes/inference_models.ts @@ -19,7 +19,7 @@ import { ML_INTERNAL_BASE_PATH } from '../../common/constants/app'; import { syncSavedObjectsFactory } from '../saved_objects'; export function inferenceModelRoutes( - { router, routeGuard }: RouteInitialization, + { router, routeGuard, getEnabledFeatures }: RouteInitialization, cloud: CloudSetup ) { router.versioned @@ -48,7 +48,12 @@ export function inferenceModelRoutes( async ({ client, mlClient, request, response, mlSavedObjectService }) => { try { const { inferenceId, taskType } = request.params; - const body = await modelsProvider(client, mlClient, cloud).createInferenceEndpoint( + const body = await modelsProvider( + client, + mlClient, + cloud, + getEnabledFeatures() + ).createInferenceEndpoint( inferenceId, taskType as InferenceTaskType, request.body as InferenceInferenceEndpoint diff --git a/x-pack/plugins/ml/server/routes/schemas/inference_schema.ts b/x-pack/plugins/ml/server/routes/schemas/inference_schema.ts index f8305cff189ed..1c2ec984fc286 100644 --- a/x-pack/plugins/ml/server/routes/schemas/inference_schema.ts +++ b/x-pack/plugins/ml/server/routes/schemas/inference_schema.ts @@ -65,8 +65,6 @@ export const optionalModelIdSchema = schema.object({ export const getInferenceQuerySchema = schema.object({ size: schema.maybe(schema.string()), - with_pipelines: schema.maybe(schema.string()), - with_indices: schema.maybe(schema.oneOf([schema.string(), schema.boolean()])), include: schema.maybe(schema.string()), }); diff --git a/x-pack/plugins/ml/server/routes/trained_models.test.ts b/x-pack/plugins/ml/server/routes/trained_models.test.ts deleted file mode 100644 index ca3eb19e757c6..0000000000000 --- a/x-pack/plugins/ml/server/routes/trained_models.test.ts +++ /dev/null @@ -1,139 +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 { errors } from '@elastic/elasticsearch'; -import { elasticsearchClientMock } from '@kbn/core-elasticsearch-client-server-mocks'; -import type { TrainedModelConfigResponse } from '../../common/types/trained_models'; -import { populateInferenceServicesProvider } from './trained_models'; -import { mlLog } from '../lib/log'; - -jest.mock('../lib/log'); - -describe('populateInferenceServicesProvider', () => { - const client = elasticsearchClientMock.createScopedClusterClient(); - - let trainedModels: TrainedModelConfigResponse[]; - - const inferenceServices = [ - { - service: 'elser', - model_id: 'elser_test', - service_settings: { model_id: '.elser_model_2' }, - }, - { service: 'open_api_01', model_id: 'open_api_model', service_settings: {} }, - ]; - - beforeEach(() => { - trainedModels = [ - { model_id: '.elser_model_2' }, - { model_id: 'model2' }, - ] as TrainedModelConfigResponse[]; - - client.asInternalUser.transport.request.mockResolvedValue({ endpoints: inferenceServices }); - - jest.clearAllMocks(); - }); - - afterEach(() => { - jest.clearAllMocks(); - }); - - describe('when the user has required privileges', () => { - beforeEach(() => { - client.asCurrentUser.transport.request.mockResolvedValue({ endpoints: inferenceServices }); - }); - - test('should populate inference services for trained models', async () => { - const populateInferenceServices = populateInferenceServicesProvider(client); - // act - await populateInferenceServices(trainedModels, false); - - // assert - expect(client.asCurrentUser.transport.request).toHaveBeenCalledWith({ - method: 'GET', - path: '/_inference/_all', - }); - - expect(client.asInternalUser.transport.request).not.toHaveBeenCalled(); - - expect(trainedModels[0].inference_apis).toEqual([ - { - model_id: 'elser_test', - service: 'elser', - service_settings: { model_id: '.elser_model_2' }, - }, - ]); - expect(trainedModels[0].hasInferenceServices).toBe(true); - - expect(trainedModels[1].inference_apis).toEqual(undefined); - expect(trainedModels[1].hasInferenceServices).toBe(false); - - expect(mlLog.error).not.toHaveBeenCalled(); - }); - }); - - describe('when the user does not have required privileges', () => { - beforeEach(() => { - client.asCurrentUser.transport.request.mockRejectedValue( - new errors.ResponseError( - elasticsearchClientMock.createApiResponse({ - statusCode: 403, - body: { message: 'not allowed' }, - }) - ) - ); - }); - - test('should retry with internal user if an error occurs', async () => { - const populateInferenceServices = populateInferenceServicesProvider(client); - await populateInferenceServices(trainedModels, false); - - // assert - expect(client.asCurrentUser.transport.request).toHaveBeenCalledWith({ - method: 'GET', - path: '/_inference/_all', - }); - - expect(client.asInternalUser.transport.request).toHaveBeenCalledWith({ - method: 'GET', - path: '/_inference/_all', - }); - - expect(trainedModels[0].inference_apis).toEqual(undefined); - expect(trainedModels[0].hasInferenceServices).toBe(true); - - expect(trainedModels[1].inference_apis).toEqual(undefined); - expect(trainedModels[1].hasInferenceServices).toBe(false); - - expect(mlLog.error).not.toHaveBeenCalled(); - }); - }); - - test('should not retry on any other error than 403', async () => { - const notFoundError = new errors.ResponseError( - elasticsearchClientMock.createApiResponse({ - statusCode: 404, - body: { message: 'not found' }, - }) - ); - - client.asCurrentUser.transport.request.mockRejectedValue(notFoundError); - - const populateInferenceServices = populateInferenceServicesProvider(client); - await populateInferenceServices(trainedModels, false); - - // assert - expect(client.asCurrentUser.transport.request).toHaveBeenCalledWith({ - method: 'GET', - path: '/_inference/_all', - }); - - expect(client.asInternalUser.transport.request).not.toHaveBeenCalled(); - - expect(mlLog.error).toHaveBeenCalledWith(notFoundError); - }); -}); diff --git a/x-pack/plugins/ml/server/routes/trained_models.ts b/x-pack/plugins/ml/server/routes/trained_models.ts index c0010777ecf18..adedb37b4a7a5 100644 --- a/x-pack/plugins/ml/server/routes/trained_models.ts +++ b/x-pack/plugins/ml/server/routes/trained_models.ts @@ -6,20 +6,18 @@ */ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import { groupBy } from 'lodash'; +import type { CloudSetup } from '@kbn/cloud-plugin/server'; import { schema } from '@kbn/config-schema'; import type { ErrorType } from '@kbn/ml-error-utils'; -import type { CloudSetup } from '@kbn/cloud-plugin/server'; -import type { - ElasticCuratedModelName, - ElserVersion, - InferenceAPIConfigResponse, -} from '@kbn/ml-trained-models-utils'; -import { isDefined } from '@kbn/ml-is-defined'; -import type { IScopedClusterClient } from '@kbn/core-elasticsearch-server'; -import { type MlFeatures, ML_INTERNAL_BASE_PATH } from '../../common/constants/app'; -import type { RouteInitialization } from '../types'; +import type { ElasticCuratedModelName, ElserVersion } from '@kbn/ml-trained-models-utils'; +import { TRAINED_MODEL_TYPE } from '@kbn/ml-trained-models-utils'; +import { ML_INTERNAL_BASE_PATH, type MlFeatures } from '../../common/constants/app'; +import { DEFAULT_TRAINED_MODELS_PAGE_SIZE } from '../../common/constants/trained_models'; +import { type TrainedModelConfigResponse } from '../../common/types/trained_models'; import { wrapError } from '../client/error_wrapper'; +import { modelsProvider } from '../models/model_management'; +import type { RouteInitialization } from '../types'; +import { forceQuerySchema } from './schemas/anomaly_detectors_schema'; import { createIngestPipelineSchema, curatedModelsParamsSchema, @@ -38,72 +36,57 @@ import { threadingParamsQuerySchema, updateDeploymentParamsSchema, } from './schemas/inference_schema'; -import type { PipelineDefinition } from '../../common/types/trained_models'; -import { type TrainedModelConfigResponse } from '../../common/types/trained_models'; -import { mlLog } from '../lib/log'; -import { forceQuerySchema } from './schemas/anomaly_detectors_schema'; -import { modelsProvider } from '../models/model_management'; - -export const DEFAULT_TRAINED_MODELS_PAGE_SIZE = 10000; export function filterForEnabledFeatureModels< T extends TrainedModelConfigResponse | estypes.MlTrainedModelConfig >(models: T[], enabledFeatures: MlFeatures) { let filteredModels = models; if (enabledFeatures.nlp === false) { - filteredModels = filteredModels.filter((m) => m.model_type === 'tree_ensemble'); + filteredModels = filteredModels.filter((m) => m.model_type !== TRAINED_MODEL_TYPE.PYTORCH); } - if (enabledFeatures.dfa === false) { - filteredModels = filteredModels.filter((m) => m.model_type !== 'tree_ensemble'); + filteredModels = filteredModels.filter( + (m) => m.model_type !== TRAINED_MODEL_TYPE.TREE_ENSEMBLE + ); } - return filteredModels; } -export const populateInferenceServicesProvider = (client: IScopedClusterClient) => { - return async function populateInferenceServices( - trainedModels: TrainedModelConfigResponse[], - asInternal: boolean = false - ) { - const esClient = asInternal ? client.asInternalUser : client.asCurrentUser; - - try { - // Check if model is used by an inference service - const { endpoints } = await esClient.transport.request<{ - endpoints: InferenceAPIConfigResponse[]; - }>({ - method: 'GET', - path: `/_inference/_all`, - }); - - const inferenceAPIMap = groupBy( - endpoints, - (endpoint) => endpoint.service === 'elser' && endpoint.service_settings.model_id - ); - - for (const model of trainedModels) { - const inferenceApis = inferenceAPIMap[model.model_id]; - model.hasInferenceServices = !!inferenceApis; - if (model.hasInferenceServices && !asInternal) { - model.inference_apis = inferenceApis; - } - } - } catch (e) { - if (!asInternal && e.statusCode === 403) { - // retry with internal user to get an indicator if models has associated inference services, without mentioning the names - await populateInferenceServices(trainedModels, true); - } else { - mlLog.error(e); - } - } - }; -}; - export function trainedModelsRoutes( { router, routeGuard, getEnabledFeatures }: RouteInitialization, cloud: CloudSetup ) { + router.versioned + .get({ + path: `${ML_INTERNAL_BASE_PATH}/trained_models_list`, + access: 'internal', + security: { + authz: { + requiredPrivileges: ['ml:canGetTrainedModels'], + }, + }, + summary: 'Get trained models list', + description: + 'Retrieves a complete list of trained models with stats, pipelines, and indices.', + }) + .addVersion( + { + version: '1', + validate: false, + }, + routeGuard.fullLicenseAPIGuard(async ({ client, mlClient, request, response }) => { + try { + const modelsClient = modelsProvider(client, mlClient, cloud, getEnabledFeatures()); + const models = await modelsClient.getTrainedModelList(); + return response.ok({ + body: models, + }); + } catch (e) { + return response.customError(wrapError(e)); + } + }) + ); + router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/trained_models/{modelId?}`, @@ -129,14 +112,7 @@ export function trainedModelsRoutes( routeGuard.fullLicenseAPIGuard(async ({ client, mlClient, request, response }) => { try { const { modelId } = request.params; - const { - with_pipelines: withPipelines, - with_indices: withIndicesRaw, - ...getTrainedModelsRequestParams - } = request.query; - - const withIndices = - request.query.with_indices === 'true' || request.query.with_indices === true; + const { ...getTrainedModelsRequestParams } = request.query; const resp = await mlClient.getTrainedModels({ ...getTrainedModelsRequestParams, @@ -147,126 +123,8 @@ export function trainedModelsRoutes( // @ts-ignore const result = resp.trained_model_configs as TrainedModelConfigResponse[]; - const populateInferenceServices = populateInferenceServicesProvider(client); - await populateInferenceServices(result, false); - - try { - if (withPipelines) { - // Also need to retrieve the list of deployment IDs from stats - const stats = await mlClient.getTrainedModelsStats({ - ...(modelId ? { model_id: modelId } : {}), - size: 10000, - }); - - const modelDeploymentsMap = stats.trained_model_stats.reduce((acc, curr) => { - if (!curr.deployment_stats) return acc; - // @ts-ignore elasticsearch-js client is missing deployment_id - const deploymentId = curr.deployment_stats.deployment_id; - if (acc[curr.model_id]) { - acc[curr.model_id].push(deploymentId); - } else { - acc[curr.model_id] = [deploymentId]; - } - return acc; - }, {} as Record); - - const modelIdsAndAliases: string[] = Array.from( - new Set([ - ...result - .map(({ model_id: id, metadata }) => { - return [id, ...(metadata?.model_aliases ?? [])]; - }) - .flat(), - ...Object.values(modelDeploymentsMap).flat(), - ]) - ); - const modelsClient = modelsProvider(client, mlClient, cloud); - - const modelsPipelinesAndIndices = await Promise.all( - modelIdsAndAliases.map(async (modelIdOrAlias) => { - return { - modelIdOrAlias, - result: await modelsClient.getModelsPipelinesAndIndicesMap(modelIdOrAlias, { - withIndices, - }), - }; - }) - ); - - for (const model of result) { - const modelAliases = model.metadata?.model_aliases ?? []; - const modelMap = modelsPipelinesAndIndices.find( - (d) => d.modelIdOrAlias === model.model_id - )?.result; - - const allRelatedModels = modelsPipelinesAndIndices - .filter( - (m) => - [ - model.model_id, - ...modelAliases, - ...(modelDeploymentsMap[model.model_id] ?? []), - ].findIndex((alias) => alias === m.modelIdOrAlias) > -1 - ) - .map((r) => r?.result) - .filter(isDefined); - const ingestPipelinesFromModelAliases = allRelatedModels - .map((r) => r?.ingestPipelines) - .filter(isDefined) as Array>>; - - model.pipelines = ingestPipelinesFromModelAliases.reduce< - Record - >((allPipelines, modelsToPipelines) => { - for (const [, pipelinesObj] of modelsToPipelines?.entries()) { - Object.entries(pipelinesObj).forEach(([pipelineId, pipelineInfo]) => { - allPipelines[pipelineId] = pipelineInfo; - }); - } - return allPipelines; - }, {}); - - if (modelMap && withIndices) { - model.indices = modelMap.indices; - } - } - } - } catch (e) { - // the user might not have required permissions to fetch pipelines - // log the error to the debug log as this might be a common situation and - // we don't need to fill kibana's log with these messages. - mlLog.debug(e); - } - const filteredModels = filterForEnabledFeatureModels(result, getEnabledFeatures()); - try { - const jobIds = filteredModels - .map((model) => { - const id = model.metadata?.analytics_config?.id; - if (id) { - return `${id}*`; - } - }) - .filter((id) => id !== undefined); - - if (jobIds.length) { - const { data_frame_analytics: jobs } = await mlClient.getDataFrameAnalytics({ - id: jobIds.join(','), - allow_no_match: true, - }); - - filteredModels.forEach((model) => { - const dfaId = model?.metadata?.analytics_config?.id; - if (dfaId !== undefined) { - // if this is a dfa model, set origin_job_exists - model.origin_job_exists = jobs.find((job) => job.id === dfaId) !== undefined; - } - }); - } - } catch (e) { - // Swallow error to prevent blocking trained models result - } - return response.ok({ body: filteredModels, }); @@ -368,9 +226,12 @@ export function trainedModelsRoutes( routeGuard.fullLicenseAPIGuard(async ({ client, request, mlClient, response }) => { try { const { modelId } = request.params; - const result = await modelsProvider(client, mlClient, cloud).getModelsPipelines( - modelId.split(',') - ); + const result = await modelsProvider( + client, + mlClient, + cloud, + getEnabledFeatures() + ).getModelsPipelines(modelId.split(',')); return response.ok({ body: [...result].map(([id, pipelines]) => ({ model_id: id, pipelines })), }); @@ -397,9 +258,14 @@ export function trainedModelsRoutes( version: '1', validate: false, }, - routeGuard.fullLicenseAPIGuard(async ({ client, request, mlClient, response }) => { + routeGuard.fullLicenseAPIGuard(async ({ client, mlClient, response }) => { try { - const body = await modelsProvider(client, mlClient, cloud).getPipelines(); + const body = await modelsProvider( + client, + mlClient, + cloud, + getEnabledFeatures() + ).getPipelines(); return response.ok({ body, }); @@ -433,10 +299,12 @@ export function trainedModelsRoutes( routeGuard.fullLicenseAPIGuard(async ({ client, request, mlClient, response }) => { try { const { pipeline, pipelineName } = request.body; - const body = await modelsProvider(client, mlClient, cloud).createInferencePipeline( - pipeline!, - pipelineName - ); + const body = await modelsProvider( + client, + mlClient, + cloud, + getEnabledFeatures() + ).createInferencePipeline(pipeline!, pipelineName); return response.ok({ body, }); @@ -518,7 +386,12 @@ export function trainedModelsRoutes( if (withPipelines) { // first we need to delete pipelines, otherwise ml api return an error - await modelsProvider(client, mlClient, cloud).deleteModelPipelines(modelId.split(',')); + await modelsProvider( + client, + mlClient, + cloud, + getEnabledFeatures() + ).deleteModelPipelines(modelId.split(',')); } const body = await mlClient.deleteTrainedModel({ @@ -774,7 +647,12 @@ export function trainedModelsRoutes( }, routeGuard.fullLicenseAPIGuard(async ({ response, mlClient, client }) => { try { - const body = await modelsProvider(client, mlClient, cloud).getModelDownloads(); + const body = await modelsProvider( + client, + mlClient, + cloud, + getEnabledFeatures() + ).getModelDownloads(); return response.ok({ body, @@ -810,7 +688,7 @@ export function trainedModelsRoutes( try { const { version } = request.query; - const body = await modelsProvider(client, mlClient, cloud).getELSER( + const body = await modelsProvider(client, mlClient, cloud, getEnabledFeatures()).getELSER( version ? { version: Number(version) as ElserVersion } : undefined ); @@ -848,10 +726,12 @@ export function trainedModelsRoutes( async ({ client, mlClient, request, response, mlSavedObjectService }) => { try { const { modelId } = request.params; - const body = await modelsProvider(client, mlClient, cloud).installElasticModel( - modelId, - mlSavedObjectService - ); + const body = await modelsProvider( + client, + mlClient, + cloud, + getEnabledFeatures() + ).installElasticModel(modelId, mlSavedObjectService); return response.ok({ body, @@ -883,7 +763,12 @@ export function trainedModelsRoutes( routeGuard.fullLicenseAPIGuard( async ({ client, mlClient, request, response, mlSavedObjectService }) => { try { - const body = await modelsProvider(client, mlClient, cloud).getModelsDownloadStatus(); + const body = await modelsProvider( + client, + mlClient, + cloud, + getEnabledFeatures() + ).getModelsDownloadStatus(); return response.ok({ body, @@ -921,10 +806,14 @@ export function trainedModelsRoutes( routeGuard.fullLicenseAPIGuard( async ({ client, mlClient, request, response, mlSavedObjectService }) => { try { - const body = await modelsProvider(client, mlClient, cloud).getCuratedModelConfig( - request.params.modelName as ElasticCuratedModelName, - { version: request.query.version as ElserVersion } - ); + const body = await modelsProvider( + client, + mlClient, + cloud, + getEnabledFeatures() + ).getCuratedModelConfig(request.params.modelName as ElasticCuratedModelName, { + version: request.query.version as ElserVersion, + }); return response.ok({ body, diff --git a/x-pack/plugins/ml/server/saved_objects/util.ts b/x-pack/plugins/ml/server/saved_objects/util.ts index 27562e919b79f..7f3f087ea61be 100644 --- a/x-pack/plugins/ml/server/saved_objects/util.ts +++ b/x-pack/plugins/ml/server/saved_objects/util.ts @@ -12,6 +12,7 @@ import { type IScopedClusterClient, SavedObjectsClient, } from '@kbn/core/server'; +import { DEFAULT_TRAINED_MODELS_PAGE_SIZE } from '../../common/constants/trained_models'; import type { TrainedModelJob, MLSavedObjectService } from './service'; import { ML_JOB_SAVED_OBJECT_TYPE } from '../../common/types/saved_objects'; @@ -86,7 +87,9 @@ export function mlFunctionsFactory(client: IScopedClusterClient) { }, async getTrainedModels() { try { - return await client.asInternalUser.ml.getTrainedModels(); + return await client.asInternalUser.ml.getTrainedModels({ + size: DEFAULT_TRAINED_MODELS_PAGE_SIZE, + }); } catch (error) { return null; } diff --git a/x-pack/plugins/ml/server/shared_services/providers/trained_models.ts b/x-pack/plugins/ml/server/shared_services/providers/trained_models.ts index 36d639066f97a..04f12d82688e1 100644 --- a/x-pack/plugins/ml/server/shared_services/providers/trained_models.ts +++ b/x-pack/plugins/ml/server/shared_services/providers/trained_models.ts @@ -12,6 +12,7 @@ import type { GetModelDownloadConfigOptions, ModelDefinitionResponse, } from '@kbn/ml-trained-models-utils'; +import type { MlFeatures } from '../../../common/constants/app'; import type { MlInferTrainedModelRequest, MlStopTrainedModelDeploymentRequest, @@ -59,7 +60,8 @@ export interface TrainedModelsProvider { export function getTrainedModelsProvider( getGuards: GetGuards, - cloud: CloudSetup + cloud: CloudSetup, + enabledFeatures: MlFeatures ): TrainedModelsProvider { return { trainedModelsProvider(request: KibanaRequest, savedObjectsClient: SavedObjectsClientContract) { @@ -134,7 +136,9 @@ export function getTrainedModelsProvider( .isFullLicense() .hasMlCapabilities(['canGetTrainedModels']) .ok(async ({ scopedClient, mlClient }) => { - return modelsProvider(scopedClient, mlClient, cloud).getELSER(params); + return modelsProvider(scopedClient, mlClient, cloud, enabledFeatures).getELSER( + params + ); }); }, async getCuratedModelConfig(...params: GetCuratedModelConfigParams) { @@ -142,7 +146,12 @@ export function getTrainedModelsProvider( .isFullLicense() .hasMlCapabilities(['canGetTrainedModels']) .ok(async ({ scopedClient, mlClient }) => { - return modelsProvider(scopedClient, mlClient, cloud).getCuratedModelConfig(...params); + return modelsProvider( + scopedClient, + mlClient, + cloud, + enabledFeatures + ).getCuratedModelConfig(...params); }); }, async installElasticModel(modelId: string) { @@ -150,10 +159,12 @@ export function getTrainedModelsProvider( .isFullLicense() .hasMlCapabilities(['canGetTrainedModels']) .ok(async ({ scopedClient, mlClient, mlSavedObjectService }) => { - return modelsProvider(scopedClient, mlClient, cloud).installElasticModel( - modelId, - mlSavedObjectService - ); + return modelsProvider( + scopedClient, + mlClient, + cloud, + enabledFeatures + ).installElasticModel(modelId, mlSavedObjectService); }); }, }; diff --git a/x-pack/plugins/ml/server/shared_services/shared_services.ts b/x-pack/plugins/ml/server/shared_services/shared_services.ts index d4af7166435d4..caaf3abb78815 100644 --- a/x-pack/plugins/ml/server/shared_services/shared_services.ts +++ b/x-pack/plugins/ml/server/shared_services/shared_services.ts @@ -16,7 +16,7 @@ import type { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-ser import type { IClusterClient, IScopedClusterClient } from '@kbn/core-elasticsearch-server'; import type { UiSettingsServiceStart } from '@kbn/core-ui-settings-server'; import type { CoreAuditService } from '@kbn/core-security-server'; -import type { CompatibleModule } from '../../common/constants/app'; +import type { CompatibleModule, MlFeatures } from '../../common/constants/app'; import type { MlLicense } from '../../common/license'; import { licenseChecks } from './license_checks'; @@ -110,7 +110,8 @@ export function createSharedServices( getDataViews: () => DataViewsPluginStart, getAuditService: () => CoreAuditService | null, isMlReady: () => Promise, - compatibleModuleType: CompatibleModule | null + compatibleModuleType: CompatibleModule | null, + enabledFeatures: MlFeatures ): { sharedServicesProviders: SharedServices; internalServicesProviders: MlServicesProviders; @@ -188,7 +189,7 @@ export function createSharedServices( ...getResultsServiceProvider(getGuards), ...getMlSystemProvider(getGuards, mlLicense, getSpaces, cloud, resolveMlCapabilities), ...getAlertingServiceProvider(getGuards), - ...getTrainedModelsProvider(getGuards, cloud), + ...getTrainedModelsProvider(getGuards, cloud, enabledFeatures), }, /** * Services providers for ML internal usage diff --git a/x-pack/plugins/observability_solution/apm/common/utils/formatters/alert_url.test.ts b/x-pack/plugins/observability_solution/apm/common/utils/formatters/alert_url.test.ts new file mode 100644 index 0000000000000..6094b0083f39d --- /dev/null +++ b/x-pack/plugins/observability_solution/apm/common/utils/formatters/alert_url.test.ts @@ -0,0 +1,44 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { getAlertUrlErrorCount, getAlertUrlTransaction } from './alert_url'; +describe('alert_url', () => { + describe('getAlertUrlErrorCount', () => { + it('return the URL where the service name is camelcase', () => { + const url = getAlertUrlErrorCount('serviceName', 'serviceEnv'); + expect(url).toBe('/app/apm/services/serviceName/errors?environment=serviceEnv'); + }); + it('return the URL where the service name is sneak case', () => { + const url = getAlertUrlErrorCount('service_name', 'serviceEnv'); + expect(url).toBe('/app/apm/services/service_name/errors?environment=serviceEnv'); + }); + it('return the URL encoded correctly where the service name has spaces', () => { + const url = getAlertUrlErrorCount('service name', 'serviceEnv'); + expect(url).toBe('/app/apm/services/service%20name/errors?environment=serviceEnv'); + }); + }); + describe('getAlertUrlTransaction', () => { + it('return the URL where the service name is camelcase', () => { + const url = getAlertUrlTransaction('serviceName', 'serviceEnv', 'transactionType'); + expect(url).toBe( + '/app/apm/services/serviceName?transactionType=transactionType&environment=serviceEnv' + ); + }); + it('return the URL where the service name is sneak case', () => { + const url = getAlertUrlTransaction('service_name', 'serviceEnv', 'transactionType'); + expect(url).toBe( + '/app/apm/services/service_name?transactionType=transactionType&environment=serviceEnv' + ); + }); + it('return the URL encoded correctly where the service name has spaces', () => { + const url = getAlertUrlTransaction('service name', 'serviceEnv', 'transactionType'); + expect(url).toBe( + '/app/apm/services/service%20name?transactionType=transactionType&environment=serviceEnv' + ); + }); + }); +}); diff --git a/x-pack/plugins/observability_solution/apm/common/utils/formatters/alert_url.ts b/x-pack/plugins/observability_solution/apm/common/utils/formatters/alert_url.ts index 318413cc44cf9..61ea3b9bc2fb6 100644 --- a/x-pack/plugins/observability_solution/apm/common/utils/formatters/alert_url.ts +++ b/x-pack/plugins/observability_solution/apm/common/utils/formatters/alert_url.ts @@ -13,7 +13,7 @@ const format = ({ pathname, query }: { pathname: string; query: Record format({ - pathname: `/app/apm/services/${serviceName}/errors`, + pathname: `/app/apm/services/${encodeURIComponent(serviceName)}/errors`, query: { environment: serviceEnv ?? ENVIRONMENT_ALL.value, }, @@ -25,7 +25,7 @@ export const getAlertUrlTransaction = ( transactionType: string ) => format({ - pathname: `/app/apm/services/${serviceName}`, + pathname: `/app/apm/services/${encodeURIComponent(serviceName)}`, query: { transactionType, environment: serviceEnv ?? ENVIRONMENT_ALL.value, diff --git a/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/transaction_details/transaction_details.cy.ts b/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/transaction_details/transaction_details.cy.ts index af23fc8a2ad7e..0ef8fb40ceb38 100644 --- a/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/transaction_details/transaction_details.cy.ts +++ b/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/transaction_details/transaction_details.cy.ts @@ -15,8 +15,7 @@ const timeRange = { rangeFrom: start, rangeTo: end, }; -// flaky -describe.skip('Transaction details', () => { +describe('Transaction details', () => { before(() => { synthtrace.index( opbeans({ @@ -34,7 +33,7 @@ describe.skip('Transaction details', () => { cy.loginAsViewerUser(); }); - it('shows transaction name and transaction charts', () => { + it('shows transaction name and transaction charts', { defaultCommandTimeout: 60000 }, () => { cy.intercept('GET', '/internal/apm/services/opbeans-java/transactions/charts/latency?*').as( 'transactionLatencyRequest' ); @@ -60,7 +59,7 @@ describe.skip('Transaction details', () => { '@transactionThroughputRequest', '@transactionFailureRateRequest', ], - { timeout: 30000 } + { timeout: 60000 } ).spread((latencyInterception, throughputInterception, failureRateInterception) => { expect(latencyInterception.request.query.transactionName).to.be.eql('GET /api/product'); @@ -106,7 +105,9 @@ describe.skip('Transaction details', () => { ); cy.contains('Create SLO'); }); - it('shows top errors table', () => { + + // flaky + it.skip('shows top errors table', () => { cy.visitKibana( `/app/apm/services/opbeans-java/transactions/view?${new URLSearchParams({ ...timeRange, diff --git a/x-pack/plugins/observability_solution/apm_data_access/server/lib/helpers/tier_filter.ts b/x-pack/plugins/observability_solution/apm_data_access/server/lib/helpers/tier_filter.ts index c1f8d5e3fce1f..83171dea7f444 100644 --- a/x-pack/plugins/observability_solution/apm_data_access/server/lib/helpers/tier_filter.ts +++ b/x-pack/plugins/observability_solution/apm_data_access/server/lib/helpers/tier_filter.ts @@ -13,10 +13,10 @@ export function getDataTierFilterCombined({ excludedDataTiers, }: { filter?: QueryDslQueryContainer; - excludedDataTiers: DataTier[]; + excludedDataTiers?: DataTier[]; }): QueryDslQueryContainer | undefined { if (!filter) { - return excludedDataTiers.length > 0 ? excludeTiersQuery(excludedDataTiers)[0] : undefined; + return excludedDataTiers?.length ? excludeTiersQuery(excludedDataTiers)[0] : undefined; } return !excludedDataTiers diff --git a/x-pack/plugins/observability_solution/dataset_quality/server/test_helpers/create_dataset_quality_users/helpers/call_kibana.ts b/x-pack/plugins/observability_solution/dataset_quality/server/test_helpers/create_dataset_quality_users/helpers/call_kibana.ts index 879b02f8a93c5..5f36a8a4204f2 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/server/test_helpers/create_dataset_quality_users/helpers/call_kibana.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/server/test_helpers/create_dataset_quality_users/helpers/call_kibana.ts @@ -24,14 +24,18 @@ export async function callKibana({ ...options, baseURL: baseUrl, auth: { username, password }, - headers: { 'kbn-xsrf': 'true', ...options.headers }, + headers: { 'kbn-xsrf': 'true', 'x-elastic-internal-origin': 'kibana', ...options.headers }, }); return data; } const getBaseUrl = once(async (kibanaHostname: string) => { try { - await axios.request({ url: kibanaHostname, maxRedirects: 0 }); + await axios.request({ + url: kibanaHostname, + maxRedirects: 0, + headers: { 'x-elastic-internal-origin': 'kibana' }, + }); } catch (e) { if (isAxiosError(e)) { const location = e.response?.headers?.location ?? ''; diff --git a/x-pack/plugins/observability_solution/entity_manager_app/public/pages/overview/index.tsx b/x-pack/plugins/observability_solution/entity_manager_app/public/pages/overview/index.tsx index 59740fb8f8135..d628ab306a1b1 100644 --- a/x-pack/plugins/observability_solution/entity_manager_app/public/pages/overview/index.tsx +++ b/x-pack/plugins/observability_solution/entity_manager_app/public/pages/overview/index.tsx @@ -185,7 +185,7 @@ export function EntityManagerOverviewPage() { .filter( (source) => source.index_patterns.length > 0 && source.identity_fields.length > 0 ) - .map((source) => ({ ...source, type: entityType })), + .map((source) => ({ ...source, type_id: entityType })), }, }, } diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_host_count.test.ts b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_host_count.test.ts new file mode 100644 index 0000000000000..641194c82888a --- /dev/null +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_host_count.test.ts @@ -0,0 +1,144 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { renderHook } from '@testing-library/react'; +import { useFetcher } from '../../../../hooks/use_fetcher'; +import { useKibanaContextForPlugin } from '../../../../hooks/use_kibana'; +import * as useKibanaContextForPluginHook from '../../../../hooks/use_kibana'; +import * as useUnifiedSearchHooks from './use_unified_search'; +import { useHostCount } from './use_host_count'; + +jest.mock('../../../../hooks/use_fetcher'); +jest.mock('../../../../hooks/use_kibana'); +jest.mock('./use_unified_search'); + +describe('useHostCount', () => { + const useKibanaContextForPluginMock = useKibanaContextForPlugin as jest.MockedFunction< + typeof useKibanaContextForPlugin + >; + + const telemetryMock = { reportHostsViewTotalHostCountRetrieved: jest.fn() }; + + useKibanaContextForPluginMock.mockReturnValue({ + services: { telemetry: telemetryMock }, + } as unknown as ReturnType); + + const useUnifiedSearchContextMock = + useUnifiedSearchHooks.useUnifiedSearchContext as jest.MockedFunction< + typeof useUnifiedSearchHooks.useUnifiedSearchContext + >; + + const mockUseUnifiedContext = (searchCriteria: any) => { + useUnifiedSearchContextMock.mockReturnValue({ + buildQuery: jest.fn(() => 'query'), + parsedDateRange: { from: '', to: '' }, + searchCriteria, + } as unknown as ReturnType); + }; + + describe('when data is fetched', () => { + const fetcherDataMock = { count: 10 }; + + beforeAll(() => { + (useFetcher as jest.Mock).mockReturnValue({ + data: fetcherDataMock, + status: 'success', + error: null, + }); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + describe('and there is no filters or query applied', () => { + it('should call reportHostsViewTotalHostCountRetrieved with the correct data', async () => { + mockUseUnifiedContext({ + query: { query: null }, + filters: [], + panelFilters: [], + }); + + await renderHook(() => useHostCount()); + + expect(telemetryMock.reportHostsViewTotalHostCountRetrieved).toHaveBeenCalledWith({ + total: fetcherDataMock.count, + with_query: false, + with_filters: false, + }); + }); + }); + + describe('and query is applied', () => { + it('should call reportHostsViewTotalHostCountRetrieved with the correct data', async () => { + mockUseUnifiedContext({ query: { query: 'test' }, filters: [], panelFilters: [] }); + + await renderHook(() => useHostCount()); + + expect(telemetryMock.reportHostsViewTotalHostCountRetrieved).toHaveBeenCalledWith({ + total: fetcherDataMock.count, + with_query: true, + with_filters: false, + }); + }); + }); + + describe('and filters are applied', () => { + it('should call reportHostsViewTotalHostCountRetrieved with the correct data', async () => { + mockUseUnifiedContext({ + query: { query: null }, + filters: [{ filter: 'filter' }], + panelFilters: [], + }); + + await renderHook(() => useHostCount()); + + expect(telemetryMock.reportHostsViewTotalHostCountRetrieved).toHaveBeenCalledWith({ + total: fetcherDataMock.count, + with_query: false, + with_filters: true, + }); + }); + }); + + describe('and panel filters are applied', () => { + it('should call reportHostsViewTotalHostCountRetrieved with the correct data', async () => { + mockUseUnifiedContext({ + query: { query: null }, + filters: [{ filter: 'filter' }], + panelFilters: [{ filter: 'filter' }], + }); + + await renderHook(() => useHostCount()); + + expect(telemetryMock.reportHostsViewTotalHostCountRetrieved).toHaveBeenCalledWith({ + total: fetcherDataMock.count, + with_query: false, + with_filters: true, + }); + }); + }); + }); + + describe('when data is fetched with error', () => { + beforeAll(() => { + (useFetcher as jest.Mock).mockReturnValue({ + data: {}, + status: 'error', + error: 'error', + }); + }); + + it('should NOT call reportHostsViewTotalHostCountRetrieved ', async () => { + mockUseUnifiedContext(null); + + await renderHook(() => useHostCount()); + + expect(telemetryMock.reportHostsViewTotalHostCountRetrieved).not.toHaveBeenCalled(); + }); + }); +}); diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_host_count.ts b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_host_count.ts index a09e46ed2792a..fd723fd596146 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_host_count.ts +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_host_count.ts @@ -7,13 +7,16 @@ import createContainer from 'constate'; import { decodeOrThrow } from '@kbn/io-ts-utils'; -import { useMemo } from 'react'; +import { useMemo, useEffect } from 'react'; +import { useKibanaContextForPlugin } from '../../../../hooks/use_kibana'; import { GetInfraAssetCountResponsePayloadRT } from '../../../../../common/http_api'; import { isPending, useFetcher } from '../../../../hooks/use_fetcher'; import { useUnifiedSearchContext } from './use_unified_search'; export const useHostCount = () => { - const { buildQuery, parsedDateRange } = useUnifiedSearchContext(); + const { buildQuery, parsedDateRange, searchCriteria } = useUnifiedSearchContext(); + const { services } = useKibanaContextForPlugin(); + const { telemetry } = services; const payload = useMemo( () => @@ -37,6 +40,16 @@ export const useHostCount = () => { [payload] ); + useEffect(() => { + if (data && !error) { + telemetry.reportHostsViewTotalHostCountRetrieved({ + total: data.count ?? 0, + with_query: !!searchCriteria.query.query, + with_filters: searchCriteria.filters.length > 0 || searchCriteria.panelFilters.length > 0, + }); + } + }, [data, error, payload, searchCriteria, telemetry]); + return { errors: error, loading: isPending(status), diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/nodes_overview.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/nodes_overview.tsx index 7bc04c54b9abc..d012aeb532491 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/nodes_overview.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/nodes_overview.tsx @@ -145,6 +145,18 @@ export const NodesOverview = ({ currentTime={currentTime} onFilter={handleDrilldown} /> + {nodeType === assetType && detailsItemId && ( + + )} ); } diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/table_view.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/table_view.tsx index 182c74c124fd9..e41bf377e40e1 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/table_view.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/table_view.tsx @@ -17,6 +17,7 @@ import { InfraWaffleMapNode, InfraWaffleMapOptions } from '../../../../common/in import { fieldToName } from '../lib/field_to_display_name'; import { NodeContextMenu } from './waffle/node_context_menu'; import { SnapshotNode, SnapshotNodePath } from '../../../../../common/http_api/snapshot_api'; +import { useAssetDetailsFlyoutState } from '../hooks/use_asset_details_flyout_url_state'; interface Props { nodes: SnapshotNode[]; @@ -49,6 +50,16 @@ export const TableView = (props: Props) => { const { nodes, options, formatter, currentTime, nodeType } = props; const [openPopoverId, setOpenPopoverId] = useState(null); + const [_, setFlyoutUrlState] = useAssetDetailsFlyoutState(); + const isFlyoutMode = nodeType === 'host' || nodeType === 'container'; + + const toggleAssetPopover = (uniqueID: string, nodeId: string) => { + if (isFlyoutMode) { + setFlyoutUrlState({ detailsItemId: nodeId, assetType: nodeType }); + } else { + setOpenPopoverId(uniqueID); + } + }; const closePopover = () => setOpenPopoverId(null); @@ -69,14 +80,14 @@ export const TableView = (props: Props) => { setOpenPopoverId(uniqueID)} + onClick={() => toggleAssetPopover(uniqueID, item.node.id)} > {value} ); - return ( + return !isFlyoutMode ? ( { options={options} /> + ) : ( + button ); }, }, diff --git a/x-pack/plugins/observability_solution/infra/public/test_utils/entries.ts b/x-pack/plugins/observability_solution/infra/public/test_utils/entries.ts index 0b04c90ee633d..7042a6538dceb 100644 --- a/x-pack/plugins/observability_solution/infra/public/test_utils/entries.ts +++ b/x-pack/plugins/observability_solution/infra/public/test_utils/entries.ts @@ -5,7 +5,7 @@ * 2.0. */ -import faker from 'faker'; +import { faker } from '@faker-js/faker'; import { LogEntry, LogViewColumnConfiguration } from '@kbn/logs-shared-plugin/common'; export function generateFakeEntries( @@ -51,15 +51,15 @@ export function generateFakeEntries( function fakeColumnValue(field: string): string { switch (field) { case 'message': - return faker.fake( - '{{internet.ip}} - [{{date.past}}] "GET {{internet.url}} HTTP/1.1" 200 {{random.number}} "-" "{{internet.userAgent}}"' + return faker.helpers.fake( + '{{internet.ip}} - [{{date.past}}] "GET {{internet.url}} HTTP/1.1" 200 {{number.int}} "-" "{{internet.userAgent}}"' ); case 'event.dataset': - return faker.fake('{{hacker.noun}}.{{hacker.noun}}'); + return faker.helpers.fake('{{hacker.noun}}.{{hacker.noun}}'); case 'log.file.path': return faker.system.filePath(); case 'log.level': - return faker.random.arrayElement(['debug', 'info', 'warn', 'error']); + return faker.helpers.arrayElement(['debug', 'info', 'warn', 'error']); case 'host.name': return faker.hacker.noun(); default: diff --git a/x-pack/plugins/observability_solution/infra/server/config.ts b/x-pack/plugins/observability_solution/infra/server/config.ts new file mode 100644 index 0000000000000..3e3d51f42a5d1 --- /dev/null +++ b/x-pack/plugins/observability_solution/infra/server/config.ts @@ -0,0 +1,113 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { i18n } from '@kbn/i18n'; + +import { offeringBasedSchema, schema } from '@kbn/config-schema'; +import { PluginConfigDescriptor } from '@kbn/core-plugins-server'; +import { ConfigDeprecation } from '@kbn/config'; +import { InfraConfig } from './types'; +import { publicConfigKeys } from '../common/plugin_config_types'; + +export type { InfraConfig }; + +export const config: PluginConfigDescriptor = { + schema: schema.object({ + enabled: schema.boolean({ defaultValue: true }), + alerting: schema.object({ + inventory_threshold: schema.object({ + group_by_page_size: schema.number({ defaultValue: 5_000 }), + }), + metric_threshold: schema.object({ + group_by_page_size: schema.number({ defaultValue: 10_000 }), + }), + }), + inventory: schema.object({ + compositeSize: schema.number({ defaultValue: 2000 }), + }), + sources: schema.maybe( + schema.object({ + default: schema.maybe( + schema.object({ + fields: schema.maybe( + schema.object({ + message: schema.maybe(schema.arrayOf(schema.string())), + }) + ), + }) + ), + }) + ), + featureFlags: schema.object({ + customThresholdAlertsEnabled: offeringBasedSchema({ + traditional: schema.boolean({ defaultValue: false }), + serverless: schema.boolean({ defaultValue: false }), + }), + logsUIEnabled: offeringBasedSchema({ + traditional: schema.boolean({ defaultValue: true }), + serverless: schema.boolean({ defaultValue: false }), + }), + metricsExplorerEnabled: offeringBasedSchema({ + traditional: schema.boolean({ defaultValue: true }), + serverless: schema.boolean({ defaultValue: false }), + }), + osqueryEnabled: schema.boolean({ defaultValue: true }), + inventoryThresholdAlertRuleEnabled: offeringBasedSchema({ + traditional: schema.boolean({ defaultValue: true }), + serverless: schema.boolean({ defaultValue: true }), + }), + metricThresholdAlertRuleEnabled: offeringBasedSchema({ + traditional: schema.boolean({ defaultValue: true }), + serverless: schema.boolean({ defaultValue: false }), + }), + logThresholdAlertRuleEnabled: offeringBasedSchema({ + traditional: schema.boolean({ defaultValue: true }), + serverless: schema.boolean({ defaultValue: false }), + }), + alertsAndRulesDropdownEnabled: offeringBasedSchema({ + traditional: schema.boolean({ defaultValue: true }), + serverless: schema.boolean({ defaultValue: true }), + }), + /** + * Depends on optional "profilingDataAccess" and "profiling" + * plugins. Enable both with `xpack.profiling.enabled: true` before + * enabling this feature flag. + */ + profilingEnabled: schema.boolean({ defaultValue: false }), + ruleFormV2Enabled: schema.boolean({ defaultValue: false }), + }), + }), + deprecations: () => [sourceFieldsMessageDeprecation], + exposeToBrowser: publicConfigKeys, +}; + +const sourceFieldsMessageDeprecation: ConfigDeprecation = (settings, fromPath, addDeprecation) => { + const sourceFieldsMessageSetting = settings?.xpack?.infra?.sources?.default?.fields?.message; + + if (sourceFieldsMessageSetting) { + addDeprecation({ + configPath: `${fromPath}.sources.default.fields.message`, + title: i18n.translate('xpack.infra.deprecations.sourcesDefaultFieldsMessage.title', { + defaultMessage: 'The "xpack.infra.sources.default.fields.message" setting is deprecated.', + ignoreTag: true, + }), + message: i18n.translate('xpack.infra.deprecations.sourcesDefaultFieldsMessage.message', { + defaultMessage: + 'Features using this configurations are set to be removed in v9 and this is no longer used.', + }), + level: 'warning', + documentationUrl: `https://www.elastic.co/guide/en/kibana/current/logs-ui-settings-kb.html#general-logs-ui-settings-kb`, + correctiveActions: { + manualSteps: [ + i18n.translate('xpack.infra.deprecations.sourcesDefaultFieldsMessage.manualSteps1', { + defaultMessage: 'Remove "xpack.infra.sources.default.fields.message" from kibana.yml.', + ignoreTag: true, + }), + ], + }, + }); + } +}; diff --git a/x-pack/plugins/observability_solution/infra/server/index.ts b/x-pack/plugins/observability_solution/infra/server/index.ts index 96ac6dc162c24..c381514900a72 100644 --- a/x-pack/plugins/observability_solution/infra/server/index.ts +++ b/x-pack/plugins/observability_solution/infra/server/index.ts @@ -6,11 +6,9 @@ */ import { PluginInitializerContext } from '@kbn/core/server'; -import { config, InfraConfig } from './plugin'; +export { config, type InfraConfig } from './config'; export type { InfraPluginSetup, InfraPluginStart, InfraRequestHandlerContext } from './types'; -export type { InfraConfig }; -export { config }; export async function plugin(context: PluginInitializerContext) { const { InfraServerPlugin } = await import('./plugin'); diff --git a/x-pack/plugins/observability_solution/infra/server/lib/adapters/framework/kibana_framework_adapter.ts b/x-pack/plugins/observability_solution/infra/server/lib/adapters/framework/kibana_framework_adapter.ts index c16dad5445af4..f245214cfa37a 100644 --- a/x-pack/plugins/observability_solution/infra/server/lib/adapters/framework/kibana_framework_adapter.ts +++ b/x-pack/plugins/observability_solution/infra/server/lib/adapters/framework/kibana_framework_adapter.ts @@ -13,8 +13,7 @@ import { UI_SETTINGS } from '@kbn/data-plugin/server'; import { TimeseriesVisData } from '@kbn/vis-type-timeseries-plugin/server'; import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; import { TSVBMetricModel } from '@kbn/metrics-data-access-plugin/common'; -import { InfraConfig } from '../../../plugin'; -import type { InfraPluginRequestHandlerContext } from '../../../types'; +import type { InfraConfig, InfraPluginRequestHandlerContext } from '../../../types'; import { CallWithRequestParams, InfraDatabaseGetIndicesAliasResponse, diff --git a/x-pack/plugins/observability_solution/infra/server/lib/adapters/source_status/elasticsearch_source_status_adapter.ts b/x-pack/plugins/observability_solution/infra/server/lib/adapters/source_status/elasticsearch_source_status_adapter.ts index 54e2831899482..ff8058011baea 100644 --- a/x-pack/plugins/observability_solution/infra/server/lib/adapters/source_status/elasticsearch_source_status_adapter.ts +++ b/x-pack/plugins/observability_solution/infra/server/lib/adapters/source_status/elasticsearch_source_status_adapter.ts @@ -5,11 +5,14 @@ * 2.0. */ +import type { DataTier } from '@kbn/observability-shared-plugin/common'; +import { searchExcludedDataTiers } from '@kbn/observability-plugin/common/ui_settings_keys'; +import { excludeTiersQuery } from '@kbn/observability-utils-common/es/queries/exclude_tiers_query'; import type { InfraPluginRequestHandlerContext } from '../../../types'; import { isNoSuchRemoteClusterMessage, NoSuchRemoteClusterError } from '../../sources/errors'; -import { InfraSourceStatusAdapter, SourceIndexStatus } from '../../source_status'; -import { InfraDatabaseGetIndicesResponse } from '../framework'; -import { KibanaFramework } from '../framework/kibana_framework_adapter'; +import type { InfraSourceStatusAdapter, SourceIndexStatus } from '../../source_status'; +import type { InfraDatabaseGetIndicesResponse } from '../framework'; +import type { KibanaFramework } from '../framework/kibana_framework_adapter'; export class InfraElasticsearchSourceStatusAdapter implements InfraSourceStatusAdapter { constructor(private readonly framework: KibanaFramework) {} @@ -46,6 +49,12 @@ export class InfraElasticsearchSourceStatusAdapter implements InfraSourceStatusA requestContext: InfraPluginRequestHandlerContext, indexNames: string ): Promise { + const { uiSettings } = await requestContext.core; + + const excludedDataTiers = await uiSettings.client.get(searchExcludedDataTiers); + + const filter = excludedDataTiers.length ? excludeTiersQuery(excludedDataTiers) : []; + return await this.framework .callWithRequest(requestContext, 'search', { ignore_unavailable: true, @@ -54,6 +63,7 @@ export class InfraElasticsearchSourceStatusAdapter implements InfraSourceStatusA size: 0, terminate_after: 1, track_total_hits: 1, + query: { bool: { filter } }, }) .then( (response) => { diff --git a/x-pack/plugins/observability_solution/infra/server/lib/helpers/get_infra_metrics_client.test.ts b/x-pack/plugins/observability_solution/infra/server/lib/helpers/get_infra_metrics_client.test.ts new file mode 100644 index 0000000000000..3eb8c47c274d9 --- /dev/null +++ b/x-pack/plugins/observability_solution/infra/server/lib/helpers/get_infra_metrics_client.test.ts @@ -0,0 +1,151 @@ +/* + * 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 { KibanaRequest } from '@kbn/core-http-server'; +import { DataTier } from '@kbn/observability-shared-plugin/common'; +import { InfraBackendLibs } from '../infra_types'; +import { getInfraMetricsClient } from './get_infra_metrics_client'; +import { InfraPluginRequestHandlerContext } from '../../types'; +import { QueryDslQueryContainer } from '@kbn/data-views-plugin/common/types'; + +const withExcludedDataTiers = (tiers: DataTier[]) => ({ + uiSettings: { + client: { + get: () => Promise.resolve(tiers), + }, + }, +}); + +const mockedInfra = { getMetricsIndices: () => Promise.resolve(['*.indices']) }; + +const infraMetricsTestHarness = + (tiers: DataTier[], input: QueryDslQueryContainer | undefined, output: QueryDslQueryContainer) => + async () => { + const callWithRequest = jest.fn(); + + const mockedCore = withExcludedDataTiers(tiers); + + const context = { + infra: Promise.resolve(mockedInfra), + core: Promise.resolve(mockedCore), + } as unknown as InfraPluginRequestHandlerContext; + + const client = await getInfraMetricsClient({ + libs: { framework: { callWithRequest } } as unknown as InfraBackendLibs, + context, + request: {} as unknown as KibanaRequest, + }); + + await client.search({ + body: { + query: input, + size: 1, + track_total_hits: false, + }, + }); + + expect(callWithRequest).toBeCalledWith( + context, + 'search', + { + body: { + query: output, + size: 1, + track_total_hits: false, + }, + ignore_unavailable: true, + index: ['*.indices'], + }, + {} + ); + }; + +describe('getInfraMetricsClient', () => { + it( + 'defines an empty must_not query if given no data tiers to filter by', + infraMetricsTestHarness([], undefined, { bool: { must_not: [] } }) + ); + + it( + 'includes excluded data tiers in the request filter by default', + infraMetricsTestHarness(['data_frozen'], undefined, { + bool: { + must_not: [ + { + terms: { + _tier: ['data_frozen'], + }, + }, + ], + }, + }) + ); + + it( + 'merges provided filters with the excluded data tier filter', + infraMetricsTestHarness( + ['data_frozen'], + { + bool: { + must_not: { + exists: { + field: 'a-field', + }, + }, + }, + }, + { + bool: { + must_not: [ + { + exists: { + field: 'a-field', + }, + }, + { + terms: { + _tier: ['data_frozen'], + }, + }, + ], + }, + } + ) + ); + + it( + 'merges other query params with the excluded data tiers filter', + infraMetricsTestHarness( + ['data_frozen'], + { + bool: { + must: { + exists: { + field: 'a-field', + }, + }, + }, + }, + { + bool: { + must: { + exists: { + field: 'a-field', + }, + }, + must_not: [ + { + terms: { + _tier: ['data_frozen'], + }, + }, + ], + }, + } + ) + ); +}); diff --git a/x-pack/plugins/observability_solution/infra/server/lib/helpers/get_infra_metrics_client.ts b/x-pack/plugins/observability_solution/infra/server/lib/helpers/get_infra_metrics_client.ts index d560ffc358a5c..96ae89b902285 100644 --- a/x-pack/plugins/observability_solution/infra/server/lib/helpers/get_infra_metrics_client.ts +++ b/x-pack/plugins/observability_solution/infra/server/lib/helpers/get_infra_metrics_client.ts @@ -6,6 +6,10 @@ */ import type { ESSearchRequest, InferSearchResponseOf } from '@kbn/es-types'; import type { KibanaRequest } from '@kbn/core/server'; +import { searchExcludedDataTiers } from '@kbn/observability-plugin/common/ui_settings_keys'; +import type { DataTier } from '@kbn/observability-shared-plugin/common'; +import { excludeTiersQuery } from '@kbn/observability-utils-common/es/queries/exclude_tiers_query'; +import type { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/types'; import type { InfraPluginRequestHandlerContext } from '../../types'; import type { InfraBackendLibs } from '../infra_types'; @@ -29,12 +33,25 @@ export async function getInfraMetricsClient({ }) { const { framework } = libs; const infraContext = await context.infra; + const { uiSettings } = await context.core; + + const excludedDataTiers = await uiSettings.client.get(searchExcludedDataTiers); const metricsIndices = await infraContext.getMetricsIndices(); + const excludedQuery = excludedDataTiers.length + ? excludeTiersQuery(excludedDataTiers)[0].bool!.must_not! + : []; + return { search( searchParams: TParams ): Promise> { + const searchFilter = searchParams.body.query?.bool?.must_not ?? []; + + // This flattens arrays by one level, and non-array values can be added as well, so it all + // results in a nice [QueryDsl, QueryDsl, ...] array. + const mustNot = ([] as QueryDslQueryContainer[]).concat(searchFilter, excludedQuery); + return framework.callWithRequest( context, 'search', @@ -42,6 +59,16 @@ export async function getInfraMetricsClient({ ...searchParams, ignore_unavailable: true, index: metricsIndices, + body: { + ...searchParams.body, + query: { + ...searchParams.body.query, + bool: { + ...searchParams.body.query?.bool, + must_not: mustNot, + }, + }, + }, }, request ) as Promise; diff --git a/x-pack/plugins/observability_solution/infra/server/plugin.ts b/x-pack/plugins/observability_solution/infra/server/plugin.ts index b8becb916a4e3..6008954b63bde 100644 --- a/x-pack/plugins/observability_solution/infra/server/plugin.ts +++ b/x-pack/plugins/observability_solution/infra/server/plugin.ts @@ -6,13 +6,7 @@ */ import { Server } from '@hapi/hapi'; -import { schema, offeringBasedSchema } from '@kbn/config-schema'; -import { - CoreStart, - Plugin, - PluginConfigDescriptor, - PluginInitializerContext, -} from '@kbn/core/server'; +import { CoreStart, Plugin, PluginInitializerContext } from '@kbn/core/server'; import { handleEsError } from '@kbn/es-ui-shared-plugin/server'; import { i18n } from '@kbn/i18n'; import { Logger } from '@kbn/logging'; @@ -26,7 +20,6 @@ import { import { type AlertsLocatorParams, alertsLocatorID } from '@kbn/observability-plugin/common'; import { mapValues } from 'lodash'; import { LOGS_FEATURE_ID, METRICS_FEATURE_ID } from '../common/constants'; -import { publicConfigKeys } from '../common/plugin_config_types'; import { LOGS_FEATURE, METRICS_FEATURE } from './features'; import { registerRoutes } from './infra_server'; import { InfraServerPluginSetupDeps, InfraServerPluginStartDeps } from './lib/adapters/framework'; @@ -61,77 +54,6 @@ import { UsageCollector } from './usage/usage_collector'; import { mapSourceToLogView } from './utils/map_source_to_log_view'; import { uiSettings } from '../common/ui_settings'; -export const config: PluginConfigDescriptor = { - schema: schema.object({ - enabled: schema.boolean({ defaultValue: true }), - alerting: schema.object({ - inventory_threshold: schema.object({ - group_by_page_size: schema.number({ defaultValue: 5_000 }), - }), - metric_threshold: schema.object({ - group_by_page_size: schema.number({ defaultValue: 10_000 }), - }), - }), - inventory: schema.object({ - compositeSize: schema.number({ defaultValue: 2000 }), - }), - sources: schema.maybe( - schema.object({ - default: schema.maybe( - schema.object({ - fields: schema.maybe( - schema.object({ - message: schema.maybe(schema.arrayOf(schema.string())), - }) - ), - }) - ), - }) - ), - featureFlags: schema.object({ - customThresholdAlertsEnabled: offeringBasedSchema({ - traditional: schema.boolean({ defaultValue: false }), - serverless: schema.boolean({ defaultValue: false }), - }), - logsUIEnabled: offeringBasedSchema({ - traditional: schema.boolean({ defaultValue: true }), - serverless: schema.boolean({ defaultValue: false }), - }), - metricsExplorerEnabled: offeringBasedSchema({ - traditional: schema.boolean({ defaultValue: true }), - serverless: schema.boolean({ defaultValue: false }), - }), - osqueryEnabled: schema.boolean({ defaultValue: true }), - inventoryThresholdAlertRuleEnabled: offeringBasedSchema({ - traditional: schema.boolean({ defaultValue: true }), - serverless: schema.boolean({ defaultValue: true }), - }), - metricThresholdAlertRuleEnabled: offeringBasedSchema({ - traditional: schema.boolean({ defaultValue: true }), - serverless: schema.boolean({ defaultValue: false }), - }), - logThresholdAlertRuleEnabled: offeringBasedSchema({ - traditional: schema.boolean({ defaultValue: true }), - serverless: schema.boolean({ defaultValue: false }), - }), - alertsAndRulesDropdownEnabled: offeringBasedSchema({ - traditional: schema.boolean({ defaultValue: true }), - serverless: schema.boolean({ defaultValue: true }), - }), - /** - * Depends on optional "profilingDataAccess" and "profiling" - * plugins. Enable both with `xpack.profiling.enabled: true` before - * enabling this feature flag. - */ - profilingEnabled: schema.boolean({ defaultValue: false }), - ruleFormV2Enabled: schema.boolean({ defaultValue: false }), - }), - }), - exposeToBrowser: publicConfigKeys, -}; - -export type { InfraConfig }; - export interface KbnServer extends Server { usage: any; } diff --git a/x-pack/plugins/observability_solution/infra/server/routes/metrics_sources/index.ts b/x-pack/plugins/observability_solution/infra/server/routes/metrics_sources/index.ts index 20dcbc1b7e20b..77bdee365e3bf 100644 --- a/x-pack/plugins/observability_solution/infra/server/routes/metrics_sources/index.ts +++ b/x-pack/plugins/observability_solution/infra/server/routes/metrics_sources/index.ts @@ -208,7 +208,7 @@ export const initMetricsSourceConfigurationRoutes = (libs: InfraBackendLibs) => }, async (context, request, response) => { try { - const modules = castArray(request.query.modules); + const modules = request.query.modules ? castArray(request.query.modules) : []; if (modules.length > MAX_MODULES) { throw Boom.badRequest( diff --git a/x-pack/plugins/observability_solution/infra/tsconfig.json b/x-pack/plugins/observability_solution/infra/tsconfig.json index 8f76c0eac7110..dd3e56903ea5d 100644 --- a/x-pack/plugins/observability_solution/infra/tsconfig.json +++ b/x-pack/plugins/observability_solution/infra/tsconfig.json @@ -116,7 +116,10 @@ "@kbn/entityManager-plugin", "@kbn/entities-schema", "@kbn/zod", - "@kbn/observability-utils-server" + "@kbn/observability-utils-server", + "@kbn/core-plugins-server", + "@kbn/config", + "@kbn/observability-utils-common" ], "exclude": ["target/**/*"] } diff --git a/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/events_timeline/events_timeline.tsx b/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/events_timeline/events_timeline.tsx index c3f92139bd936..45b245f68b4b0 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/events_timeline/events_timeline.tsx +++ b/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/events_timeline/events_timeline.tsx @@ -11,9 +11,6 @@ import { Chart, Axis, AreaSeries, Position, ScaleType, Settings } from '@elastic import { useActiveCursor } from '@kbn/charts-plugin/public'; import { EuiSkeletonText } from '@elastic/eui'; import { getBrushData } from '@kbn/observability-utils-browser/chart/utils'; -import { Group } from '@kbn/observability-alerting-rule-utils'; -import { ALERT_GROUP } from '@kbn/rule-data-utils'; -import { SERVICE_NAME } from '@kbn/observability-shared-plugin/common'; import { AnnotationEvent } from './annotation_event'; import { TIME_LINE_THEME } from './timeline_theme'; import { useFetchEvents } from '../../../../hooks/use_fetch_events'; @@ -27,19 +24,10 @@ export const EventsTimeLine = () => { const baseTheme = dependencies.start.charts.theme.useChartsBaseTheme(); const { globalParams, updateInvestigationParams } = useInvestigation(); - const { alert } = useInvestigation(); - - const filter = useMemo(() => { - const group = (alert?.[ALERT_GROUP] as unknown as Group[])?.find( - ({ field }) => field === SERVICE_NAME - ); - return group ? `{"${SERVICE_NAME}":"${alert?.[SERVICE_NAME]}"}` : ''; - }, [alert]); const { data: events, isLoading } = useFetchEvents({ rangeFrom: globalParams.timeRange.from, rangeTo: globalParams.timeRange.to, - filter, }); const chartRef = useRef(null); diff --git a/x-pack/plugins/observability_solution/investigate_app/tsconfig.json b/x-pack/plugins/observability_solution/investigate_app/tsconfig.json index 0851a13367091..bc67b591a57b8 100644 --- a/x-pack/plugins/observability_solution/investigate_app/tsconfig.json +++ b/x-pack/plugins/observability_solution/investigate_app/tsconfig.json @@ -66,7 +66,6 @@ "@kbn/calculate-auto", "@kbn/ml-random-sampler-utils", "@kbn/charts-plugin", - "@kbn/observability-alerting-rule-utils", "@kbn/observability-utils-browser", "@kbn/usage-collection-plugin", "@kbn/inference-common", diff --git a/x-pack/plugins/observability_solution/logs_data_access/common/constants.ts b/x-pack/plugins/observability_solution/logs_data_access/common/constants.ts index ffe5a83f245e8..1c8a4e9deb4ba 100644 --- a/x-pack/plugins/observability_solution/logs_data_access/common/constants.ts +++ b/x-pack/plugins/observability_solution/logs_data_access/common/constants.ts @@ -5,4 +5,4 @@ * 2.0. */ -export const DEFAULT_LOG_SOURCES = ['logs-*-*', 'logs-*', 'filebeat-*', 'kibana_sample_data_logs*']; +export const DEFAULT_LOG_SOURCES = ['logs-*-*', 'logs-*', 'filebeat-*']; diff --git a/x-pack/plugins/observability_solution/logs_shared/public/test_utils/entries.ts b/x-pack/plugins/observability_solution/logs_shared/public/test_utils/entries.ts index 5277f49b1175e..dc6a1526bba0c 100644 --- a/x-pack/plugins/observability_solution/logs_shared/public/test_utils/entries.ts +++ b/x-pack/plugins/observability_solution/logs_shared/public/test_utils/entries.ts @@ -5,7 +5,7 @@ * 2.0. */ -import faker from 'faker'; +import { faker } from '@faker-js/faker'; import { LogEntry } from '../../common/log_entry'; import { LogViewColumnConfiguration } from '../../common/log_views'; @@ -60,15 +60,15 @@ export function generateFakeEntries( function fakeColumnValue(field: string): string { switch (field) { case 'message': - return faker.fake( - '{{internet.ip}} - [{{date.past}}] "GET {{internet.url}} HTTP/1.1" 200 {{random.number}} "-" "{{internet.userAgent}}"' + return faker.helpers.fake( + '{{internet.ip}} - [{{date.past}}] "GET {{internet.url}} HTTP/1.1" 200 {{number.int}} "-" "{{internet.userAgent}}"' ); case 'event.dataset': - return faker.fake('{{hacker.noun}}.{{hacker.noun}}'); + return faker.helpers.fake('{{hacker.noun}}.{{hacker.noun}}'); case 'log.file.path': return faker.system.filePath(); case 'log.level': - return faker.random.arrayElement(['debug', 'info', 'warn', 'error']); + return faker.helpers.arrayElement(['debug', 'info', 'warn', 'error']); case 'host.name': return faker.hacker.noun(); default: diff --git a/x-pack/plugins/observability_solution/logs_shared/server/config.ts b/x-pack/plugins/observability_solution/logs_shared/server/config.ts index c144b8422826f..9dff5723e7633 100644 --- a/x-pack/plugins/observability_solution/logs_shared/server/config.ts +++ b/x-pack/plugins/observability_solution/logs_shared/server/config.ts @@ -26,4 +26,5 @@ export const configSchema = schema.object({ export const config: PluginConfigDescriptor = { schema: configSchema, + deprecations: ({ unused }) => [unused('savedObjects.logView.enabled', { level: 'warning' })], }; diff --git a/x-pack/plugins/observability_solution/logs_shared/server/lib/logs_shared_types.ts b/x-pack/plugins/observability_solution/logs_shared/server/lib/logs_shared_types.ts index d2108bdd6ce9e..4f368c4f64e46 100644 --- a/x-pack/plugins/observability_solution/logs_shared/server/lib/logs_shared_types.ts +++ b/x-pack/plugins/observability_solution/logs_shared/server/lib/logs_shared_types.ts @@ -23,4 +23,5 @@ export interface LogsSharedBackendLibs extends LogsSharedDomainLibs { getStartServices: LogsSharedPluginStartServicesAccessor; getUsageCollector: () => UsageCollector; logger: Logger; + isServerless: boolean; } diff --git a/x-pack/plugins/observability_solution/logs_shared/server/plugin.ts b/x-pack/plugins/observability_solution/logs_shared/server/plugin.ts index d1f6399104fc2..a0a29cebee9b5 100644 --- a/x-pack/plugins/observability_solution/logs_shared/server/plugin.ts +++ b/x-pack/plugins/observability_solution/logs_shared/server/plugin.ts @@ -42,7 +42,7 @@ export class LogsSharedPlugin private logViews: LogViewsService; private usageCollector: UsageCollector; - constructor(context: PluginInitializerContext) { + constructor(private readonly context: PluginInitializerContext) { this.config = context.config.get(); this.logger = context.logger.get(); this.usageCollector = {}; @@ -51,11 +51,13 @@ export class LogsSharedPlugin } public setup(core: LogsSharedPluginCoreSetup, plugins: LogsSharedServerPluginSetupDeps) { + const isServerless = this.context.env.packageInfo.buildFlavor === 'serverless'; + const framework = new KibanaFramework(core, plugins); const logViews = this.logViews.setup(); - if (this.config.savedObjects.logView.enabled) { + if (!isServerless) { // Conditionally register log view saved objects core.savedObjects.registerType(logViewSavedObjectType); } else { @@ -78,6 +80,7 @@ export class LogsSharedPlugin getStartServices: () => core.getStartServices(), getUsageCollector: () => this.usageCollector, logger: this.logger, + isServerless, }; // Register server side APIs diff --git a/x-pack/plugins/observability_solution/logs_shared/server/routes/log_views/get_log_view.ts b/x-pack/plugins/observability_solution/logs_shared/server/routes/log_views/get_log_view.ts index 4e46a06bcfe3d..9370c18243b51 100644 --- a/x-pack/plugins/observability_solution/logs_shared/server/routes/log_views/get_log_view.ts +++ b/x-pack/plugins/observability_solution/logs_shared/server/routes/log_views/get_log_view.ts @@ -14,6 +14,7 @@ export const initGetLogViewRoute = ({ config, framework, getStartServices, + isServerless, }: LogsSharedBackendLibs) => { framework .registerVersionedRoute({ @@ -41,7 +42,7 @@ export const initGetLogViewRoute = ({ * - if the log view saved object is correctly registered, perform a lookup for retrieving it * - else, skip the saved object lookup and immediately get the internal log view if exists. */ - const logView = config.savedObjects.logView.enabled + const logView = !isServerless ? await logViewsClient.getLogView(logViewId) : await logViewsClient.getInternalLogView(logViewId); diff --git a/x-pack/plugins/observability_solution/logs_shared/server/routes/log_views/index.ts b/x-pack/plugins/observability_solution/logs_shared/server/routes/log_views/index.ts index 42c23637fa1b7..4bcaa8d53ad0a 100644 --- a/x-pack/plugins/observability_solution/logs_shared/server/routes/log_views/index.ts +++ b/x-pack/plugins/observability_solution/logs_shared/server/routes/log_views/index.ts @@ -12,7 +12,7 @@ export const initLogViewRoutes = (libs: LogsSharedBackendLibs) => { initGetLogViewRoute(libs); // Register the log view update endpoint only when the Saved object is correctly registered - if (libs.config.savedObjects.logView.enabled) { + if (!libs.isServerless) { initPutLogViewRoute(libs); } }; diff --git a/x-pack/plugins/observability_solution/observability/public/pages/rules/rules.tsx b/x-pack/plugins/observability_solution/observability/public/pages/rules/rules.tsx index b94b9a7e4218f..2e3c6d9d9f832 100644 --- a/x-pack/plugins/observability_solution/observability/public/pages/rules/rules.tsx +++ b/x-pack/plugins/observability_solution/observability/public/pages/rules/rules.tsx @@ -6,7 +6,7 @@ */ import { EuiButton, EuiButtonEmpty, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; -import { RuleTypeModal } from '@kbn/alerts-ui-shared/src/rule_type_modal'; +import { RuleTypeModal } from '@kbn/response-ops-rule-form/src/rule_type_modal'; import { ALERTING_FEATURE_ID } from '@kbn/alerting-plugin/common'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; diff --git a/x-pack/plugins/observability_solution/observability/server/ui_settings.ts b/x-pack/plugins/observability_solution/observability/server/ui_settings.ts index 1a387f24fbaed..e5695a3c9034d 100644 --- a/x-pack/plugins/observability_solution/observability/server/ui_settings.ts +++ b/x-pack/plugins/observability_solution/observability/server/ui_settings.ts @@ -504,7 +504,7 @@ export const uiSettings: Record = { value: 1.7, description: i18n.translate('xpack.observability.profilingDatacenterPUEUiSettingDescription', { defaultMessage: `Data center power usage effectiveness (PUE) measures how efficiently a data center uses energy. Defaults to 1.7, the average on-premise data center PUE according to the Uptime Institute survey - + You can also use the PUE that corresponds with your cloud provider: '
    • AWS: 1.135
    • @@ -622,8 +622,8 @@ export const uiSettings: Record = { description: i18n.translate( 'xpack.observability.advancedSettings.searchExcludedDataTiersDesc', { - defaultMessage: `{technicalPreviewLabel} Specify the data tiers to exclude from search, such as data_cold and/or data_frozen. - When configured, indices allocated in the selected tiers will be ignored from search requests. Affected apps: APM`, + defaultMessage: `{technicalPreviewLabel} Specify the data tiers to exclude from search, such as data_cold and/or data_frozen. + When configured, indices allocated in the selected tiers will be ignored from search requests. Affected apps: APM, Infrastructure`, values: { technicalPreviewLabel: `[${technicalPreviewLabel}]` }, } ), diff --git a/x-pack/plugins/observability_solution/observability/tsconfig.json b/x-pack/plugins/observability_solution/observability/tsconfig.json index b3c18dc24b8e0..1d88901626da2 100644 --- a/x-pack/plugins/observability_solution/observability/tsconfig.json +++ b/x-pack/plugins/observability_solution/observability/tsconfig.json @@ -111,7 +111,8 @@ "@kbn/core-ui-settings-server-mocks", "@kbn/es-types", "@kbn/logging-mocks", - "@kbn/streams-plugin", + "@kbn/response-ops-rule-form", + "@kbn/streams-plugin" ], "exclude": ["target/**/*"] } diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/plugin.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/plugin.ts index 7949276ac6aba..b8de2f5688373 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/plugin.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/plugin.ts @@ -134,8 +134,9 @@ export class ObservabilityAIAssistantPlugin core, taskManager: plugins.taskManager, logger: this.logger, - }).catch((error) => { - this.logger.error(`Failed to register migrate knowledge base entries task: ${error}`); + config: this.config, + }).catch((e) => { + this.logger.error(`Knowledge base migration was not successfully: ${e.message}`); }); service.register(registerFunctions); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/chat/route.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/chat/route.ts index e80e6fa156b06..5ef72dc8e7b56 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/chat/route.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/chat/route.ts @@ -126,8 +126,10 @@ async function initializeChatRequest({ const chatRoute = createObservabilityAIAssistantServerRoute({ endpoint: 'POST /internal/observability_ai_assistant/chat', - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, params: t.type({ body: t.intersection([ @@ -174,8 +176,10 @@ const chatRoute = createObservabilityAIAssistantServerRoute({ const chatRecallRoute = createObservabilityAIAssistantServerRoute({ endpoint: 'POST /internal/observability_ai_assistant/chat/recall', - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, params: t.type({ body: t.type({ @@ -282,8 +286,10 @@ async function chatComplete( const chatCompleteRoute = createObservabilityAIAssistantServerRoute({ endpoint: 'POST /internal/observability_ai_assistant/chat/complete', - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, params: chatCompleteInternalRt, handler: async (resources): Promise => { @@ -293,8 +299,10 @@ const chatCompleteRoute = createObservabilityAIAssistantServerRoute({ const publicChatCompleteRoute = createObservabilityAIAssistantServerRoute({ endpoint: 'POST /api/observability_ai_assistant/chat/complete 2023-10-31', - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, params: chatCompletePublicRt, handler: async (resources): Promise => { diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/connectors/route.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/connectors/route.ts index 24d63d3f7fa06..80bc877e6f5f9 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/connectors/route.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/connectors/route.ts @@ -10,8 +10,10 @@ import { createObservabilityAIAssistantServerRoute } from '../create_observabili const listConnectorsRoute = createObservabilityAIAssistantServerRoute({ endpoint: 'GET /internal/observability_ai_assistant/connectors', - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async (resources): Promise => { const { request, plugins } = resources; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/conversations/route.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/conversations/route.ts index 7e59be004cac9..e320376bc7357 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/conversations/route.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/conversations/route.ts @@ -17,8 +17,10 @@ const getConversationRoute = createObservabilityAIAssistantServerRoute({ conversationId: t.string, }), }), - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async (resources): Promise => { const { service, request, params } = resources; @@ -40,8 +42,10 @@ const findConversationsRoute = createObservabilityAIAssistantServerRoute({ query: t.string, }), }), - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async (resources): Promise<{ conversations: Conversation[] }> => { const { service, request, params } = resources; @@ -63,8 +67,10 @@ const createConversationRoute = createObservabilityAIAssistantServerRoute({ conversation: conversationCreateRt, }), }), - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async (resources): Promise => { const { service, request, params } = resources; @@ -89,8 +95,10 @@ const updateConversationRoute = createObservabilityAIAssistantServerRoute({ conversation: conversationUpdateRt, }), }), - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async (resources): Promise => { const { service, request, params } = resources; @@ -115,8 +123,10 @@ const updateConversationTitle = createObservabilityAIAssistantServerRoute({ title: t.string, }), }), - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async (resources): Promise => { const { service, request, params } = resources; @@ -143,8 +153,10 @@ const deleteConversationRoute = createObservabilityAIAssistantServerRoute({ conversationId: t.string, }), }), - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async (resources): Promise => { const { service, request, params } = resources; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/functions/route.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/functions/route.ts index 1571487765c09..c5f571769dfb6 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/functions/route.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/functions/route.ts @@ -22,8 +22,10 @@ const getFunctionsRoute = createObservabilityAIAssistantServerRoute({ scopes: t.union([t.array(assistantScopeType), assistantScopeType]), }), }), - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async ( resources @@ -97,8 +99,10 @@ const functionRecallRoute = createObservabilityAIAssistantServerRoute({ }), ]), }), - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async ( resources @@ -132,8 +136,10 @@ const functionSummariseRoute = createObservabilityAIAssistantServerRoute({ labels: t.record(t.string, t.string), }), }), - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async (resources): Promise => { const client = await resources.service.getClient({ request: resources.request }); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/knowledge_base/route.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/knowledge_base/route.ts index 37e9248a0c624..4ff94393bc525 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/knowledge_base/route.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/knowledge_base/route.ts @@ -20,8 +20,10 @@ import { Instruction, KnowledgeBaseEntry, KnowledgeBaseEntryRole } from '../../. const getKnowledgeBaseStatus = createObservabilityAIAssistantServerRoute({ endpoint: 'GET /internal/observability_ai_assistant/kb/status', - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async ({ service, @@ -54,11 +56,15 @@ const setupKnowledgeBase = createObservabilityAIAssistantServerRoute({ }), }), options: { - tags: ['access:ai_assistant'], timeout: { idleSocket: moment.duration(20, 'minutes').asMilliseconds(), }, }, + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, + }, handler: async (resources): Promise => { const client = await resources.service.getClient({ request: resources.request }); @@ -74,8 +80,10 @@ const setupKnowledgeBase = createObservabilityAIAssistantServerRoute({ const resetKnowledgeBase = createObservabilityAIAssistantServerRoute({ endpoint: 'POST /internal/observability_ai_assistant/kb/reset', - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async (resources): Promise<{ result: string }> => { const client = await resources.service.getClient({ request: resources.request }); @@ -92,8 +100,10 @@ const resetKnowledgeBase = createObservabilityAIAssistantServerRoute({ const semanticTextMigrationKnowledgeBase = createObservabilityAIAssistantServerRoute({ endpoint: 'POST /internal/observability_ai_assistant/kb/semantic_text_migration', - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async (resources): Promise => { const client = await resources.service.getClient({ request: resources.request }); @@ -108,8 +118,10 @@ const semanticTextMigrationKnowledgeBase = createObservabilityAIAssistantServerR const getKnowledgeBaseUserInstructions = createObservabilityAIAssistantServerRoute({ endpoint: 'GET /internal/observability_ai_assistant/kb/user_instructions', - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async ( resources @@ -137,8 +149,10 @@ const saveKnowledgeBaseUserInstruction = createObservabilityAIAssistantServerRou public: toBooleanRt, }), }), - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async (resources): Promise => { const client = await resources.service.getClient({ request: resources.request }); @@ -156,8 +170,10 @@ const saveKnowledgeBaseUserInstruction = createObservabilityAIAssistantServerRou const getKnowledgeBaseEntries = createObservabilityAIAssistantServerRoute({ endpoint: 'GET /internal/observability_ai_assistant/kb/entries', - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, params: t.type({ query: t.type({ @@ -207,8 +223,10 @@ const saveKnowledgeBaseEntry = createObservabilityAIAssistantServerRoute({ params: t.type({ body: knowledgeBaseEntryRt, }), - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async (resources): Promise => { const client = await resources.service.getClient({ request: resources.request }); @@ -238,8 +256,10 @@ const deleteKnowledgeBaseEntry = createObservabilityAIAssistantServerRoute({ entryId: t.string, }), }), - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async (resources): Promise => { const client = await resources.service.getClient({ request: resources.request }); @@ -259,8 +279,10 @@ const importKnowledgeBaseEntries = createObservabilityAIAssistantServerRoute({ entries: t.array(knowledgeBaseEntryRt), }), }), - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async (resources): Promise => { const client = await resources.service.getClient({ request: resources.request }); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/types.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/types.ts index 645da146dfb89..38a8f0632920b 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/types.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/types.ts @@ -85,5 +85,4 @@ export interface ObservabilityAIAssistantRouteCreateOptions { payload?: number; idleSocket?: number; }; - tags: Array<'access:ai_assistant'>; } diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/index.test.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/index.test.ts index 8da2a0d843b11..f6aa0dfab2726 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/index.test.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/index.test.ts @@ -5,7 +5,7 @@ * 2.0. */ import type { ActionsClient } from '@kbn/actions-plugin/server/actions_client'; -import type { ElasticsearchClient, IUiSettingsClient, Logger } from '@kbn/core/server'; +import type { CoreSetup, ElasticsearchClient, IUiSettingsClient, Logger } from '@kbn/core/server'; import type { DeeplyMockedKeys } from '@kbn/utility-types-jest'; import { waitFor } from '@testing-library/react'; import { last, merge, repeat } from 'lodash'; @@ -27,7 +27,9 @@ import { CONTEXT_FUNCTION_NAME } from '../../functions/context'; import { ChatFunctionClient } from '../chat_function_client'; import type { KnowledgeBaseService } from '../knowledge_base_service'; import { observableIntoStream } from '../util/observable_into_stream'; -import { CreateChatCompletionResponseChunk } from './adapters/process_openai_stream'; +import type { CreateChatCompletionResponseChunk } from './adapters/process_openai_stream'; +import type { ObservabilityAIAssistantConfig } from '../../config'; +import type { ObservabilityAIAssistantPluginStartDependencies } from '../../types'; type ChunkDelta = CreateChatCompletionResponseChunk['choices'][number]['delta']; @@ -177,6 +179,8 @@ describe('Observability AI Assistant client', () => { functionClientMock.getAdhocInstructions.mockReturnValue([]); return new ObservabilityAIAssistantClient({ + config: {} as ObservabilityAIAssistantConfig, + core: {} as CoreSetup, actionsClient: actionsClientMock, uiSettingsClient: uiSettingsClientMock, esClient: { diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/index.ts index 2bd2fdcf22462..107bed3cac7be 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/index.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/index.ts @@ -7,7 +7,7 @@ import type { SearchHit } from '@elastic/elasticsearch/lib/api/types'; import { notFound } from '@hapi/boom'; import type { ActionsClient } from '@kbn/actions-plugin/server'; -import type { ElasticsearchClient, IUiSettingsClient } from '@kbn/core/server'; +import type { CoreSetup, ElasticsearchClient, IUiSettingsClient } from '@kbn/core/server'; import type { Logger } from '@kbn/logging'; import type { PublicMethodsOf } from '@kbn/utility-types'; import { SpanKind, context } from '@opentelemetry/api'; @@ -80,13 +80,20 @@ import { LangtraceServiceProvider, withLangtraceChatCompleteSpan, } from './operators/with_langtrace_chat_complete_span'; -import { runSemanticTextKnowledgeBaseMigration } from '../task_manager_definitions/register_migrate_knowledge_base_entries_task'; +import { + runSemanticTextKnowledgeBaseMigration, + scheduleSemanticTextMigration, +} from '../task_manager_definitions/register_migrate_knowledge_base_entries_task'; +import { ObservabilityAIAssistantPluginStartDependencies } from '../../types'; +import { ObservabilityAIAssistantConfig } from '../../config'; const MAX_FUNCTION_CALLS = 8; export class ObservabilityAIAssistantClient { constructor( private readonly dependencies: { + config: ObservabilityAIAssistantConfig; + core: CoreSetup; actionsClient: PublicMethodsOf; uiSettingsClient: IUiSettingsClient; namespace: string; @@ -725,9 +732,23 @@ export class ObservabilityAIAssistantClient { return this.dependencies.knowledgeBaseService.getStatus(); }; - setupKnowledgeBase = (modelId: string | undefined) => { - const { esClient } = this.dependencies; - return this.dependencies.knowledgeBaseService.setup(esClient, modelId); + setupKnowledgeBase = async (modelId: string | undefined) => { + const { esClient, core, logger, knowledgeBaseService } = this.dependencies; + + // setup the knowledge base + const res = await knowledgeBaseService.setup(esClient, modelId); + + core + .getStartServices() + .then(([_, pluginsStart]) => { + logger.debug('Schedule semantic text migration task'); + return scheduleSemanticTextMigration(pluginsStart); + }) + .catch((error) => { + logger.error(`Failed to run semantic text migration task: ${error}`); + }); + + return res; }; resetKnowledgeBase = () => { @@ -739,6 +760,7 @@ export class ObservabilityAIAssistantClient { return runSemanticTextKnowledgeBaseMigration({ esClient: this.dependencies.esClient, logger: this.dependencies.logger, + config: this.dependencies.config, }); }; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/operators/with_langtrace_chat_complete_span.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/operators/with_langtrace_chat_complete_span.ts index 9e32ba4b57bfe..767121928622a 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/operators/with_langtrace_chat_complete_span.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/operators/with_langtrace_chat_complete_span.ts @@ -41,7 +41,10 @@ export function withLangtraceChatCompleteSpan({ 'http.max.retries': 0, // dummy URL 'url.full': 'http://localhost:3000/chat/completions', + 'url.path': '/chat/completions', 'http.timeout': 120 * 1000, + 'gen_ai.operation.name': 'chat_completion', + 'gen_ai.request.model': model, 'llm.prompts': JSON.stringify( messages.map((message) => ({ role: message.message.role, diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/index.ts index 9c26bebdd8388..d98799fcb63a7 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/index.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/index.ts @@ -5,22 +5,19 @@ * 2.0. */ -import type { PluginStartContract as ActionsPluginStart } from '@kbn/actions-plugin/server/plugin'; -import { createConcreteWriteIndex, getDataStreamAdapter } from '@kbn/alerting-plugin/server'; -import type { CoreSetup, CoreStart, KibanaRequest, Logger } from '@kbn/core/server'; -import type { SecurityPluginStart } from '@kbn/security-plugin/server'; +import type { CoreSetup, KibanaRequest, Logger } from '@kbn/core/server'; import { getSpaceIdFromPath } from '@kbn/spaces-plugin/common'; -import { once } from 'lodash'; import type { AssistantScope } from '@kbn/ai-assistant-common'; +import { once } from 'lodash'; +import pRetry from 'p-retry'; import { ObservabilityAIAssistantScreenContextRequest } from '../../common/types'; import type { ObservabilityAIAssistantPluginStartDependencies } from '../types'; import { ChatFunctionClient } from './chat_function_client'; import { ObservabilityAIAssistantClient } from './client'; -import { conversationComponentTemplate } from './conversation_component_template'; -import { kbComponentTemplate } from './kb_component_template'; import { KnowledgeBaseService } from './knowledge_base_service'; import type { RegistrationCallback, RespondFunctionResources } from './types'; import { ObservabilityAIAssistantConfig } from '../config'; +import { setupConversationAndKbIndexAssets } from './setup_conversation_and_kb_index_assets'; function getResourceName(resource: string) { return `.kibana-observability-ai-assistant-${resource}`; @@ -45,12 +42,15 @@ export const resourceNames = { }, }; +const createIndexAssetsOnce = once( + (logger: Logger, core: CoreSetup) => + pRetry(() => setupConversationAndKbIndexAssets({ logger, core })) +); + export class ObservabilityAIAssistantService { private readonly core: CoreSetup; private readonly logger: Logger; - private kbService?: KnowledgeBaseService; private config: ObservabilityAIAssistantConfig; - private readonly registrations: RegistrationCallback[] = []; constructor({ @@ -65,120 +65,8 @@ export class ObservabilityAIAssistantService { this.core = core; this.logger = logger; this.config = config; - - this.resetInit(); } - init = async () => {}; - - private resetInit = () => { - this.init = once(async () => { - return this.doInit().catch((error) => { - this.resetInit(); // reset the once flag if an error occurs - throw error; - }); - }); - }; - - private doInit = async () => { - try { - this.logger.debug('Setting up index assets'); - const [coreStart] = await this.core.getStartServices(); - - const { asInternalUser } = coreStart.elasticsearch.client; - - await asInternalUser.cluster.putComponentTemplate({ - create: false, - name: resourceNames.componentTemplate.conversations, - template: conversationComponentTemplate, - }); - - await asInternalUser.indices.putIndexTemplate({ - name: resourceNames.indexTemplate.conversations, - composed_of: [resourceNames.componentTemplate.conversations], - create: false, - index_patterns: [resourceNames.indexPatterns.conversations], - template: { - settings: { - number_of_shards: 1, - auto_expand_replicas: '0-1', - hidden: true, - }, - }, - }); - - const conversationAliasName = resourceNames.aliases.conversations; - - await createConcreteWriteIndex({ - esClient: asInternalUser, - logger: this.logger, - totalFieldsLimit: 10000, - indexPatterns: { - alias: conversationAliasName, - pattern: `${conversationAliasName}*`, - basePattern: `${conversationAliasName}*`, - name: `${conversationAliasName}-000001`, - template: resourceNames.indexTemplate.conversations, - }, - dataStreamAdapter: getDataStreamAdapter({ useDataStreamForAlerts: false }), - }); - - // Knowledge base: component template - await asInternalUser.cluster.putComponentTemplate({ - create: false, - name: resourceNames.componentTemplate.kb, - template: kbComponentTemplate, - }); - - // Knowledge base: index template - await asInternalUser.indices.putIndexTemplate({ - name: resourceNames.indexTemplate.kb, - composed_of: [resourceNames.componentTemplate.kb], - create: false, - index_patterns: [resourceNames.indexPatterns.kb], - template: { - settings: { - number_of_shards: 1, - auto_expand_replicas: '0-1', - hidden: true, - }, - }, - }); - - const kbAliasName = resourceNames.aliases.kb; - - // Knowledge base: write index - await createConcreteWriteIndex({ - esClient: asInternalUser, - logger: this.logger, - totalFieldsLimit: 10000, - indexPatterns: { - alias: kbAliasName, - pattern: `${kbAliasName}*`, - basePattern: `${kbAliasName}*`, - name: `${kbAliasName}-000001`, - template: resourceNames.indexTemplate.kb, - }, - dataStreamAdapter: getDataStreamAdapter({ useDataStreamForAlerts: false }), - }); - - this.kbService = new KnowledgeBaseService({ - core: this.core, - logger: this.logger.get('kb'), - config: this.config, - esClient: { - asInternalUser, - }, - }); - - this.logger.info('Successfully set up index assets'); - } catch (error) { - this.logger.error(`Failed setting up index assets: ${error.message}`); - this.logger.debug(error); - throw error; - } - }; - async getClient({ request, scopes, @@ -192,12 +80,11 @@ export class ObservabilityAIAssistantService { controller.abort(); }); - const [_, [coreStart, plugins]] = await Promise.all([ - this.init(), - this.core.getStartServices() as Promise< - [CoreStart, { security: SecurityPluginStart; actions: ActionsPluginStart }, unknown] - >, + const [[coreStart, plugins]] = await Promise.all([ + this.core.getStartServices(), + createIndexAssetsOnce(this.logger, this.core), ]); + // user will not be found when executed from system connector context const user = plugins.security.authc.getCurrentUser(request); @@ -207,12 +94,25 @@ export class ObservabilityAIAssistantService { const { spaceId } = getSpaceIdFromPath(basePath, coreStart.http.basePath.serverBasePath); + const { asInternalUser } = coreStart.elasticsearch.client; + + const kbService = new KnowledgeBaseService({ + core: this.core, + logger: this.logger.get('kb'), + config: this.config, + esClient: { + asInternalUser, + }, + }); + return new ObservabilityAIAssistantClient({ + core: this.core, + config: this.config, actionsClient: await plugins.actions.getActionsClientWithRequest(request), uiSettingsClient: coreStart.uiSettings.asScopedToClient(soClient), namespace: spaceId, esClient: { - asInternalUser: coreStart.elasticsearch.client.asInternalUser, + asInternalUser, asCurrentUser: coreStart.elasticsearch.client.asScoped(request).asCurrentUser, }, logger: this.logger, @@ -222,7 +122,7 @@ export class ObservabilityAIAssistantService { name: user.username, } : undefined, - knowledgeBaseService: this.kbService!, + knowledgeBaseService: kbService, scopes: scopes || ['all'], }); } diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/inference_endpoint.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/inference_endpoint.ts index e89028652d9ac..a2993f7353c61 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/inference_endpoint.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/inference_endpoint.ts @@ -9,6 +9,7 @@ import { errors } from '@elastic/elasticsearch'; import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; import { Logger } from '@kbn/logging'; import moment from 'moment'; +import { ObservabilityAIAssistantConfig } from '../config'; export const AI_ASSISTANT_KB_INFERENCE_ID = 'obs_ai_assistant_kb_inference'; @@ -34,7 +35,7 @@ export async function createInferenceEndpoint({ service: 'elasticsearch', service_settings: { model_id: modelId, - adaptive_allocations: { enabled: true }, + adaptive_allocations: { enabled: true, min_number_of_allocations: 1 }, num_threads: 1, }, task_settings: {}, @@ -45,7 +46,7 @@ export async function createInferenceEndpoint({ } ); } catch (e) { - logger.error( + logger.debug( `Failed to create inference endpoint "${AI_ASSISTANT_KB_INFERENCE_ID}": ${e.message}` ); throw e; @@ -54,44 +55,30 @@ export async function createInferenceEndpoint({ export async function deleteInferenceEndpoint({ esClient, - logger, }: { esClient: { asCurrentUser: ElasticsearchClient; }; - logger: Logger; }) { - try { - const response = await esClient.asCurrentUser.inference.delete({ - inference_id: AI_ASSISTANT_KB_INFERENCE_ID, - force: true, - }); + const response = await esClient.asCurrentUser.inference.delete({ + inference_id: AI_ASSISTANT_KB_INFERENCE_ID, + force: true, + }); - return response; - } catch (e) { - logger.error(`Failed to delete inference endpoint: ${e.message}`); - throw e; - } + return response; } export async function getInferenceEndpoint({ esClient, - logger, }: { esClient: { asInternalUser: ElasticsearchClient }; - logger: Logger; }) { - try { - const response = await esClient.asInternalUser.inference.get({ - inference_id: AI_ASSISTANT_KB_INFERENCE_ID, - }); + const response = await esClient.asInternalUser.inference.get({ + inference_id: AI_ASSISTANT_KB_INFERENCE_ID, + }); - if (response.endpoints.length > 0) { - return response.endpoints[0]; - } - } catch (e) { - logger.error(`Failed to fetch inference endpoint: ${e.message}`); - throw e; + if (response.endpoints.length > 0) { + return response.endpoints[0]; } } @@ -102,3 +89,61 @@ export function isInferenceEndpointMissingOrUnavailable(error: Error) { error.body?.error?.type === 'status_exception') ); } + +export async function getElserModelStatus({ + esClient, + logger, + config, +}: { + esClient: { asInternalUser: ElasticsearchClient }; + logger: Logger; + config: ObservabilityAIAssistantConfig; +}) { + let errorMessage = ''; + const endpoint = await getInferenceEndpoint({ + esClient, + }).catch((error) => { + if (!isInferenceEndpointMissingOrUnavailable(error)) { + throw error; + } + errorMessage = error.message; + }); + + const enabled = config.enableKnowledgeBase; + if (!endpoint) { + return { ready: false, enabled, errorMessage }; + } + + const modelId = endpoint.service_settings?.model_id; + const modelStats = await esClient.asInternalUser.ml + .getTrainedModelsStats({ model_id: modelId }) + .catch((error) => { + logger.debug(`Failed to get model stats: ${error.message}`); + errorMessage = error.message; + }); + + if (!modelStats) { + return { ready: false, enabled, errorMessage }; + } + + const elserModelStats = modelStats.trained_model_stats.find( + (stats) => stats.deployment_stats?.deployment_id === AI_ASSISTANT_KB_INFERENCE_ID + ); + const deploymentState = elserModelStats?.deployment_stats?.state; + const allocationState = elserModelStats?.deployment_stats?.allocation_status.state; + const allocationCount = + elserModelStats?.deployment_stats?.allocation_status.allocation_count ?? 0; + const ready = + deploymentState === 'started' && allocationState === 'fully_allocated' && allocationCount > 0; + + return { + endpoint, + ready, + enabled, + model_stats: { + allocation_count: allocationCount, + deployment_state: deploymentState, + allocation_state: allocationState, + }, + }; +} diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/kb_component_template.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/kb_component_template.ts index 6cf89b0c9e22d..49e856db29d50 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/kb_component_template.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/kb_component_template.ts @@ -62,10 +62,6 @@ export const kbComponentTemplate: ClusterComponentTemplate['component_template'] semantic_text: { type: 'semantic_text', inference_id: AI_ASSISTANT_KB_INFERENCE_ID, - // @ts-expect-error: @elastic/elasticsearch does not have this type yet - model_settings: { - task_type: 'sparse_embedding', - }, }, 'ml.tokens': { type: 'rank_features', diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/knowledge_base_service/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/knowledge_base_service/index.ts index fdde5ebb49970..1cf1cdc326fdf 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/knowledge_base_service/index.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/knowledge_base_service/index.ts @@ -20,10 +20,9 @@ import { import { getAccessQuery } from '../util/get_access_query'; import { getCategoryQuery } from '../util/get_category_query'; import { - AI_ASSISTANT_KB_INFERENCE_ID, createInferenceEndpoint, deleteInferenceEndpoint, - getInferenceEndpoint, + getElserModelStatus, isInferenceEndpointMissingOrUnavailable, } from '../inference_endpoint'; import { recallFromSearchConnectors } from './recall_from_search_connectors'; @@ -61,13 +60,13 @@ export class KnowledgeBaseService { }, modelId: string | undefined ) { - await deleteInferenceEndpoint({ esClient, logger: this.dependencies.logger }).catch((e) => {}); // ensure existing inference endpoint is deleted + await deleteInferenceEndpoint({ esClient }).catch((e) => {}); // ensure existing inference endpoint is deleted return createInferenceEndpoint({ esClient, logger: this.dependencies.logger, modelId }); } async reset(esClient: { asCurrentUser: ElasticsearchClient }) { try { - await deleteInferenceEndpoint({ esClient, logger: this.dependencies.logger }); + await deleteInferenceEndpoint({ esClient }); } catch (error) { if (isInferenceEndpointMissingOrUnavailable(error)) { return; @@ -437,58 +436,10 @@ export class KnowledgeBaseService { }; getStatus = async () => { - let errorMessage = ''; - const endpoint = await getInferenceEndpoint({ + return getElserModelStatus({ esClient: this.dependencies.esClient, logger: this.dependencies.logger, - }).catch((error) => { - if (!isInferenceEndpointMissingOrUnavailable(error)) { - throw error; - } - this.dependencies.logger.error(`Failed to get inference endpoint: ${error.message}`); - errorMessage = error.message; + config: this.dependencies.config, }); - - const enabled = this.dependencies.config.enableKnowledgeBase; - if (!endpoint) { - return { ready: false, enabled, errorMessage }; - } - - const modelId = endpoint.service_settings?.model_id; - const modelStats = await this.dependencies.esClient.asInternalUser.ml - .getTrainedModelsStats({ model_id: modelId }) - .catch((error) => { - this.dependencies.logger.error(`Failed to get model stats: ${error.message}`); - errorMessage = error.message; - }); - - if (!modelStats) { - return { ready: false, enabled, errorMessage }; - } - - const elserModelStats = modelStats.trained_model_stats.find( - (stats) => stats.deployment_stats?.deployment_id === AI_ASSISTANT_KB_INFERENCE_ID - ); - const deploymentState = elserModelStats?.deployment_stats?.state; - const allocationState = elserModelStats?.deployment_stats?.allocation_status.state; - const allocationCount = - elserModelStats?.deployment_stats?.allocation_status.allocation_count ?? 0; - const ready = - deploymentState === 'started' && allocationState === 'fully_allocated' && allocationCount > 0; - - this.dependencies.logger.debug( - `Model deployment state: ${deploymentState}, allocation state: ${allocationState}, ready: ${ready}` - ); - - return { - endpoint, - ready, - enabled, - model_stats: { - allocation_count: allocationCount, - deployment_state: deploymentState, - allocation_state: allocationState, - }, - }; }; } diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/setup_conversation_and_kb_index_assets.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/setup_conversation_and_kb_index_assets.ts new file mode 100644 index 0000000000000..30d55400bbbda --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/setup_conversation_and_kb_index_assets.ts @@ -0,0 +1,108 @@ +/* + * 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 { createConcreteWriteIndex, getDataStreamAdapter } from '@kbn/alerting-plugin/server'; +import type { CoreSetup, Logger } from '@kbn/core/server'; +import type { ObservabilityAIAssistantPluginStartDependencies } from '../types'; +import { conversationComponentTemplate } from './conversation_component_template'; +import { kbComponentTemplate } from './kb_component_template'; +import { resourceNames } from '.'; + +export async function setupConversationAndKbIndexAssets({ + logger, + core, +}: { + logger: Logger; + core: CoreSetup; +}) { + try { + logger.debug('Setting up index assets'); + const [coreStart] = await core.getStartServices(); + const { asInternalUser } = coreStart.elasticsearch.client; + + // Conversations: component template + await asInternalUser.cluster.putComponentTemplate({ + create: false, + name: resourceNames.componentTemplate.conversations, + template: conversationComponentTemplate, + }); + + // Conversations: index template + await asInternalUser.indices.putIndexTemplate({ + name: resourceNames.indexTemplate.conversations, + composed_of: [resourceNames.componentTemplate.conversations], + create: false, + index_patterns: [resourceNames.indexPatterns.conversations], + template: { + settings: { + number_of_shards: 1, + auto_expand_replicas: '0-1', + hidden: true, + }, + }, + }); + + // Conversations: write index + const conversationAliasName = resourceNames.aliases.conversations; + await createConcreteWriteIndex({ + esClient: asInternalUser, + logger, + totalFieldsLimit: 10000, + indexPatterns: { + alias: conversationAliasName, + pattern: `${conversationAliasName}*`, + basePattern: `${conversationAliasName}*`, + name: `${conversationAliasName}-000001`, + template: resourceNames.indexTemplate.conversations, + }, + dataStreamAdapter: getDataStreamAdapter({ useDataStreamForAlerts: false }), + }); + + // Knowledge base: component template + await asInternalUser.cluster.putComponentTemplate({ + create: false, + name: resourceNames.componentTemplate.kb, + template: kbComponentTemplate, + }); + + // Knowledge base: index template + await asInternalUser.indices.putIndexTemplate({ + name: resourceNames.indexTemplate.kb, + composed_of: [resourceNames.componentTemplate.kb], + create: false, + index_patterns: [resourceNames.indexPatterns.kb], + template: { + settings: { + number_of_shards: 1, + auto_expand_replicas: '0-1', + hidden: true, + }, + }, + }); + + // Knowledge base: write index + const kbAliasName = resourceNames.aliases.kb; + await createConcreteWriteIndex({ + esClient: asInternalUser, + logger, + totalFieldsLimit: 10000, + indexPatterns: { + alias: kbAliasName, + pattern: `${kbAliasName}*`, + basePattern: `${kbAliasName}*`, + name: `${kbAliasName}-000001`, + template: resourceNames.indexTemplate.kb, + }, + dataStreamAdapter: getDataStreamAdapter({ useDataStreamForAlerts: false }), + }); + + logger.info('Successfully set up index assets'); + } catch (error) { + logger.error(`Failed setting up index assets: ${error.message}`); + logger.debug(error); + } +} diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/task_manager_definitions/register_migrate_knowledge_base_entries_task.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/task_manager_definitions/register_migrate_knowledge_base_entries_task.ts index 3df125ab2ba2d..b75074dc7ea54 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/task_manager_definitions/register_migrate_knowledge_base_entries_task.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/task_manager_definitions/register_migrate_knowledge_base_entries_task.ts @@ -12,8 +12,10 @@ import type { CoreSetup, Logger } from '@kbn/core/server'; import pRetry from 'p-retry'; import { KnowledgeBaseEntry } from '../../../common'; import { resourceNames } from '..'; -import { getInferenceEndpoint } from '../inference_endpoint'; +import { getElserModelStatus } from '../inference_endpoint'; import { ObservabilityAIAssistantPluginStartDependencies } from '../../types'; +import { ObservabilityAIAssistantConfig } from '../../config'; +import { setupConversationAndKbIndexAssets } from '../setup_conversation_and_kb_index_assets'; const TASK_ID = 'obs-ai-assistant:knowledge-base-migration-task-id'; const TASK_TYPE = 'obs-ai-assistant:knowledge-base-migration'; @@ -25,36 +27,66 @@ export async function registerMigrateKnowledgeBaseEntriesTask({ taskManager, logger, core, + config, }: { taskManager: TaskManagerSetupContract; logger: Logger; core: CoreSetup; + config: ObservabilityAIAssistantConfig; }) { - logger.debug(`Register task "${TASK_TYPE}"`); - const [coreStart, pluginsStart] = await core.getStartServices(); - taskManager.registerTaskDefinitions({ - [TASK_TYPE]: { - title: 'Migrate AI Assistant Knowledge Base', - description: `Migrates AI Assistant knowledge base entries`, - timeout: '1h', - maxAttempts: 5, - createTaskRunner() { - return { - async run() { - logger.debug(`Run task: "${TASK_TYPE}"`); - - const esClient = { asInternalUser: coreStart.elasticsearch.client.asInternalUser }; - await runSemanticTextKnowledgeBaseMigration({ esClient, logger }); - }, - }; + try { + logger.debug(`Register task "${TASK_TYPE}"`); + taskManager.registerTaskDefinitions({ + [TASK_TYPE]: { + title: 'Migrate AI Assistant Knowledge Base', + description: `Migrates AI Assistant knowledge base entries`, + timeout: '1h', + maxAttempts: 5, + createTaskRunner() { + return { + async run() { + logger.debug(`Run task: "${TASK_TYPE}"`); + const esClient = coreStart.elasticsearch.client; + + const hasKbIndex = await esClient.asInternalUser.indices.exists({ + index: resourceNames.aliases.kb, + }); + + if (!hasKbIndex) { + logger.debug( + 'Knowledge base index does not exist. Skipping semantic text migration.' + ); + return; + } + + // update fields and mappings + await setupConversationAndKbIndexAssets({ logger, core }); + + // run migration + await runSemanticTextKnowledgeBaseMigration({ esClient, logger, config }); + }, + }; + }, }, - }, - }); + }); + } catch (error) { + logger.error(`Failed to register task "${TASK_TYPE}". Error: ${error}`); + } + + try { + logger.debug(`Scheduled task: "${TASK_TYPE}"`); + await scheduleSemanticTextMigration(pluginsStart); + } catch (error) { + logger.error(`Failed to schedule task "${TASK_TYPE}". Error: ${error}`); + } +} - logger.debug(`Scheduled task: "${TASK_TYPE}"`); - await pluginsStart.taskManager.ensureScheduled({ +export function scheduleSemanticTextMigration( + pluginsStart: ObservabilityAIAssistantPluginStartDependencies +) { + return pluginsStart.taskManager.ensureScheduled({ id: TASK_ID, taskType: TASK_TYPE, scope: ['aiAssistant'], @@ -66,9 +98,11 @@ export async function registerMigrateKnowledgeBaseEntriesTask({ export async function runSemanticTextKnowledgeBaseMigration({ esClient, logger, + config, }: { esClient: { asInternalUser: ElasticsearchClient }; logger: Logger; + config: ObservabilityAIAssistantConfig; }) { logger.debug('Knowledge base migration: Running migration'); @@ -98,7 +132,7 @@ export async function runSemanticTextKnowledgeBaseMigration({ logger.debug(`Knowledge base migration: Found ${response.hits.hits.length} entries to migrate`); - await waitForInferenceEndpoint({ esClient, logger }); + await waitForModel({ esClient, logger, config }); // Limit the number of concurrent requests to avoid overloading the cluster const limiter = pLimit(10); @@ -109,6 +143,7 @@ export async function runSemanticTextKnowledgeBaseMigration({ } return esClient.asInternalUser.update({ + refresh: 'wait_for', index: resourceNames.aliases.kb, id: hit._id, body: { @@ -123,27 +158,29 @@ export async function runSemanticTextKnowledgeBaseMigration({ await Promise.all(promises); logger.debug(`Knowledge base migration: Migrated ${promises.length} entries`); - await runSemanticTextKnowledgeBaseMigration({ esClient, logger }); + await runSemanticTextKnowledgeBaseMigration({ esClient, logger, config }); } catch (e) { - logger.error('Knowledge base migration: Failed to migrate entries'); - logger.error(e); + logger.error(`Knowledge base migration failed: ${e.message}`); } } -async function waitForInferenceEndpoint({ +async function waitForModel({ esClient, logger, + config, }: { esClient: { asInternalUser: ElasticsearchClient }; logger: Logger; + config: ObservabilityAIAssistantConfig; }) { return pRetry( async () => { - const endpoint = await getInferenceEndpoint({ esClient, logger }); - if (!endpoint) { - throw new Error('Inference endpoint not yet ready'); + const { ready } = await getElserModelStatus({ esClient, logger, config }); + if (!ready) { + logger.debug('Elser model is not yet ready. Retrying...'); + throw new Error('Elser model is not yet ready'); } }, - { retries: 20, factor: 2 } + { retries: 30, factor: 2, maxTimeout: 30_000 } ); } diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/util/eventsource_stream_into_observable.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/util/eventsource_stream_into_observable.ts index 5ff332128f8ac..b2426d8e4eb5d 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/util/eventsource_stream_into_observable.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/util/eventsource_stream_into_observable.ts @@ -14,10 +14,10 @@ import { Observable } from 'rxjs'; export function eventsourceStreamIntoObservable(readable: Readable) { return new Observable((subscriber) => { - const parser = createParser((event) => { - if (event.type === 'event') { + const parser = createParser({ + onEvent: (event) => { subscriber.next(event.data); - } + }, }); async function processStream() { diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/util/get_access_query.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/util/get_access_query.ts index 6b654731a264b..b517273630f56 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/util/get_access_query.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/util/get_access_query.ts @@ -17,12 +17,7 @@ export function getAccessQuery({ filter: [ { bool: { - should: [ - { term: { public: true } }, - ...(user - ? [{ term: user.id ? { 'user.id': user.id } : { 'user.name': user.name } }] - : []), - ], + should: [{ term: { public: true } }, ...getUserAccessFilters(user)], minimum_should_match: 1, }, }, @@ -51,3 +46,23 @@ export function getAccessQuery({ }, ]; } + +function getUserAccessFilters(user?: { name: string; id?: string }) { + if (!user) { + return []; + } + + if (user.id) { + return [ + { term: { 'user.id': user.id } }, + { + bool: { + must_not: { exists: { field: 'user.id' } }, + must: { term: { 'user.name': user.name } }, + }, + }, + ]; + } + + return [{ term: { 'user.name': user.name } }]; +} diff --git a/x-pack/plugins/observability_solution/observability_logs_explorer/public/plugin.ts b/x-pack/plugins/observability_solution/observability_logs_explorer/public/plugin.ts index 2e6ab0aeeaa0f..843f21b48ad47 100644 --- a/x-pack/plugins/observability_solution/observability_logs_explorer/public/plugin.ts +++ b/x-pack/plugins/observability_solution/observability_logs_explorer/public/plugin.ts @@ -36,13 +36,10 @@ import type { export class ObservabilityLogsExplorerPlugin implements Plugin { - private config: ObservabilityLogsExplorerConfig; private locators?: ObservabilityLogsExplorerLocators; private appStateUpdater = new BehaviorSubject(() => ({})); - constructor(context: PluginInitializerContext) { - this.config = context.config.get(); - } + constructor(context: PluginInitializerContext) {} public setup( core: CoreSetup, @@ -56,9 +53,7 @@ export class ObservabilityLogsExplorerPlugin title: logsExplorerAppTitle, category: DEFAULT_APP_CATEGORIES.observability, euiIconType: 'logoLogging', - visibleIn: this.config.navigation.showAppLink - ? ['globalSearch', 'sideNav'] - : ['globalSearch'], + visibleIn: ['globalSearch'], keywords: ['logs', 'log', 'explorer', 'logs explorer'], updater$: this.appStateUpdater, mount: async (appMountParams: ObservabilityLogsExplorerAppMountParameters) => { diff --git a/x-pack/plugins/observability_solution/observability_logs_explorer/server/config.ts b/x-pack/plugins/observability_solution/observability_logs_explorer/server/config.ts index aa89b9aa273f1..bab368c0eb65c 100644 --- a/x-pack/plugins/observability_solution/observability_logs_explorer/server/config.ts +++ b/x-pack/plugins/observability_solution/observability_logs_explorer/server/config.ts @@ -25,7 +25,7 @@ export const configSchema = schema.object({ export const config: PluginConfigDescriptor = { schema: configSchema, - deprecations: ({ renameFromRoot }) => [ + deprecations: ({ renameFromRoot, unused }) => [ renameFromRoot( 'xpack.discoverLogExplorer.featureFlags.deepLinkVisible', 'xpack.observabilityLogsExplorer.navigation.showAppLink', @@ -41,6 +41,7 @@ export const config: PluginConfigDescriptor = { 'xpack.observabilityLogsExplorer.enabled', { level: 'warning' } ), + unused('navigation.showAppLink', { level: 'warning' }), ], exposeToBrowser: { navigation: { diff --git a/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/firehose/use_aws_service_get_started_list.ts b/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/firehose/use_aws_service_get_started_list.ts index 277c565986d3c..13273475c7697 100644 --- a/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/firehose/use_aws_service_get_started_list.ts +++ b/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/firehose/use_aws_service_get_started_list.ts @@ -14,7 +14,7 @@ import { DISCOVER_APP_LOCATOR } from '@kbn/discover-plugin/common'; import { AWSIndexName } from '../../../../common/aws_firehose'; import { ObservabilityOnboardingContextValue } from '../../../plugin'; -interface AWSServiceGetStartedConfig { +export interface AWSServiceGetStartedConfig { id: string; indexNameList: AWSIndexName[]; title: string; diff --git a/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/firehose/visualize_data.tsx b/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/firehose/visualize_data.tsx index 1b6b281495971..45a2089c2d1c4 100644 --- a/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/firehose/visualize_data.tsx +++ b/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/firehose/visualize_data.tsx @@ -9,19 +9,21 @@ import { EuiIcon, EuiSpacer, EuiText, useGeneratedHtmlId } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React, { useEffect, useState } from 'react'; import useInterval from 'react-use/lib/useInterval'; -import { union } from 'lodash'; +import { unionBy } from 'lodash'; import { useKibana } from '@kbn/kibana-react-plugin/public'; import { FormattedMessage } from '@kbn/i18n-react'; import { ObservabilityOnboardingAppServices } from '../../..'; import { FIREHOSE_CLOUDFORMATION_STACK_NAME, FIREHOSE_LOGS_STREAM_NAME, - type AWSIndexName, } from '../../../../common/aws_firehose'; import { FETCH_STATUS, useFetcher } from '../../../hooks/use_fetcher'; import { AccordionWithIcon } from '../shared/accordion_with_icon'; import { GetStartedPanel } from '../shared/get_started_panel'; -import { useAWSServiceGetStartedList } from './use_aws_service_get_started_list'; +import { + type AWSServiceGetStartedConfig, + useAWSServiceGetStartedList, +} from './use_aws_service_get_started_list'; import { AutoRefreshCallout } from './auto_refresh_callout'; import { ProgressCallout } from './progress_callout'; import { HAS_DATA_FETCH_INTERVAL } from './utils'; @@ -36,12 +38,12 @@ interface Props { export function VisualizeData({ onboardingId, selectedCreateStackOption }: Props) { const accordionId = useGeneratedHtmlId({ prefix: 'accordion' }); - const [orderedPopulatedAWSLogsIndexList, setOrderedPopulatedAWSLogsIndexList] = useState< - AWSIndexName[] + const [orderedVisibleAWSServiceList, setOrderedVisibleAWSServiceList] = useState< + AWSServiceGetStartedConfig[] >([]); const [shouldShowDataReceivedToast, setShouldShowDataReceivedToast] = useState(true); const { - data: populatedAWSLogsIndexList, + data: populatedAWSIndexList, status, refetch, } = useFetcher((callApi) => { @@ -60,12 +62,13 @@ export function VisualizeData({ onboardingId, selectedCreateStackOption }: Props context: { cloudServiceProvider }, }, } = useKibana(); + const awsServiceGetStartedConfigList = useAWSServiceGetStartedList(); useEffect(() => { if ( shouldShowDataReceivedToast && - Array.isArray(populatedAWSLogsIndexList) && - populatedAWSLogsIndexList.length > 0 + Array.isArray(populatedAWSIndexList) && + populatedAWSIndexList.length > 0 ) { notifications?.toasts.addSuccess( { @@ -90,17 +93,27 @@ export function VisualizeData({ onboardingId, selectedCreateStackOption }: Props setShouldShowDataReceivedToast(false); } - setOrderedPopulatedAWSLogsIndexList((currentList) => + setOrderedVisibleAWSServiceList((currentList) => /** - * Using union() to ensure items in the array are unique - * add stay in the insertion order to keep the order of - * the AWS services in the UI. + * unionBy() ensures uniqueness of the resulting list + * and preserves the order of the first list passed to it, + * which in turn keeps already visible services in the UI + * in place and new services are only appended to the end. */ - union(currentList, populatedAWSLogsIndexList) + unionBy( + currentList, + awsServiceGetStartedConfigList.filter(({ indexNameList }) => + indexNameList.some((indexName) => populatedAWSIndexList?.includes(indexName)) + ), + 'id' + ) ); - }, [notifications?.toasts, populatedAWSLogsIndexList, shouldShowDataReceivedToast]); - - const awsServiceGetStartedConfigList = useAWSServiceGetStartedList(); + }, [ + awsServiceGetStartedConfigList, + notifications?.toasts, + populatedAWSIndexList, + shouldShowDataReceivedToast, + ]); useInterval(() => { if (REQUEST_PENDING_STATUS_LIST.includes(status)) { @@ -110,7 +123,7 @@ export function VisualizeData({ onboardingId, selectedCreateStackOption }: Props refetch(); }, HAS_DATA_FETCH_INTERVAL); - if (populatedAWSLogsIndexList === undefined) { + if (populatedAWSIndexList === undefined) { return null; } @@ -127,56 +140,48 @@ export function VisualizeData({ onboardingId, selectedCreateStackOption }: Props - {orderedPopulatedAWSLogsIndexList.length === 0 && } - {orderedPopulatedAWSLogsIndexList.length > 0 && } + {orderedVisibleAWSServiceList.length === 0 && } + {orderedVisibleAWSServiceList.length > 0 && }
      - {orderedPopulatedAWSLogsIndexList.map((indexName, index) => { - const getStartedConfig = awsServiceGetStartedConfigList.find(({ indexNameList }) => - indexNameList.includes(indexName) - ); - - if (!getStartedConfig) { - return null; + {orderedVisibleAWSServiceList.map( + ({ id, actionLinks, title, logoURL, previewImage }, index) => { + return ( + } + title={title} + initialIsOpen={true} + borders={ + index === 0 || index === orderedVisibleAWSServiceList.length - 1 + ? 'none' + : 'horizontal' + } + > + + + ); } - - const { id, actionLinks, title, logoURL, previewImage } = getStartedConfig; - - return ( - } - title={title} - initialIsOpen={true} - borders={ - index === 0 || index === orderedPopulatedAWSLogsIndexList.length - 1 - ? 'none' - : 'horizontal' - } - > - - - ); - })} + )}
      ); diff --git a/x-pack/plugins/observability_solution/observability_onboarding/public/application/shared/header_action_menu.tsx b/x-pack/plugins/observability_solution/observability_onboarding/public/application/shared/header_action_menu.tsx index 1864b8ced7f8b..22af649a635a5 100644 --- a/x-pack/plugins/observability_solution/observability_onboarding/public/application/shared/header_action_menu.tsx +++ b/x-pack/plugins/observability_solution/observability_onboarding/public/application/shared/header_action_menu.tsx @@ -22,15 +22,14 @@ interface Props { export function ObservabilityOnboardingHeaderActionMenu({ setHeaderActionMenu, theme$ }: Props) { const { - services: { config }, + services: { context }, } = useKibana(); const location = useLocation(); const normalizedPathname = location.pathname.replace(/\/$/, ''); const isRootPage = normalizedPathname === ''; - const isServerless = config.serverless.enabled; - if (!isServerless && !isRootPage) { + if (!context.isServerless && !isRootPage) { return ( (); - const { - ui: { enabled: isObservabilityOnboardingUiEnabled }, - } = config; const isServerlessBuild = this.ctx.env.packageInfo.buildFlavor === 'serverless'; const isDevEnvironment = this.ctx.env.mode.dev; const pluginSetupDeps = plugins; - // set xpack.observability_onboarding.ui.enabled: true - // and go to /app/observabilityOnboarding - if (isObservabilityOnboardingUiEnabled) { - core.application.register({ - id: PLUGIN_ID, - title: 'Observability Onboarding', - order: 8500, - euiIconType: 'logoObservability', - category: DEFAULT_APP_CATEGORIES.observability, - keywords: [], - async mount(appMountParameters: AppMountParameters) { - // Load application bundle and Get start service - const [{ renderApp }, [coreStart, corePlugins]] = await Promise.all([ - import('./application/app'), - core.getStartServices(), - ]); + core.application.register({ + id: PLUGIN_ID, + title: 'Observability Onboarding', + order: 8500, + euiIconType: 'logoObservability', + category: DEFAULT_APP_CATEGORIES.observability, + keywords: [], + async mount(appMountParameters: AppMountParameters) { + // Load application bundle and Get start service + const [{ renderApp }, [coreStart, corePlugins]] = await Promise.all([ + import('./application/app'), + core.getStartServices(), + ]); - const { createCallApi } = await import('./services/rest/create_call_api'); + const { createCallApi } = await import('./services/rest/create_call_api'); - createCallApi(core); + createCallApi(core); - return renderApp({ - core: coreStart, - deps: pluginSetupDeps, - appMountParameters, - corePlugins: corePlugins as ObservabilityOnboardingPluginStartDeps, - config, - context: { - isDev: isDevEnvironment, - isCloud: Boolean(pluginSetupDeps.cloud?.isCloudEnabled), - isServerless: - Boolean(pluginSetupDeps.cloud?.isServerlessEnabled) || isServerlessBuild, - stackVersion, - cloudServiceProvider: pluginSetupDeps.cloud?.csp, - }, - }); - }, - visibleIn: [], - }); - } + return renderApp({ + core: coreStart, + deps: pluginSetupDeps, + appMountParameters, + corePlugins: corePlugins as ObservabilityOnboardingPluginStartDeps, + config, + context: { + isDev: isDevEnvironment, + isCloud: Boolean(pluginSetupDeps.cloud?.isCloudEnabled), + isServerless: Boolean(pluginSetupDeps.cloud?.isServerlessEnabled) || isServerlessBuild, + stackVersion, + cloudServiceProvider: pluginSetupDeps.cloud?.csp, + }, + }); + }, + visibleIn: [], + }); this.locators = { onboarding: plugins.share.url.locators.create(new ObservabilityOnboardingLocatorDefinition()), diff --git a/x-pack/plugins/observability_solution/observability_onboarding/server/config.ts b/x-pack/plugins/observability_solution/observability_onboarding/server/config.ts new file mode 100644 index 0000000000000..dcbc070e29047 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_onboarding/server/config.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 { TypeOf, offeringBasedSchema, schema } from '@kbn/config-schema'; +import { PluginConfigDescriptor } from '@kbn/core-plugins-server'; + +const configSchema = schema.object({ + ui: schema.object({ + enabled: schema.boolean({ defaultValue: true }), + }), + serverless: schema.object({ + enabled: offeringBasedSchema({ + serverless: schema.literal(true), + options: { defaultValue: schema.contextRef('serverless') }, + }), + }), +}); + +export type ObservabilityOnboardingConfig = TypeOf; + +// plugin config +export const config: PluginConfigDescriptor = { + exposeToBrowser: { + ui: true, + serverless: true, + }, + schema: configSchema, + deprecations: ({ unused }) => [ + unused('ui.enabled', { level: 'warning' }), + unused('serverless.enabled', { level: 'warning' }), + ], +}; diff --git a/x-pack/plugins/observability_solution/observability_onboarding/server/index.ts b/x-pack/plugins/observability_solution/observability_onboarding/server/index.ts index a985045d68d7a..b8675eadb3f9a 100644 --- a/x-pack/plugins/observability_solution/observability_onboarding/server/index.ts +++ b/x-pack/plugins/observability_solution/observability_onboarding/server/index.ts @@ -5,31 +5,9 @@ * 2.0. */ -import { offeringBasedSchema, schema, TypeOf } from '@kbn/config-schema'; -import { PluginConfigDescriptor, PluginInitializerContext } from '@kbn/core/server'; +import { PluginInitializerContext } from '@kbn/core/server'; -const configSchema = schema.object({ - ui: schema.object({ - enabled: schema.boolean({ defaultValue: true }), - }), - serverless: schema.object({ - enabled: offeringBasedSchema({ - serverless: schema.literal(true), - options: { defaultValue: schema.contextRef('serverless') }, - }), - }), -}); - -export type ObservabilityOnboardingConfig = TypeOf; - -// plugin config -export const config: PluginConfigDescriptor = { - exposeToBrowser: { - ui: true, - serverless: true, - }, - schema: configSchema, -}; +export { config, type ObservabilityOnboardingConfig } from './config'; export async function plugin(initializerContext: PluginInitializerContext) { const { ObservabilityOnboardingPlugin } = await import('./plugin'); diff --git a/x-pack/plugins/observability_solution/observability_onboarding/server/plugin.ts b/x-pack/plugins/observability_solution/observability_onboarding/server/plugin.ts index 30aaaf2588388..60b33eb3dd601 100644 --- a/x-pack/plugins/observability_solution/observability_onboarding/server/plugin.ts +++ b/x-pack/plugins/observability_solution/observability_onboarding/server/plugin.ts @@ -23,9 +23,9 @@ import { ObservabilityOnboardingPluginStart, ObservabilityOnboardingPluginStartDependencies, } from './types'; -import { ObservabilityOnboardingConfig } from '.'; import { observabilityOnboardingFlow } from './saved_objects/observability_onboarding_status'; import { EsLegacyConfigService } from './services/es_legacy_config_service'; +import { ObservabilityOnboardingConfig } from './config'; export class ObservabilityOnboardingPlugin implements diff --git a/x-pack/plugins/observability_solution/observability_onboarding/server/routes/types.ts b/x-pack/plugins/observability_solution/observability_onboarding/server/routes/types.ts index 689ab14739818..1d30cf05ab255 100644 --- a/x-pack/plugins/observability_solution/observability_onboarding/server/routes/types.ts +++ b/x-pack/plugins/observability_solution/observability_onboarding/server/routes/types.ts @@ -13,13 +13,13 @@ import { } from '@kbn/core/server'; import * as t from 'io-ts'; import { ObservabilityOnboardingServerRouteRepository } from '.'; -import { ObservabilityOnboardingConfig } from '..'; import { EsLegacyConfigService } from '../services/es_legacy_config_service'; import { ObservabilityOnboardingPluginSetupDependencies, ObservabilityOnboardingPluginStartDependencies, ObservabilityOnboardingRequestHandlerContext, } from '../types'; +import { ObservabilityOnboardingConfig } from '../config'; export type { ObservabilityOnboardingServerRouteRepository }; diff --git a/x-pack/plugins/observability_solution/observability_onboarding/server/test_helpers/create_observability_onboarding_users/helpers/call_kibana.ts b/x-pack/plugins/observability_solution/observability_onboarding/server/test_helpers/create_observability_onboarding_users/helpers/call_kibana.ts index 879b02f8a93c5..5f36a8a4204f2 100644 --- a/x-pack/plugins/observability_solution/observability_onboarding/server/test_helpers/create_observability_onboarding_users/helpers/call_kibana.ts +++ b/x-pack/plugins/observability_solution/observability_onboarding/server/test_helpers/create_observability_onboarding_users/helpers/call_kibana.ts @@ -24,14 +24,18 @@ export async function callKibana({ ...options, baseURL: baseUrl, auth: { username, password }, - headers: { 'kbn-xsrf': 'true', ...options.headers }, + headers: { 'kbn-xsrf': 'true', 'x-elastic-internal-origin': 'kibana', ...options.headers }, }); return data; } const getBaseUrl = once(async (kibanaHostname: string) => { try { - await axios.request({ url: kibanaHostname, maxRedirects: 0 }); + await axios.request({ + url: kibanaHostname, + maxRedirects: 0, + headers: { 'x-elastic-internal-origin': 'kibana' }, + }); } catch (e) { if (isAxiosError(e)) { const location = e.response?.headers?.location ?? ''; diff --git a/x-pack/plugins/observability_solution/observability_onboarding/tsconfig.json b/x-pack/plugins/observability_solution/observability_onboarding/tsconfig.json index 878c501a892cc..3893e1d5c6b57 100644 --- a/x-pack/plugins/observability_solution/observability_onboarding/tsconfig.json +++ b/x-pack/plugins/observability_solution/observability_onboarding/tsconfig.json @@ -42,7 +42,8 @@ "@kbn/deeplinks-analytics", "@kbn/custom-integrations-plugin", "@kbn/server-route-repository-utils", - "@kbn/core-application-browser" + "@kbn/core-application-browser", + "@kbn/core-plugins-server" ], "exclude": [ "target/**/*" diff --git a/x-pack/plugins/observability_solution/profiling/e2e/cypress/e2e/profiling_views/differential_functions.cy.ts b/x-pack/plugins/observability_solution/profiling/e2e/cypress/e2e/profiling_views/differential_functions.cy.ts index 2b6d99b0207a4..4b6a2da0c2503 100644 --- a/x-pack/plugins/observability_solution/profiling/e2e/cypress/e2e/profiling_views/differential_functions.cy.ts +++ b/x-pack/plugins/observability_solution/profiling/e2e/cypress/e2e/profiling_views/differential_functions.cy.ts @@ -26,13 +26,12 @@ describe('Differential Functions page', () => { it('shows only the baseline values when comparison data is not available', () => { cy.intercept('GET', '/internal/profiling/topn/functions?*').as('getTopNFunctions'); cy.visitKibana('/app/profiling/functions/differential', { rangeFrom, rangeTo }); - // wait for both apis to finisto move on cy.wait('@getTopNFunctions'); cy.wait('@getTopNFunctions'); [ { id: 'overallPerformance', value: '0%' }, - { id: 'annualizedCo2', value: '74.52 lbs / 33.8 kg' }, - { id: 'annualizedCost', value: '$318.32' }, + { id: 'annualizedCo2', value: '78.48 lbs / 35.6 kg' }, + { id: 'annualizedCost', value: '$335.07' }, { id: 'totalNumberOfSamples', value: '513' }, ].forEach((item) => { cy.get(`[data-test-subj="${item.id}_value"]`).contains(item.value); @@ -50,8 +49,8 @@ describe('Differential Functions page', () => { cy.wait('@getTopNFunctions'); [ { id: 'overallPerformance', value: '0%' }, - { id: 'annualizedCo2', value: '0 lbs / 0 kg', comparisonValue: '74.52 lbs / 33.8 kg' }, - { id: 'annualizedCost', value: '$0', comparisonValue: '$318.32' }, + { id: 'annualizedCo2', value: '0 lbs / 0 kg', comparisonValue: '78.48 lbs / 35.6 kg' }, + { id: 'annualizedCost', value: '$0', comparisonValue: '$335.07' }, { id: 'totalNumberOfSamples', value: '0', comparisonValue: '15,390' }, ].forEach((item) => { cy.get(`[data-test-subj="${item.id}_value"]`).contains(item.value); @@ -69,21 +68,20 @@ describe('Differential Functions page', () => { comparisonRangeFrom, comparisonRangeTo, }); - // wait for both apis to finisto move on cy.wait('@getTopNFunctions'); cy.wait('@getTopNFunctions'); [ { id: 'overallPerformance', value: '65.89%', icon: 'sortUp_success' }, { id: 'annualizedCo2', - value: '74.52 lbs / 33.8 kg', - comparisonValue: '25.35 lbs / 11.5 kg (65.98%)', + value: '78.48 lbs / 35.6 kg', + comparisonValue: '26.68 lbs / 12.1 kg (66.01%)', icon: 'comparison_sortUp_success', }, { id: 'annualizedCost', - value: '$318.32', - comparisonValue: '$108.59 (65.89%)', + value: '$335.07', + comparisonValue: '$114.3 (65.89%)', icon: 'comparison_sortUp_success', }, { @@ -109,21 +107,20 @@ describe('Differential Functions page', () => { comparisonRangeFrom: rangeFrom, comparisonRangeTo: rangeTo, }); - // wait for both apis to finisto move on cy.wait('@getTopNFunctions'); cy.wait('@getTopNFunctions'); [ { id: 'overallPerformance', value: '193.14%', icon: 'sortDown_danger' }, { id: 'annualizedCo2', - value: '25.35 lbs / 11.5 kg', - comparisonValue: '74.52 lbs / 33.8 kg (193.91%)', + value: '26.68 lbs / 12.1 kg', + comparisonValue: '78.48 lbs / 35.6 kg (194.21%)', icon: 'comparison_sortDown_danger', }, { id: 'annualizedCost', - value: '$108.59', - comparisonValue: '$318.32 (193.14%)', + value: '$114.3', + comparisonValue: '$335.07 (193.14%)', icon: 'comparison_sortDown_danger', }, { @@ -143,7 +140,6 @@ describe('Differential Functions page', () => { it('show empty summary when no data is availble', () => { cy.intercept('GET', '/internal/profiling/topn/functions?*').as('getTopNFunctions'); cy.visitKibana('/app/profiling/functions/differential'); - // wait for both apis to finisto move on cy.wait('@getTopNFunctions'); cy.wait('@getTopNFunctions'); [ diff --git a/x-pack/plugins/observability_solution/profiling/e2e/cypress/e2e/profiling_views/functions.cy.ts b/x-pack/plugins/observability_solution/profiling/e2e/cypress/e2e/profiling_views/functions.cy.ts index 0f006e80bb940..c4350f574c2a8 100644 --- a/x-pack/plugins/observability_solution/profiling/e2e/cypress/e2e/profiling_views/functions.cy.ts +++ b/x-pack/plugins/observability_solution/profiling/e2e/cypress/e2e/profiling_views/functions.cy.ts @@ -10,8 +10,7 @@ import { profilingPervCPUWattX86, } from '@kbn/observability-plugin/common'; -// Failing: See https://github.com/elastic/kibana/issues/192697 -describe.skip('Functions page', () => { +describe('Functions page', () => { const rangeFrom = '2023-04-18T00:00:00.000Z'; const rangeTo = '2023-04-18T00:00:30.000Z'; @@ -39,8 +38,8 @@ describe.skip('Functions page', () => { cy.get(firstRowSelector).eq(2).contains('vmlinux'); cy.get(firstRowSelector).eq(3).contains('5.46%'); cy.get(firstRowSelector).eq(4).contains('5.46%'); - cy.get(firstRowSelector).eq(5).contains('3.97 lbs / 1.8 kg'); - cy.get(firstRowSelector).eq(6).contains('$17.37'); + cy.get(firstRowSelector).eq(5).contains('4.19 lbs / 1.9 kg'); + cy.get(firstRowSelector).eq(6).contains('$18.29'); cy.get(firstRowSelector).eq(7).contains('28'); }); @@ -61,22 +60,22 @@ describe.skip('Functions page', () => { { parentKey: 'impactEstimates', key: 'selfCPU', value: '5.46%' }, { parentKey: 'impactEstimates', key: 'samples', value: '28' }, { parentKey: 'impactEstimates', key: 'selfSamples', value: '28' }, - { parentKey: 'impactEstimates', key: 'coreSeconds', value: '1.4 seconds' }, - { parentKey: 'impactEstimates', key: 'selfCoreSeconds', value: '1.4 seconds' }, - { parentKey: 'impactEstimates', key: 'annualizedCoreSeconds', value: '17.03 days' }, - { parentKey: 'impactEstimates', key: 'annualizedSelfCoreSeconds', value: '17.03 days' }, + { parentKey: 'impactEstimates', key: 'coreSeconds', value: '1.47 seconds' }, + { parentKey: 'impactEstimates', key: 'selfCoreSeconds', value: '1.47 seconds' }, + { parentKey: 'impactEstimates', key: 'annualizedCoreSeconds', value: '17.93 days' }, + { parentKey: 'impactEstimates', key: 'annualizedSelfCoreSeconds', value: '17.93 days' }, { parentKey: 'impactEstimates', key: 'co2Emission', value: '~0.00 lbs / ~0.00 kg' }, { parentKey: 'impactEstimates', key: 'selfCo2Emission', value: '~0.00 lbs / ~0.00 kg' }, - { parentKey: 'impactEstimates', key: 'annualizedCo2Emission', value: '3.97 lbs / 1.8 kg' }, + { parentKey: 'impactEstimates', key: 'annualizedCo2Emission', value: '4.19 lbs / 1.9 kg' }, { parentKey: 'impactEstimates', key: 'annualizedSelfCo2Emission', - value: '3.97 lbs / 1.8 kg', + value: '4.19 lbs / 1.9 kg', }, { parentKey: 'impactEstimates', key: 'dollarCost', value: '$~0.00' }, { parentKey: 'impactEstimates', key: 'selfDollarCost', value: '$~0.00' }, - { parentKey: 'impactEstimates', key: 'annualizedDollarCost', value: '$17.37' }, - { parentKey: 'impactEstimates', key: 'annualizedSelfDollarCost', value: '$17.37' }, + { parentKey: 'impactEstimates', key: 'annualizedDollarCost', value: '$18.29' }, + { parentKey: 'impactEstimates', key: 'annualizedSelfDollarCost', value: '$18.29' }, ].forEach(({ parentKey, key, value }) => { cy.get(`[data-test-subj="${parentKey}_${key}"]`).contains(value); }); @@ -93,96 +92,17 @@ describe.skip('Functions page', () => { cy.get(firstRowSelector).eq(2).contains('libjvm.so'); }); - it('Sorting grid', () => { - cy.intercept('GET', '/internal/profiling/topn/functions?*').as('getTopNFunctions'); - cy.visitKibana('/app/profiling/functions', { rangeFrom, rangeTo }); - cy.wait('@getTopNFunctions'); - [ - { - columnKey: 'rank', - columnIndex: 1, - highRank: 4481, - lowRank: 1, - highValue: 4481, - lowValue: 1, - }, - { - columnKey: 'samples', - columnIndex: 7, - highRank: 1, - lowRank: 389, - highValue: 28, - lowValue: 0, - }, - { - columnKey: 'selfCPU', - columnIndex: 3, - highRank: 1, - lowRank: 389, - highValue: '5.46%', - lowValue: '0.00%', - }, - { - columnKey: 'totalCPU', - columnIndex: 4, - highRank: 693, - lowRank: 44, - highValue: '60.43%', - lowValue: '0.19%', - }, - { - columnKey: 'annualizedCo2', - columnIndex: 5, - highRank: 693, - lowRank: 44, - highValue: '44.97 lbs / 20.4 kg', - lowValue: '0 lbs / 0 kg', - }, - { - columnKey: 'annualizedDollarCost', - columnIndex: 6, - highRank: 693, - lowRank: 44, - highValue: '$192.36', - lowValue: '$0.62', - }, - ].forEach(({ columnKey, columnIndex, highRank, highValue, lowRank, lowValue }) => { - cy.get(`[data-test-subj="dataGridHeaderCell-${columnKey}"]`).click(); - cy.contains('Sort High-Low').click(); - const firstRowSelector = '[data-grid-row-index="0"] [data-test-subj="dataGridRowCell"]'; - cy.get(firstRowSelector).eq(1).contains(highRank); - cy.get(firstRowSelector).eq(columnIndex).contains(highValue); - - cy.get(`[data-test-subj="dataGridHeaderCell-${columnKey}"]`).click(); - cy.contains('Sort Low-High').click(); - cy.get(firstRowSelector).eq(1).contains(lowRank); - if (lowValue !== undefined) { - cy.get(firstRowSelector).eq(columnIndex).contains(lowValue); - } else { - cy.get(firstRowSelector).eq(columnIndex).should('not.have.value'); - } - }); - - cy.get(`[data-test-subj="dataGridHeaderCell-frame"]`).click(); - cy.contains('Sort Z-A').click(); - const firstRowSelector = '[data-grid-row-index="0"] [data-test-subj="dataGridRowCell"]'; - cy.get(firstRowSelector).eq(1).contains('1'); - cy.get(firstRowSelector).eq(2).contains('vmlinux'); - - cy.get('[data-test-subj="dataGridHeaderCell-frame"]').click(); - cy.contains('Sort A-Z').click(); - cy.get(firstRowSelector).eq(1).contains('88'); - cy.get(firstRowSelector).eq(2).contains('/'); - }); - describe('Test changing CO2 settings', () => { - after(() => { + function resetSettings() { cy.updateAdvancedSettings({ [profilingCo2PerKWH]: 0.000379069, [profilingDatacenterPUE]: 1.7, [profilingPervCPUWattX86]: 7, }); - }); + } + beforeEach(resetSettings); + afterEach(resetSettings); + it('changes CO2 settings and validate values in the table', () => { cy.intercept('GET', '/internal/profiling/topn/functions?*').as('getTopNFunctions'); cy.visitKibana('/app/profiling/functions', { rangeFrom, rangeTo }); @@ -190,7 +110,7 @@ describe.skip('Functions page', () => { const firstRowSelector = '[data-grid-row-index="0"] [data-test-subj="dataGridRowCell"]'; cy.get(firstRowSelector).eq(1).contains('1'); cy.get(firstRowSelector).eq(2).contains('vmlinux'); - cy.get(firstRowSelector).eq(5).contains('3.97 lbs / 1.8 kg'); + cy.get(firstRowSelector).eq(5).contains('4.19 lbs / 1.9 kg'); cy.contains('Settings').click(); cy.contains('Advanced Settings'); cy.get(`[data-test-subj="management-settings-editField-${profilingCo2PerKWH}"]`) @@ -209,7 +129,7 @@ describe.skip('Functions page', () => { }); cy.go('back'); cy.wait('@getTopNFunctions'); - cy.get(firstRowSelector).eq(5).contains('1.87k lbs / 847.8 kg'); + cy.get(firstRowSelector).eq(5).contains('1.97k lbs / 892.5 kg'); const firstRowSelectorActionButton = '[data-grid-row-index="0"] [data-test-subj="dataGridRowCell"] .euiButtonIcon'; cy.get(firstRowSelectorActionButton).click(); @@ -219,12 +139,12 @@ describe.skip('Functions page', () => { { parentKey: 'impactEstimates', key: 'annualizedCo2Emission', - value: '1.87k lbs / 847.8 kg', + value: '1.97k lbs / 892.5 kg', }, { parentKey: 'impactEstimates', key: 'annualizedSelfCo2Emission', - value: '1.87k lbs / 847.8 kg', + value: '1.97k lbs / 892.5 kg', }, ].forEach(({ parentKey, key, value }) => { cy.get(`[data-test-subj="${parentKey}_${key}"]`).contains(value); diff --git a/x-pack/plugins/observability_solution/profiling/e2e/cypress/e2e/profiling_views/storage_explorer.cy.ts b/x-pack/plugins/observability_solution/profiling/e2e/cypress/e2e/profiling_views/storage_explorer.cy.ts index db752969f14dd..2efb71201301e 100644 --- a/x-pack/plugins/observability_solution/profiling/e2e/cypress/e2e/profiling_views/storage_explorer.cy.ts +++ b/x-pack/plugins/observability_solution/profiling/e2e/cypress/e2e/profiling_views/storage_explorer.cy.ts @@ -95,13 +95,16 @@ describe('Storage explorer page', () => { }); describe('Data breakdown', () => { - it('displays correct values per index', () => { + beforeEach(() => { cy.intercept('GET', '/internal/profiling/storage_explorer/indices_storage_details?*').as( 'indicesDetails' ); + }); + it('displays correct values per index', () => { cy.visitKibana('/app/profiling/storage-explorer', { rangeFrom, rangeTo }); cy.contains('Storage Explorer'); - cy.contains('Data breakdown').click(); + cy.get('[data-test-subj="storageExplorer_dataBreakdownTab"]').click(); + cy.contains('Indices breakdown'); cy.wait('@indicesDetails'); [ { indexName: 'stackframes', docSize: '7,616' }, @@ -113,40 +116,5 @@ describe('Storage explorer page', () => { cy.get(`[data-test-subj="${indexName}_docSize"]`).contains(docSize); }); }); - - it('displays top 10 indices in the table', () => { - cy.intercept('GET', '/internal/profiling/storage_explorer/indices_storage_details?*').as( - 'indicesDetails' - ); - cy.visitKibana('/app/profiling/storage-explorer', { rangeFrom, rangeTo }); - cy.contains('Storage Explorer'); - cy.contains('Data breakdown').click(); - cy.wait('@indicesDetails'); - cy.get('table > tbody tr.euiTableRow').should('have.length', 10); - }); - // Skipping it we should not rely on dom elements from third-level libraries to write our tests - it.skip('displays a chart with percentage of each index', () => { - cy.intercept('GET', '/internal/profiling/storage_explorer/indices_storage_details?*').as( - 'indicesDetails' - ); - cy.visitKibana('/app/profiling/storage-explorer', { rangeFrom, rangeTo }); - cy.contains('Storage Explorer'); - cy.contains('Data breakdown').click(); - cy.wait('@indicesDetails'); - - const indices = [ - { index: 'Stackframes', perc: '32%' }, - { index: 'Samples', perc: '15%' }, - { index: 'Executables', perc: '1%' }, - { index: 'Metrics', perc: '0%' }, - { index: 'Stacktraces', perc: '52%' }, - ]; - - cy.get('.echChartPointerContainer table tbody tr').each(($row, idx) => { - // These are no longer valid elements on charts - cy.wrap($row).find('th').contains(indices[idx].index); - cy.wrap($row).find('td').contains(indices[idx].perc); - }); - }); }); }); diff --git a/x-pack/plugins/observability_solution/profiling/public/views/storage_explorer/index.tsx b/x-pack/plugins/observability_solution/profiling/public/views/storage_explorer/index.tsx index ff111c4bebcd0..5603f19099c7e 100644 --- a/x-pack/plugins/observability_solution/profiling/public/views/storage_explorer/index.tsx +++ b/x-pack/plugins/observability_solution/profiling/public/views/storage_explorer/index.tsx @@ -97,6 +97,7 @@ export function StorageExplorerView() { { setSelectedTab('host_breakdown'); }} @@ -107,6 +108,7 @@ export function StorageExplorerView() { })} { setSelectedTab('data_breakdown'); }} diff --git a/x-pack/plugins/observability_solution/slo/kibana.jsonc b/x-pack/plugins/observability_solution/slo/kibana.jsonc index 11eca10c6c8db..1a90f45c8cd9b 100644 --- a/x-pack/plugins/observability_solution/slo/kibana.jsonc +++ b/x-pack/plugins/observability_solution/slo/kibana.jsonc @@ -44,10 +44,11 @@ "optionalPlugins": [ "cloud", "discover", + "embeddableEnhanced", "observabilityAIAssistant", + "security", "serverless", - "spaces", - "security" + "spaces" ], "requiredBundles": [ "controls", diff --git a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/overview/slo_embeddable_factory.tsx b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/overview/slo_embeddable_factory.tsx index 57de174194976..c1b19c7381acb 100644 --- a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/overview/slo_embeddable_factory.tsx +++ b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/overview/slo_embeddable_factory.tsx @@ -14,6 +14,7 @@ import { EuiThemeProvider } from '@kbn/kibana-react-plugin/common'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { fetch$, + getUnchangingComparator, initializeTitles, useBatchedPublishingSubjects, } from '@kbn/presentation-publishing'; @@ -43,200 +44,210 @@ export const getOverviewEmbeddableFactory = ({ coreStart: CoreStart; pluginsStart: SLOPublicPluginsStart; sloClient: SLORepositoryClient; -}) => { - const factory: ReactEmbeddableFactory< - SloOverviewEmbeddableState, - SloOverviewEmbeddableState, - SloOverviewApi - > = { - type: SLO_OVERVIEW_EMBEDDABLE_ID, - deserializeState: (state) => { - return state.rawState as SloOverviewEmbeddableState; - }, - buildEmbeddable: async (state, buildApi, uuid, parentApi) => { - const deps = { ...coreStart, ...pluginsStart }; - async function onEdit() { - try { - const { openSloConfiguration } = await import('./slo_overview_open_configuration'); +}): ReactEmbeddableFactory< + SloOverviewEmbeddableState, + SloOverviewEmbeddableState, + SloOverviewApi +> => ({ + type: SLO_OVERVIEW_EMBEDDABLE_ID, + deserializeState: (state) => { + return state.rawState as SloOverviewEmbeddableState; + }, + buildEmbeddable: async (state, buildApi, uuid, parentApi) => { + const deps = { ...coreStart, ...pluginsStart }; - const result = await openSloConfiguration( - coreStart, - pluginsStart, - sloClient, - api.getSloGroupOverviewConfig() - ); - api.updateSloGroupOverviewConfig(result as GroupSloCustomInput); - } catch (e) { - return Promise.reject(); - } - } - const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); - const defaultTitle$ = new BehaviorSubject(getOverviewPanelTitle()); - const sloId$ = new BehaviorSubject(state.sloId); - const sloInstanceId$ = new BehaviorSubject(state.sloInstanceId); - const showAllGroupByInstances$ = new BehaviorSubject(state.showAllGroupByInstances); - const overviewMode$ = new BehaviorSubject(state.overviewMode); - const groupFilters$ = new BehaviorSubject(state.groupFilters); - const remoteName$ = new BehaviorSubject(state.remoteName); - const reload$ = new Subject(); + const dynamicActionsApi = deps.embeddableEnhanced?.initializeReactEmbeddableDynamicActions( + uuid, + () => titlesApi.panelTitle.getValue(), + state + ); - const api = buildApi( - { - ...titlesApi, - defaultPanelTitle: defaultTitle$, - getTypeDisplayName: () => - i18n.translate('xpack.slo.editSloOverviewEmbeddableTitle.typeDisplayName', { - defaultMessage: 'criteria', - }), - isEditingEnabled: () => api.getSloGroupOverviewConfig().overviewMode === 'groups', - onEdit: async () => { - onEdit(); - }, - serializeState: () => { - return { - rawState: { - ...serializeTitles(), - sloId: sloId$.getValue(), - sloInstanceId: sloInstanceId$.getValue(), - showAllGroupByInstances: showAllGroupByInstances$.getValue(), - overviewMode: overviewMode$.getValue(), - groupFilters: groupFilters$.getValue(), - remoteName: remoteName$.getValue(), - }, - }; - }, - getSloGroupOverviewConfig: () => { - return { - groupFilters: groupFilters$.getValue(), + const maybeStopDynamicActions = dynamicActionsApi?.startDynamicActions(); + + const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); + const defaultTitle$ = new BehaviorSubject(getOverviewPanelTitle()); + const sloId$ = new BehaviorSubject(state.sloId); + const sloInstanceId$ = new BehaviorSubject(state.sloInstanceId); + const showAllGroupByInstances$ = new BehaviorSubject(state.showAllGroupByInstances); + const overviewMode$ = new BehaviorSubject(state.overviewMode); + const groupFilters$ = new BehaviorSubject(state.groupFilters); + const remoteName$ = new BehaviorSubject(state.remoteName); + const reload$ = new Subject(); + + const api = buildApi( + { + ...titlesApi, + ...(dynamicActionsApi?.dynamicActionsApi ?? {}), + supportedTriggers: () => [], + defaultPanelTitle: defaultTitle$, + getTypeDisplayName: () => + i18n.translate('xpack.slo.editSloOverviewEmbeddableTitle.typeDisplayName', { + defaultMessage: 'criteria', + }), + isEditingEnabled: () => api.getSloGroupOverviewConfig().overviewMode === 'groups', + onEdit: async function onEdit() { + try { + const { openSloConfiguration } = await import('./slo_overview_open_configuration'); + + const result = await openSloConfiguration( + coreStart, + pluginsStart, + sloClient, + api.getSloGroupOverviewConfig() + ); + api.updateSloGroupOverviewConfig(result as GroupSloCustomInput); + } catch (e) { + return Promise.reject(); + } + }, + serializeState: () => { + return { + rawState: { + ...serializeTitles(), + sloId: sloId$.getValue(), + sloInstanceId: sloInstanceId$.getValue(), + showAllGroupByInstances: showAllGroupByInstances$.getValue(), overviewMode: overviewMode$.getValue(), - }; - }, - updateSloGroupOverviewConfig: (update: GroupSloCustomInput) => { - groupFilters$.next(update.groupFilters); - }, + groupFilters: groupFilters$.getValue(), + remoteName: remoteName$.getValue(), + ...(dynamicActionsApi?.serializeDynamicActions?.() ?? {}), + }, + }; }, - { - sloId: [sloId$, (value) => sloId$.next(value)], - sloInstanceId: [sloInstanceId$, (value) => sloInstanceId$.next(value)], - groupFilters: [groupFilters$, (value) => groupFilters$.next(value)], - showAllGroupByInstances: [ - showAllGroupByInstances$, - (value) => showAllGroupByInstances$.next(value), - ], - remoteName: [remoteName$, (value) => remoteName$.next(value)], - overviewMode: [overviewMode$, (value) => overviewMode$.next(value)], - ...titleComparators, - } - ); - - const fetchSubscription = fetch$(api) - .pipe() - .subscribe((next) => { - reload$.next(next.isReload); - }); + getSloGroupOverviewConfig: () => { + return { + groupFilters: groupFilters$.getValue(), + overviewMode: overviewMode$.getValue(), + }; + }, + updateSloGroupOverviewConfig: (update: GroupSloCustomInput) => { + groupFilters$.next(update.groupFilters); + }, + }, + { + sloId: [sloId$, (value) => sloId$.next(value)], + sloInstanceId: [sloInstanceId$, (value) => sloInstanceId$.next(value)], + groupFilters: [groupFilters$, (value) => groupFilters$.next(value)], + showAllGroupByInstances: [ + showAllGroupByInstances$, + (value) => showAllGroupByInstances$.next(value), + ], + remoteName: [remoteName$, (value) => remoteName$.next(value)], + overviewMode: [overviewMode$, (value) => overviewMode$.next(value)], + ...titleComparators, + ...(dynamicActionsApi?.dynamicActionsComparator ?? { + enhancements: getUnchangingComparator(), + }), + } + ); - return { - api, - Component: () => { - const [ - sloId, - sloInstanceId, - showAllGroupByInstances, - overviewMode, - groupFilters, - remoteName, - ] = useBatchedPublishingSubjects( - sloId$, - sloInstanceId$, - showAllGroupByInstances$, - overviewMode$, - groupFilters$, - remoteName$ - ); + const fetchSubscription = fetch$(api) + .pipe() + .subscribe((next) => { + reload$.next(next.isReload); + }); - useEffect(() => { - return () => { - fetchSubscription.unsubscribe(); - }; - }, []); - const renderOverview = () => { - if (overviewMode === 'groups') { - const groupBy = groupFilters?.groupBy ?? 'status'; - const kqlQuery = groupFilters?.kqlQuery ?? ''; - const groups = groupFilters?.groups ?? []; - return ( -
      css` - width: 100%; - padding: ${euiTheme.size.xs} ${euiTheme.size.base}; - overflow: scroll; + return { + api, + Component: () => { + const [ + sloId, + sloInstanceId, + showAllGroupByInstances, + overviewMode, + groupFilters, + remoteName, + ] = useBatchedPublishingSubjects( + sloId$, + sloInstanceId$, + showAllGroupByInstances$, + overviewMode$, + groupFilters$, + remoteName$ + ); - .euiAccordion__buttonContent { - min-width: ${euiTheme.base * 6}px; - } - `} - > - - css` - margin-top: ${euiTheme.base * 1.25}px; - `} - > - - - -
      - ); - } else { - return ( - - ); - } + useEffect(() => { + return () => { + fetchSubscription.unsubscribe(); + maybeStopDynamicActions?.stopDynamicActions(); }; + }, []); + const renderOverview = () => { + if (overviewMode === 'groups') { + const groupBy = groupFilters?.groupBy ?? 'status'; + const kqlQuery = groupFilters?.kqlQuery ?? ''; + const groups = groupFilters?.groups ?? []; + return ( +
      css` + width: 100%; + padding: ${euiTheme.size.xs} ${euiTheme.size.base}; + overflow: scroll; - const queryClient = new QueryClient(); - - return ( - - - - + + css` + margin-top: ${euiTheme.base * 1.25}px; + `} > - - {showAllGroupByInstances ? ( - - ) : ( - renderOverview() - )} - - - - - - ); - }, - }; - }, - }; - return factory; -}; + + + +
      + ); + } else { + return ( + + ); + } + }; + + const queryClient = new QueryClient(); + + return ( + + + + + + {showAllGroupByInstances ? ( + + ) : ( + renderOverview() + )} + + + + + + ); + }, + }; + }, +}); diff --git a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/overview/types.ts b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/overview/types.ts index 3c2866077aaa6..d79a0ecd8a4dc 100644 --- a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/overview/types.ts +++ b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/overview/types.ts @@ -4,15 +4,16 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ +import type { DynamicActionsSerializedState } from '@kbn/embeddable-enhanced-plugin/public/plugin'; +import { DefaultEmbeddableApi } from '@kbn/embeddable-plugin/public'; +import { Filter } from '@kbn/es-query'; +import type { EmbeddableApiContext, HasSupportedTriggers } from '@kbn/presentation-publishing'; import { - SerializedTitles, - PublishesWritablePanelTitle, - PublishesPanelTitle, HasEditCapabilities, + PublishesPanelTitle, + PublishesWritablePanelTitle, + SerializedTitles, } from '@kbn/presentation-publishing'; -import type { EmbeddableApiContext } from '@kbn/presentation-publishing'; -import { DefaultEmbeddableApi } from '@kbn/embeddable-plugin/public'; -import { Filter } from '@kbn/es-query'; export type OverviewMode = 'single' | 'groups'; export type GroupBy = 'slo.tags' | 'status' | 'slo.indicator.type'; @@ -39,6 +40,7 @@ export type GroupSloCustomInput = SloConfigurationProps & { }; export type SloOverviewEmbeddableState = SerializedTitles & + Partial & Partial & Partial; @@ -46,7 +48,8 @@ export type SloOverviewApi = DefaultEmbeddableApi & PublishesWritablePanelTitle & PublishesPanelTitle & HasSloGroupOverviewConfig & - HasEditCapabilities; + HasEditCapabilities & + HasSupportedTriggers; export interface HasSloGroupOverviewConfig { getSloGroupOverviewConfig: () => GroupSloCustomInput; diff --git a/x-pack/plugins/observability_solution/slo/public/types.ts b/x-pack/plugins/observability_solution/slo/public/types.ts index 964fb9b289ea3..80439c4a4134c 100644 --- a/x-pack/plugins/observability_solution/slo/public/types.ts +++ b/x-pack/plugins/observability_solution/slo/public/types.ts @@ -15,6 +15,7 @@ import { DataViewFieldEditorStart } from '@kbn/data-view-field-editor-plugin/pub import type { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; import type { DiscoverStart } from '@kbn/discover-plugin/public'; import type { DiscoverSharedPublicStart } from '@kbn/discover-shared-plugin/public'; +import type { EmbeddableEnhancedPluginStart } from '@kbn/embeddable-enhanced-plugin/public'; import type { EmbeddableSetup, EmbeddableStart } from '@kbn/embeddable-plugin/public'; import { FieldFormatsStart } from '@kbn/field-formats-plugin/public'; import type { LensPublicStart } from '@kbn/lens-plugin/public'; @@ -82,6 +83,7 @@ export interface SLOPublicPluginsStart { discover?: DiscoverStart; discoverShared: DiscoverSharedPublicStart; embeddable: EmbeddableStart; + embeddableEnhanced?: EmbeddableEnhancedPluginStart; fieldFormats: FieldFormatsStart; lens: LensPublicStart; licensing: LicensingPluginStart; diff --git a/x-pack/plugins/observability_solution/slo/tsconfig.json b/x-pack/plugins/observability_solution/slo/tsconfig.json index 3b01431c3fb45..125a8463be595 100644 --- a/x-pack/plugins/observability_solution/slo/tsconfig.json +++ b/x-pack/plugins/observability_solution/slo/tsconfig.json @@ -30,6 +30,7 @@ "@kbn/alerting-plugin", "@kbn/rison", "@kbn/embeddable-plugin", + "@kbn/embeddable-enhanced-plugin", "@kbn/lens-plugin", "@kbn/ui-theme", "@kbn/es-query", diff --git a/x-pack/plugins/observability_solution/synthetics/e2e/synthetics/journeys/management_list.journey.ts b/x-pack/plugins/observability_solution/synthetics/e2e/synthetics/journeys/management_list.journey.ts index c81fe084194d5..7794099093c5e 100644 --- a/x-pack/plugins/observability_solution/synthetics/e2e/synthetics/journeys/management_list.journey.ts +++ b/x-pack/plugins/observability_solution/synthetics/e2e/synthetics/journeys/management_list.journey.ts @@ -69,6 +69,7 @@ journey(`MonitorManagementList`, async ({ page, params }) => { await page.click('span >> text="Journey / Page"'); await page.click('[aria-label="Apply the selected filters for Type"]'); expect(page.url()).toBe(`${pageBaseUrl}?monitorTypes=%5B%22browser%22%5D`); + await page.waitForTimeout(5000); await page.click('[placeholder="Search by name, URL, host, tag, project or location"]'); await Promise.all([ page.waitForNavigation({ diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/stats_overview/stats_overview_embeddable_factory.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/stats_overview/stats_overview_embeddable_factory.tsx index 83b37f080d422..df311819399f3 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/stats_overview/stats_overview_embeddable_factory.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/stats_overview/stats_overview_embeddable_factory.tsx @@ -67,6 +67,7 @@ export const getStatsOverviewEmbeddableFactory = ( i18n.translate('xpack.synthetics.editSloOverviewEmbeddableTitle.typeDisplayName', { defaultMessage: 'filters', }), + isEditingEnabled: () => true, onEdit: async () => { try { diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/add_monitor_project.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/add_monitor_project.ts index bc55c950a2e81..db8fbdd661f76 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/add_monitor_project.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/add_monitor_project.ts @@ -14,7 +14,7 @@ import { ProjectMonitor } from '../../../common/runtime_types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; import { ProjectMonitorFormatter } from '../../synthetics_service/project_monitor/project_monitor_formatter'; -const MAX_PAYLOAD_SIZE = 1048576 * 100; // 20MiB +const MAX_PAYLOAD_SIZE = 1048576 * 50; // 50MiB export const addSyntheticsProjectMonitorRoute: SyntheticsRestApiRouteFactory = () => ({ method: 'PUT', diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/overview_trends/overview_trends.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/overview_trends/overview_trends.ts index d68fc71c59b11..66be7171b2fe4 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/routes/overview_trends/overview_trends.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/routes/overview_trends/overview_trends.ts @@ -53,6 +53,7 @@ export async function fetchTrends( export const createOverviewTrendsRoute: SyntheticsRestApiRouteFactory = () => ({ method: 'POST', + writeAccess: false, path: SYNTHETICS_API_URLS.OVERVIEW_TRENDS, validate: { body: schema.arrayOf( diff --git a/x-pack/plugins/reporting/README.md b/x-pack/plugins/reporting/README.md index 7e4d1beefde19..708b3de190875 100644 --- a/x-pack/plugins/reporting/README.md +++ b/x-pack/plugins/reporting/README.md @@ -14,5 +14,3 @@ Although historically related to reporting, the CsvGenerator class has now be mo There are several improvements made for reporting in serverless environments. Most changes are reflected in `reporting/server/config/schema.ts` for reference. PNG and PDF reports are currently not possible in serverless. Those export types are not enabled in serverless configuration, and are left out of Reporting's internal registry of export types. - -The setting `xpack.reporting.roles.enabled` is `false` by default for serverless. This setting enables backwards-compatible functionality for reporting privileges, this type of BWC is not needed in serverless. diff --git a/x-pack/plugins/reporting/public/index.ts b/x-pack/plugins/reporting/public/index.ts index 59f1f4e359851..c78b27d77ef91 100644 --- a/x-pack/plugins/reporting/public/index.ts +++ b/x-pack/plugins/reporting/public/index.ts @@ -13,13 +13,6 @@ import { ReportingPublicPlugin } from './plugin'; * Setup contract for the Reporting plugin. */ export interface ReportingSetup { - /** - * Used to inform plugins if Reporting config is compatible with UI Capabilities / Application Sub-Feature Controls - * - * @returns boolean - */ - usesUiCapabilities: () => boolean; - /** * A set of React components for displaying a Reporting share menu in an application */ diff --git a/x-pack/plugins/reporting/public/management/__test__/report_listing.test.helpers.tsx b/x-pack/plugins/reporting/public/management/__test__/report_listing.test.helpers.tsx index 19337a6f46deb..846b06a631e7e 100644 --- a/x-pack/plugins/reporting/public/management/__test__/report_listing.test.helpers.tsx +++ b/x-pack/plugins/reporting/public/management/__test__/report_listing.test.helpers.tsx @@ -73,9 +73,6 @@ export const mockConfig: ClientConfigType = { enabled: true, }, }, - roles: { - enabled: false, - }, statefulSettings: { enabled: true }, }; diff --git a/x-pack/plugins/reporting/public/mocks.ts b/x-pack/plugins/reporting/public/mocks.ts index b1a447f48a8c0..1888674e68ce2 100644 --- a/x-pack/plugins/reporting/public/mocks.ts +++ b/x-pack/plugins/reporting/public/mocks.ts @@ -17,7 +17,6 @@ const createSetupContract = (): Setup => { const coreSetup = coreMock.createSetup(); const apiClient = new ReportingAPIClient(coreSetup.http, coreSetup.uiSettings, '7.15.0'); return { - usesUiCapabilities: jest.fn().mockImplementation(() => true), components: getSharedComponents(apiClient, Rx.from(coreSetup.getStartServices())), }; }; diff --git a/x-pack/plugins/reporting/public/plugin.ts b/x-pack/plugins/reporting/public/plugin.ts index 95b53b081d408..8dc9e2d96f717 100644 --- a/x-pack/plugins/reporting/public/plugin.ts +++ b/x-pack/plugins/reporting/public/plugin.ts @@ -86,7 +86,6 @@ export class ReportingPublicPlugin private getContract(apiClient: ReportingAPIClient, startServices$: StartServices$) { this.contract = { - usesUiCapabilities: () => this.config.roles?.enabled === false, components: getSharedComponents(apiClient, startServices$), }; @@ -125,7 +124,6 @@ export class ReportingPublicPlugin ]; }) ); - const usesUiCapabilities = !this.config.roles.enabled; const apiClient = new ReportingAPIClient(core.http, core.uiSettings, this.kibanaVersion); this.apiClient = apiClient; @@ -206,7 +204,6 @@ export class ReportingPublicPlugin core, apiClient, startServices$, - usesUiCapabilities, csvConfig: this.config.csv, }) ); @@ -218,7 +215,6 @@ export class ReportingPublicPlugin apiClient, license, application, - usesUiCapabilities, startServices$, }) ); @@ -229,7 +225,6 @@ export class ReportingPublicPlugin apiClient, license, application, - usesUiCapabilities, startServices$, }) ); diff --git a/x-pack/plugins/reporting/server/config/create_config.test.ts b/x-pack/plugins/reporting/server/config/create_config.test.ts index bd65ad245e89d..f2502db6dcdf0 100644 --- a/x-pack/plugins/reporting/server/config/create_config.test.ts +++ b/x-pack/plugins/reporting/server/config/create_config.test.ts @@ -92,9 +92,6 @@ describe('Reporting server createConfig', () => { "pollInterval": 3000, "timeout": 120000, }, - "roles": Object { - "enabled": false, - }, "statefulSettings": Object { "enabled": true, }, diff --git a/x-pack/plugins/reporting/server/config/index.test.ts b/x-pack/plugins/reporting/server/config/index.test.ts deleted file mode 100644 index d6b0f31ddc5f3..0000000000000 --- a/x-pack/plugins/reporting/server/config/index.test.ts +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { config } from '.'; -import { applyDeprecations, configDeprecationFactory } from '@kbn/config'; -import { configDeprecationsMock } from '@kbn/core/server/mocks'; - -const CONFIG_PATH = 'xpack.reporting'; - -const deprecationContext = configDeprecationsMock.createContext(); - -const applyReportingDeprecations = (settings: Record = {}) => { - const deprecations = config.deprecations!(configDeprecationFactory); - const deprecationMessages: string[] = []; - const _config: any = {}; - _config[CONFIG_PATH] = settings; - const { config: migrated } = applyDeprecations( - _config, - deprecations.map((deprecation) => ({ - deprecation, - path: CONFIG_PATH, - context: deprecationContext, - })), - () => - ({ message }) => - deprecationMessages.push(message) - ); - return { - messages: deprecationMessages, - migrated, - }; -}; - -describe('deprecations', () => { - it('logs a warning of roles.enabled for defaults', () => { - const { messages } = applyReportingDeprecations({}); - expect(messages).toMatchInlineSnapshot(` - Array [ - "The default mechanism for Reporting privileges will work differently in future versions, which will affect the behavior of this cluster. Set \\"xpack.reporting.roles.enabled\\" to \\"false\\" to adopt the future behavior before upgrading.", - ] - `); - }); - - it('logs a warning if roles.enabled: true is set', () => { - const { messages } = applyReportingDeprecations({ roles: { enabled: true } }); - expect(messages).toMatchInlineSnapshot(` - Array [ - "The default mechanism for Reporting privileges will work differently in future versions, which will affect the behavior of this cluster. Set \\"xpack.reporting.roles.enabled\\" to \\"false\\" to adopt the future behavior before upgrading.", - ] - `); - }); - - it('does not log a warning recommended settings are used', () => { - const { messages } = applyReportingDeprecations({ - roles: { enabled: false }, - }); - expect(messages).toMatchInlineSnapshot(`Array []`); - }); -}); diff --git a/x-pack/plugins/reporting/server/config/index.ts b/x-pack/plugins/reporting/server/config/index.ts index c99e2667eb6df..7ea68941caac9 100644 --- a/x-pack/plugins/reporting/server/config/index.ts +++ b/x-pack/plugins/reporting/server/config/index.ts @@ -5,68 +5,27 @@ * 2.0. */ -import { get } from 'lodash'; - import { PluginConfigDescriptor } from '@kbn/core/server'; -import { i18n } from '@kbn/i18n'; import { ConfigSchema, ReportingConfigType } from '@kbn/reporting-server'; export const config: PluginConfigDescriptor = { exposeToBrowser: { csv: { scroll: true }, poll: true, - roles: true, export_types: true, statefulSettings: true, }, schema: ConfigSchema, deprecations: ({ unused }) => [ unused('csv.enablePanelActionDownload', { level: 'warning' }), // unused since 9.0 + unused('roles.enabled', { level: 'warning' }), // unused since 9.0 + unused('roles.allow', { level: 'warning' }), // unused since 9.0 unused('queue.indexInterval', { level: 'warning' }), // unused since 8.15 unused('capture.browser.chromium.maxScreenshotDimension', { level: 'warning' }), // unused since 7.8 unused('capture.browser.type', { level: 'warning' }), unused('poll.jobCompletionNotifier.intervalErrorMultiplier', { level: 'warning' }), // unused since 7.10 unused('poll.jobsRefresh.intervalErrorMultiplier', { level: 'warning' }), // unused since 7.10 unused('capture.viewport', { level: 'warning' }), // deprecated as unused since 7.16 - (settings, fromPath, addDeprecation) => { - const reporting = get(settings, fromPath); - if (reporting?.roles?.enabled !== false) { - addDeprecation({ - configPath: `${fromPath}.roles.enabled`, - level: 'warning', - title: i18n.translate('xpack.reporting.deprecations.reportingRoles.title', { - defaultMessage: `The "{fromPath}.roles" setting is deprecated`, - values: { fromPath }, - }), - // TODO: once scheduled reports is released, restate this to say that we have no access to scheduled reporting. - // https://github.com/elastic/kibana/issues/79905 - message: i18n.translate('xpack.reporting.deprecations.reportingRoles.description', { - defaultMessage: - `The default mechanism for Reporting privileges will work differently in future versions,` + - ` which will affect the behavior of this cluster. Set "xpack.reporting.roles.enabled" to` + - ` "false" to adopt the future behavior before upgrading.`, - }), - correctiveActions: { - manualSteps: [ - i18n.translate('xpack.reporting.deprecations.reportingRoles.manualStepOne', { - defaultMessage: `Set "xpack.reporting.roles.enabled" to "false" in kibana.yml.`, - }), - i18n.translate('xpack.reporting.deprecations.reportingRoles.manualStepTwo', { - defaultMessage: `Remove "xpack.reporting.roles.allow" in kibana.yml, if present.`, - }), - i18n.translate('xpack.reporting.deprecations.reportingRoles.manualStepThree', { - defaultMessage: - `Go to Management > Security > Roles to create one or more roles that grant` + - ` the Kibana application privilege for Reporting.`, - }), - i18n.translate('xpack.reporting.deprecations.reportingRoles.manualStepFour', { - defaultMessage: `Grant Reporting privileges to users by assigning one of the new roles.`, - }), - ], - }, - }); - } - }, ], exposeToUsage: { capture: { maxAttempts: true }, @@ -76,7 +35,6 @@ export const config: PluginConfigDescriptor = { }, kibanaServer: false, // show as [redacted] queue: { indexInterval: true, pollEnabled: true, timeout: true }, - roles: { enabled: true }, }, }; diff --git a/x-pack/plugins/reporting/server/core.ts b/x-pack/plugins/reporting/server/core.ts index 283488dd5a973..117849365de9a 100644 --- a/x-pack/plugins/reporting/server/core.ts +++ b/x-pack/plugins/reporting/server/core.ts @@ -92,7 +92,6 @@ export class ReportingCore { private pluginStartDeps?: ReportingInternalStart; private readonly pluginSetup$ = new Rx.ReplaySubject(); // observe async background setupDeps each are done private readonly pluginStart$ = new Rx.ReplaySubject(); // observe async background startDeps - private deprecatedAllowedRoles: string[] | false = false; // DEPRECATED. If `false`, the deprecated features have been disableed private executeTask: ExecuteReportTask; private config: ReportingConfigType; private executing: Set; @@ -114,11 +113,9 @@ export class ReportingCore { this.getExportTypes().forEach((et) => { this.exportTypesRegistry.register(et); }); - this.deprecatedAllowedRoles = config.roles.enabled ? config.roles.allow : false; this.executeTask = new ExecuteReportTask(this, config, this.logger); this.getContract = () => ({ - usesUiCapabilities: () => config.roles.enabled === false, registerExportTypes: (id) => id, getSpaceId: this.getSpaceId.bind(this), }); @@ -257,15 +254,6 @@ export class ReportingCore { return this.config; } - /* - * If deprecated feature has not been disabled, - * this returns an array of allowed role names - * that have access to Reporting. - */ - public getDeprecatedAllowedRoles(): string[] | false { - return this.deprecatedAllowedRoles; - } - /* * Track usage of API endpoints */ diff --git a/x-pack/plugins/reporting/server/deprecations/__snapshots__/reporting_role.test.ts.snap b/x-pack/plugins/reporting/server/deprecations/__snapshots__/reporting_role.test.ts.snap deleted file mode 100644 index 92456f9eec706..0000000000000 --- a/x-pack/plugins/reporting/server/deprecations/__snapshots__/reporting_role.test.ts.snap +++ /dev/null @@ -1,119 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`roles mapped to a deprecated role includes steps to remove the incompatible config, when applicable 1`] = ` -Array [ - Object { - "correctiveActions": Object { - "manualSteps": Array [ - "Set \\"xpack.reporting.roles.enabled\\" to \\"false\\" in kibana.yml.", - "Remove \\"xpack.reporting.roles.allow\\" in kibana.yml, if present.", - "Go to Management > Security > Roles to create one or more roles that grant the Kibana application privilege for Reporting.", - "Grant Reporting privileges to users by assigning one of the new roles.", - "Remove the \\"reporting_user\\" role from all users and add the custom role. The affected users are: reportron[reporting_user].", - ], - }, - "deprecationType": "feature", - "documentationUrl": "https://www.elastic.co/guide/en/kibana/branch/kibana-privileges.html", - "level": "warning", - "message": "The default mechanism for Reporting privileges will work differently in future versions, and this cluster has users who have a deprecated role for this privilege. Set \\"xpack.reporting.roles.enabled\\" to \\"false\\" to adopt the future behavior before upgrading.", - "title": "The \\"reporting_user\\" role is deprecated: check user roles", - }, -] -`; - -exports[`roles mapped to a deprecated role logs a deprecation when a role was found that maps to a deprecated custom role from the roles.allow setting 1`] = ` -Array [ - Object { - "correctiveActions": Object { - "manualSteps": Array [ - "Go to Management > Security > Roles to create one or more roles that grant the Kibana application privilege for Reporting.", - "Grant Reporting privileges to users by assigning one of the new roles.", - "Remove the \\"reporting_user\\" role from all role mappings and add the custom role. The affected role mappings are: dungeon_master[my_test_reporting_user].", - ], - }, - "deprecationType": "feature", - "documentationUrl": "https://www.elastic.co/guide/en/kibana/branch/kibana-privileges.html", - "level": "warning", - "message": "The default mechanism for Reporting privileges will work differently in future versions, and this cluster has role mappings that are mapped to a deprecated role for this privilege. Set \\"xpack.reporting.roles.enabled\\" to \\"false\\" to adopt the future behavior before upgrading.", - "title": "The \\"reporting_user\\" role is deprecated: check role mappings", - }, -] -`; - -exports[`roles mapped to a deprecated role logs a deprecation when a role was found that maps to the deprecated reporting_user role 1`] = ` -Array [ - Object { - "correctiveActions": Object { - "manualSteps": Array [ - "Go to Management > Security > Roles to create one or more roles that grant the Kibana application privilege for Reporting.", - "Grant Reporting privileges to users by assigning one of the new roles.", - "Remove the \\"reporting_user\\" role from all role mappings and add the custom role. The affected role mappings are: dungeon_master[reporting_user].", - ], - }, - "deprecationType": "feature", - "documentationUrl": "https://www.elastic.co/guide/en/kibana/branch/kibana-privileges.html", - "level": "warning", - "message": "The default mechanism for Reporting privileges will work differently in future versions, and this cluster has role mappings that are mapped to a deprecated role for this privilege. Set \\"xpack.reporting.roles.enabled\\" to \\"false\\" to adopt the future behavior before upgrading.", - "title": "The \\"reporting_user\\" role is deprecated: check role mappings", - }, -] -`; - -exports[`users assigned to a deprecated role includes steps to remove the incompatible config, when applicable 1`] = ` -Array [ - Object { - "correctiveActions": Object { - "manualSteps": Array [ - "Set \\"xpack.reporting.roles.enabled\\" to \\"false\\" in kibana.yml.", - "Remove \\"xpack.reporting.roles.allow\\" in kibana.yml, if present.", - "Go to Management > Security > Roles to create one or more roles that grant the Kibana application privilege for Reporting.", - "Grant Reporting privileges to users by assigning one of the new roles.", - "Remove the \\"reporting_user\\" role from all users and add the custom role. The affected users are: reportron[reporting_user].", - ], - }, - "deprecationType": "feature", - "documentationUrl": "https://www.elastic.co/guide/en/kibana/branch/kibana-privileges.html", - "level": "warning", - "message": "The default mechanism for Reporting privileges will work differently in future versions, and this cluster has users who have a deprecated role for this privilege. Set \\"xpack.reporting.roles.enabled\\" to \\"false\\" to adopt the future behavior before upgrading.", - "title": "The \\"reporting_user\\" role is deprecated: check user roles", - }, -] -`; - -exports[`users assigned to a deprecated role logs a deprecation when a user was found with a deprecated custom role from the roles.allow setting 1`] = ` -Array [ - Object { - "correctiveActions": Object { - "manualSteps": Array [ - "Go to Management > Security > Roles to create one or more roles that grant the Kibana application privilege for Reporting.", - "Grant Reporting privileges to users by assigning one of the new roles.", - "Remove the \\"reporting_user\\" role from all users and add the custom role. The affected users are: reportron[my_test_reporting_user].", - ], - }, - "deprecationType": "feature", - "documentationUrl": "https://www.elastic.co/guide/en/kibana/branch/kibana-privileges.html", - "level": "warning", - "message": "The default mechanism for Reporting privileges will work differently in future versions, and this cluster has users who have a deprecated role for this privilege. Set \\"xpack.reporting.roles.enabled\\" to \\"false\\" to adopt the future behavior before upgrading.", - "title": "The \\"reporting_user\\" role is deprecated: check user roles", - }, -] -`; - -exports[`users assigned to a deprecated role logs a deprecation when a user was found with a deprecated reporting_user role 1`] = ` -Array [ - Object { - "correctiveActions": Object { - "manualSteps": Array [ - "Go to Management > Security > Roles to create one or more roles that grant the Kibana application privilege for Reporting.", - "Grant Reporting privileges to users by assigning one of the new roles.", - "Remove the \\"reporting_user\\" role from all users and add the custom role. The affected users are: reportron[reporting_user].", - ], - }, - "deprecationType": "feature", - "documentationUrl": "https://www.elastic.co/guide/en/kibana/branch/kibana-privileges.html", - "level": "warning", - "message": "The default mechanism for Reporting privileges will work differently in future versions, and this cluster has users who have a deprecated role for this privilege. Set \\"xpack.reporting.roles.enabled\\" to \\"false\\" to adopt the future behavior before upgrading.", - "title": "The \\"reporting_user\\" role is deprecated: check user roles", - }, -] -`; diff --git a/x-pack/plugins/reporting/server/deprecations/index.ts b/x-pack/plugins/reporting/server/deprecations/index.ts index bca439532b3b0..b00cd4db68515 100644 --- a/x-pack/plugins/reporting/server/deprecations/index.ts +++ b/x-pack/plugins/reporting/server/deprecations/index.ts @@ -5,24 +5,12 @@ * 2.0. */ import { CoreSetup } from '@kbn/core/server'; -import { ReportingCore } from '../core'; - import { getDeprecationsInfo as getIlmPolicyDeprecationsInfo } from './migrate_existing_indices_ilm_policy'; -import { getDeprecationsInfo as getReportingRoleDeprecationsInfo } from './reporting_role'; -export const registerDeprecations = ({ - core, - reportingCore, -}: { - core: CoreSetup; - reportingCore: ReportingCore; -}) => { +export const registerDeprecations = ({ core }: { core: CoreSetup }) => { core.deprecations.registerDeprecations({ getDeprecations: async (ctx) => { - return [ - ...(await getIlmPolicyDeprecationsInfo(ctx)), - ...(await getReportingRoleDeprecationsInfo(ctx, { reportingCore })), - ]; + return await getIlmPolicyDeprecationsInfo(ctx); }, }); }; diff --git a/x-pack/plugins/reporting/server/deprecations/reporting_role.test.ts b/x-pack/plugins/reporting/server/deprecations/reporting_role.test.ts deleted file mode 100644 index 4f58767e78b06..0000000000000 --- a/x-pack/plugins/reporting/server/deprecations/reporting_role.test.ts +++ /dev/null @@ -1,177 +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 { GetDeprecationsContext, IScopedClusterClient } from '@kbn/core/server'; -import { elasticsearchServiceMock } from '@kbn/core/server/mocks'; -import { createMockConfigSchema } from '@kbn/reporting-mocks-server'; -import { ReportingCore } from '..'; -import { createMockPluginSetup, createMockReportingCore } from '../test_helpers'; -import { getDeprecationsInfo } from './reporting_role'; - -let reportingCore: ReportingCore; -let context: GetDeprecationsContext; -let esClient: jest.Mocked; - -beforeEach(async () => { - reportingCore = await createMockReportingCore( - createMockConfigSchema({ roles: { enabled: false } }) - ); - - esClient = elasticsearchServiceMock.createScopedClusterClient(); - esClient.asCurrentUser.security.getUser = jest.fn().mockResolvedValue({ - xyz: { username: 'normal_user', roles: ['data_analyst'] }, - }); - esClient.asCurrentUser.security.getRoleMapping = jest.fn().mockResolvedValue({}); - - context = { esClient } as unknown as GetDeprecationsContext; -}); - -test('logs no deprecations when setup has no issues', async () => { - expect(await getDeprecationsInfo(context, { reportingCore })).toMatchInlineSnapshot(`Array []`); -}); - -describe('users assigned to a deprecated role', () => { - test('logs a deprecation when a user was found with a deprecated reporting_user role', async () => { - esClient.asCurrentUser.security.getUser = jest.fn().mockResolvedValue({ - reportron: { - username: 'reportron', - roles: ['kibana_admin', 'reporting_user'], - }, - }); - - reportingCore = await createMockReportingCore(createMockConfigSchema()); - - expect(await getDeprecationsInfo(context, { reportingCore })).toMatchSnapshot(); - }); - - test('logs a deprecation when a user was found with a deprecated custom role from the roles.allow setting', async () => { - reportingCore = await createMockReportingCore( - createMockConfigSchema({ roles: { allow: ['my_test_reporting_user'] } }) - ); - esClient.asCurrentUser.security.getUser = jest.fn().mockResolvedValue({ - reportron: { username: 'reportron', roles: ['kibana_admin', 'my_test_reporting_user'] }, - }); - - expect(await getDeprecationsInfo(context, { reportingCore })).toMatchSnapshot(); - }); - - test('includes steps to remove the incompatible config, when applicable', async () => { - esClient.asCurrentUser.security.getUser = jest.fn().mockResolvedValue({ - reportron: { - username: 'reportron', - roles: ['kibana_admin', 'reporting_user'], - }, - }); - - reportingCore = await createMockReportingCore( - createMockConfigSchema({ roles: { enabled: true } }) - ); - - expect(await getDeprecationsInfo(context, { reportingCore })).toMatchSnapshot(); - }); -}); - -describe('roles mapped to a deprecated role', () => { - test('logs a deprecation when a role was found that maps to the deprecated reporting_user role', async () => { - esClient.asCurrentUser.security.getRoleMapping = jest - .fn() - .mockResolvedValue({ dungeon_master: { roles: ['reporting_user'] } }); - - reportingCore = await createMockReportingCore(createMockConfigSchema()); - - expect(await getDeprecationsInfo(context, { reportingCore })).toMatchSnapshot(); - }); - - test('logs a deprecation when a role was found that maps to a deprecated custom role from the roles.allow setting', async () => { - reportingCore = await createMockReportingCore( - createMockConfigSchema({ roles: { allow: ['my_test_reporting_user'] } }) - ); - esClient.asCurrentUser.security.getRoleMapping = jest - .fn() - .mockResolvedValue({ dungeon_master: { roles: ['my_test_reporting_user'] } }); - - expect(await getDeprecationsInfo(context, { reportingCore })).toMatchSnapshot(); - }); - - test('includes steps to remove the incompatible config, when applicable', async () => { - esClient.asCurrentUser.security.getUser = jest.fn().mockResolvedValue({ - reportron: { - username: 'reportron', - roles: ['kibana_admin', 'reporting_user'], - }, - }); - - reportingCore = await createMockReportingCore( - createMockConfigSchema({ roles: { enabled: true } }) - ); - - expect(await getDeprecationsInfo(context, { reportingCore })).toMatchSnapshot(); - }); -}); - -describe('check deprecations when security is disabled', () => { - test('logs no deprecations: roles not enabled', async () => { - reportingCore = await createMockReportingCore( - createMockConfigSchema({ roles: { enabled: false } }), - createMockPluginSetup({ security: null }) - ); - expect(await getDeprecationsInfo(context, { reportingCore })).toMatchInlineSnapshot(`Array []`); - }); - - test('logs no deprecations: roles enabled', async () => { - const mockReportingConfig = createMockConfigSchema(); // roles.enabled: true is default in 7.x / 8.0 - reportingCore = await createMockReportingCore( - mockReportingConfig, - createMockPluginSetup({ security: null }) - ); - - expect(await getDeprecationsInfo(context, { reportingCore })).toMatchInlineSnapshot(`Array []`); - }); - - test('logs no deprecations on serverless', async () => { - reportingCore = await createMockReportingCore( - createMockConfigSchema({ statefulSettings: { enabled: false } }) - ); - expect(await getDeprecationsInfo(context, { reportingCore })).toMatchInlineSnapshot(`Array []`); - }); -}); - -it('insufficient permissions', async () => { - const permissionsError = new Error('you shall not pass'); - (permissionsError as unknown as { statusCode: number }).statusCode = 403; - esClient.asCurrentUser.security.getUser = jest.fn().mockRejectedValue(permissionsError); - esClient.asCurrentUser.security.getRoleMapping = jest.fn().mockRejectedValue(permissionsError); - - expect(await getDeprecationsInfo(context, { reportingCore })).toMatchInlineSnapshot(` - Array [ - Object { - "correctiveActions": Object { - "manualSteps": Array [ - "Make sure you have a \\"manage_security\\" cluster privilege assigned.", - ], - }, - "deprecationType": "feature", - "documentationUrl": "https://www.elastic.co/guide/en/kibana/test-branch/xpack-security.html#_required_permissions_7", - "level": "fetch_error", - "message": "You do not have enough permissions to fix this deprecation.", - "title": "The \\"reporting_user\\" role is deprecated: check user roles", - }, - Object { - "correctiveActions": Object { - "manualSteps": Array [ - "Make sure you have a \\"manage_security\\" cluster privilege assigned.", - ], - }, - "deprecationType": "feature", - "documentationUrl": "https://www.elastic.co/guide/en/kibana/test-branch/xpack-security.html#_required_permissions_7", - "level": "fetch_error", - "message": "You do not have enough permissions to fix this deprecation.", - "title": "The \\"reporting_user\\" role is deprecated: check role mappings", - }, - ] - `); -}); diff --git a/x-pack/plugins/reporting/server/deprecations/reporting_role.ts b/x-pack/plugins/reporting/server/deprecations/reporting_role.ts deleted file mode 100644 index 31633760aeb84..0000000000000 --- a/x-pack/plugins/reporting/server/deprecations/reporting_role.ts +++ /dev/null @@ -1,239 +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 { - SecurityGetRoleMappingResponse, - SecurityGetUserResponse, -} from '@elastic/elasticsearch/lib/api/types'; -import { i18n } from '@kbn/i18n'; -import type { - DeprecationsDetails, - DocLinksServiceSetup, - ElasticsearchClient, - GetDeprecationsContext, -} from '@kbn/core/server'; -import { ReportingCore } from '..'; -import { deprecations } from '../lib/deprecations'; - -const REPORTING_USER_ROLE_NAME = 'reporting_user'; -const getDocumentationUrl = (branch: string) => { - // TODO: remove when docs support "main" - const docBranch = branch === 'main' ? 'master' : branch; - return `https://www.elastic.co/guide/en/kibana/${docBranch}/kibana-privileges.html`; -}; - -interface ExtraDependencies { - reportingCore: ReportingCore; -} - -export async function getDeprecationsInfo( - { esClient }: GetDeprecationsContext, - { reportingCore }: ExtraDependencies -): Promise { - const client = esClient.asCurrentUser; - const { security, docLinks } = reportingCore.getPluginSetupDeps(); - - // Nothing to do if security is disabled - if (!security?.license.isEnabled()) { - return []; - } - - const config = reportingCore.getConfig(); - const deprecatedRoles = config.roles.allow || ['reporting_user']; - - return [ - ...(await getUsersDeprecations(client, reportingCore, deprecatedRoles, docLinks)), - ...(await getRoleMappingsDeprecations(client, reportingCore, deprecatedRoles, docLinks)), - ]; -} - -async function getUsersDeprecations( - client: ElasticsearchClient, - reportingCore: ReportingCore, - deprecatedRoles: string[], - docLinks: DocLinksServiceSetup -): Promise { - const usingDeprecatedConfig = !reportingCore.getContract().usesUiCapabilities(); - const strings = { - title: i18n.translate('xpack.reporting.deprecations.reportingRoleUsers.title', { - defaultMessage: `The "{reportingUserRoleName}" role is deprecated: check user roles`, - values: { reportingUserRoleName: REPORTING_USER_ROLE_NAME }, - }), - message: i18n.translate('xpack.reporting.deprecations.reportingRoleUsers.description', { - defaultMessage: - `The default mechanism for Reporting privileges will work differently in future versions, and` + - ` this cluster has users who have a deprecated role for this privilege.` + - ` Set "xpack.reporting.roles.enabled" to "false" to adopt the future behavior before upgrading.`, - }), - manualSteps: (usersRoles: string) => [ - ...(usingDeprecatedConfig - ? [ - i18n.translate('xpack.reporting.deprecations.reportingRoleUsers.manualStepOne', { - defaultMessage: `Set "xpack.reporting.roles.enabled" to "false" in kibana.yml.`, - }), - i18n.translate('xpack.reporting.deprecations.reportingRoleUsers.manualStepTwo', { - defaultMessage: `Remove "xpack.reporting.roles.allow" in kibana.yml, if present.`, - }), - ] - : []), - - i18n.translate('xpack.reporting.deprecations.reportingRoleUsers.manualStepThree', { - defaultMessage: - `Go to Management > Security > Roles to create one or more roles that grant` + - ` the Kibana application privilege for Reporting.`, - }), - i18n.translate('xpack.reporting.deprecations.reportingRoleUsers.manualStepFour', { - defaultMessage: `Grant Reporting privileges to users by assigning one of the new roles.`, - }), - i18n.translate('xpack.reporting.deprecations.reportingRoleUsers.manualStepFive', { - defaultMessage: - `Remove the "reporting_user" role from all users and add the custom role.` + - ` The affected users are: {usersRoles}.`, - values: { usersRoles }, - }), - ], - }; - - let users: SecurityGetUserResponse; - try { - users = await client.security.getUser(); - } catch (err) { - const { logger } = reportingCore.getPluginSetupDeps(); - if (deprecations.getErrorStatusCode(err) === 403) { - logger.warn( - `Failed to retrieve users when checking for deprecations:` + - ` the "manage_security" cluster privilege is required.` - ); - } else { - logger.error( - `Failed to retrieve users when checking for deprecations,` + - ` unexpected error: ${deprecations.getDetailedErrorMessage(err)}.` - ); - } - return deprecations.deprecationError(strings.title, err, docLinks); - } - - const reportingUsers = Object.entries(users).reduce((userSet, current) => { - const [userName, user] = current; - const foundRole = user.roles.find((role) => deprecatedRoles.includes(role)); - if (foundRole) { - userSet.push(`${userName}[${foundRole}]`); - } - return userSet; - }, [] as string[]); - - if (reportingUsers.length === 0) { - return []; - } - - return [ - { - title: strings.title, - message: strings.message, - correctiveActions: { manualSteps: strings.manualSteps(reportingUsers.join(', ')) }, - level: 'warning', - deprecationType: 'feature', - documentationUrl: getDocumentationUrl(reportingCore.getKibanaPackageInfo().branch), - }, - ]; -} - -async function getRoleMappingsDeprecations( - client: ElasticsearchClient, - reportingCore: ReportingCore, - deprecatedRoles: string[], - docLinks: DocLinksServiceSetup -): Promise { - const usingDeprecatedConfig = !reportingCore.getContract().usesUiCapabilities(); - const strings = { - title: i18n.translate('xpack.reporting.deprecations.reportingRoleMappings.title', { - defaultMessage: `The "{reportingUserRoleName}" role is deprecated: check role mappings`, - values: { reportingUserRoleName: REPORTING_USER_ROLE_NAME }, - }), - message: i18n.translate('xpack.reporting.deprecations.reportingRoleMappings.description', { - defaultMessage: - `The default mechanism for Reporting privileges will work differently in future versions, and` + - ` this cluster has role mappings that are mapped to a deprecated role for this privilege.` + - ` Set "xpack.reporting.roles.enabled" to "false" to adopt the future behavior before upgrading.`, - }), - manualSteps: (roleMappings: string) => [ - ...(usingDeprecatedConfig - ? [ - i18n.translate('xpack.reporting.deprecations.reportingRoleMappings.manualStepOne', { - defaultMessage: `Set "xpack.reporting.roles.enabled" to "false" in kibana.yml.`, - }), - i18n.translate('xpack.reporting.deprecations.reportingRoleMappings.manualStepTwo', { - defaultMessage: `Remove "xpack.reporting.roles.allow" in kibana.yml, if present.`, - }), - ] - : []), - - i18n.translate('xpack.reporting.deprecations.reportingRoleMappings.manualStepThree', { - defaultMessage: - `Go to Management > Security > Roles to create one or more roles that grant` + - ` the Kibana application privilege for Reporting.`, - }), - i18n.translate('xpack.reporting.deprecations.reportingRoleMappings.manualStepFour', { - defaultMessage: `Grant Reporting privileges to users by assigning one of the new roles.`, - }), - i18n.translate('xpack.reporting.deprecations.reportingRoleMappings.manualStepFive', { - defaultMessage: - `Remove the "reporting_user" role from all role mappings and add the custom role.` + - ` The affected role mappings are: {roleMappings}.`, - values: { roleMappings }, - }), - ], - }; - - let roleMappings: SecurityGetRoleMappingResponse; - try { - roleMappings = await client.security.getRoleMapping(); - } catch (err) { - const { logger } = reportingCore.getPluginSetupDeps(); - if (deprecations.getErrorStatusCode(err) === 403) { - logger.warn( - `Failed to retrieve role mappings when checking for deprecations:` + - ` the "manage_security" cluster privilege is required.` - ); - } else { - logger.error( - `Failed to retrieve role mappings when checking for deprecations,` + - ` unexpected error: ${deprecations.getDetailedErrorMessage(err)}.` - ); - } - return deprecations.deprecationError(strings.title, err, docLinks); - } - - const roleMappingsWithReportingRole: string[] = Object.entries(roleMappings).reduce( - (roleSet, current) => { - const [roleName, role] = current; - const foundMapping = role.roles?.find((roll) => deprecatedRoles.includes(roll)); - if (foundMapping) { - roleSet.push(`${roleName}[${foundMapping}]`); - } - return roleSet; - }, - [] as string[] - ); - - if (roleMappingsWithReportingRole.length === 0) { - return []; - } - - return [ - { - title: strings.title, - message: strings.message, - correctiveActions: { - manualSteps: strings.manualSteps(roleMappingsWithReportingRole.join(', ')), - }, - level: 'warning', - deprecationType: 'feature', - documentationUrl: getDocumentationUrl(reportingCore.getKibanaPackageInfo().branch), - }, - ]; -} diff --git a/x-pack/plugins/reporting/server/features.ts b/x-pack/plugins/reporting/server/features.ts index 5fb03f7428b26..a7971494b6c1a 100644 --- a/x-pack/plugins/reporting/server/features.ts +++ b/x-pack/plugins/reporting/server/features.ts @@ -5,29 +5,17 @@ * 2.0. */ -import { DEFAULT_APP_CATEGORIES, type Logger } from '@kbn/core/server'; +import { DEFAULT_APP_CATEGORIES } from '@kbn/core/server'; import { i18n } from '@kbn/i18n'; import type { FeaturesPluginSetup } from '@kbn/features-plugin/server'; import { KibanaFeatureScope } from '@kbn/features-plugin/common'; interface FeatureRegistrationOpts { features: FeaturesPluginSetup; - deprecatedRoles: string[] | false; isServerless: boolean; - logger: Logger; } -/** - * If xpack.reporting.roles.enabled === true, register Reporting as a feature - * that is controlled by user role names. Also, for Serverless register a - * 'shell' Reporting Kibana feature. - */ -export function registerFeatures({ - isServerless, - features, - deprecatedRoles, - logger, -}: FeatureRegistrationOpts) { +export function registerFeatures({ isServerless, features }: FeatureRegistrationOpts) { // Register a 'shell' feature specifically for Serverless. If granted, it will automatically provide access to // reporting capabilities in other features, such as Discover, Dashboards, and Visualizations. On its own, this // feature doesn't grant any additional privileges. @@ -48,29 +36,5 @@ export function registerFeatures({ }); } - if (deprecatedRoles !== false) { - // refer to roles.allow configuration (deprecated path) - const allowedRoles = ['superuser', ...(deprecatedRoles ?? [])]; - const privileges = allowedRoles.map((role) => ({ - requiredClusterPrivileges: [], - requiredRoles: [role], - ui: [], - })); - - // self-register as an elasticsearch feature (deprecated) - features.registerElasticsearchFeature({ - id: 'reporting', - catalogue: ['reporting'], - management: { - insightsAndAlerting: ['reporting'], - }, - privileges, - }); - } else { - logger.debug( - `Reporting roles configuration is disabled. Please assign access to Reporting use Kibana feature controls for applications.` - ); - // trigger application to register Reporting as a subfeature - features.enableReportingUiCapabilities(); - } + features.enableReportingUiCapabilities(); } diff --git a/x-pack/plugins/reporting/server/mocks/index.ts b/x-pack/plugins/reporting/server/mocks/index.ts index ea9d448aff167..6f52d1a4c77c3 100644 --- a/x-pack/plugins/reporting/server/mocks/index.ts +++ b/x-pack/plugins/reporting/server/mocks/index.ts @@ -9,7 +9,6 @@ import { ReportingStart } from '../types'; export const reportingMock = { createStart: (): ReportingStart => ({ - usesUiCapabilities: () => false, registerExportTypes: () => {}, }), }; diff --git a/x-pack/plugins/reporting/server/plugin.ts b/x-pack/plugins/reporting/server/plugin.ts index 51ba41adadac8..12bfb3decb805 100644 --- a/x-pack/plugins/reporting/server/plugin.ts +++ b/x-pack/plugins/reporting/server/plugin.ts @@ -71,7 +71,7 @@ export class ReportingPlugin }); registerUiSettings(core); - registerDeprecations({ core, reportingCore }); + registerDeprecations({ core }); registerReportingUsageCollector(reportingCore, plugins.usageCollection); registerReportingEventTypes(core); @@ -80,12 +80,9 @@ export class ReportingPlugin // async background setup (async () => { - // Feature registration relies on config, depending on whether deprecated roles are enabled, so it cannot be setup before here. registerFeatures({ features: plugins.features, - deprecatedRoles: reportingCore.getDeprecatedAllowedRoles(), isServerless: this.initContext.env.packageInfo.buildFlavor === 'serverless', - logger: this.logger, }); this.logger.debug('Setup complete'); })().catch((e) => { diff --git a/x-pack/plugins/reporting/server/routes/common/authorized_user_pre_routing.test.ts b/x-pack/plugins/reporting/server/routes/common/authorized_user_pre_routing.test.ts index b66effef8961c..3236e7602df3d 100644 --- a/x-pack/plugins/reporting/server/routes/common/authorized_user_pre_routing.test.ts +++ b/x-pack/plugins/reporting/server/routes/common/authorized_user_pre_routing.test.ts @@ -21,7 +21,8 @@ import { authorizedUserPreRouting } from './authorized_user_pre_routing'; let mockCore: ReportingCore; let mockSetupDeps: ReportingInternalSetup; let mockStartDeps: ReportingInternalStart; -let mockReportingConfig = createMockConfigSchema({ roles: { enabled: false } }); + +const mockReportingConfig = createMockConfigSchema(); const getMockContext = () => ({ @@ -112,88 +113,4 @@ describe('authorized_user_pre_routing', function () { body: `Sorry, you aren't authenticated`, }); }); - - describe('Deprecated: security roles for access control', () => { - beforeEach(async () => { - mockReportingConfig = createMockConfigSchema({ - roles: { - allow: ['reporting_user'], - enabled: true, - }, - }); - }); - - it(`should return with 403 when security is enabled but user doesn't have the allowed role`, async function () { - mockStartDeps = await createMockPluginStart( - { - securityService: { - authc: { - getCurrentUser: () => ({ id: '123', roles: ['peasant'], username: 'Tom Riddle' }), - }, - }, - }, - mockReportingConfig - ); - mockCore = await createMockReportingCore(mockReportingConfig, mockSetupDeps, mockStartDeps); - const mockHandler = () => { - throw new Error('Handler callback should not be called'); - }; - - expect( - await authorizedUserPreRouting(mockCore, mockHandler)( - getMockContext(), - getMockRequest(), - getMockResponseFactory() - ) - ).toMatchObject({ - body: `Ask your administrator for access to reporting features. Learn more.`, - }); - }); - - it('should return from handler when security is enabled and user has explicitly allowed role', async function () { - mockStartDeps = await createMockPluginStart( - { - securityService: { - authc: { - getCurrentUser: () => ({ username: 'friendlyuser', roles: ['reporting_user'] }), - }, - }, - }, - mockReportingConfig - ); - mockCore = await createMockReportingCore(mockReportingConfig, mockSetupDeps, mockStartDeps); - - let handlerCalled = false; - await authorizedUserPreRouting(mockCore, (user: unknown) => { - expect(user).toMatchObject({ roles: ['reporting_user'], username: 'friendlyuser' }); - handlerCalled = true; - return Promise.resolve({ status: 200, options: {} }); - })(getMockContext(), getMockRequest(), getMockResponseFactory()); - expect(handlerCalled).toBe(true); - }); - - it('should return from handler when security is enabled and user has superuser role', async function () { - mockStartDeps = await createMockPluginStart( - { - securityService: { - authc: { getCurrentUser: () => ({ username: 'friendlyuser', roles: ['superuser'] }) }, - }, - }, - mockReportingConfig - ); - mockCore = await createMockReportingCore(mockReportingConfig, mockSetupDeps, mockStartDeps); - - const handler = jest.fn().mockResolvedValue({ status: 200, options: {} }); - await authorizedUserPreRouting(mockCore, handler)( - getMockContext(), - getMockRequest(), - getMockResponseFactory() - ); - - expect(handler).toHaveBeenCalled(); - const [[user]] = handler.mock.calls; - expect(user).toMatchObject({ roles: ['superuser'], username: 'friendlyuser' }); - }); - }); }); diff --git a/x-pack/plugins/reporting/server/routes/common/authorized_user_pre_routing.ts b/x-pack/plugins/reporting/server/routes/common/authorized_user_pre_routing.ts index c6d82894772fd..3fdf41831c593 100644 --- a/x-pack/plugins/reporting/server/routes/common/authorized_user_pre_routing.ts +++ b/x-pack/plugins/reporting/server/routes/common/authorized_user_pre_routing.ts @@ -6,15 +6,12 @@ */ import { RequestHandler, RouteMethod } from '@kbn/core/server'; -import { i18n } from '@kbn/i18n'; import { AuthenticatedUser } from '@kbn/security-plugin/server'; import { ReportingCore } from '../../core'; import { ReportingRequestHandlerContext } from '../../types'; import { getUser } from './get_user'; -const superuserRole = 'superuser'; - type ReportingRequestUser = AuthenticatedUser | false; export type RequestHandlerUser = RequestHandler< @@ -30,7 +27,7 @@ export const authorizedUserPreRouting = ( reporting: ReportingCore, handler: RequestHandlerUser ): RequestHandler => { - const { logger, security: securitySetup, docLinks } = reporting.getPluginSetupDeps(); // ReportingInternalSetup.security?: SecurityPluginSetup | undefined + const { logger, security: securitySetup } = reporting.getPluginSetupDeps(); // ReportingInternalSetup.security?: SecurityPluginSetup | undefined return async (context, req, res) => { const { securityService } = await reporting.getPluginStartDeps(); @@ -45,30 +42,6 @@ export const authorizedUserPreRouting = ( } } - const deprecatedAllowedRoles = reporting.getDeprecatedAllowedRoles(); - if (user && deprecatedAllowedRoles !== false) { - // check allowance with the configured set of roleas + "superuser" - const allowedRoles = deprecatedAllowedRoles || []; - const authorizedRoles = [superuserRole, ...allowedRoles]; - - if (!user.roles.find((role) => authorizedRoles.includes(role))) { - const body = i18n.translate('xpack.reporting.userAccessError.message', { - defaultMessage: `Ask your administrator for access to reporting features. {grantUserAccessDocs}.`, - values: { - grantUserAccessDocs: - `` + - i18n.translate('xpack.reporting.userAccessError.learnMoreLink', { - defaultMessage: 'Learn more', - }) + - '', - }, - }); - // user's roles do not allow - return res.forbidden({ body }); - } - } - return handler(user, context, req, res); } catch (err) { logger.error(err); diff --git a/x-pack/plugins/reporting/server/routes/common/jobs/job_management_pre_routing.test.ts b/x-pack/plugins/reporting/server/routes/common/jobs/job_management_pre_routing.test.ts index d275fb2cbbaf5..c5e4da96efb26 100644 --- a/x-pack/plugins/reporting/server/routes/common/jobs/job_management_pre_routing.test.ts +++ b/x-pack/plugins/reporting/server/routes/common/jobs/job_management_pre_routing.test.ts @@ -20,7 +20,7 @@ import { jobManagementPreRouting } from './job_management_pre_routing'; jest.mock('../../../lib/content_stream'); jest.mock('./jobs_query'); -const mockReportingConfig = createMockConfigSchema({ roles: { enabled: false } }); +const mockReportingConfig = createMockConfigSchema(); let mockCore: ReportingCore; let mockSetupDeps: ReportingInternalSetup; let mockStartDeps: ReportingInternalStart; diff --git a/x-pack/plugins/reporting/server/routes/internal/generate/generate_from_jobparams.ts b/x-pack/plugins/reporting/server/routes/internal/generate/generate_from_jobparams.ts index 7f547702475cd..f8ee55cc12fb5 100644 --- a/x-pack/plugins/reporting/server/routes/internal/generate/generate_from_jobparams.ts +++ b/x-pack/plugins/reporting/server/routes/internal/generate/generate_from_jobparams.ts @@ -18,8 +18,7 @@ export function registerGenerationRoutesInternal(reporting: ReportingCore, logge const setupDeps = reporting.getPluginSetupDeps(); const { router } = setupDeps; - const useKibanaAccessControl = reporting.getDeprecatedAllowedRoles() === false; // true if Reporting's deprecated access control feature is disabled - const kibanaAccessControlTags = useKibanaAccessControl ? ['access:generateReport'] : []; + const kibanaAccessControlTags = ['access:generateReport']; const registerInternalPostGenerationEndpoint = () => { const path = `${GENERATE_PREFIX}/{exportType}`; diff --git a/x-pack/plugins/reporting/server/routes/internal/management/integration_tests/jobs.test.ts b/x-pack/plugins/reporting/server/routes/internal/management/integration_tests/jobs.test.ts index a9b2094fea023..ad65976d99f55 100644 --- a/x-pack/plugins/reporting/server/routes/internal/management/integration_tests/jobs.test.ts +++ b/x-pack/plugins/reporting/server/routes/internal/management/integration_tests/jobs.test.ts @@ -76,7 +76,7 @@ describe(`Reporting Job Management Routes: Internal`, () => { }; const coreSetupMock = coreMock.createSetup(); - const mockConfigSchema = createMockConfigSchema({ roles: { enabled: false } }); + const mockConfigSchema = createMockConfigSchema(); beforeEach(async () => { ({ server, httpSetup } = await setupServer(reportingSymbol)); @@ -350,45 +350,6 @@ describe(`Reporting Job Management Routes: Internal`, () => { }); }); - describe('Deprecated: role-based access control', () => { - it('fails on users without the appropriate role', async () => { - mockStartDeps = await createMockPluginStart( - { - licensing: { - ...licensingMock.createStart(), - license$: new BehaviorSubject({ isActive: true, isAvailable: true, type: 'gold' }), - }, - securityService: { - authc: { - getCurrentUser: () => ({ id: '123', roles: ['peasant'], username: 'Tom Riddle' }), - }, - }, - }, - mockConfigSchema - ); - - reportingCore = await createMockReportingCore( - createMockConfigSchema({ roles: { enabled: true } }), - mockSetupDeps, - mockStartDeps - ); - - registerJobInfoRoutes(reportingCore); - - await server.start(); - - await supertest(httpSetup.server.listener) - .get(`${INTERNAL_ROUTES.JOBS.DOWNLOAD_PREFIX}/dope`) - .expect(403) - .then(({ body }) => - expect(body.message).toMatchInlineSnapshot(` - "Ask your administrator for access to reporting features. Learn more." - `) - ); - }); - }); - describe('usage counters', () => { it('increments the info api counter', async () => { mockEsClient.search.mockResponseOnce(getCompleteHits()); diff --git a/x-pack/plugins/reporting/server/routes/public/generate_from_jobparams.ts b/x-pack/plugins/reporting/server/routes/public/generate_from_jobparams.ts index 276c9da8a30b4..1f901634f3f00 100644 --- a/x-pack/plugins/reporting/server/routes/public/generate_from_jobparams.ts +++ b/x-pack/plugins/reporting/server/routes/public/generate_from_jobparams.ts @@ -16,8 +16,7 @@ export function registerGenerationRoutesPublic(reporting: ReportingCore, logger: const setupDeps = reporting.getPluginSetupDeps(); const { router } = setupDeps; - const useKibanaAccessControl = reporting.getDeprecatedAllowedRoles() === false; // true if Reporting's deprecated access control feature is disabled - const kibanaAccessControlTags = useKibanaAccessControl ? ['access:generateReport'] : []; + const kibanaAccessControlTags = ['access:generateReport']; const registerPublicPostGenerationEndpoint = () => { const path = `${PUBLIC_ROUTES.GENERATE_PREFIX}/{exportType}`; diff --git a/x-pack/plugins/reporting/server/routes/public/integration_tests/jobs.test.ts b/x-pack/plugins/reporting/server/routes/public/integration_tests/jobs.test.ts index 8e15ab314e723..8afb1d2aa25b0 100644 --- a/x-pack/plugins/reporting/server/routes/public/integration_tests/jobs.test.ts +++ b/x-pack/plugins/reporting/server/routes/public/integration_tests/jobs.test.ts @@ -72,7 +72,7 @@ describe(`Reporting Job Management Routes: Public`, () => { }; const coreSetupMock = coreMock.createSetup(); - const mockConfigSchema = createMockConfigSchema({ roles: { enabled: false } }); + const mockConfigSchema = createMockConfigSchema(); beforeEach(async () => { ({ server, httpSetup } = await setupServer(reportingSymbol)); diff --git a/x-pack/plugins/reporting/server/types.ts b/x-pack/plugins/reporting/server/types.ts index 40415a3aaacf4..221ec83e0b3e2 100644 --- a/x-pack/plugins/reporting/server/types.ts +++ b/x-pack/plugins/reporting/server/types.ts @@ -37,10 +37,6 @@ import type { AuthenticatedUser } from '@kbn/core-security-common'; */ export interface ReportingSetup { registerExportTypes: ExportTypesRegistry['register']; - /** - * Used to inform plugins if Reporting config is compatible with UI Capabilities / Application Sub-Feature Controls - */ - usesUiCapabilities: () => boolean; } /** diff --git a/x-pack/plugins/reporting/tsconfig.json b/x-pack/plugins/reporting/tsconfig.json index 68a7ded4ee1e8..e4e579802912b 100644 --- a/x-pack/plugins/reporting/tsconfig.json +++ b/x-pack/plugins/reporting/tsconfig.json @@ -30,7 +30,6 @@ "@kbn/test-jest-helpers", "@kbn/rison", "@kbn/task-manager-plugin", - "@kbn/config", "@kbn/core-http-server", "@kbn/core-test-helpers-test-utils", "@kbn/safer-lodash-set", diff --git a/x-pack/plugins/rule_registry/common/schemas/8.17.0/index.ts b/x-pack/plugins/rule_registry/common/schemas/8.17.0/index.ts new file mode 100644 index 0000000000000..cc1d73de3c4ae --- /dev/null +++ b/x-pack/plugins/rule_registry/common/schemas/8.17.0/index.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 { ALERT_SUPPRESSION_TERMS } from '@kbn/rule-data-utils'; +import { SearchTypes } from '@kbn/data-plugin/common'; +import { AlertWithCommonFields880 } from '../8.8.0'; + +import { SuppressionFields8130 } from '../8.13.0'; + +/* DO NOT MODIFY THIS SCHEMA TO ADD NEW FIELDS. These types represent the alerts that shipped in 8.13.0. +Any changes to these types should be bug fixes so the types more accurately represent the alerts from 8.13.0. + +If you are adding new fields for a new release of Kibana, create a new sibling folder to this one +for the version to be released and add the field(s) to the schema in that folder. + +Then, update `../index.ts` to import from the new folder that has the latest schemas, add the +new schemas to the union of all alert schemas, and re-export the new schemas as the `*Latest` schemas. +*/ + +export interface SuppressionFields8170 + extends Omit { + [ALERT_SUPPRESSION_TERMS]: Array<{ + field: string; + value: SearchTypes | null; + }>; +} + +export type AlertWithSuppressionFields8170 = AlertWithCommonFields880 & SuppressionFields8170; diff --git a/x-pack/plugins/rule_registry/common/schemas/index.ts b/x-pack/plugins/rule_registry/common/schemas/index.ts index 5c168a4b899cc..5a94d250392ef 100644 --- a/x-pack/plugins/rule_registry/common/schemas/index.ts +++ b/x-pack/plugins/rule_registry/common/schemas/index.ts @@ -13,11 +13,11 @@ import type { CommonAlertFields880, } from './8.8.0'; -import type { AlertWithSuppressionFields8130, SuppressionFields8130 } from './8.13.0'; +import type { AlertWithSuppressionFields8170, SuppressionFields8170 } from './8.17.0'; export type { - AlertWithSuppressionFields8130 as AlertWithSuppressionFieldsLatest, - SuppressionFields8130 as SuppressionFieldsLatest, + AlertWithSuppressionFields8170 as AlertWithSuppressionFieldsLatest, + SuppressionFields8170 as SuppressionFieldsLatest, CommonAlertFieldName880 as CommonAlertFieldNameLatest, CommonAlertIdFieldName870 as CommonAlertIdFieldNameLatest, CommonAlertFields880 as CommonAlertFieldsLatest, diff --git a/x-pack/plugins/rule_registry/server/utils/create_persistence_rule_type_wrapper.ts b/x-pack/plugins/rule_registry/server/utils/create_persistence_rule_type_wrapper.ts index 9900c889ae73e..892ba70d247ed 100644 --- a/x-pack/plugins/rule_registry/server/utils/create_persistence_rule_type_wrapper.ts +++ b/x-pack/plugins/rule_registry/server/utils/create_persistence_rule_type_wrapper.ts @@ -27,6 +27,7 @@ import { ALERT_RULE_EXECUTION_TIMESTAMP, } from '@kbn/rule-data-utils'; import { mapKeys, snakeCase } from 'lodash/fp'; + import type { IRuleDataClient } from '..'; import { getCommonAlertFields } from './get_common_alert_fields'; import { CreatePersistenceRuleTypeWrapper } from './persistence_types'; @@ -471,9 +472,11 @@ export const createPersistenceRuleTypeWrapper: CreatePersistenceRuleTypeWrapper }, {}); // filter out alerts that were already suppressed - // alert was suppressed if its suppression ends is older than suppression end of existing alert - // if existing alert was created earlier during the same rule execution - then alerts can be counted as not suppressed yet - // as they are processed for the first against this existing alert + // alert was suppressed if its suppression ends is older + // than suppression end of existing alert + // if existing alert was created earlier during the same + // rule execution - then alerts can be counted as not suppressed yet + // as they are processed for the first time against this existing alert const nonSuppressedAlerts = filteredDuplicates.filter((alert) => { const existingAlert = existingAlertsByInstanceId[alert._source[ALERT_INSTANCE_ID]]; @@ -544,7 +547,15 @@ export const createPersistenceRuleTypeWrapper: CreatePersistenceRuleTypeWrapper ]; }); - let enrichedAlerts = newAlerts; + // we can now augment and enrich + // the sub alerts (if any) the same as we would + // any other newAlert + let enrichedAlerts = newAlerts.some((newAlert) => newAlert.subAlerts != null) + ? newAlerts.flatMap((newAlert) => { + const { subAlerts, ...everything } = newAlert; + return [everything, ...(subAlerts ?? [])]; + }) + : newAlerts; if (enrichAlerts) { try { diff --git a/x-pack/plugins/rule_registry/server/utils/persistence_types.ts b/x-pack/plugins/rule_registry/server/utils/persistence_types.ts index 328e5185a2b80..f6e1ae5942b37 100644 --- a/x-pack/plugins/rule_registry/server/utils/persistence_types.ts +++ b/x-pack/plugins/rule_registry/server/utils/persistence_types.ts @@ -45,6 +45,10 @@ export type SuppressedAlertService = ( alerts: Array<{ _id: string; _source: T; + subAlerts?: Array<{ + _id: string; + _source: T; + }>; }>, suppressionWindow: string, enrichAlerts?: ( diff --git a/x-pack/plugins/search_indices/public/components/index_documents/add_documents_code_example.test.tsx b/x-pack/plugins/search_indices/public/components/index_documents/add_documents_code_example.test.tsx new file mode 100644 index 0000000000000..c5fdc7428e690 --- /dev/null +++ b/x-pack/plugins/search_indices/public/components/index_documents/add_documents_code_example.test.tsx @@ -0,0 +1,132 @@ +/* + * 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 } from '@testing-library/react'; +import { + AddDocumentsCodeExample, + basicExampleTexts, + exampleTextsWithCustomMapping, +} from './add_documents_code_example'; +import { generateSampleDocument } from '../../utils/document_generation'; +import { MappingProperty } from '@elastic/elasticsearch/lib/api/types'; + +jest.mock('../../utils/language', () => ({ + getDefaultCodingLanguage: jest.fn().mockReturnValue('python'), +})); + +jest.mock('../../hooks/use_asset_base_path', () => ({ + useAssetBasePath: jest.fn().mockReturnValue('/plugins/'), +})); + +jest.mock('../../utils/document_generation', () => ({ + generateSampleDocument: jest.fn(), +})); + +jest.mock('../../hooks/use_elasticsearch_url', () => ({ + useElasticsearchUrl: jest.fn(), +})); + +jest.mock('@kbn/search-api-keys-components', () => ({ + useSearchApiKey: jest.fn().mockReturnValue({ apiKey: 'test-api-key' }), +})); + +jest.mock('../../hooks/use_kibana', () => ({ + useKibana: jest.fn().mockReturnValue({ + services: { + application: {}, + share: {}, + console: {}, + }, + }), +})); + +jest.mock('../../contexts/usage_tracker_context', () => ({ + useUsageTracker: jest.fn().mockReturnValue({ + count: jest.fn(), + click: jest.fn(), + }), +})); + +describe('AddDocumentsCodeExample', () => { + afterEach(() => { + jest.clearAllMocks(); + }); + + describe('generateSampleDocument', () => { + it('pass basic examples when mapping is default', () => { + const indexName = 'test-index'; + const mappingProperties: Record = { + vector: { type: 'dense_vector', dims: 3 }, + text: { type: 'text' }, + }; + + render( + + ); + + expect(generateSampleDocument).toHaveBeenCalledTimes(3); + + basicExampleTexts.forEach((text, index) => { + expect(generateSampleDocument).toHaveBeenNthCalledWith(index + 1, mappingProperties, text); + }); + }); + + it('pass basic examples when mapping is not passed', () => { + const indexName = 'test-index'; + + render(); + + expect(generateSampleDocument).toHaveBeenCalledTimes(3); + + const mappingProperties: Record = { + vector: { type: 'dense_vector', dims: 3 }, + text: { type: 'text' }, + }; + + basicExampleTexts.forEach((text, index) => { + expect(generateSampleDocument).toHaveBeenNthCalledWith(index + 1, mappingProperties, text); + }); + }); + + it('pass basic examples when mapping is default with extra vector fields', () => { + const indexName = 'test-index'; + const mappingProperties: Record = { + vector: { type: 'dense_vector', dims: 3, similarity: 'extra' }, + text: { type: 'text' }, + }; + + render( + + ); + + expect(generateSampleDocument).toHaveBeenCalledTimes(3); + + basicExampleTexts.forEach((text, index) => { + expect(generateSampleDocument).toHaveBeenNthCalledWith(index + 1, mappingProperties, text); + }); + }); + + it('pass examples text when mapping is custom', () => { + const indexName = 'test-index'; + const mappingProperties: Record = { + text: { type: 'text' }, + test: { type: 'boolean' }, + }; + + render( + + ); + + expect(generateSampleDocument).toHaveBeenCalledTimes(3); + + exampleTextsWithCustomMapping.forEach((text, index) => { + expect(generateSampleDocument).toHaveBeenNthCalledWith(index + 1, mappingProperties, text); + }); + }); + }); +}); diff --git a/x-pack/plugins/search_indices/public/components/index_documents/add_documents_code_example.tsx b/x-pack/plugins/search_indices/public/components/index_documents/add_documents_code_example.tsx index e84ca5bd47be0..d96055b5dc184 100644 --- a/x-pack/plugins/search_indices/public/components/index_documents/add_documents_code_example.tsx +++ b/x-pack/plugins/search_indices/public/components/index_documents/add_documents_code_example.tsx @@ -6,10 +6,11 @@ */ import React, { useCallback, useMemo, useState } from 'react'; -import { MappingProperty } from '@elastic/elasticsearch/lib/api/types'; +import { MappingDenseVectorProperty, MappingProperty } from '@elastic/elasticsearch/lib/api/types'; import { EuiFlexGroup, EuiFlexItem, EuiPanel } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { TryInConsoleButton } from '@kbn/try-in-console'; +import { isEqual } from 'lodash'; import { useSearchApiKey } from '@kbn/search-api-keys-components'; import { useKibana } from '../../hooks/use_kibana'; @@ -24,6 +25,13 @@ import { CodeSample } from '../shared/code_sample'; import { generateSampleDocument } from '../../utils/document_generation'; import { getDefaultCodingLanguage } from '../../utils/language'; +export const basicExampleTexts = [ + 'Yellowstone National Park', + 'Yosemite National Park', + 'Rocky Mountain National Park', +]; +export const exampleTextsWithCustomMapping = [1, 2, 3].map((num) => `Example text ${num}`); + export interface AddDocumentsCodeExampleProps { indexName: string; mappingProperties: Record; @@ -56,10 +64,19 @@ export const AddDocumentsCodeExample = ({ [usageTracker] ); const sampleDocuments = useMemo(() => { - return [1, 2, 3].map((num) => - generateSampleDocument(codeSampleMappings, `Example text ${num}`) - ); - }, [codeSampleMappings]); + // If the default mapping was used, we need to exclude generated vector fields + const copyCodeSampleMappings = { + ...codeSampleMappings, + vector: { + type: codeSampleMappings.vector?.type, + dims: (codeSampleMappings.vector as MappingDenseVectorProperty)?.dims, + }, + }; + const isDefaultMapping = isEqual(copyCodeSampleMappings, ingestCodeExamples.defaultMapping); + const sampleTexts = isDefaultMapping ? basicExampleTexts : exampleTextsWithCustomMapping; + + return sampleTexts.map((text) => generateSampleDocument(codeSampleMappings, text)); + }, [codeSampleMappings, ingestCodeExamples.defaultMapping]); const { apiKey } = useSearchApiKey(); const codeParams: IngestCodeSnippetParameters = useMemo(() => { return { diff --git a/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/endpoint_info.test.tsx b/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/endpoint_info.test.tsx index 1c91dcfd1aec3..4866c6fef802f 100644 --- a/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/endpoint_info.test.tsx +++ b/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/endpoint_info.test.tsx @@ -11,8 +11,60 @@ import { EndpointInfo } from './endpoint_info'; describe('RenderEndpoint component tests', () => { it('renders the component with inference id', () => { - render(); + const mockProvider = { + inference_id: 'cohere-2', + service: 'cohere', + service_settings: { + similarity: 'cosine', + dimensions: 384, + model_id: 'embed-english-light-v3.0', + rate_limit: { + requests_per_minute: 10000, + }, + embedding_type: 'byte', + }, + task_settings: {}, + } as any; + + render(); expect(screen.getByText('cohere-2')).toBeInTheDocument(); }); + + it('renders correctly without model_id in service_settings', () => { + const mockProvider = { + inference_id: 'azure-openai-1', + service: 'azureopenai', + service_settings: { + resource_name: 'resource-xyz', + deployment_id: 'deployment-123', + api_version: 'v1', + }, + } as any; + + render(); + + expect(screen.getByText('azure-openai-1')).toBeInTheDocument(); + }); + + it('renders with tech preview badge when endpoint is reranker type', () => { + const mockProvider = { + inference_id: 'elastic-rerank', + task_type: 'rerank', + service: 'elasticsearch', + service_settings: { + num_allocations: 1, + num_threads: 1, + model_id: '.rerank-v1', + }, + task_settings: { + return_documents: true, + }, + } as any; + + render(); + + expect(screen.getByText('elastic-rerank')).toBeInTheDocument(); + expect(screen.getByText('TECH PREVIEW')).toBeInTheDocument(); + }); }); diff --git a/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/endpoint_info.tsx b/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/endpoint_info.tsx index 26b12328dafd4..7d5311815880f 100644 --- a/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/endpoint_info.tsx +++ b/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/endpoint_info.tsx @@ -7,19 +7,38 @@ import { EuiBetaBadge, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import React from 'react'; +import { InferenceAPIConfigResponse } from '@kbn/ml-trained-models-utils'; import { isEndpointPreconfigured } from '../../../../utils/preconfigured_endpoint_helper'; import * as i18n from './translations'; +import { isProviderTechPreview } from '../../../../utils/reranker_helper'; export interface EndpointInfoProps { inferenceId: string; + provider: InferenceAPIConfigResponse; } -export const EndpointInfo: React.FC = ({ inferenceId }) => ( +export const EndpointInfo: React.FC = ({ inferenceId, provider }) => ( - - {inferenceId} - + + + + {inferenceId} + + + {isProviderTechPreview(provider) ? ( + + + + + + ) : null} + diff --git a/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/translations.ts b/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/translations.ts index 70b1576a9ddc0..7e3af28fdcbdc 100644 --- a/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/translations.ts +++ b/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/translations.ts @@ -13,3 +13,10 @@ export const PRECONFIGURED_LABEL = i18n.translate( defaultMessage: 'PRECONFIGURED', } ); + +export const TECH_PREVIEW_LABEL = i18n.translate( + 'xpack.searchInferenceEndpoints.elasticsearch.endpointInfo.techPreview', + { + defaultMessage: 'TECH PREVIEW', + } +); diff --git a/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/tabular_page.test.tsx b/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/tabular_page.test.tsx index 85718478f65fd..60fb799074f14 100644 --- a/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/tabular_page.test.tsx +++ b/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/tabular_page.test.tsx @@ -67,6 +67,19 @@ const inferenceEndpoints = [ }, task_settings: {}, }, + { + inference_id: 'elastic-rerank', + task_type: 'rerank', + service: 'elasticsearch', + service_settings: { + num_allocations: 1, + num_threads: 1, + model_id: '.rerank-v1', + }, + task_settings: { + return_documents: true, + }, + }, ] as InferenceAPIConfigResponse[]; jest.mock('../../hooks/use_delete_endpoint', () => ({ @@ -82,9 +95,10 @@ describe('When the tabular page is loaded', () => { const rows = screen.getAllByRole('row'); expect(rows[1]).toHaveTextContent('.elser-2-elasticsearch'); expect(rows[2]).toHaveTextContent('.multilingual-e5-small-elasticsearch'); - expect(rows[3]).toHaveTextContent('local-model'); - expect(rows[4]).toHaveTextContent('my-elser-model-05'); - expect(rows[5]).toHaveTextContent('third-party-model'); + expect(rows[3]).toHaveTextContent('elastic-rerank'); + expect(rows[4]).toHaveTextContent('local-model'); + expect(rows[5]).toHaveTextContent('my-elser-model-05'); + expect(rows[6]).toHaveTextContent('third-party-model'); }); it('should display all service and model ids in the table', () => { @@ -98,13 +112,16 @@ describe('When the tabular page is loaded', () => { expect(rows[2]).toHaveTextContent('.multilingual-e5-small'); expect(rows[3]).toHaveTextContent('Elasticsearch'); - expect(rows[3]).toHaveTextContent('.own_model'); + expect(rows[3]).toHaveTextContent('.rerank-v1'); expect(rows[4]).toHaveTextContent('Elasticsearch'); - expect(rows[4]).toHaveTextContent('.elser_model_2'); + expect(rows[4]).toHaveTextContent('.own_model'); - expect(rows[5]).toHaveTextContent('OpenAI'); - expect(rows[5]).toHaveTextContent('.own_model'); + expect(rows[5]).toHaveTextContent('Elasticsearch'); + expect(rows[5]).toHaveTextContent('.elser_model_2'); + + expect(rows[6]).toHaveTextContent('OpenAI'); + expect(rows[6]).toHaveTextContent('.own_model'); }); it('should only disable delete action for preconfigured endpoints', () => { @@ -131,4 +148,18 @@ describe('When the tabular page is loaded', () => { expect(rows[4]).not.toHaveTextContent(preconfigured); expect(rows[5]).not.toHaveTextContent(preconfigured); }); + + it('should show tech preview badge only for reranker-v1 model', () => { + render(); + + const techPreview = 'TECH PREVIEW'; + + const rows = screen.getAllByRole('row'); + expect(rows[1]).not.toHaveTextContent(techPreview); + expect(rows[2]).not.toHaveTextContent(techPreview); + expect(rows[3]).toHaveTextContent(techPreview); + expect(rows[4]).not.toHaveTextContent(techPreview); + expect(rows[5]).not.toHaveTextContent(techPreview); + expect(rows[6]).not.toHaveTextContent(techPreview); + }); }); diff --git a/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/tabular_page.tsx b/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/tabular_page.tsx index 0ea17fa6408a0..a999dca2ac0a5 100644 --- a/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/tabular_page.tsx +++ b/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/tabular_page.tsx @@ -53,9 +53,9 @@ export const TabularPage: React.FC = ({ inferenceEndpoints }) field: 'endpoint', name: i18n.ENDPOINT, 'data-test-subj': 'endpointCell', - render: (endpoint: string) => { + render: (endpoint: string, additionalInfo: InferenceEndpointUI) => { if (endpoint) { - return ; + return ; } return null; diff --git a/x-pack/plugins/search_inference_endpoints/public/utils/reranker_helper.test.ts b/x-pack/plugins/search_inference_endpoints/public/utils/reranker_helper.test.ts new file mode 100644 index 0000000000000..3eb3fa46634db --- /dev/null +++ b/x-pack/plugins/search_inference_endpoints/public/utils/reranker_helper.test.ts @@ -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 { isProviderTechPreview } from './reranker_helper'; + +describe('Reranker Tech preview badge', () => { + const mockProvider = { + inference_id: 'elastic-rerank', + task_type: 'rerank', + service: 'elasticsearch', + service_settings: { + num_allocations: 1, + num_threads: 1, + model_id: '.rerank-v1', + }, + task_settings: { + return_documents: true, + }, + } as any; + + it('return true for reranker', () => { + expect(isProviderTechPreview(mockProvider)).toEqual(true); + }); + + it('return false for other provider', () => { + const otherProviderServiceSettings = { + ...mockProvider.service_settings, + model_id: '.elser_model_2', + }; + const otherProvider = { + ...mockProvider, + task_type: 'sparse_embedding', + service_settings: otherProviderServiceSettings, + } as any; + expect(isProviderTechPreview(otherProvider)).toEqual(false); + }); + + it('return false for other provider without model_id', () => { + const mockThirdPartyProvider = { + inference_id: 'azure-openai-1', + service: 'azureopenai', + service_settings: { + resource_name: 'resource-xyz', + deployment_id: 'deployment-123', + api_version: 'v1', + }, + } as any; + expect(isProviderTechPreview(mockThirdPartyProvider)).toEqual(false); + }); +}); diff --git a/x-pack/plugins/search_inference_endpoints/public/utils/reranker_helper.ts b/x-pack/plugins/search_inference_endpoints/public/utils/reranker_helper.ts new file mode 100644 index 0000000000000..ac930971fa458 --- /dev/null +++ b/x-pack/plugins/search_inference_endpoints/public/utils/reranker_helper.ts @@ -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 { InferenceAPIConfigResponse } from '@kbn/ml-trained-models-utils'; +export const isProviderTechPreview = (provider: InferenceAPIConfigResponse) => { + if (hasModelId(provider)) { + return provider.task_type === 'rerank' && provider.service_settings?.model_id?.startsWith('.'); + } + + return false; +}; + +function hasModelId( + service: InferenceAPIConfigResponse +): service is Extract { + return 'model_id' in service.service_settings; +} diff --git a/x-pack/plugins/searchprofiler/common/constants.ts b/x-pack/plugins/searchprofiler/common/constants.ts index a50ed281c2bd0..0d586e9b1fb68 100644 --- a/x-pack/plugins/searchprofiler/common/constants.ts +++ b/x-pack/plugins/searchprofiler/common/constants.ts @@ -9,6 +9,8 @@ import { LicenseType } from '@kbn/licensing-plugin/common/types'; const basicLicense: LicenseType = 'basic'; +export const API_BASE_PATH = '/api/searchprofiler'; + /** @internal */ export const PLUGIN = Object.freeze({ id: 'searchprofiler', diff --git a/x-pack/plugins/searchprofiler/public/application/components/profile_query_editor/profile_query_editor.tsx b/x-pack/plugins/searchprofiler/public/application/components/profile_query_editor/profile_query_editor.tsx index a88f1040caa3a..d80cbc4f0394d 100644 --- a/x-pack/plugins/searchprofiler/public/application/components/profile_query_editor/profile_query_editor.tsx +++ b/x-pack/plugins/searchprofiler/public/application/components/profile_query_editor/profile_query_editor.tsx @@ -16,11 +16,12 @@ import { EuiFlexGroup, EuiSpacer, EuiFlexItem, + EuiToolTip, } from '@elastic/eui'; import { decompressFromEncodedURIComponent } from 'lz-string'; -import { useRequestProfile } from '../../hooks'; +import { useHasIndices, useRequestProfile } from '../../hooks'; import { useAppContext } from '../../contexts/app_context'; import { useProfilerActionContext } from '../../contexts/profiler_context'; import { Editor, type EditorProps } from './editor'; @@ -46,6 +47,8 @@ export const ProfileQueryEditor = memo(() => { const { getLicenseStatus, notifications, location } = useAppContext(); + const { data: indicesData, isLoading, error: indicesDataError } = useHasIndices(); + const queryParams = new URLSearchParams(location.search); const indexName = queryParams.get('index'); const searchProfilerQueryURI = queryParams.get('load_from'); @@ -86,6 +89,32 @@ export const ProfileQueryEditor = memo(() => { ); const licenseEnabled = getLicenseStatus().valid; + const hasIndices = isLoading || indicesDataError ? false : indicesData?.hasIndices; + + const isDisabled = !licenseEnabled || !hasIndices; + const tooltipContent = !licenseEnabled + ? i18n.translate('xpack.searchProfiler.formProfileButton.noLicenseTooltip', { + defaultMessage: 'You need an active license to use Search Profiler', + }) + : i18n.translate('xpack.searchProfiler.formProfileButton.noIndicesTooltip', { + defaultMessage: 'You must have at least one index to use Search Profiler', + }); + + const button = ( + + + {i18n.translate('xpack.searchProfiler.formProfileButtonLabel', { + defaultMessage: 'Profile', + })} + + + ); + return ( {/* Form */} @@ -135,18 +164,13 @@ export const ProfileQueryEditor = memo(() => { - handleProfileClick()} - > - - {i18n.translate('xpack.searchProfiler.formProfileButtonLabel', { - defaultMessage: 'Profile', - })} - - + {isDisabled ? ( + + {button} + + ) : ( + button + )}
      diff --git a/x-pack/plugins/searchprofiler/public/application/hooks/index.ts b/x-pack/plugins/searchprofiler/public/application/hooks/index.ts index 9c1b3bfb8e9ed..156ad6bc8b163 100644 --- a/x-pack/plugins/searchprofiler/public/application/hooks/index.ts +++ b/x-pack/plugins/searchprofiler/public/application/hooks/index.ts @@ -6,3 +6,4 @@ */ export { useRequestProfile } from './use_request_profile'; +export { useHasIndices } from './use_has_indices'; diff --git a/x-pack/plugins/searchprofiler/public/application/hooks/use_has_indices.ts b/x-pack/plugins/searchprofiler/public/application/hooks/use_has_indices.ts new file mode 100644 index 0000000000000..43938d14a421f --- /dev/null +++ b/x-pack/plugins/searchprofiler/public/application/hooks/use_has_indices.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 { useRequest } from '@kbn/es-ui-shared-plugin/public'; +import { API_BASE_PATH } from '../../../common/constants'; +import { useAppContext } from '../contexts/app_context'; + +interface ReturnValue { + hasIndices: boolean; +} + +export const useHasIndices = () => { + const { http } = useAppContext(); + return useRequest(http, { + path: `${API_BASE_PATH}/has_indices`, + method: 'get', + }); +}; diff --git a/x-pack/plugins/searchprofiler/server/routes/profile.ts b/x-pack/plugins/searchprofiler/server/routes/profile.ts index 9e76bf0df96a1..7141a51c2c7f5 100644 --- a/x-pack/plugins/searchprofiler/server/routes/profile.ts +++ b/x-pack/plugins/searchprofiler/server/routes/profile.ts @@ -6,12 +6,13 @@ */ import { schema } from '@kbn/config-schema'; +import { API_BASE_PATH } from '../../common/constants'; import { RouteDependencies } from '../types'; export const register = ({ router, getLicenseStatus, log }: RouteDependencies) => { router.post( { - path: '/api/searchprofiler/profile', + path: `${API_BASE_PATH}/profile`, validate: { body: schema.object({ query: schema.object({}, { unknowns: 'allow' }), @@ -56,6 +57,48 @@ export const register = ({ router, getLicenseStatus, log }: RouteDependencies) = log.error(err); const { statusCode, body: errorBody } = err; + return response.customError({ + statusCode: statusCode || 500, + body: errorBody + ? { + message: errorBody.error?.reason, + attributes: errorBody, + } + : err, + }); + } + } + ); + router.get( + { + path: `${API_BASE_PATH}/has_indices`, + validate: false, + }, + async (ctx, _request, response) => { + const currentLicenseStatus = getLicenseStatus(); + if (!currentLicenseStatus.valid) { + return response.forbidden({ + body: { + message: currentLicenseStatus.message!, + }, + }); + } + + try { + const client = (await ctx.core).elasticsearch.client.asCurrentUser; + const resp = await client.cat.indices({ format: 'json' }); + + const hasIndices = resp.length > 0; + + return response.ok({ + body: { + hasIndices, + }, + }); + } catch (err) { + log.error(err); + const { statusCode, body: errorBody } = err; + return response.customError({ statusCode: statusCode || 500, body: errorBody diff --git a/x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/index.ts b/x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/index.ts new file mode 100644 index 0000000000000..dd8538a5d03cc --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './workflow_insights'; +export * from './workflow_insights.gen'; diff --git a/x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/workflow_insights.gen.ts b/x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/workflow_insights.gen.ts new file mode 100644 index 0000000000000..646a1e565e3a8 --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/workflow_insights.gen.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. + */ + +/* + * NOTICE: Do not edit this file manually. + * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. + * + * info: + * title: Workflow Insights API + * version: 1 + */ + +import { z } from '@kbn/zod'; +import { ArrayFromString } from '@kbn/zod-helpers'; + +import { SuccessResponse } from '../model/schema/common.gen'; + +export type GetWorkflowInsightsRequestQuery = z.infer; +export const GetWorkflowInsightsRequestQuery = z.object({ + size: z.coerce.number().int().optional(), + from: z.coerce.number().int().optional(), + ids: ArrayFromString(z.string()).optional(), + categories: ArrayFromString(z.literal('endpoint')).optional(), + types: ArrayFromString(z.enum(['incompatible_antivirus', 'noisy_process_tree'])).optional(), + sourceTypes: ArrayFromString(z.literal('llm-connector')).optional(), + sourceIds: ArrayFromString(z.string()).optional(), + targetTypes: ArrayFromString(z.literal('endpoint')).optional(), + targetIds: ArrayFromString(z.string()).optional(), + actionTypes: ArrayFromString(z.enum(['refreshed', 'remediated', 'suppressed', 'dismissed'])), +}); +export type GetWorkflowInsightsRequestQueryInput = z.input; + +export type GetWorkflowInsightsResponse = z.infer; +export const GetWorkflowInsightsResponse = SuccessResponse; + +export type UpdateWorkflowInsightRequestParams = z.infer; +export const UpdateWorkflowInsightRequestParams = z.object({ + insightId: z.string().min(1), +}); +export type UpdateWorkflowInsightRequestParamsInput = z.input< + typeof UpdateWorkflowInsightRequestParams +>; + +export type UpdateWorkflowInsightRequestBody = z.infer; +export const UpdateWorkflowInsightRequestBody = z.object({ + '@timestamp': z.string().optional(), + message: z.string().optional(), + category: z.literal('endpoint').optional(), + type: z.enum(['incompatible_antivirus', 'noisy_process_tree']).optional(), + source: z + .object({ + type: z.literal('llm-connector').optional(), + id: z.string().optional(), + data_range_start: z.string().optional(), + data_range_end: z.string().optional(), + }) + .optional(), + target: z + .object({ + type: z.literal('endpoint').optional(), + ids: z.array(z.string()).optional(), + }) + .optional(), + action: z + .object({ + type: z.enum(['refreshed', 'remediated', 'suppressed', 'dismissed']).optional(), + timestamp: z.string().optional(), + }) + .optional(), + value: z.string().optional(), + remediation: z + .object({ + exception_list_items: z + .array( + z.object({ + list_id: z.string().optional(), + name: z.string().optional(), + description: z.string().optional(), + entries: z.array(z.unknown()).optional(), + tags: z.array(z.string()).optional(), + os_types: z.array(z.string()).optional(), + }) + ) + .optional(), + }) + .optional(), + metadata: z + .object({ + notes: z.object({}).catchall(z.string()).optional(), + message_variables: z.array(z.string()).optional(), + }) + .optional(), +}); +export type UpdateWorkflowInsightRequestBodyInput = z.input< + typeof UpdateWorkflowInsightRequestBody +>; + +export type UpdateWorkflowInsightResponse = z.infer; +export const UpdateWorkflowInsightResponse = SuccessResponse; diff --git a/x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/workflow_insights.schema.yaml b/x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/workflow_insights.schema.yaml new file mode 100644 index 0000000000000..00de6de8502e5 --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/workflow_insights.schema.yaml @@ -0,0 +1,218 @@ +openapi: 3.0.0 +info: + title: Workflow Insights API + version: '1' +paths: + /internal/api/endpoint/workflow_insights: + get: + summary: Retrieve workflow insights + operationId: GetWorkflowInsights + x-codegen-enabled: true + x-labels: [ess, serverless] + x-internal: true + parameters: + - name: size + in: query + required: false + schema: + type: integer + - name: from + in: query + required: false + schema: + type: integer + - name: ids + in: query + required: false + schema: + type: array + items: + type: string + - name: categories + in: query + required: false + schema: + type: array + items: + type: string + enum: + - endpoint + - name: types + in: query + required: false + schema: + type: array + items: + type: string + enum: + - incompatible_antivirus + - noisy_process_tree + - name: sourceTypes + in: query + required: false + schema: + type: array + items: + type: string + enum: + - llm-connector + - name: sourceIds + in: query + required: false + schema: + type: array + items: + type: string + - name: targetTypes + in: query + required: false + schema: + type: array + items: + type: string + enum: + - endpoint + - name: targetIds + in: query + required: false + schema: + type: array + items: + type: string + - name: actionTypes + in: query + required: true + schema: + type: array + items: + type: string + enum: + - refreshed + - remediated + - suppressed + - dismissed + + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '../model/schema/common.schema.yaml#/components/schemas/SuccessResponse' + + /internal/api/endpoint/workflow_insights/{insightId}: + put: + summary: Update a workflow insight + operationId: UpdateWorkflowInsight + x-codegen-enabled: true + x-labels: [ess, serverless] + x-internal: true + parameters: + - name: insightId + in: path + required: true + schema: + type: string + minLength: 1 + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + '@timestamp': + type: string + message: + type: string + category: + type: string + enum: + - endpoint + type: + type: string + enum: + - incompatible_antivirus + - noisy_process_tree + source: + type: object + properties: + type: + type: string + enum: + - llm-connector + id: + type: string + data_range_start: + type: string + data_range_end: + type: string + target: + type: object + properties: + type: + type: string + enum: + - endpoint + ids: + type: array + items: + type: string + action: + type: object + properties: + type: + type: string + enum: + - refreshed + - remediated + - suppressed + - dismissed + timestamp: + type: string + value: + type: string + remediation: + type: object + properties: + exception_list_items: + type: array + items: + type: object + properties: + list_id: + type: string + name: + type: string + description: + type: string + entries: + type: array + items: {} + tags: + type: array + items: + type: string + os_types: + type: array + items: + type: string + metadata: + type: object + properties: + notes: + type: object + additionalProperties: + type: string + message_variables: + type: array + items: + type: string + + responses: + '200': + description: Updated successfully + content: + application/json: + schema: + $ref: '../model/schema/common.schema.yaml#/components/schemas/SuccessResponse' diff --git a/x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/workflow_insights.test.ts b/x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/workflow_insights.test.ts new file mode 100644 index 0000000000000..280c2abcff069 --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/workflow_insights.test.ts @@ -0,0 +1,293 @@ +/* + * 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 } from '@kbn/config-schema'; + +import { + GetWorkflowInsightsRequestSchema, + UpdateWorkflowInsightRequestSchema, +} from './workflow_insights'; + +describe('Workflow Insights', () => { + describe('GetWorkflowInsightsRequestSchema', () => { + const validateQuery = (query: Record) => { + return schema.object(GetWorkflowInsightsRequestSchema).validate(query); + }; + + it('should validate successfully with valid parameters', () => { + const validQuery = { + query: { + size: 10, + from: 0, + ids: ['valid-id-1', 'valid-id-2'], + categories: ['endpoint'], + types: ['incompatible_antivirus'], + sourceTypes: ['llm-connector'], + sourceIds: ['source-1', 'source-2'], + targetTypes: ['endpoint'], + targetIds: ['target-1', 'target-2'], + actionTypes: ['refreshed', 'remediated'], + }, + }; + + expect(() => validateQuery(validQuery)).not.toThrow(); + }); + + it('should throw an error for invalid types', () => { + const invalidQuery = { + query: { + size: 'not-a-number', // Invalid size + actionTypes: ['invalid-action'], // Invalid action type + }, + }; + + expect(() => validateQuery(invalidQuery)).toThrowErrorMatchingInlineSnapshot( + '"[query.size]: expected value of type [number] but got [string]"' + ); + }); + + it('should throw an error if ids contain empty strings', () => { + const invalidQuery = { + query: { + ids: ['valid-id', ''], + actionTypes: ['refreshed'], + }, + }; + + expect(() => validateQuery(invalidQuery)).toThrowErrorMatchingInlineSnapshot( + '"[query.ids.1]: value has length [0] but it must have a minimum length of [1]."' + ); + }); + + it('should throw an error if sourceIds contain empty strings', () => { + const invalidQuery = { + query: { + sourceIds: ['valid-source', ' '], + actionTypes: ['refreshed'], + }, + }; + + expect(() => validateQuery(invalidQuery)).toThrowErrorMatchingInlineSnapshot( + '"[query.sourceIds.1]: sourceId cannot be an empty string"' + ); + }); + + it('should validate successfully when optional fields are omitted', () => { + const validQuery = { + query: {}, + }; + + expect(() => validateQuery(validQuery)).not.toThrow(); + }); + + it('should throw an error for unsupported categories or types', () => { + const invalidQuery = { + query: { + categories: ['unsupported-category'], + types: ['unsupported-type'], + actionTypes: ['refreshed'], + }, + }; + + expect(() => validateQuery(invalidQuery)).toThrowErrorMatchingInlineSnapshot( + '"[query.categories.0]: expected value to equal [endpoint]"' + ); + }); + }); + + describe('UpdateWorkflowInsightRequestSchema', () => { + const validateRequest = (request: Record) => { + return schema.object(UpdateWorkflowInsightRequestSchema).validate(request); + }; + + it('should validate successfully with valid parameters', () => { + const validRequest = { + params: { + insightId: 'valid-insight-id', + }, + body: { + '@timestamp': '2024-11-29T00:00:00Z', + message: 'Valid message', + category: 'endpoint', + type: 'incompatible_antivirus', + source: { + type: 'llm-connector', + id: 'source-id', + data_range_start: '2024-11-01T00:00:00Z', + data_range_end: '2024-11-30T00:00:00Z', + }, + target: { + type: 'endpoint', + ids: ['target-id-1', 'target-id-2'], + }, + action: { + type: 'refreshed', + timestamp: '2024-11-29T00:00:00Z', + }, + value: 'Valid value', + remediation: { + exception_list_items: [ + { + list_id: 'list-id', + name: 'Exception 1', + description: 'Description', + entries: [{ key: 'value' }], + tags: ['tag1'], + os_types: ['windows'], + }, + ], + }, + metadata: { + notes: { note1: 'Value 1' }, + message_variables: ['var1', 'var2'], + }, + }, + }; + + expect(() => validateRequest(validRequest)).not.toThrow(); + }); + + it('should throw an error if insightId is missing', () => { + const invalidRequest = { + params: {}, + body: {}, + }; + + expect(() => validateRequest(invalidRequest)).toThrowErrorMatchingInlineSnapshot( + '"[params.insightId]: expected value of type [string] but got [undefined]"' + ); + }); + + it('should throw an error if insightId is an empty string', () => { + const invalidRequest = { + params: { + insightId: '', + }, + body: {}, + }; + + expect(() => validateRequest(invalidRequest)).toThrowErrorMatchingInlineSnapshot( + '"[params.insightId]: value has length [0] but it must have a minimum length of [1]."' + ); + }); + + it('should throw an error if category is invalid', () => { + const invalidRequest = { + params: { + insightId: 'valid-insight-id', + }, + body: { + category: 'invalid-category', // Invalid category + type: 'incompatible_antivirus', + action: { type: 'refreshed' }, + }, + }; + + expect(() => validateRequest(invalidRequest)).toThrowErrorMatchingInlineSnapshot( + '"[body.category]: expected value to equal [endpoint]"' + ); + }); + + it('should throw an error if type is invalid', () => { + const invalidRequest = { + params: { + insightId: 'valid-insight-id', + }, + body: { + type: 'invalid-type', // Invalid type + action: { type: 'refreshed' }, + }, + }; + + expect(() => validateRequest(invalidRequest)).toThrowErrorMatchingInlineSnapshot(` + "[body.type]: types that failed validation: + - [body.type.0]: expected value to equal [incompatible_antivirus] + - [body.type.1]: expected value to equal [noisy_process_tree]" + `); + }); + + it('should throw an error if target ids contain empty strings', () => { + const invalidRequest = { + params: { + insightId: 'valid-insight-id', + }, + body: { + target: { + type: 'endpoint', + ids: ['valid-id', ''], // Invalid empty string in ids + }, + action: { type: 'refreshed' }, + }, + }; + + expect(() => validateRequest(invalidRequest)).toThrowErrorMatchingInlineSnapshot( + '"[body.target.ids.1]: value has length [0] but it must have a minimum length of [1]."' + ); + }); + + it('should validate successfully when optional fields are omitted', () => { + const validRequest = { + params: { + insightId: 'valid-insight-id', + }, + body: { + action: { type: 'refreshed' }, + }, + }; + + expect(() => validateRequest(validRequest)).not.toThrow(); + }); + + it('should throw an error for unsupported action types', () => { + const invalidRequest = { + params: { + insightId: 'valid-insight-id', + }, + body: { + action: { + type: 'unsupported-action', // Invalid action type + }, + }, + }; + + expect(() => validateRequest(invalidRequest)).toThrowErrorMatchingInlineSnapshot(` + "[body.action.type]: types that failed validation: + - [body.action.type.0]: expected value to equal [refreshed] + - [body.action.type.1]: expected value to equal [remediated] + - [body.action.type.2]: expected value to equal [suppressed] + - [body.action.type.3]: expected value to equal [dismissed]" + `); + }); + + it('should throw an error if remediation list items contain invalid data', () => { + const invalidRequest = { + params: { + insightId: 'valid-insight-id', + }, + body: { + remediation: { + exception_list_items: [ + { + list_id: 'list-id', + name: 'Exception 1', + description: 'Description', + entries: 'invalid-entries', // Invalid entries + tags: ['tag1'], + os_types: ['windows'], + }, + ], + }, + action: { type: 'refreshed' }, + }, + }; + + expect(() => validateRequest(invalidRequest)).toThrowErrorMatchingInlineSnapshot( + '"[body.remediation.exception_list_items.0.entries]: could not parse array value from json input"' + ); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/workflow_insights.ts b/x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/workflow_insights.ts new file mode 100644 index 0000000000000..982dce0d6fbac --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/workflow_insights.ts @@ -0,0 +1,133 @@ +/* + * 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, type TypeOf } from '@kbn/config-schema'; + +const arrayWithNonEmptyString = (field: string) => + schema.arrayOf( + schema.string({ + minLength: 1, + validate: (id) => { + if (id.trim() === '') { + return `${field} cannot be an empty string`; + } + }, + }) + ); + +export const UpdateWorkflowInsightRequestSchema = { + params: schema.object({ + insightId: schema.string({ + minLength: 1, + validate: (id) => { + if (id.trim() === '') { + return 'insightId cannot be an empty string'; + } + }, + }), + }), + body: schema.object({ + '@timestamp': schema.maybe(schema.string()), + message: schema.maybe(schema.string()), + category: schema.maybe(schema.oneOf([schema.literal('endpoint')])), + type: schema.maybe( + schema.oneOf([schema.literal('incompatible_antivirus'), schema.literal('noisy_process_tree')]) + ), + source: schema.maybe( + schema.object({ + type: schema.maybe(schema.oneOf([schema.literal('llm-connector')])), + id: schema.maybe(schema.string()), + data_range_start: schema.maybe(schema.string()), + data_range_end: schema.maybe(schema.string()), + }) + ), + target: schema.maybe( + schema.object({ + type: schema.maybe(schema.oneOf([schema.literal('endpoint')])), + ids: schema.maybe(arrayWithNonEmptyString('target.id')), + }) + ), + action: schema.maybe( + schema.object({ + type: schema.maybe( + schema.oneOf([ + schema.literal('refreshed'), + schema.literal('remediated'), + schema.literal('suppressed'), + schema.literal('dismissed'), + ]) + ), + timestamp: schema.maybe(schema.string()), + }) + ), + value: schema.maybe(schema.string()), + remediation: schema.maybe( + schema.object({ + exception_list_items: schema.maybe( + schema.arrayOf( + schema.object({ + list_id: schema.maybe(schema.string()), + name: schema.maybe(schema.string()), + description: schema.maybe(schema.string()), + entries: schema.maybe(schema.arrayOf(schema.any())), + tags: schema.maybe(arrayWithNonEmptyString('tag')), + os_types: schema.maybe(arrayWithNonEmptyString('os_type')), + }) + ) + ), + }) + ), + metadata: schema.maybe( + schema.object({ + notes: schema.maybe(schema.recordOf(schema.string(), schema.string())), + message_variables: schema.maybe(arrayWithNonEmptyString('message_variable')), + }) + ), + }), +}; + +export const GetWorkflowInsightsRequestSchema = { + query: schema.object({ + size: schema.maybe(schema.number()), + from: schema.maybe(schema.number()), + ids: schema.maybe(arrayWithNonEmptyString('ids')), + categories: schema.maybe(schema.arrayOf(schema.oneOf([schema.literal('endpoint')]))), + types: schema.maybe( + schema.arrayOf( + schema.oneOf([ + schema.literal('incompatible_antivirus'), + schema.literal('noisy_process_tree'), + ]) + ) + ), + sourceTypes: schema.maybe(schema.arrayOf(schema.oneOf([schema.literal('llm-connector')]))), + sourceIds: schema.maybe(arrayWithNonEmptyString('sourceId')), + targetTypes: schema.maybe(schema.arrayOf(schema.oneOf([schema.literal('endpoint')]))), + targetIds: schema.maybe(arrayWithNonEmptyString('targetId')), + actionTypes: schema.maybe( + schema.arrayOf( + schema.oneOf([ + schema.literal('refreshed'), + schema.literal('remediated'), + schema.literal('suppressed'), + schema.literal('dismissed'), + ]) + ) + ), + }), +}; + +export type GetWorkflowInsightsRequestQueryParams = TypeOf< + typeof GetWorkflowInsightsRequestSchema.query +>; + +export type UpdateWorkflowInsightsRequestParams = TypeOf< + typeof UpdateWorkflowInsightRequestSchema.params +>; +export type UpdateWorkflowInsightsRequestBody = TypeOf< + typeof UpdateWorkflowInsightRequestSchema.body +>; diff --git a/x-pack/plugins/security_solution/common/api/quickstart_client.gen.ts b/x-pack/plugins/security_solution/common/api/quickstart_client.gen.ts index d86a04f343a89..994fb70deaa25 100644 --- a/x-pack/plugins/security_solution/common/api/quickstart_client.gen.ts +++ b/x-pack/plugins/security_solution/common/api/quickstart_client.gen.ts @@ -205,6 +205,13 @@ import type { GetEndpointSuggestionsRequestBodyInput, GetEndpointSuggestionsResponse, } from './endpoint/suggestions/get_suggestions.gen'; +import type { + GetWorkflowInsightsRequestQueryInput, + GetWorkflowInsightsResponse, + UpdateWorkflowInsightRequestParamsInput, + UpdateWorkflowInsightRequestBodyInput, + UpdateWorkflowInsightResponse, +} from './endpoint/workflow_insights/workflow_insights.gen'; import type { BulkUpsertAssetCriticalityRecordsRequestBodyInput, BulkUpsertAssetCriticalityRecordsResponse, @@ -352,6 +359,7 @@ import type { CreateRuleMigrationRequestBodyInput, CreateRuleMigrationResponse, GetAllStatsRuleMigrationResponse, + GetRuleMigrationRequestQueryInput, GetRuleMigrationRequestParamsInput, GetRuleMigrationResponse, GetRuleMigrationResourcesRequestQueryInput, @@ -359,6 +367,8 @@ import type { GetRuleMigrationResourcesResponse, GetRuleMigrationStatsRequestParamsInput, GetRuleMigrationStatsResponse, + GetRuleMigrationTranslationStatsRequestParamsInput, + GetRuleMigrationTranslationStatsResponse, InstallMigrationRulesRequestParamsInput, InstallMigrationRulesRequestBodyInput, InstallMigrationRulesResponse, @@ -1415,6 +1425,8 @@ finalize it. [ELASTIC_HTTP_VERSION_HEADER]: '1', }, method: 'GET', + + query: props.query, }) .catch(catchAxiosErrorFormatAndThrow); } @@ -1453,6 +1465,24 @@ finalize it. }) .catch(catchAxiosErrorFormatAndThrow); } + /** + * Retrieves the translation stats of a SIEM rules migration using the migration id provided + */ + async getRuleMigrationTranslationStats(props: GetRuleMigrationTranslationStatsProps) { + this.log.info(`${new Date().toISOString()} Calling API GetRuleMigrationTranslationStats`); + return this.kbnClient + .request({ + path: replaceParams( + '/internal/siem_migrations/rules/{migration_id}/translation_stats', + props.params + ), + headers: { + [ELASTIC_HTTP_VERSION_HEADER]: '1', + }, + method: 'GET', + }) + .catch(catchAxiosErrorFormatAndThrow); + } /** * Get the details of an existing saved Timeline or Timeline template. */ @@ -1487,6 +1517,20 @@ finalize it. }) .catch(catchAxiosErrorFormatAndThrow); } + async getWorkflowInsights(props: GetWorkflowInsightsProps) { + this.log.info(`${new Date().toISOString()} Calling API GetWorkflowInsights`); + return this.kbnClient + .request({ + path: '/internal/api/endpoint/workflow_insights', + headers: { + [ELASTIC_HTTP_VERSION_HEADER]: '1', + }, + method: 'GET', + + query: props.query, + }) + .catch(catchAxiosErrorFormatAndThrow); + } /** * Import detection rules from an `.ndjson` file, including actions and exception lists. The request must include: - The `Content-Type: multipart/form-data` HTTP header. @@ -2139,6 +2183,19 @@ detection engine rules. }) .catch(catchAxiosErrorFormatAndThrow); } + async updateWorkflowInsight(props: UpdateWorkflowInsightProps) { + this.log.info(`${new Date().toISOString()} Calling API UpdateWorkflowInsight`); + return this.kbnClient + .request({ + path: replaceParams('/internal/api/endpoint/workflow_insights/{insightId}', props.params), + headers: { + [ELASTIC_HTTP_VERSION_HEADER]: '1', + }, + method: 'PUT', + body: props.body, + }) + .catch(catchAxiosErrorFormatAndThrow); + } async uploadAssetCriticalityRecords(props: UploadAssetCriticalityRecordsProps) { this.log.info(`${new Date().toISOString()} Calling API UploadAssetCriticalityRecords`); return this.kbnClient @@ -2334,6 +2391,7 @@ export interface GetRuleExecutionResultsProps { params: GetRuleExecutionResultsRequestParamsInput; } export interface GetRuleMigrationProps { + query: GetRuleMigrationRequestQueryInput; params: GetRuleMigrationRequestParamsInput; } export interface GetRuleMigrationResourcesProps { @@ -2343,12 +2401,18 @@ export interface GetRuleMigrationResourcesProps { export interface GetRuleMigrationStatsProps { params: GetRuleMigrationStatsRequestParamsInput; } +export interface GetRuleMigrationTranslationStatsProps { + params: GetRuleMigrationTranslationStatsRequestParamsInput; +} export interface GetTimelineProps { query: GetTimelineRequestQueryInput; } export interface GetTimelinesProps { query: GetTimelinesRequestQueryInput; } +export interface GetWorkflowInsightsProps { + query: GetWorkflowInsightsRequestQueryInput; +} export interface ImportRulesProps { query: ImportRulesRequestQueryInput; attachment: FormData; @@ -2451,6 +2515,10 @@ export interface UpdateRuleProps { export interface UpdateRuleMigrationProps { body: UpdateRuleMigrationRequestBodyInput; } +export interface UpdateWorkflowInsightProps { + params: UpdateWorkflowInsightRequestParamsInput; + body: UpdateWorkflowInsightRequestBodyInput; +} export interface UploadAssetCriticalityRecordsProps { attachment: FormData; } diff --git a/x-pack/plugins/security_solution/common/endpoint/constants.ts b/x-pack/plugins/security_solution/common/endpoint/constants.ts index b53c7ae761547..6aae156e9ac11 100644 --- a/x-pack/plugins/security_solution/common/endpoint/constants.ts +++ b/x-pack/plugins/security_solution/common/endpoint/constants.ts @@ -129,3 +129,11 @@ export const ENDPOINT_PACKAGE_POLICIES_STATS_STRATEGY = 'endpointPackagePolicies /** The list of OS types that support. Value usually found in ECS `host.os.type` */ export const SUPPORTED_HOST_OS_TYPE = Object.freeze(['macos', 'windows', 'linux'] as const); export type SupportedHostOsType = (typeof SUPPORTED_HOST_OS_TYPE)[number]; + +/** + * Workflow Insights + */ + +export const BASE_WORKFLOW_INSIGHTS_ROUTE = `/workflow_insights`; +export const WORKFLOW_INSIGHTS_ROUTE = `${BASE_INTERNAL_ENDPOINT_ROUTE}${BASE_WORKFLOW_INSIGHTS_ROUTE}`; +export const WORKFLOW_INSIGHTS_UPDATE_ROUTE = `${WORKFLOW_INSIGHTS_ROUTE}/{insightId}`; diff --git a/x-pack/plugins/security_solution/common/endpoint/types/workflow_insights.ts b/x-pack/plugins/security_solution/common/endpoint/types/workflow_insights.ts index 11cbc1bfd7cd8..3212193c981cb 100644 --- a/x-pack/plugins/security_solution/common/endpoint/types/workflow_insights.ts +++ b/x-pack/plugins/security_solution/common/endpoint/types/workflow_insights.ts @@ -74,5 +74,5 @@ export interface SearchParams { sourceIds?: string[]; targetTypes?: TargetType[]; targetIds?: string[]; - actionTypes: ActionType[]; + actionTypes?: ActionType[]; } diff --git a/x-pack/plugins/security_solution/common/experimental_features.ts b/x-pack/plugins/security_solution/common/experimental_features.ts index 3697359365619..095324840fc5c 100644 --- a/x-pack/plugins/security_solution/common/experimental_features.ts +++ b/x-pack/plugins/security_solution/common/experimental_features.ts @@ -12,6 +12,17 @@ export type ExperimentalFeatures = { [K in keyof typeof allowedExperimentalValue * This object is then used to validate and parse the value entered. */ export const allowedExperimentalValues = Object.freeze({ + /* + * Enables experimental feature flag for eql sequence alert suppression. + * + * Ticket: https://github.com/elastic/security-team/issues/9608 + * Owners: https://github.com/orgs/elastic/teams/security-detection-engine + * Added: on October 1st, 2024 in https://github.com/elastic/kibana/pull/189725 + * Turned: on (TBD) + * Expires: on (TBD) + */ + alertSuppressionForSequenceEqlRuleEnabled: true, + // FIXME:PT delete? excludePoliciesInFilterEnabled: false, diff --git a/x-pack/plugins/security_solution/common/siem_migrations/constants.ts b/x-pack/plugins/security_solution/common/siem_migrations/constants.ts index 565091e39a8db..789947150a67e 100644 --- a/x-pack/plugins/security_solution/common/siem_migrations/constants.ts +++ b/x-pack/plugins/security_solution/common/siem_migrations/constants.ts @@ -15,6 +15,8 @@ export const SIEM_RULE_MIGRATION_PATH = `${SIEM_RULE_MIGRATIONS_PATH}/{migration export const SIEM_RULE_MIGRATION_START_PATH = `${SIEM_RULE_MIGRATION_PATH}/start` as const; export const SIEM_RULE_MIGRATION_RETRY_PATH = `${SIEM_RULE_MIGRATION_PATH}/retry` as const; export const SIEM_RULE_MIGRATION_STATS_PATH = `${SIEM_RULE_MIGRATION_PATH}/stats` as const; +export const SIEM_RULE_MIGRATION_TRANSLATION_STATS_PATH = + `${SIEM_RULE_MIGRATION_PATH}/translation_stats` as const; export const SIEM_RULE_MIGRATION_STOP_PATH = `${SIEM_RULE_MIGRATION_PATH}/stop` as const; export const SIEM_RULE_MIGRATION_INSTALL_PATH = `${SIEM_RULE_MIGRATION_PATH}/install` as const; export const SIEM_RULE_MIGRATION_INSTALL_TRANSLATED_PATH = @@ -44,3 +46,11 @@ export enum SiemMigrationRuleTranslationResult { export const DEFAULT_TRANSLATION_RISK_SCORE = 21; export const DEFAULT_TRANSLATION_SEVERITY: Severity = 'low'; + +export const DEFAULT_TRANSLATION_FIELDS = { + risk_score: DEFAULT_TRANSLATION_RISK_SCORE, + severity: DEFAULT_TRANSLATION_SEVERITY, + from: 'now-360s', + to: 'now', + interval: '5m', +} as const; diff --git a/x-pack/plugins/security_solution/common/siem_migrations/model/api/rules/rule_migration.gen.ts b/x-pack/plugins/security_solution/common/siem_migrations/model/api/rules/rule_migration.gen.ts index 77a0fc94408f9..aa69f3b3c27f0 100644 --- a/x-pack/plugins/security_solution/common/siem_migrations/model/api/rules/rule_migration.gen.ts +++ b/x-pack/plugins/security_solution/common/siem_migrations/model/api/rules/rule_migration.gen.ts @@ -24,6 +24,7 @@ import { RuleMigrationComments, RuleMigrationTaskStats, RuleMigration, + RuleMigrationTranslationStats, RuleMigrationResourceData, RuleMigrationResourceType, RuleMigrationResource, @@ -44,6 +45,13 @@ export const CreateRuleMigrationResponse = z.object({ export type GetAllStatsRuleMigrationResponse = z.infer; export const GetAllStatsRuleMigrationResponse = z.array(RuleMigrationTaskStats); +export type GetRuleMigrationRequestQuery = z.infer; +export const GetRuleMigrationRequestQuery = z.object({ + page: z.coerce.number().optional(), + per_page: z.coerce.number().optional(), + search_term: z.string().optional(), +}); +export type GetRuleMigrationRequestQueryInput = z.input; export type GetRuleMigrationRequestParams = z.infer; export const GetRuleMigrationRequestParams = z.object({ @@ -52,7 +60,13 @@ export const GetRuleMigrationRequestParams = z.object({ export type GetRuleMigrationRequestParamsInput = z.input; export type GetRuleMigrationResponse = z.infer; -export const GetRuleMigrationResponse = z.array(RuleMigration); +export const GetRuleMigrationResponse = z.object({ + /** + * The total number of rules in migration. + */ + total: z.number(), + data: z.array(RuleMigration), +}); export type GetRuleMigrationResourcesRequestQuery = z.infer< typeof GetRuleMigrationResourcesRequestQuery >; @@ -88,6 +102,21 @@ export type GetRuleMigrationStatsRequestParamsInput = z.input< export type GetRuleMigrationStatsResponse = z.infer; export const GetRuleMigrationStatsResponse = RuleMigrationTaskStats; +export type GetRuleMigrationTranslationStatsRequestParams = z.infer< + typeof GetRuleMigrationTranslationStatsRequestParams +>; +export const GetRuleMigrationTranslationStatsRequestParams = z.object({ + migration_id: NonEmptyString, +}); +export type GetRuleMigrationTranslationStatsRequestParamsInput = z.input< + typeof GetRuleMigrationTranslationStatsRequestParams +>; + +export type GetRuleMigrationTranslationStatsResponse = z.infer< + typeof GetRuleMigrationTranslationStatsResponse +>; +export const GetRuleMigrationTranslationStatsResponse = RuleMigrationTranslationStats; + export type InstallMigrationRulesRequestParams = z.infer; export const InstallMigrationRulesRequestParams = z.object({ migration_id: NonEmptyString, diff --git a/x-pack/plugins/security_solution/common/siem_migrations/model/api/rules/rule_migration.schema.yaml b/x-pack/plugins/security_solution/common/siem_migrations/model/api/rules/rule_migration.schema.yaml index f57a809bb204e..a062b75d41699 100644 --- a/x-pack/plugins/security_solution/common/siem_migrations/model/api/rules/rule_migration.schema.yaml +++ b/x-pack/plugins/security_solution/common/siem_migrations/model/api/rules/rule_migration.schema.yaml @@ -185,15 +185,40 @@ paths: schema: description: The migration id to start $ref: '../../common.schema.yaml#/components/schemas/NonEmptyString' + - name: page + in: query + required: false + schema: + type: number + - name: per_page + in: query + required: false + schema: + type: number + - name: search_term + in: query + required: false + schema: + type: string + responses: 200: description: Indicates rule migration have been retrieved correctly. content: application/json: schema: - type: array - items: - $ref: '../../rule_migration.schema.yaml#/components/schemas/RuleMigration' + type: object + required: + - total + - data + properties: + total: + type: number + description: The total number of rules in migration. + data: + type: array + items: + $ref: '../../rule_migration.schema.yaml#/components/schemas/RuleMigration' 204: description: Indicates the migration id was not found. @@ -256,7 +281,7 @@ paths: in: path required: true schema: - description: The migration id to start + description: The migration id to fetch stats for $ref: '../../common.schema.yaml#/components/schemas/NonEmptyString' responses: 200: @@ -268,6 +293,31 @@ paths: 204: description: Indicates the migration id was not found. + /internal/siem_migrations/rules/{migration_id}/translation_stats: + get: + summary: Gets a rule migration translation stats + operationId: GetRuleMigrationTranslationStats + x-codegen-enabled: true + description: Retrieves the translation stats of a SIEM rules migration using the migration id provided + tags: + - SIEM Rule Migrations + parameters: + - name: migration_id + in: path + required: true + schema: + description: The migration id to fetch translation stats for + $ref: '../../common.schema.yaml#/components/schemas/NonEmptyString' + responses: + 200: + description: Indicates the migration stats has been retrieved correctly. + content: + application/json: + schema: + $ref: '../../rule_migration.schema.yaml#/components/schemas/RuleMigrationTranslationStats' + 204: + description: Indicates the migration id was not found. + /internal/siem_migrations/rules/{migration_id}/stop: put: summary: Stops an existing rule migration diff --git a/x-pack/plugins/security_solution/common/siem_migrations/model/rule_migration.gen.ts b/x-pack/plugins/security_solution/common/siem_migrations/model/rule_migration.gen.ts index 82e3c5549fd86..61706077d9549 100644 --- a/x-pack/plugins/security_solution/common/siem_migrations/model/rule_migration.gen.ts +++ b/x-pack/plugins/security_solution/common/siem_migrations/model/rule_migration.gen.ts @@ -242,6 +242,38 @@ export const RuleMigrationTaskStats = z.object({ last_updated_at: z.string(), }); +/** + * The rule migration translation stats object. + */ +export type RuleMigrationTranslationStats = z.infer; +export const RuleMigrationTranslationStats = z.object({ + /** + * The migration id + */ + id: NonEmptyString, + /** + * The rules migration translation stats. + */ + rules: z.object({ + /** + * The total number of rules to migrate. + */ + total: z.number().int(), + /** + * The number of rules that matched Elastic prebuilt rules. + */ + prebuilt: z.number().int(), + /** + * The number of rules that did not match Elastic prebuilt rules and will be installed as custom rules. + */ + custom: z.number().int(), + /** + * The number of rules that can be installed. + */ + installable: z.number().int(), + }), +}); + /** * The type of the rule migration resource. */ diff --git a/x-pack/plugins/security_solution/common/siem_migrations/model/rule_migration.schema.yaml b/x-pack/plugins/security_solution/common/siem_migrations/model/rule_migration.schema.yaml index 82892b4fa0722..fdcbb7b04515a 100644 --- a/x-pack/plugins/security_solution/common/siem_migrations/model/rule_migration.schema.yaml +++ b/x-pack/plugins/security_solution/common/siem_migrations/model/rule_migration.schema.yaml @@ -197,7 +197,39 @@ components: - running - stopped - finished - + + RuleMigrationTranslationStats: + type: object + description: The rule migration translation stats object. + required: + - id + - rules + properties: + id: + description: The migration id + $ref: './common.schema.yaml#/components/schemas/NonEmptyString' + rules: + type: object + description: The rules migration translation stats. + required: + - total + - prebuilt + - custom + - installable + properties: + total: + type: integer + description: The total number of rules to migrate. + prebuilt: + type: integer + description: The number of rules that matched Elastic prebuilt rules. + custom: + type: integer + description: The number of rules that did not match Elastic prebuilt rules and will be installed as custom rules. + installable: + type: integer + description: The number of rules that can be installed. + RuleMigrationTranslationResult: type: string description: The rule translation result. diff --git a/x-pack/plugins/security_solution/public/cases/components/use_insert_timeline/index.test.tsx b/x-pack/plugins/security_solution/public/cases/components/use_insert_timeline/index.test.tsx index f49f6fe0e28ad..9f67c91d5eac9 100644 --- a/x-pack/plugins/security_solution/public/cases/components/use_insert_timeline/index.test.tsx +++ b/x-pack/plugins/security_solution/public/cases/components/use_insert_timeline/index.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import { mockTimelineModel } from '../../../common/mock/timeline_results'; import { useFormatUrl } from '../../../common/components/link_to'; diff --git a/x-pack/plugins/security_solution/public/common/components/charts/common.test.tsx b/x-pack/plugins/security_solution/public/common/components/charts/common.test.tsx index 10234da2fac2f..f600eb501d189 100644 --- a/x-pack/plugins/security_solution/public/common/components/charts/common.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/charts/common.test.tsx @@ -7,7 +7,7 @@ import { shallow } from 'enzyme'; import React from 'react'; -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import { useDarkMode } from '../../lib/kibana'; import type { ChartSeriesData } from './common'; diff --git a/x-pack/plugins/security_solution/public/common/components/guided_onboarding_tour/tour.test.tsx b/x-pack/plugins/security_solution/public/common/components/guided_onboarding_tour/tour.test.tsx index e3f85df557e80..68a790e0e023d 100644 --- a/x-pack/plugins/security_solution/public/common/components/guided_onboarding_tour/tour.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/guided_onboarding_tour/tour.test.tsx @@ -5,11 +5,12 @@ * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; +import { waitFor, act, renderHook } from '@testing-library/react'; import { of } from 'rxjs'; + import { siemGuideId } from '../../../../common/guided_onboarding/siem_guide_config'; import { TourContextProvider, useTourContext } from './tour'; -import { SecurityStepId, securityTourConfig } from './tour_config'; +import { type AlertsCasesTourSteps, SecurityStepId, securityTourConfig } from './tour_config'; import { useKibana } from '../../lib/kibana'; jest.mock('../../lib/kibana'); @@ -44,7 +45,7 @@ describe('useTourContext', () => { // @ts-ignore const tourIds = [SecurityStepId.alertsCases]; describe.each(tourIds)('%s', (tourId: SecurityStepId) => { - it('if guidedOnboardingApi?.isGuideStepActive$ is false, isTourShown should be false', () => { + it('if guidedOnboardingApi?.isGuideStepActive$ is false, isTourShown should be false', async () => { (useKibana as jest.Mock).mockReturnValue({ services: { guidedOnboarding: { @@ -57,66 +58,80 @@ describe('useTourContext', () => { const { result } = renderHook(() => useTourContext(), { wrapper: TourContextProvider, }); - expect(result.current.isTourShown(tourId)).toBe(false); + await waitFor(() => { + expect(result.current.isTourShown(tourId)).toBe(false); + }); }); - it('if guidedOnboardingApi?.isGuideStepActive$ is true, isTourShown should be true', () => { + it('if guidedOnboardingApi?.isGuideStepActive$ is true, isTourShown should be true', async () => { const { result } = renderHook(() => useTourContext(), { wrapper: TourContextProvider, }); - expect(result.current.isTourShown(tourId)).toBe(true); + await waitFor(() => { + expect(result.current.isTourShown(tourId)).toBe(true); + }); }); it('endTourStep calls completeGuideStep with correct tourId', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useTourContext(), { - wrapper: TourContextProvider, - }); - await waitForNextUpdate(); + const { result } = renderHook(() => useTourContext(), { + wrapper: TourContextProvider, + }); + act(() => { result.current.endTourStep(tourId); + }); + await waitFor(() => { expect(mockCompleteGuideStep).toHaveBeenCalledWith(siemGuideId, tourId); }); }); - it('activeStep is initially 1', () => { + it('activeStep is initially 1', async () => { const { result } = renderHook(() => useTourContext(), { wrapper: TourContextProvider, }); - expect(result.current.activeStep).toBe(1); + await waitFor(() => { + expect(result.current.activeStep).toBe(1); + }); }); it('incrementStep properly increments for each tourId, and if attempted to increment beyond length of tour config steps resets activeStep to 1', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useTourContext(), { - wrapper: TourContextProvider, - }); - await waitForNextUpdate(); - const stepCount = securityTourConfig[tourId].length; + const { result } = renderHook(() => useTourContext(), { + wrapper: TourContextProvider, + }); + const stepCount = securityTourConfig[tourId].length; + act(() => { for (let i = 0; i < stepCount - 1; i++) { result.current.incrementStep(tourId); } - const lastStep = stepCount ? stepCount : 1; + }); + const lastStep = stepCount ? stepCount : 1; + await waitFor(() => { expect(result.current.activeStep).toBe(lastStep); + }); + act(() => { result.current.incrementStep(tourId); + }); + await waitFor(() => { expect(result.current.activeStep).toBe(1); }); }); it('setStep sets activeStep to step number argument', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useTourContext(), { - wrapper: TourContextProvider, - }); - await waitForNextUpdate(); + const { result } = renderHook(() => useTourContext(), { + wrapper: TourContextProvider, + }); + act(() => { result.current.setStep(tourId, 6); + }); + await waitFor(() => { expect(result.current.activeStep).toBe(6); }); }); it('does not setStep sets activeStep to non-existing step number', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useTourContext(), { - wrapper: TourContextProvider, - }); - await waitForNextUpdate(); - // @ts-expect-error testing invalid step - result.current.setStep(tourId, 88); + const { result } = renderHook(() => useTourContext(), { + wrapper: TourContextProvider, + }); + + act(() => { + result.current.setStep(tourId, 88 as AlertsCasesTourSteps); + }); + await waitFor(() => { expect(result.current.activeStep).toBe(1); }); }); diff --git a/x-pack/plugins/security_solution/public/common/components/guided_onboarding_tour/tour.tsx b/x-pack/plugins/security_solution/public/common/components/guided_onboarding_tour/tour.tsx index a4fca35acf56b..f622439dccd35 100644 --- a/x-pack/plugins/security_solution/public/common/components/guided_onboarding_tour/tour.tsx +++ b/x-pack/plugins/security_solution/public/common/components/guided_onboarding_tour/tour.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import type { ReactChild } from 'react'; +import type { FC, ReactNode } from 'react'; import React, { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react'; import useObservable from 'react-use/lib/useObservable'; @@ -39,7 +39,7 @@ const initialState: TourContextValue = { const TourContext = createContext(initialState); -export const RealTourContextProvider = ({ children }: { children: ReactChild }) => { +export const RealTourContextProvider: FC<{ children: ReactNode }> = ({ children }) => { const { guidedOnboarding } = useKibana().services; const [hidden, setHidden] = useState(false); @@ -131,7 +131,7 @@ export const RealTourContextProvider = ({ children }: { children: ReactChild }) return {children}; }; -export const TourContextProvider = ({ children }: { children: ReactChild }) => { +export const TourContextProvider: FC<{ children: ReactNode }> = ({ children }) => { const { pathname } = useLocation(); const ContextProvider = useMemo( diff --git a/x-pack/plugins/security_solution/public/common/components/navigation/breadcrumbs/use_breadcrumbs_nav.test.ts b/x-pack/plugins/security_solution/public/common/components/navigation/breadcrumbs/use_breadcrumbs_nav.test.ts index c20d1f4623fa7..e052d47b676da 100644 --- a/x-pack/plugins/security_solution/public/common/components/navigation/breadcrumbs/use_breadcrumbs_nav.test.ts +++ b/x-pack/plugins/security_solution/public/common/components/navigation/breadcrumbs/use_breadcrumbs_nav.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import type { ChromeBreadcrumb } from '@kbn/core/public'; import type { GetSecuritySolutionUrl } from '../../link_to'; import { SecurityPageName } from '../../../../../common/constants'; diff --git a/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/use_security_solution_navigation.test.tsx b/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/use_security_solution_navigation.test.tsx index 0aed8dc19663b..c20b845f62ce8 100644 --- a/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/use_security_solution_navigation.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/use_security_solution_navigation.test.tsx @@ -6,8 +6,7 @@ */ import React from 'react'; -import { render } from '@testing-library/react'; -import { renderHook } from '@testing-library/react-hooks'; +import { render, renderHook } from '@testing-library/react'; import { of } from 'rxjs'; import { useSecuritySolutionNavigation } from './use_security_solution_navigation'; diff --git a/x-pack/plugins/security_solution/public/common/components/page/use_refetch_by_session.test.tsx b/x-pack/plugins/security_solution/public/common/components/page/use_refetch_by_session.test.tsx index da5610d8c9ab2..1e7e66de24b80 100644 --- a/x-pack/plugins/security_solution/public/common/components/page/use_refetch_by_session.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/page/use_refetch_by_session.test.tsx @@ -4,17 +4,14 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import type { MutableRefObject } from 'react'; import React from 'react'; -import type { RenderHookResult } from '@testing-library/react-hooks'; -import { renderHook } from '@testing-library/react-hooks'; +import type { RenderHookResult } from '@testing-library/react'; +import { renderHook } from '@testing-library/react'; import { TestProviders } from '../../mock'; import { useKibana } from '../../lib/kibana'; import { InputsModelId } from '../../store/inputs/constants'; import { useRefetchByRestartingSession } from './use_refetch_by_session'; import { inputsActions } from '../../store/actions'; -import type { Refetch } from '../../store/inputs/model'; -import type { ISessionService } from '@kbn/data-plugin/public'; const wrapper = ({ children }: { children: React.ReactNode }) => ( {children} @@ -45,13 +42,8 @@ jest.mock('../../store/actions', () => { describe(`useRefetchByRestartingSession`, () => { let res: RenderHookResult< - { - children: React.ReactNode; - }, - { - session: MutableRefObject; - refetchByRestartingSession: Refetch; - } + ReturnType, + Parameters[0] >; const mockSessionStart = jest.fn().mockReturnValue('mockSessionId'); const mockSession = { diff --git a/x-pack/plugins/security_solution/public/common/icons/siem_migrations.tsx b/x-pack/plugins/security_solution/public/common/icons/siem_migrations.tsx new file mode 100644 index 0000000000000..072b0acf9d30a --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/icons/siem_migrations.tsx @@ -0,0 +1,39 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import type { SVGProps } from 'react'; +import React from 'react'; +export const SiemMigrationsIcon: React.FC> = ({ ...props }) => ( + + + + + + + + + + + + + + +); diff --git a/x-pack/plugins/security_solution/public/dashboards/containers/use_fetch_security_dashboards.test.ts b/x-pack/plugins/security_solution/public/dashboards/containers/use_fetch_security_dashboards.test.ts index ced91801747c8..77dce4f64d57a 100644 --- a/x-pack/plugins/security_solution/public/dashboards/containers/use_fetch_security_dashboards.test.ts +++ b/x-pack/plugins/security_solution/public/dashboards/containers/use_fetch_security_dashboards.test.ts @@ -5,7 +5,7 @@ * 2.0. */ import type { HttpStart } from '@kbn/core/public'; -import { renderHook, act } from '@testing-library/react-hooks'; +import { waitFor, renderHook } from '@testing-library/react'; import { DashboardContextProvider } from '../context/dashboard_context'; import { useFetchSecurityDashboards } from './use_fetch_security_dashboards'; import { getTagsByName } from '../../common/containers/tags/api'; @@ -26,14 +26,6 @@ const renderUseFetchSecurityDashboards = () => wrapper: DashboardContextProvider, }); -const asyncRenderUseFetchSecurityDashboards = async () => { - const renderedHook = renderUseFetchSecurityDashboards(); - await act(async () => { - await renderedHook.waitForNextUpdate(); - }); - return renderedHook; -}; - describe('useFetchSecurityDashboards', () => { beforeAll(() => { useKibana().services.http = mockHttp as unknown as HttpStart; @@ -49,34 +41,43 @@ describe('useFetchSecurityDashboards', () => { }); it('should fetch Security Solution tags', async () => { - await asyncRenderUseFetchSecurityDashboards(); - expect(getTagsByName).toHaveBeenCalledTimes(1); + renderUseFetchSecurityDashboards(); + + await waitFor(() => { + expect(getTagsByName).toHaveBeenCalledTimes(1); + }); }); it('should fetch Security Solution dashboards', async () => { - await asyncRenderUseFetchSecurityDashboards(); + renderUseFetchSecurityDashboards(); - expect(getDashboardsByTagIds).toHaveBeenCalledTimes(1); - expect(getDashboardsByTagIds).toHaveBeenCalledWith( - { - http: mockHttp, - tagIds: [MOCK_TAG_ID], - }, - expect.any(Object) - ); + await waitFor(() => { + expect(getDashboardsByTagIds).toHaveBeenCalledTimes(1); + expect(getDashboardsByTagIds).toHaveBeenCalledWith( + { + http: mockHttp, + tagIds: [MOCK_TAG_ID], + }, + expect.any(Object) + ); + }); }); it('should fetch Security Solution dashboards with abort signal', async () => { - await asyncRenderUseFetchSecurityDashboards(); + renderUseFetchSecurityDashboards(); - expect(getDashboardsByTagIds).toHaveBeenCalledTimes(1); - expect((getDashboardsByTagIds as jest.Mock).mock.calls[0][1]).toEqual(mockAbortSignal); + await waitFor(() => { + expect(getDashboardsByTagIds).toHaveBeenCalledTimes(1); + expect((getDashboardsByTagIds as jest.Mock).mock.calls[0][1]).toEqual(mockAbortSignal); + }); }); it('should return Security Solution dashboards', async () => { - const { result } = await asyncRenderUseFetchSecurityDashboards(); + const { result } = renderUseFetchSecurityDashboards(); - expect(result.current.isLoading).toEqual(false); - expect(result.current.dashboards).toEqual(DEFAULT_DASHBOARDS_RESPONSE); + await waitFor(() => { + expect(result.current.isLoading).toEqual(false); + expect(result.current.dashboards).toEqual(DEFAULT_DASHBOARDS_RESPONSE); + }); }); }); diff --git a/x-pack/plugins/security_solution/public/dashboards/containers/use_fetch_security_tags.test.ts b/x-pack/plugins/security_solution/public/dashboards/containers/use_fetch_security_tags.test.ts index e3da086796794..15dfd3c7c9366 100644 --- a/x-pack/plugins/security_solution/public/dashboards/containers/use_fetch_security_tags.test.ts +++ b/x-pack/plugins/security_solution/public/dashboards/containers/use_fetch_security_tags.test.ts @@ -6,7 +6,7 @@ */ import type { HttpStart } from '@kbn/core/public'; -import { act, renderHook } from '@testing-library/react-hooks'; +import { waitFor, renderHook } from '@testing-library/react'; import { INTERNAL_TAGS_URL, SECURITY_TAG_DESCRIPTION, @@ -28,14 +28,6 @@ const mockAbortSignal = {} as unknown as AbortSignal; const mockCreateTag = jest.fn(); const renderUseCreateSecurityDashboardLink = () => renderHook(() => useFetchSecurityTags(), {}); -const asyncRenderUseCreateSecurityDashboardLink = async () => { - const renderedHook = renderUseCreateSecurityDashboardLink(); - await act(async () => { - await renderedHook.waitForNextUpdate(); - }); - return renderedHook; -}; - describe('useFetchSecurityTags', () => { beforeAll(() => { useKibana().services.http = { get: mockGet } as unknown as HttpStart; @@ -54,25 +46,31 @@ describe('useFetchSecurityTags', () => { test('should fetch Security Solution tags', async () => { mockGet.mockResolvedValue([]); - await asyncRenderUseCreateSecurityDashboardLink(); - expect(mockGet).toHaveBeenCalledWith( - INTERNAL_TAGS_URL, - expect.objectContaining({ - query: { name: SECURITY_TAG_NAME }, - signal: mockAbortSignal, - }) - ); + renderUseCreateSecurityDashboardLink(); + + await waitFor(() => { + expect(mockGet).toHaveBeenCalledWith( + INTERNAL_TAGS_URL, + expect.objectContaining({ + query: { name: SECURITY_TAG_NAME }, + signal: mockAbortSignal, + }) + ); + }); }); test('should create a Security Solution tag if no Security Solution tags were found', async () => { mockGet.mockResolvedValue([]); - await asyncRenderUseCreateSecurityDashboardLink(); - expect(mockCreateTag).toHaveBeenCalledWith({ - name: SECURITY_TAG_NAME, - description: SECURITY_TAG_DESCRIPTION, - color: '#FFFFFF', + renderUseCreateSecurityDashboardLink(); + + await waitFor(() => { + expect(mockCreateTag).toHaveBeenCalledWith({ + name: SECURITY_TAG_NAME, + description: SECURITY_TAG_DESCRIPTION, + color: '#FFFFFF', + }); }); }); @@ -84,9 +82,11 @@ describe('useFetchSecurityTags', () => { type: 'tag', ...tag.attributes, })); - const { result } = await asyncRenderUseCreateSecurityDashboardLink(); + const { result } = renderUseCreateSecurityDashboardLink(); - expect(mockCreateTag).not.toHaveBeenCalled(); - expect(result.current.tags).toEqual(expect.objectContaining(expected)); + await waitFor(() => { + expect(mockCreateTag).not.toHaveBeenCalled(); + expect(result.current.tags).toEqual(expect.objectContaining(expected)); + }); }); }); diff --git a/x-pack/plugins/security_solution/public/dashboards/hooks/use_create_security_dashboard_link.test.tsx b/x-pack/plugins/security_solution/public/dashboards/hooks/use_create_security_dashboard_link.test.tsx index 36aa70bc5678c..749f1626e257b 100644 --- a/x-pack/plugins/security_solution/public/dashboards/hooks/use_create_security_dashboard_link.test.tsx +++ b/x-pack/plugins/security_solution/public/dashboards/hooks/use_create_security_dashboard_link.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { renderHook, act } from '@testing-library/react-hooks'; +import { act, waitFor, renderHook } from '@testing-library/react'; import { useKibana } from '../../common/lib/kibana'; import { useCreateSecurityDashboardLink } from './use_create_security_dashboard_link'; import { DashboardContextProvider } from '../context/dashboard_context'; @@ -34,15 +34,6 @@ const renderUseCreateSecurityDashboardLink = () => ), }); -const asyncRenderUseCreateSecurityDashboard = async () => { - const renderedHook = renderUseCreateSecurityDashboardLink(); - - await act(async () => { - await renderedHook.waitForNextUpdate(); - }); - return renderedHook; -}; - describe('useCreateSecurityDashboardLink', () => { beforeAll(() => { (useKibana as jest.Mock).mockReturnValue({ @@ -61,40 +52,51 @@ describe('useCreateSecurityDashboardLink', () => { describe('useSecurityDashboardsTableItems', () => { it('should fetch Security Solution tags when renders', async () => { - await asyncRenderUseCreateSecurityDashboard(); + renderUseCreateSecurityDashboardLink(); - expect(getTagsByName).toHaveBeenCalledTimes(1); + await waitFor(() => { + expect(getTagsByName).toHaveBeenCalledTimes(1); + }); }); it('should return a memoized value when rerendered', async () => { - const { result, rerender } = await asyncRenderUseCreateSecurityDashboard(); + const { result, rerender } = renderUseCreateSecurityDashboardLink(); const result1 = result.current; act(() => rerender()); const result2 = result.current; - expect(result1).toEqual(result2); + + await waitFor(() => { + expect(result1).toEqual(result2); + }); }); it('should not re-request tag id when re-rendered', async () => { - const { rerender } = await asyncRenderUseCreateSecurityDashboard(); + const { rerender } = renderUseCreateSecurityDashboardLink(); + + await waitFor(() => { + expect(getTagsByName).toHaveBeenCalledTimes(1); + }); - expect(getTagsByName).toHaveBeenCalledTimes(1); act(() => rerender()); - expect(getTagsByName).toHaveBeenCalledTimes(1); + + await waitFor(() => { + expect(getTagsByName).toHaveBeenCalledTimes(1); + }); }); it('should return isLoading while requesting', async () => { - const { result, waitForNextUpdate } = renderUseCreateSecurityDashboardLink(); - - expect(result.current.isLoading).toEqual(true); - expect(result.current.url).toEqual('/app/security/dashboards/create'); + const { result } = renderUseCreateSecurityDashboardLink(); - await act(async () => { - await waitForNextUpdate(); + await waitFor(() => { + expect(result.current.isLoading).toEqual(true); + expect(result.current.url).toEqual('/app/security/dashboards/create'); }); - expect(result.current.isLoading).toEqual(false); - expect(result.current.url).toEqual('/app/security/dashboards/create'); + await waitFor(() => { + expect(result.current.isLoading).toEqual(false); + expect(result.current.url).toEqual('/app/security/dashboards/create'); + }); }); }); }); diff --git a/x-pack/plugins/security_solution/public/dashboards/hooks/use_dashboard_renderer.test.tsx b/x-pack/plugins/security_solution/public/dashboards/hooks/use_dashboard_renderer.test.tsx index ef4737a985b24..f73e126a78c5b 100644 --- a/x-pack/plugins/security_solution/public/dashboards/hooks/use_dashboard_renderer.test.tsx +++ b/x-pack/plugins/security_solution/public/dashboards/hooks/use_dashboard_renderer.test.tsx @@ -4,7 +4,8 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { renderHook, act } from '@testing-library/react-hooks'; + +import { renderHook, act } from '@testing-library/react'; import type { DashboardApi } from '@kbn/dashboard-plugin/public'; import { useDashboardRenderer } from './use_dashboard_renderer'; @@ -14,11 +15,11 @@ jest.mock('../../common/lib/kibana'); const mockDashboardContainer = {} as DashboardApi; describe('useDashboardRenderer', () => { - it('should set dashboard container correctly when dashboard is loaded', async () => { + it('should set dashboard container correctly when dashboard is loaded', () => { const { result } = renderHook(() => useDashboardRenderer()); - await act(async () => { - await result.current.handleDashboardLoaded(mockDashboardContainer); + act(() => { + result.current.handleDashboardLoaded(mockDashboardContainer); }); expect(result.current.dashboardContainer).toEqual(mockDashboardContainer); diff --git a/x-pack/plugins/security_solution/public/dashboards/hooks/use_dashboard_view_prompt_state.test.tsx b/x-pack/plugins/security_solution/public/dashboards/hooks/use_dashboard_view_prompt_state.test.tsx index 6fd7fb3e2de10..eabd904b38fdf 100644 --- a/x-pack/plugins/security_solution/public/dashboards/hooks/use_dashboard_view_prompt_state.test.tsx +++ b/x-pack/plugins/security_solution/public/dashboards/hooks/use_dashboard_view_prompt_state.test.tsx @@ -4,8 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import type { EuiEmptyPromptProps } from '@elastic/eui'; -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import { DashboardViewPromptState, useDashboardViewPromptState, @@ -13,18 +12,14 @@ import { describe('useDashboardViewPromptState', () => { it('returns empty state', () => { - const { result } = renderHook< - DashboardViewPromptState | null, - Partial | null - >(() => useDashboardViewPromptState(null)); + const { result } = renderHook(() => useDashboardViewPromptState(null)); expect(result.current).toBeNull(); }); it('returns NoReadPermission state', () => { - const { result } = renderHook< - DashboardViewPromptState | null, - Partial | null - >(() => useDashboardViewPromptState(DashboardViewPromptState.NoReadPermission)); + const { result } = renderHook(() => + useDashboardViewPromptState(DashboardViewPromptState.NoReadPermission) + ); expect(result.current).toMatchInlineSnapshot(` Object { "body":

      diff --git a/x-pack/plugins/security_solution/public/dashboards/hooks/use_security_dashboards_table.test.tsx b/x-pack/plugins/security_solution/public/dashboards/hooks/use_security_dashboards_table.test.tsx index 1026c69da8d8e..b7d76849a7303 100644 --- a/x-pack/plugins/security_solution/public/dashboards/hooks/use_security_dashboards_table.test.tsx +++ b/x-pack/plugins/security_solution/public/dashboards/hooks/use_security_dashboards_table.test.tsx @@ -6,8 +6,7 @@ */ import React from 'react'; -import { renderHook, act } from '@testing-library/react-hooks'; -import { render } from '@testing-library/react'; +import { render, waitFor, renderHook } from '@testing-library/react'; import type { DashboardStart } from '@kbn/dashboard-plugin/public'; import { EuiBasicTable } from '@elastic/eui'; import { useKibana } from '../../common/lib/kibana'; @@ -28,21 +27,20 @@ import type { HttpStart } from '@kbn/core/public'; jest.mock('../../common/lib/kibana'); jest.mock('../../common/containers/tags/api'); jest.mock('../../common/containers/dashboards/api'); + +const useKibanaMock = useKibana as jest.Mocked; + const spyUseGetSecuritySolutionUrl = jest.spyOn(linkTo, 'useGetSecuritySolutionUrl'); const spyTrack = jest.spyOn(telemetry, 'track'); const { id: mockReturnDashboardId, attributes: { title: mockReturnDashboardTitle, description: mockReturnDashboardDescription }, } = DEFAULT_DASHBOARDS_RESPONSE[0]; -const renderUseSecurityDashboardsTableItems = async () => { - const renderedHook = renderHook(() => useSecurityDashboardsTableItems(), { + +const renderUseSecurityDashboardsTableItems = () => { + return renderHook(useSecurityDashboardsTableItems, { wrapper: DashboardContextProvider, }); - await act(async () => { - // needed to let dashboard items to be updated from saved objects response - await renderedHook.waitForNextUpdate(); - }); - return renderedHook; }; const renderUseDashboardsTableColumns = () => @@ -50,101 +48,137 @@ const renderUseDashboardsTableColumns = () => wrapper: TestProviders, }); +const tagsColumn = { + field: 'id', // set existing field to prevent test error + name: 'Tags', + 'data-test-subj': 'dashboardTableTagsCell', +}; + +beforeEach(() => { + jest.clearAllMocks(); +}); + describe('Security Dashboards Table hooks', () => { - const mockGetRedirectUrl = jest.fn(() => '/path'); - useKibana().services.dashboard = { - locator: { getRedirectUrl: mockGetRedirectUrl }, - } as unknown as DashboardStart; - useKibana().services.http = {} as unknown as HttpStart; - - const mockTaggingGetTableColumnDefinition = useKibana().services.savedObjectsTagging?.ui - .getTableColumnDefinition as jest.Mock; - const tagsColumn = { - field: 'id', // set existing field to prevent test error - name: 'Tags', - 'data-test-subj': 'dashboardTableTagsCell', - }; - mockTaggingGetTableColumnDefinition.mockReturnValue(tagsColumn); - - afterEach(() => { - jest.clearAllMocks(); + let mockTaggingGetTableColumnDefinition: jest.Mock; + + beforeEach(() => { + useKibanaMock().services.dashboard = { + locator: { getRedirectUrl: jest.fn(() => '/path') }, + } as unknown as DashboardStart; + useKibanaMock().services.http = {} as unknown as HttpStart; + + mockTaggingGetTableColumnDefinition = useKibanaMock().services.savedObjectsTagging?.ui + .getTableColumnDefinition as jest.Mock; + + mockTaggingGetTableColumnDefinition.mockReturnValue(tagsColumn); }); describe('useSecurityDashboardsTableItems', () => { it('should request when renders', async () => { - await renderUseSecurityDashboardsTableItems(); - expect(getDashboardsByTagIds).toHaveBeenCalledTimes(1); + renderUseSecurityDashboardsTableItems(); + + await waitFor(() => { + expect(getDashboardsByTagIds).toHaveBeenCalledTimes(1); + }); }); it('should not request again when rerendered', async () => { - const { rerender } = await renderUseSecurityDashboardsTableItems(); + const { rerender } = renderUseSecurityDashboardsTableItems(); + + await waitFor(() => { + expect(getDashboardsByTagIds).toHaveBeenCalledTimes(1); + }); + + rerender(); - expect(getDashboardsByTagIds).toHaveBeenCalledTimes(1); - act(() => rerender()); - expect(getDashboardsByTagIds).toHaveBeenCalledTimes(1); + await waitFor(() => { + return expect(getDashboardsByTagIds).toHaveBeenCalledTimes(1); + }); }); it('should return a memoized value when rerendered', async () => { - const { result, rerender } = await renderUseSecurityDashboardsTableItems(); + const { result, rerender } = renderUseSecurityDashboardsTableItems(); + + waitFor(() => expect(result.current.isLoading).toBe(false)); const result1 = result.current.items; - act(() => rerender()); - const result2 = result.current.items; - expect(result1).toBe(result2); + rerender(); + + await waitFor(() => { + expect(result.current.isLoading).toBe(false); + expect(result1).toBe(result.current.items); + }); }); it('should return dashboard items', async () => { - const { result } = await renderUseSecurityDashboardsTableItems(); + const { result } = renderUseSecurityDashboardsTableItems(); const [dashboard1] = DEFAULT_DASHBOARDS_RESPONSE; - expect(result.current.items).toStrictEqual([ - { - ...dashboard1, - title: dashboard1.attributes.title, - description: dashboard1.attributes.description, - }, - ]); + + await waitFor(() => { + expect(result.current.items).toStrictEqual([ + { + ...dashboard1, + title: dashboard1.attributes.title, + description: dashboard1.attributes.description, + }, + ]); + }); }); }); describe('useDashboardsTableColumns', () => { - it('should call getTableColumnDefinition to get tags column', () => { + it('should call getTableColumnDefinition to get tags column', async () => { renderUseDashboardsTableColumns(); - expect(mockTaggingGetTableColumnDefinition).toHaveBeenCalled(); + await waitFor(() => { + expect(mockTaggingGetTableColumnDefinition).toHaveBeenCalled(); + }); }); - it('should return dashboard columns', () => { + it('should return dashboard columns', async () => { const { result } = renderUseDashboardsTableColumns(); - expect(result.current).toEqual([ - expect.objectContaining({ - field: 'title', - name: 'Title', - }), - expect.objectContaining({ - field: 'description', - name: 'Description', - }), - expect.objectContaining(tagsColumn), - ]); + await waitFor(() => { + expect(result.current).toEqual([ + expect.objectContaining({ + field: 'title', + name: 'Title', + }), + expect.objectContaining({ + field: 'description', + name: 'Description', + }), + expect.objectContaining(tagsColumn), + ]); + }); }); it('returns a memoized value', async () => { const { result, rerender } = renderUseDashboardsTableColumns(); const result1 = result.current; - act(() => rerender()); + + rerender(); + const result2 = result.current; - expect(result1).toBe(result2); + await waitFor(() => { + expect(result1).toBe(result2); + }); }); }); it('should render a table with consistent items and columns', async () => { - const { result: itemsResult } = await renderUseSecurityDashboardsTableItems(); + const { result: itemsResult } = renderUseSecurityDashboardsTableItems(); const { result: columnsResult } = renderUseDashboardsTableColumns(); + await waitFor(() => { + expect(itemsResult.current.isLoading).toBe(false); + expect(itemsResult.current.items).toHaveLength(1); + expect(columnsResult.current).toHaveLength(3); + }); + const result = render( , { @@ -152,22 +186,28 @@ describe('Security Dashboards Table hooks', () => { } ); - expect(result.getAllByText('Title').length).toBeGreaterThan(0); - expect(result.getAllByText('Description').length).toBeGreaterThan(0); - expect(result.getAllByText('Tags').length).toBeGreaterThan(0); + expect(await result.findAllByText('Title')).toHaveLength(1); + expect(await result.findAllByText('Description')).toHaveLength(1); + expect(await result.findAllByText('Tags')).toHaveLength(1); - expect(result.getByText(mockReturnDashboardTitle)).toBeInTheDocument(); - expect(result.getByText(mockReturnDashboardDescription)).toBeInTheDocument(); + expect(await result.findByText(mockReturnDashboardTitle)).toBeInTheDocument(); + expect(await result.findByText(mockReturnDashboardDescription)).toBeInTheDocument(); - expect(result.queryAllByTestId('dashboardTableTitleCell')).toHaveLength(1); - expect(result.queryAllByTestId('dashboardTableDescriptionCell')).toHaveLength(1); - expect(result.queryAllByTestId('dashboardTableTagsCell')).toHaveLength(1); + expect(await result.findAllByTestId('dashboardTableTitleCell')).toHaveLength(1); + expect(await result.findAllByTestId('dashboardTableDescriptionCell')).toHaveLength(1); + expect(await result.findAllByTestId('dashboardTableTagsCell')).toHaveLength(1); }); it('should send telemetry when dashboard title clicked', async () => { - const { result: itemsResult } = await renderUseSecurityDashboardsTableItems(); + const { result: itemsResult } = renderUseSecurityDashboardsTableItems(); const { result: columnsResult } = renderUseDashboardsTableColumns(); + await waitFor(() => { + expect(itemsResult.current.isLoading).toBe(false); + expect(itemsResult.current.items).toHaveLength(1); + expect(columnsResult.current).toHaveLength(3); + }); + const result = render( , { @@ -176,22 +216,33 @@ describe('Security Dashboards Table hooks', () => { ); result.getByText(mockReturnDashboardTitle).click(); - expect(spyTrack).toHaveBeenCalledWith(METRIC_TYPE.CLICK, TELEMETRY_EVENT.DASHBOARD); + + await waitFor(() => { + expect(spyTrack).toHaveBeenCalledWith(METRIC_TYPE.CLICK, TELEMETRY_EVENT.DASHBOARD); + }); }); it('should land on SecuritySolution dashboard view page when dashboard title clicked', async () => { const mockGetSecuritySolutionUrl = jest.fn(); spyUseGetSecuritySolutionUrl.mockImplementation(() => mockGetSecuritySolutionUrl); - const { result: itemsResult } = await renderUseSecurityDashboardsTableItems(); + const { result: itemsResult } = renderUseSecurityDashboardsTableItems(); const { result: columnsResult } = renderUseDashboardsTableColumns(); + await waitFor(() => { + expect(itemsResult.current.isLoading).toBe(false); + expect(itemsResult.current.items).toHaveLength(1); + expect(columnsResult.current).toHaveLength(3); + }); + render(, { wrapper: TestProviders, }); - expect(mockGetSecuritySolutionUrl).toHaveBeenCalledWith({ - deepLinkId: SecurityPageName.dashboards, - path: mockReturnDashboardId, + await waitFor(() => { + expect(mockGetSecuritySolutionUrl).toHaveBeenCalledWith({ + deepLinkId: SecurityPageName.dashboards, + path: mockReturnDashboardId, + }); }); }); }); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/esql_query_edit/validators/esql_query_validator_factory.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/esql_query_edit/validators/esql_query_validator_factory.ts index 90cdaff14cc9b..c5b54db172a18 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/esql_query_edit/validators/esql_query_validator_factory.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/esql_query_edit/validators/esql_query_validator_factory.ts @@ -7,10 +7,7 @@ import type { QueryClient } from '@tanstack/react-query'; import type { DatatableColumn } from '@kbn/expressions-plugin/common'; -import type { ESQLAstQueryExpression, ESQLCommandOption } from '@kbn/esql-ast'; -import { parse } from '@kbn/esql-ast'; -import { isAggregatingQuery } from '@kbn/securitysolution-utils'; -import { isColumnItem, isOptionItem } from '@kbn/esql-validation-autocomplete'; +import { parseEsqlQuery } from '@kbn/securitysolution-utils'; import type { FormData, ValidationError, ValidationFunc } from '../../../../../shared_imports'; import type { FieldValueQueryBar } from '../../../../rule_creation_ui/components/query_bar_field'; import { fetchEsqlQueryColumns } from '../../../logic/esql_query_columns'; @@ -79,59 +76,6 @@ function hasIdColumn(columns: DatatableColumn[]): boolean { return columns.some(({ id }) => '_id' === id); } -/** - * check if esql query valid for Security rule: - * - if it's non aggregation query it must have metadata operator - */ -function parseEsqlQuery(query: string) { - const { root, errors } = parse(query); - const isEsqlQueryAggregating = isAggregatingQuery(root); - - return { - errors, - isEsqlQueryAggregating, - hasMetadataOperator: computeHasMetadataOperator(root), - }; -} - -/** - * checks whether query has metadata _id operator - */ -function computeHasMetadataOperator(astExpression: ESQLAstQueryExpression): boolean { - // Check whether the `from` command has `metadata` operator - const metadataOption = getMetadataOption(astExpression); - if (!metadataOption) { - return false; - } - - // Check whether the `metadata` operator has `_id` argument - const idColumnItem = metadataOption.args.find( - (fromArg) => isColumnItem(fromArg) && fromArg.name === '_id' - ); - if (!idColumnItem) { - return false; - } - - return true; -} - -function getMetadataOption(astExpression: ESQLAstQueryExpression): ESQLCommandOption | undefined { - const fromCommand = astExpression.commands.find((x) => x.name === 'from'); - - if (!fromCommand?.args) { - return undefined; - } - - // Check whether the `from` command has `metadata` operator - for (const fromArg of fromCommand.args) { - if (isOptionItem(fromArg) && fromArg.name === 'metadata') { - return fromArg; - } - } - - return undefined; -} - function constructSyntaxError(error: Error): ValidationError { return { code: ESQL_ERROR_CODES.INVALID_SYNTAX, diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_about_rule/index.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_about_rule/index.tsx index ac5c91aa8a25a..2d2ef8c8930d6 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_about_rule/index.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_about_rule/index.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { EuiAccordion, EuiFlexItem, EuiSpacer, EuiFormRow } from '@elastic/eui'; +import { EuiAccordion, EuiFlexItem, EuiSpacer, EuiFormRow, EuiToolTip } from '@elastic/eui'; import type { FC } from 'react'; import React, { memo, useCallback, useEffect, useState, useMemo } from 'react'; import styled from 'styled-components'; @@ -13,6 +13,7 @@ import styled from 'styled-components'; import type { DataViewBase } from '@kbn/es-query'; import type { Severity, Type } from '@kbn/securitysolution-io-ts-alerting-types'; +import type { RuleSource } from '../../../../../common/api/detection_engine'; import { isThreatMatchRule, isEsqlRule } from '../../../../../common/detection_engine/utils'; import type { RuleStepProps, @@ -55,6 +56,7 @@ interface StepAboutRuleProps extends RuleStepProps { timestampOverride: string; form: FormHook; esqlQuery?: string | undefined; + ruleSource?: RuleSource; } interface StepAboutRuleReadOnlyProps { @@ -85,6 +87,7 @@ const StepAboutRuleComponent: FC = ({ isLoading, form, esqlQuery, + ruleSource, }) => { const { data } = useKibana().services; @@ -280,31 +283,51 @@ const StepAboutRuleComponent: FC = ({ }} /> - + + + - + + + (({ }, }))<{ $isVisible: boolean }>``; -// eslint-disable-next-line complexity const StepDefineRuleComponent: FC = ({ dataSourceType, defaultSavedQuery, @@ -172,7 +171,6 @@ const StepDefineRuleComponent: FC = ({ watch: ['ruleType', 'queryBar', 'machineLearningJobId'], }); - const { isSuppressionEnabled: isAlertSuppressionEnabled } = useAlertSuppression(ruleType); const [openTimelineSearch, setOpenTimelineSearch] = useState(false); const [indexModified, setIndexModified] = useState(false); const [threatIndexModified, setThreatIndexModified] = useState(false); @@ -358,10 +356,9 @@ const StepDefineRuleComponent: FC = ({ * purpose and so are treated as if the field is always selected. */ const areSuppressionFieldsSelected = isThresholdRule || Boolean(alertSuppressionFields?.length); - const areSuppressionFieldsDisabledBySequence = - isEqlRule(ruleType) && - isEqlSequenceQuery(queryBar?.query?.query as string) && - alertSuppressionFields?.length === 0; + const { isSuppressionEnabled: isAlertSuppressionEnabled } = useAlertSuppression( + isEqlSequenceQuery(queryBar?.query?.query as string) + ); /** If we don't have ML field information, users can't meaningfully interact with suppression fields */ const areSuppressionFieldsDisabledByMlFields = @@ -369,30 +366,21 @@ const StepDefineRuleComponent: FC = ({ /** Suppression fields are generally disabled if either: * - License is insufficient (i.e. less than platinum) - * - An EQL Sequence is used * - ML Field information is not available */ const areSuppressionFieldsDisabled = - !isAlertSuppressionLicenseValid || - areSuppressionFieldsDisabledBySequence || - areSuppressionFieldsDisabledByMlFields; + !isAlertSuppressionLicenseValid || areSuppressionFieldsDisabledByMlFields; const isSuppressionGroupByDisabled = (areSuppressionFieldsDisabled || isEsqlSuppressionLoading) && !areSuppressionFieldsSelected; const suppressionGroupByDisabledText = useMemo(() => { - if (areSuppressionFieldsDisabledBySequence) { - return i18n.EQL_SEQUENCE_SUPPRESSION_DISABLE_TOOLTIP; - } else if (areSuppressionFieldsDisabledByMlFields) { + if (areSuppressionFieldsDisabledByMlFields) { return i18n.MACHINE_LEARNING_SUPPRESSION_DISABLED_LABEL; } else { return alertSuppressionUpsellingMessage; } - }, [ - alertSuppressionUpsellingMessage, - areSuppressionFieldsDisabledByMlFields, - areSuppressionFieldsDisabledBySequence, - ]); + }, [alertSuppressionUpsellingMessage, areSuppressionFieldsDisabledByMlFields]); const suppressionGroupByFields = useMemo(() => { if (isEsqlRule(ruleType)) { @@ -824,13 +812,14 @@ const StepDefineRuleReadOnlyComponent: FC = ({ }) => { const dataForDescription: Partial = getStepDataDataSource(data); const transformFields = useExperimentalFeatureFieldsTransform(); + const fieldsToDisplay = transformFields(dataForDescription); return ( diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/schema.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/schema.tsx index f0db9f0342736..323e321eee8d9 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/schema.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/schema.tsx @@ -16,8 +16,6 @@ import { customValidators, } from '../../../../common/components/threat_match/helpers'; import { - isEqlRule, - isEqlSequenceQuery, isEsqlRule, isNewTermsRule, isThreatMatchRule, @@ -44,7 +42,6 @@ import { THREAT_MATCH_INDEX_HELPER_TEXT, THREAT_MATCH_REQUIRED, THREAT_MATCH_EMPTIES, - EQL_SEQUENCE_SUPPRESSION_GROUPBY_VALIDATION_TEXT, } from './translations'; import { queryRequiredValidatorFactory } from '../../validators/query_required_validator_factory'; import { kueryValidatorFactory } from '../../validators/kuery_validator_factory'; @@ -587,7 +584,6 @@ export const schema: FormSchema = { validator: (...args: Parameters) => { const [{ formData }] = args; const needsValidation = isSuppressionRuleConfiguredWithGroupBy(formData.ruleType); - if (!needsValidation) { return; } @@ -595,25 +591,6 @@ export const schema: FormSchema = { return alertSuppressionFieldsValidatorFactory()(...args); }, }, - { - validator: ( - ...args: Parameters - ): ReturnType> | undefined => { - const [{ formData, value }] = args; - - if (!isEqlRule(formData.ruleType) || !Array.isArray(value) || value.length === 0) { - return; - } - - const query: string = formData.queryBar?.query?.query ?? ''; - - if (isEqlSequenceQuery(query)) { - return { - message: EQL_SEQUENCE_SUPPRESSION_GROUPBY_VALIDATION_TEXT, - }; - } - }, - }, ], }, [ALERT_SUPPRESSION_DURATION_FIELD_NAME]: { diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/translations.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/translations.tsx index 897331d20da73..362f586dc5abd 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/translations.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/translations.tsx @@ -176,22 +176,6 @@ export const getEnableThresholdSuppressionLabel = (fields: string[] | undefined) ) ); -export const EQL_SEQUENCE_SUPPRESSION_DISABLE_TOOLTIP = i18n.translate( - 'xpack.securitySolution.detectionEngine.createRule.stepDefineRule.eqlSequenceSuppressionDisableText', - { - defaultMessage: 'Suppression is not supported for EQL sequence queries.', - } -); - -export const EQL_SEQUENCE_SUPPRESSION_GROUPBY_VALIDATION_TEXT = i18n.translate( - 'xpack.securitySolution.detectionEngine.createRule.stepDefineRule.eqlSequenceSuppressionValidationText', - { - defaultMessage: - '{EQL_SEQUENCE_SUPPRESSION_DISABLE_TOOLTIP} Change the EQL query to a non-sequence query, or remove the suppression fields.', - values: { EQL_SEQUENCE_SUPPRESSION_DISABLE_TOOLTIP }, - } -); - export const MACHINE_LEARNING_SUPPRESSION_DISABLED_LABEL = i18n.translate( 'xpack.securitySolution.detectionEngine.createRule.stepDefineRule.machineLearningSuppressionDisabledLabel', { diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/use_experimental_feature_fields_transform.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/use_experimental_feature_fields_transform.ts index c035fef5af6e4..d896fa676d31d 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/use_experimental_feature_fields_transform.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/use_experimental_feature_fields_transform.ts @@ -7,6 +7,14 @@ import { useCallback } from 'react'; import type { DefineStepRule } from '../../../../detections/pages/detection_engine/rules/types'; +import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features'; +import { isEqlRule, isEqlSequenceQuery } from '../../../../../common/detection_engine/utils'; +import { + ALERT_SUPPRESSION_FIELDS_FIELD_NAME, + ALERT_SUPPRESSION_DURATION_TYPE_FIELD_NAME, + ALERT_SUPPRESSION_DURATION_FIELD_NAME, + ALERT_SUPPRESSION_MISSING_FIELDS_FIELD_NAME, +} from '../../../rule_creation/components/alert_suppression_edit'; /** * transforms DefineStepRule fields according to experimental feature flags @@ -14,9 +22,30 @@ import type { DefineStepRule } from '../../../../detections/pages/detection_engi export const useExperimentalFeatureFieldsTransform = >(): (( fields: T ) => T) => { - const transformer = useCallback((fields: T) => { - return fields; - }, []); + const isAlertSuppressionForSequenceEqlRuleEnabled = useIsExperimentalFeatureEnabled( + 'alertSuppressionForSequenceEqlRuleEnabled' + ); + const transformer = useCallback( + (fields: T) => { + const isSuppressionDisabled = + isEqlRule(fields.ruleType) && + isEqlSequenceQuery(fields.queryBar?.query?.query as string) && + !isAlertSuppressionForSequenceEqlRuleEnabled; + + // reset any alert suppression values hidden behind feature flag + if (isSuppressionDisabled) { + return { + ...fields, + [ALERT_SUPPRESSION_FIELDS_FIELD_NAME]: [], + [ALERT_SUPPRESSION_DURATION_TYPE_FIELD_NAME]: undefined, + [ALERT_SUPPRESSION_DURATION_FIELD_NAME]: undefined, + [ALERT_SUPPRESSION_MISSING_FIELDS_FIELD_NAME]: undefined, + }; + } + return fields; + }, + [isAlertSuppressionForSequenceEqlRuleEnabled] + ); return transformer; }; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_editing/index.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_editing/index.tsx index dbc753ca33d37..594b9d2a35598 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_editing/index.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_editing/index.tsx @@ -42,6 +42,7 @@ import { useUserData } from '../../../../detections/components/user_info'; import { StepPanel } from '../../../rule_creation/components/step_panel'; import { StepAboutRule } from '../../components/step_about_rule'; import { StepDefineRule } from '../../components/step_define_rule'; +import { useExperimentalFeatureFieldsTransform } from '../../components/step_define_rule/use_experimental_feature_fields_transform'; import { StepScheduleRule } from '../../components/step_schedule_rule'; import { StepRuleActions } from '../../../rule_creation/components/step_rule_actions'; import { formatRule } from '../rule_creation/helpers'; @@ -52,6 +53,7 @@ import { MaxWidthEuiFlexItem, } from '../../../../detections/pages/detection_engine/rules/helpers'; import * as ruleI18n from '../../../../detections/pages/detection_engine/rules/translations'; +import type { DefineStepRule } from '../../../../detections/pages/detection_engine/rules/types'; import { RuleStep } from '../../../../detections/pages/detection_engine/rules/types'; import * as i18n from './translations'; import { SecurityPageName } from '../../../../app/types'; @@ -276,6 +278,7 @@ const EditRulePageComponent: FC<{ rule: RuleResponse }> = ({ rule }) => { form={aboutStepForm} esqlQuery={esqlQueryForAboutStep} key="aboutStep" + ruleSource={rule.rule_source} /> )} @@ -341,6 +344,7 @@ const EditRulePageComponent: FC<{ rule: RuleResponse }> = ({ rule }) => { [ isPrebuiltRulesCustomizationEnabled, rule?.immutable, + rule.rule_source, rule?.id, activeStep, loading, @@ -368,11 +372,16 @@ const EditRulePageComponent: FC<{ rule: RuleResponse }> = ({ rule }) => { const { startTransaction } = useStartTransaction(); + const defineFieldsTransform = useExperimentalFeatureFieldsTransform(); + const saveChanges = useCallback(async () => { startTransaction({ name: SINGLE_RULE_ACTIONS.SAVE }); + const localDefineStepData: DefineStepRule = defineFieldsTransform({ + ...defineStepData, + }); const updatedRule = await updateRule({ ...formatRule( - defineStepData, + localDefineStepData, aboutStepData, scheduleStepData, actionsStepData, @@ -390,8 +399,9 @@ const EditRulePageComponent: FC<{ rule: RuleResponse }> = ({ rule }) => { }, [ aboutStepData, actionsStepData, - addSuccess, defineStepData, + defineFieldsTransform, + addSuccess, navigateToApp, rule?.exceptions_list, ruleId, diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_definition_section.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_definition_section.tsx index 70f267ac94ba4..3e08f4ce3acc8 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_definition_section.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_definition_section.tsx @@ -843,7 +843,7 @@ export const RuleDefinitionSection = ({ ruleType: rule.type, }); - const { isSuppressionEnabled } = useAlertSuppression(rule.type); + const { isSuppressionEnabled } = useAlertSuppression(); const definitionSectionListItems = prepareDefinitionSectionListItems( rule, diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_alert_suppression.test.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_alert_suppression.test.tsx index 27615ef2d489a..7877a86385cde 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_alert_suppression.test.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_alert_suppression.test.tsx @@ -6,37 +6,23 @@ */ import { renderHook } from '@testing-library/react'; -import type { Type } from '@kbn/securitysolution-io-ts-alerting-types'; +import * as useIsExperimentalFeatureEnabledMock from '../../../common/hooks/use_experimental_features'; import { useAlertSuppression } from './use_alert_suppression'; describe('useAlertSuppression', () => { - ( - [ - 'new_terms', - 'threat_match', - 'saved_query', - 'query', - 'threshold', - 'eql', - 'esql', - 'machine_learning', - ] as Type[] - ).forEach((ruleType) => { - it(`should return the isSuppressionEnabled true for ${ruleType} rule type that exists in SUPPRESSIBLE_ALERT_RULES`, () => { - const { result } = renderHook(() => useAlertSuppression(ruleType)); - - expect(result.current.isSuppressionEnabled).toBe(true); - }); + jest + .spyOn(useIsExperimentalFeatureEnabledMock, 'useIsExperimentalFeatureEnabled') + .mockReturnValue(false); + it(`should return the isSuppressionEnabled true if query for all rule types is not an eql sequence query`, () => { + const { result } = renderHook(() => useAlertSuppression()); + expect(result.current.isSuppressionEnabled).toBe(true); }); - it('should return false if rule type is undefined', () => { - const { result } = renderHook(() => useAlertSuppression(undefined)); - expect(result.current.isSuppressionEnabled).toBe(false); - }); - - it('should return false if rule type is not a suppressible rule', () => { - const { result } = renderHook(() => useAlertSuppression('OTHER_RULE_TYPE' as Type)); - + jest + .spyOn(useIsExperimentalFeatureEnabledMock, 'useIsExperimentalFeatureEnabled') + .mockReturnValue(false); + it('should return isSuppressionEnabled false for eql sequence query when feature flag is disabled', () => { + const { result } = renderHook(() => useAlertSuppression(true)); expect(result.current.isSuppressionEnabled).toBe(false); }); }); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_alert_suppression.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_alert_suppression.tsx index 6e1b2a4d6163f..dae422a8e81c5 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_alert_suppression.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_alert_suppression.tsx @@ -5,21 +5,24 @@ * 2.0. */ import { useCallback } from 'react'; -import type { Type } from '@kbn/securitysolution-io-ts-alerting-types'; -import { isSuppressibleAlertRule } from '../../../../common/detection_engine/utils'; +import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features'; export interface UseAlertSuppressionReturn { isSuppressionEnabled: boolean; } -export const useAlertSuppression = (ruleType: Type | undefined): UseAlertSuppressionReturn => { +export const useAlertSuppression = (isEqlSequenceQuery = false): UseAlertSuppressionReturn => { + const isAlertSuppressionForSequenceEQLRuleEnabled = useIsExperimentalFeatureEnabled( + 'alertSuppressionForSequenceEqlRuleEnabled' + ); + const isSuppressionEnabledForRuleType = useCallback(() => { - if (!ruleType) { - return false; + if (isEqlSequenceQuery) { + return isAlertSuppressionForSequenceEQLRuleEnabled; } - return isSuppressibleAlertRule(ruleType); - }, [ruleType]); + return true; + }, [isAlertSuppressionForSequenceEQLRuleEnabled, isEqlSequenceQuery]); return { isSuppressionEnabled: isSuppressionEnabledForRuleType(), diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/pages/add_rules/translations.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/pages/add_rules/translations.tsx index e9c43e411ee37..e6352a5d76825 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/pages/add_rules/translations.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/pages/add_rules/translations.tsx @@ -10,6 +10,6 @@ import { i18n } from '@kbn/i18n'; export const PAGE_TITLE = i18n.translate( 'xpack.securitySolution.detectionEngine.rules.addRules.pageTitle', { - defaultMessage: 'Add Elastic Rules', + defaultMessage: 'Add Elastic rules', } ); diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_table/grouping_settings/group_take_action_items.test.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_table/grouping_settings/group_take_action_items.test.tsx index 5518926f4ab61..7e1c9e0a1cfbb 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_table/grouping_settings/group_take_action_items.test.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_table/grouping_settings/group_take_action_items.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; +import { waitFor, renderHook } from '@testing-library/react'; import React from 'react'; import { TestProviders } from '../../../../common/mock'; import { useGroupTakeActionsItems } from '.'; @@ -20,68 +20,58 @@ describe('useGroupTakeActionsItems', () => { selectedGroup: 'test', }; it('returns all take actions items if showAlertStatusActions is true and currentStatus is undefined', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook( - () => - useGroupTakeActionsItems({ - showAlertStatusActions: true, - }), - { - wrapper: wrapperContainer, - } - ); - await waitForNextUpdate(); - expect(result.current(getActionItemsParams).length).toEqual(3); - }); + const { result } = renderHook( + () => + useGroupTakeActionsItems({ + showAlertStatusActions: true, + }), + { + wrapper: wrapperContainer, + } + ); + await waitFor(() => expect(result.current(getActionItemsParams).length).toEqual(3)); }); it('returns all take actions items if currentStatus is []', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook( - () => - useGroupTakeActionsItems({ - currentStatus: [], - showAlertStatusActions: true, - }), - { - wrapper: wrapperContainer, - } - ); - await waitForNextUpdate(); - expect(result.current(getActionItemsParams).length).toEqual(3); - }); + const { result } = renderHook( + () => + useGroupTakeActionsItems({ + currentStatus: [], + showAlertStatusActions: true, + }), + { + wrapper: wrapperContainer, + } + ); + await waitFor(() => expect(result.current(getActionItemsParams).length).toEqual(3)); }); it('returns all take actions items if currentStatus.length > 1', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook( - () => - useGroupTakeActionsItems({ - currentStatus: ['open', 'closed'], - showAlertStatusActions: true, - }), - { - wrapper: wrapperContainer, - } - ); - await waitForNextUpdate(); - expect(result.current(getActionItemsParams).length).toEqual(3); - }); + const { result } = renderHook( + () => + useGroupTakeActionsItems({ + currentStatus: ['open', 'closed'], + showAlertStatusActions: true, + }), + { + wrapper: wrapperContainer, + } + ); + await waitFor(() => expect(result.current(getActionItemsParams).length).toEqual(3)); }); it('returns acknowledged & closed take actions items if currentStatus === ["open"]', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook( - () => - useGroupTakeActionsItems({ - currentStatus: ['open'], - showAlertStatusActions: true, - }), - { - wrapper: wrapperContainer, - } - ); - await waitForNextUpdate(); + const { result } = renderHook( + () => + useGroupTakeActionsItems({ + currentStatus: ['open'], + showAlertStatusActions: true, + }), + { + wrapper: wrapperContainer, + } + ); + await waitFor(() => { const currentParams = result.current(getActionItemsParams); expect(currentParams.length).toEqual(2); expect(currentParams[0].key).toEqual('acknowledge'); @@ -90,18 +80,17 @@ describe('useGroupTakeActionsItems', () => { }); it('returns open & acknowledged take actions items if currentStatus === ["closed"]', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook( - () => - useGroupTakeActionsItems({ - currentStatus: ['closed'], - showAlertStatusActions: true, - }), - { - wrapper: wrapperContainer, - } - ); - await waitForNextUpdate(); + const { result } = renderHook( + () => + useGroupTakeActionsItems({ + currentStatus: ['closed'], + showAlertStatusActions: true, + }), + { + wrapper: wrapperContainer, + } + ); + await waitFor(() => { const currentParams = result.current(getActionItemsParams); expect(currentParams.length).toEqual(2); expect(currentParams[0].key).toEqual('open'); @@ -110,18 +99,17 @@ describe('useGroupTakeActionsItems', () => { }); it('returns open & closed take actions items if currentStatus === ["acknowledged"]', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook( - () => - useGroupTakeActionsItems({ - currentStatus: ['acknowledged'], - showAlertStatusActions: true, - }), - { - wrapper: wrapperContainer, - } - ); - await waitForNextUpdate(); + const { result } = renderHook( + () => + useGroupTakeActionsItems({ + currentStatus: ['acknowledged'], + showAlertStatusActions: true, + }), + { + wrapper: wrapperContainer, + } + ); + await waitFor(() => { const currentParams = result.current(getActionItemsParams); expect(currentParams.length).toEqual(2); expect(currentParams[0].key).toEqual('open'); @@ -130,33 +118,28 @@ describe('useGroupTakeActionsItems', () => { }); it('returns empty take actions items if showAlertStatusActions is false', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook( - () => - useGroupTakeActionsItems({ - showAlertStatusActions: false, - }), - { - wrapper: wrapperContainer, - } - ); - await waitForNextUpdate(); - expect(result.current(getActionItemsParams).length).toEqual(0); - }); + const { result } = renderHook( + () => + useGroupTakeActionsItems({ + showAlertStatusActions: false, + }), + { + wrapper: wrapperContainer, + } + ); + await waitFor(() => expect(result.current(getActionItemsParams).length).toEqual(0)); }); + it('returns array take actions items if showAlertStatusActions is true', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook( - () => - useGroupTakeActionsItems({ - showAlertStatusActions: true, - }), - { - wrapper: wrapperContainer, - } - ); - await waitForNextUpdate(); - expect(result.current(getActionItemsParams).length).toEqual(3); - }); + const { result } = renderHook( + () => + useGroupTakeActionsItems({ + showAlertStatusActions: true, + }), + { + wrapper: wrapperContainer, + } + ); + await waitFor(() => expect(result.current(getActionItemsParams).length).toEqual(3)); }); }); diff --git a/x-pack/plugins/security_solution/public/detections/components/rules/pre_packaged_rules/translations.ts b/x-pack/plugins/security_solution/public/detections/components/rules/pre_packaged_rules/translations.ts index aa36b18beecdf..a4b8c9d63c542 100644 --- a/x-pack/plugins/security_solution/public/detections/components/rules/pre_packaged_rules/translations.ts +++ b/x-pack/plugins/security_solution/public/detections/components/rules/pre_packaged_rules/translations.ts @@ -10,7 +10,7 @@ import { i18n } from '@kbn/i18n'; export const PRE_BUILT_TITLE = i18n.translate( 'xpack.securitySolution.detectionEngine.rules.prePackagedRules.emptyPromptTitle', { - defaultMessage: 'Load Elastic prebuilt detection rules', + defaultMessage: 'Install and enable Elastic prebuilt detection rules', } ); @@ -18,7 +18,7 @@ export const PRE_BUILT_MSG = i18n.translate( 'xpack.securitySolution.detectionEngine.rules.prePackagedRules.emptyPromptMessage', { defaultMessage: - 'Elastic Security comes with prebuilt detection rules that run in the background and create alerts when their conditions are met. By default, all prebuilt rules except the Endpoint Security rule are disabled. You can select additional rules you want to enable.', + 'Elastic Security comes with prebuilt detection rules that run in the background and create alerts when their conditions are met. To start using them, choose rules to install and enable.', } ); diff --git a/x-pack/plugins/security_solution/public/explore/containers/authentications/index.test.tsx b/x-pack/plugins/security_solution/public/explore/containers/authentications/index.test.tsx index f37ec404274b1..a98a1fdf90949 100644 --- a/x-pack/plugins/security_solution/public/explore/containers/authentications/index.test.tsx +++ b/x-pack/plugins/security_solution/public/explore/containers/authentications/index.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; +import { renderHook, act } from '@testing-library/react'; import { useAuthentications } from '.'; import { AuthStackByField } from '../../../../common/search_strategy'; import { TestProviders } from '../../../common/mock'; diff --git a/x-pack/plugins/security_solution/public/explore/containers/fields/index.test.ts b/x-pack/plugins/security_solution/public/explore/containers/fields/index.test.ts index 03084ef42dd8d..41cb8ba827b22 100644 --- a/x-pack/plugins/security_solution/public/explore/containers/fields/index.test.ts +++ b/x-pack/plugins/security_solution/public/explore/containers/fields/index.test.ts @@ -6,7 +6,7 @@ */ import { useKibana } from '../../../common/lib/kibana'; import { useIsFieldInIndexPattern } from '.'; -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import { getRequiredMapsFields } from '../../network/components/embeddables/map_config'; jest.mock('../../../common/lib/kibana'); diff --git a/x-pack/plugins/security_solution/public/explore/hosts/containers/hosts/details/index.test.tsx b/x-pack/plugins/security_solution/public/explore/hosts/containers/hosts/details/index.test.tsx index e4800a89f1092..bd35049b067e5 100644 --- a/x-pack/plugins/security_solution/public/explore/hosts/containers/hosts/details/index.test.tsx +++ b/x-pack/plugins/security_solution/public/explore/hosts/containers/hosts/details/index.test.tsx @@ -4,7 +4,8 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; + +import { renderHook, act } from '@testing-library/react'; import { TestProviders } from '../../../../../common/mock'; import { ID, useHostDetails } from '.'; import { useSearchStrategy } from '../../../../../common/containers/use_search_strategy'; diff --git a/x-pack/plugins/security_solution/public/explore/hosts/containers/hosts/index.test.tsx b/x-pack/plugins/security_solution/public/explore/hosts/containers/hosts/index.test.tsx index 456caaf0d01c5..fa7312d50fc1d 100644 --- a/x-pack/plugins/security_solution/public/explore/hosts/containers/hosts/index.test.tsx +++ b/x-pack/plugins/security_solution/public/explore/hosts/containers/hosts/index.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; +import { renderHook, act } from '@testing-library/react'; import { TestProviders } from '../../../../common/mock'; import { useAllHost } from '.'; import { HostsType } from '../../store/model'; diff --git a/x-pack/plugins/security_solution/public/explore/hosts/containers/uncommon_processes/index.test.tsx b/x-pack/plugins/security_solution/public/explore/hosts/containers/uncommon_processes/index.test.tsx index 452f2aba5a8da..1e80b44378875 100644 --- a/x-pack/plugins/security_solution/public/explore/hosts/containers/uncommon_processes/index.test.tsx +++ b/x-pack/plugins/security_solution/public/explore/hosts/containers/uncommon_processes/index.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; +import { renderHook, act } from '@testing-library/react'; import { TestProviders } from '../../../../common/mock'; import { useUncommonProcesses } from '.'; import { HostsType } from '../../store/model'; diff --git a/x-pack/plugins/security_solution/public/explore/network/containers/details/index.test.tsx b/x-pack/plugins/security_solution/public/explore/network/containers/details/index.test.tsx index dde6ff13a4a81..53176cf558c53 100644 --- a/x-pack/plugins/security_solution/public/explore/network/containers/details/index.test.tsx +++ b/x-pack/plugins/security_solution/public/explore/network/containers/details/index.test.tsx @@ -4,7 +4,8 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; + +import { renderHook, act } from '@testing-library/react'; import { TestProviders } from '../../../../common/mock'; import { ID, useNetworkDetails } from '.'; import { useSearchStrategy } from '../../../../common/containers/use_search_strategy'; diff --git a/x-pack/plugins/security_solution/public/explore/network/containers/network_dns/index.test.tsx b/x-pack/plugins/security_solution/public/explore/network/containers/network_dns/index.test.tsx index 8efcfc5dbee6d..8dab09fc001d1 100644 --- a/x-pack/plugins/security_solution/public/explore/network/containers/network_dns/index.test.tsx +++ b/x-pack/plugins/security_solution/public/explore/network/containers/network_dns/index.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; +import { renderHook, act } from '@testing-library/react'; import { TestProviders } from '../../../../common/mock'; import { ID, useNetworkDns } from '.'; import { useSearchStrategy } from '../../../../common/containers/use_search_strategy'; diff --git a/x-pack/plugins/security_solution/public/explore/network/containers/network_http/index.test.tsx b/x-pack/plugins/security_solution/public/explore/network/containers/network_http/index.test.tsx index e7232359b0336..cd63ec78e1413 100644 --- a/x-pack/plugins/security_solution/public/explore/network/containers/network_http/index.test.tsx +++ b/x-pack/plugins/security_solution/public/explore/network/containers/network_http/index.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; +import { renderHook, act } from '@testing-library/react'; import { TestProviders } from '../../../../common/mock'; import { useNetworkHttp, ID } from '.'; import { useSearchStrategy } from '../../../../common/containers/use_search_strategy'; diff --git a/x-pack/plugins/security_solution/public/explore/network/containers/network_top_countries/index.test.tsx b/x-pack/plugins/security_solution/public/explore/network/containers/network_top_countries/index.test.tsx index fb67611f43a74..a360fdc770605 100644 --- a/x-pack/plugins/security_solution/public/explore/network/containers/network_top_countries/index.test.tsx +++ b/x-pack/plugins/security_solution/public/explore/network/containers/network_top_countries/index.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; +import { renderHook, act } from '@testing-library/react'; import { TestProviders } from '../../../../common/mock'; import { ID, useNetworkTopCountries } from '.'; import { useSearchStrategy } from '../../../../common/containers/use_search_strategy'; diff --git a/x-pack/plugins/security_solution/public/explore/network/containers/network_top_n_flow/index.test.tsx b/x-pack/plugins/security_solution/public/explore/network/containers/network_top_n_flow/index.test.tsx index 24c8a25e8bcd7..ed42e3307f06d 100644 --- a/x-pack/plugins/security_solution/public/explore/network/containers/network_top_n_flow/index.test.tsx +++ b/x-pack/plugins/security_solution/public/explore/network/containers/network_top_n_flow/index.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; +import { renderHook, act } from '@testing-library/react'; import { TestProviders } from '../../../../common/mock'; import { ID, useNetworkTopNFlow } from '.'; import { useSearchStrategy } from '../../../../common/containers/use_search_strategy'; diff --git a/x-pack/plugins/security_solution/public/explore/network/containers/tls/index.test.tsx b/x-pack/plugins/security_solution/public/explore/network/containers/tls/index.test.tsx index b6fa06590f626..30fc83531feb1 100644 --- a/x-pack/plugins/security_solution/public/explore/network/containers/tls/index.test.tsx +++ b/x-pack/plugins/security_solution/public/explore/network/containers/tls/index.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; +import { renderHook, act } from '@testing-library/react'; import { TestProviders } from '../../../../common/mock'; import { ID, useNetworkTls } from '.'; import { useSearchStrategy } from '../../../../common/containers/use_search_strategy'; diff --git a/x-pack/plugins/security_solution/public/explore/network/containers/users/index.test.tsx b/x-pack/plugins/security_solution/public/explore/network/containers/users/index.test.tsx index a7f3eb69fc5ba..14b9c6d601375 100644 --- a/x-pack/plugins/security_solution/public/explore/network/containers/users/index.test.tsx +++ b/x-pack/plugins/security_solution/public/explore/network/containers/users/index.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; +import { renderHook, act } from '@testing-library/react'; import { TestProviders } from '../../../../common/mock'; import { useNetworkUsers, ID } from '.'; import { useSearchStrategy } from '../../../../common/containers/use_search_strategy'; diff --git a/x-pack/plugins/security_solution/public/explore/users/containers/users/observed_details/index.test.tsx b/x-pack/plugins/security_solution/public/explore/users/containers/users/observed_details/index.test.tsx index f0e2536096421..951bfb20165e6 100644 --- a/x-pack/plugins/security_solution/public/explore/users/containers/users/observed_details/index.test.tsx +++ b/x-pack/plugins/security_solution/public/explore/users/containers/users/observed_details/index.test.tsx @@ -4,7 +4,8 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; + +import { renderHook, act } from '@testing-library/react'; import { TestProviders } from '../../../../../common/mock'; import { useObservedUserDetails } from '.'; import { useSearchStrategy } from '../../../../../common/containers/use_search_strategy'; diff --git a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/hooks/use_endpoint_action_items.tsx b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/hooks/use_endpoint_action_items.tsx index bb6102e8051c4..579561573488c 100644 --- a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/hooks/use_endpoint_action_items.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/hooks/use_endpoint_action_items.tsx @@ -56,7 +56,7 @@ export const useEndpointActionItems = ( const endpointMetadata = endpointInfo.metadata; const isIsolated = isEndpointHostIsolated(endpointMetadata); const endpointId = endpointMetadata.agent.id; - const endpointHostName = endpointMetadata.host.hostname; + const endpointHostName = endpointMetadata.host.hostname.toLowerCase(); const fleetAgentId = endpointMetadata.elastic.agent.id; const { show, selected_endpoint: _selectedEndpoint, ...currentUrlParams } = allCurrentUrlParams; const endpointActionsPath = getEndpointDetailsPath({ diff --git a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.test.tsx b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.test.tsx index d0b05404dc16d..57b0dde41177d 100644 --- a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.test.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.test.tsx @@ -1306,7 +1306,7 @@ describe('when on the endpoint list page', () => { it('navigates to the Security Solution Host Details page', async () => { const hostLink = await renderResult.findByTestId('hostLink'); expect(hostLink.getAttribute('href')).toEqual( - `${APP_PATH}/hosts/${hostInfo[0].metadata.host.hostname}` + `${APP_PATH}/hosts/${hostInfo[0].metadata.host.hostname.toLowerCase()}` ); }); it('navigates to the correct Ingest Agent Policy page', async () => { diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/hooks/use_expanded_card.test.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/hooks/use_expanded_card.test.ts index 26612d83b565f..65ecbe06f26c5 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/hooks/use_expanded_card.test.ts +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/hooks/use_expanded_card.test.ts @@ -39,7 +39,8 @@ describe('useExpandedCard Hook', () => { jest.clearAllMocks(); }); - describe('when the page is completely loaded', () => { + // FLAKY: https://github.com/elastic/kibana/issues/202147 + describe.skip('when the page is completely loaded', () => { beforeEach(() => { renderHook(useExpandedCard); }); diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/alerts_by_status/use_alerts_by_status.test.tsx b/x-pack/plugins/security_solution/public/overview/components/detection_response/alerts_by_status/use_alerts_by_status.test.tsx index b7df916c60342..109878a1a8ba3 100644 --- a/x-pack/plugins/security_solution/public/overview/components/detection_response/alerts_by_status/use_alerts_by_status.test.tsx +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/alerts_by_status/use_alerts_by_status.test.tsx @@ -5,12 +5,11 @@ * 2.0. */ -import type { PropsWithChildren } from 'react'; -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import { TestProviders } from '../../../../common/mock'; import { ALERTS_QUERY_NAMES } from '../../../../detections/containers/detection_engine/alerts/constants'; import { from, mockAlertsData, alertsByStatusQuery, parsedMockAlertsData, to } from './mock_data'; -import type { UseAlertsByStatus, UseAlertsByStatusProps } from './use_alerts_by_status'; +import type { UseAlertsByStatusProps } from './use_alerts_by_status'; import { useAlertsByStatus } from './use_alerts_by_status'; const dateNow = new Date('2022-04-08T12:00:00.000Z').valueOf(); @@ -43,7 +42,7 @@ jest.mock('../../../../common/containers/use_global_time', () => { // helper function to render the hook const renderUseAlertsByStatus = (props: Partial = {}) => - renderHook, ReturnType>( + renderHook( () => useAlertsByStatus({ queryId: 'test', diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/alerts_by_status/use_alerts_by_status_visualization_data.test.ts b/x-pack/plugins/security_solution/public/overview/components/detection_response/alerts_by_status/use_alerts_by_status_visualization_data.test.ts index 44ad581103393..a805a44f05456 100644 --- a/x-pack/plugins/security_solution/public/overview/components/detection_response/alerts_by_status/use_alerts_by_status_visualization_data.test.ts +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/alerts_by_status/use_alerts_by_status_visualization_data.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import { useVisualizationResponse } from '../../../../common/components/visualization_actions/use_visualization_response'; import { acknowledgedAlertsVisualizationId, diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/cases_by_status/use_cases_by_status.test.tsx b/x-pack/plugins/security_solution/public/overview/components/detection_response/cases_by_status/use_cases_by_status.test.tsx index 4c0796dacd3b6..bdb43e4044b8a 100644 --- a/x-pack/plugins/security_solution/public/overview/components/detection_response/cases_by_status/use_cases_by_status.test.tsx +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/cases_by_status/use_cases_by_status.test.tsx @@ -5,12 +5,10 @@ * 2.0. */ -import type { PropsWithChildren } from 'react'; -import { renderHook, act } from '@testing-library/react-hooks'; +import { waitFor, renderHook } from '@testing-library/react'; import { mockCasesContract } from '@kbn/cases-plugin/public/mocks'; import { useKibana } from '../../../../common/lib/kibana'; import { TestProviders } from '../../../../common/mock'; -import type { UseCasesByStatusProps, UseCasesByStatusResults } from './use_cases_by_status'; import { useCasesByStatus } from './use_cases_by_status'; const dateNow = new Date('2022-04-08T12:00:00.000Z').valueOf(); @@ -40,14 +38,6 @@ mockGetCasesMetrics.mockResolvedValue({ }, }); -mockGetCasesMetrics.mockResolvedValueOnce({ - status: { - open: 0, - inProgress: 0, - closed: 0, - }, -}); - const mockUseKibana = { services: { cases: { @@ -67,81 +57,88 @@ describe('useCasesByStatus', () => { beforeEach(() => { jest.clearAllMocks(); }); - test('init', () => { - const { result } = renderHook< - PropsWithChildren, - UseCasesByStatusResults - >(() => useCasesByStatus({}), { + test('init', async () => { + mockGetCasesMetrics.mockResolvedValueOnce({ + status: { + open: 0, + inProgress: 0, + closed: 0, + }, + }); + + const { result } = renderHook(() => useCasesByStatus({}), { wrapper: TestProviders, }); - expect(result.current).toEqual({ - closed: 0, - inProgress: 0, - isLoading: true, - open: 0, - totalCounts: 0, - updatedAt: dateNow, + + await waitFor(() => { + expect(result.current).toEqual({ + closed: 0, + inProgress: 0, + isLoading: true, + open: 0, + totalCounts: 0, + updatedAt: dateNow, + }); }); }); test('fetch data', async () => { - const { result, waitForNextUpdate } = renderHook< - PropsWithChildren, - UseCasesByStatusResults - >(() => useCasesByStatus({ skip: false }), { + const { result } = renderHook(() => useCasesByStatus({ skip: false }), { wrapper: TestProviders, }); - await waitForNextUpdate(); - expect(result.current).toEqual({ - closed: 3, - inProgress: 2, - isLoading: false, - open: 1, - totalCounts: 6, - updatedAt: dateNow, + await waitFor(() => { + expect(result.current.isLoading).toBe(false); + expect(result.current).toEqual({ + closed: 3, + inProgress: 2, + isLoading: false, + open: 1, + totalCounts: 6, + updatedAt: dateNow, + }); }); }); test('it should call setQuery when fetching', async () => { - const { waitForNextUpdate } = renderHook< - PropsWithChildren, - UseCasesByStatusResults - >(() => useCasesByStatus({ skip: false }), { + renderHook(() => useCasesByStatus({ skip: false }), { wrapper: TestProviders, }); - await waitForNextUpdate(); - expect(mockSetQuery).toHaveBeenCalled(); + await waitFor(() => expect(mockSetQuery).toHaveBeenCalled()); }); test('it should call deleteQuery when unmounting', async () => { - const { waitForNextUpdate, unmount } = renderHook< - PropsWithChildren, - UseCasesByStatusResults - >(() => useCasesByStatus({ skip: false }), { + // muting setState warning that happens on unmount + // because it's a noop and going to be removed + // in the next version of React + const consoleError = jest.spyOn(console, 'error').mockImplementation(() => {}); + const { unmount } = renderHook(() => useCasesByStatus({ skip: false }), { wrapper: TestProviders, }); - await waitForNextUpdate(); unmount(); - expect(mockDeleteQuery).toHaveBeenCalled(); + waitFor(() => { + expect(mockDeleteQuery).toHaveBeenCalled(); + }); + + consoleError.mockRestore(); }); test('skip', async () => { const abortSpy = jest.spyOn(AbortController.prototype, 'abort'); const localProps = { skip: false }; - const { rerender, waitForNextUpdate } = renderHook< - PropsWithChildren, - UseCasesByStatusResults - >(() => useCasesByStatus(localProps), { + const { rerender } = renderHook(() => useCasesByStatus(localProps), { wrapper: TestProviders, }); - await waitForNextUpdate(); localProps.skip = true; - act(() => rerender()); - act(() => rerender()); - expect(abortSpy).toHaveBeenCalledTimes(2); + + rerender(); + rerender(); + + await waitFor(() => { + expect(abortSpy).toHaveBeenCalledTimes(2); + }); }); }); diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/cases_table/use_case_items.test.ts b/x-pack/plugins/security_solution/public/overview/components/detection_response/cases_table/use_case_items.test.ts index 9076c0daa7da6..ef278f81004db 100644 --- a/x-pack/plugins/security_solution/public/overview/components/detection_response/cases_table/use_case_items.test.ts +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/cases_table/use_case_items.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; +import { waitFor, renderHook } from '@testing-library/react'; import { mockCasesResult, parsedCasesItems } from './mock_data'; import { useCaseItems } from './use_case_items'; @@ -32,6 +32,7 @@ const mockKibana = { }, }, }; + jest.mock('../../../../common/lib/kibana', () => ({ useKibana: () => mockKibana, })); @@ -51,7 +52,7 @@ jest.mock('../../../../common/containers/use_global_time', () => { }); const renderUseCaseItems = (overrides: Partial = {}) => - renderHook>(() => + renderHook, UseCaseItems>(() => useCaseItems({ skip: false, ...overrides }) ); @@ -63,59 +64,55 @@ describe('useCaseItems', () => { }); it('should return default values', async () => { - const { result, waitForNextUpdate } = renderUseCaseItems(); - - await waitForNextUpdate(); - - expect(result.current).toEqual({ - items: [], - isLoading: false, - updatedAt: dateNow, - }); - - expect(mockCasesApi).toBeCalledWith({ - from: '2020-07-07T08:20:18.966Z', - to: '2020-07-08T08:20:18.966Z', - owner: 'securitySolution', - sortField: 'createdAt', - sortOrder: 'desc', - page: 1, - perPage: 4, + const { result } = renderUseCaseItems(); + + await waitFor(() => { + expect(result.current).toEqual({ + items: [], + isLoading: false, + updatedAt: dateNow, + }); + + expect(mockCasesApi).toBeCalledWith({ + from: '2020-07-07T08:20:18.966Z', + to: '2020-07-08T08:20:18.966Z', + owner: 'securitySolution', + sortField: 'createdAt', + sortOrder: 'desc', + page: 1, + perPage: 4, + }); }); }); it('should return parsed items', async () => { mockCasesApi.mockReturnValue(mockCasesResult); - const { result, waitForNextUpdate } = renderUseCaseItems(); - - await waitForNextUpdate(); - - expect(result.current).toEqual({ - items: parsedCasesItems, - isLoading: false, - updatedAt: dateNow, - }); + const { result } = renderUseCaseItems(); + + await waitFor(() => + expect(result.current).toEqual({ + items: parsedCasesItems, + isLoading: false, + updatedAt: dateNow, + }) + ); }); test('it should call setQuery when fetching', async () => { mockCasesApi.mockReturnValue(mockCasesResult); - const { waitForNextUpdate } = renderUseCaseItems(); + renderUseCaseItems(); - await waitForNextUpdate(); - - expect(mockSetQuery).toHaveBeenCalled(); + await waitFor(() => expect(mockSetQuery).toHaveBeenCalled()); }); test('it should call deleteQuery when unmounting', async () => { - const { waitForNextUpdate, unmount } = renderUseCaseItems(); + const { unmount } = renderUseCaseItems(); - await waitForNextUpdate(); + unmount(); - act(() => { - unmount(); + await waitFor(() => { + expect(mockDeleteQuery).toHaveBeenCalled(); }); - - expect(mockDeleteQuery).toHaveBeenCalled(); }); it('should return new updatedAt', async () => { @@ -124,15 +121,15 @@ describe('useCaseItems', () => { mockDateNow.mockReturnValueOnce(dateNow); mockCasesApi.mockReturnValue(mockCasesResult); - const { result, waitForNextUpdate } = renderUseCaseItems(); - - await waitForNextUpdate(); + const { result } = renderUseCaseItems(); - expect(mockDateNow).toHaveBeenCalled(); - expect(result.current).toEqual({ - items: parsedCasesItems, - isLoading: false, - updatedAt: newDateNow, + await waitFor(() => { + expect(mockDateNow).toHaveBeenCalled(); + expect(result.current).toEqual({ + items: parsedCasesItems, + isLoading: false, + updatedAt: newDateNow, + }); }); }); diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/hooks/use_navigate_to_timeline.test.ts b/x-pack/plugins/security_solution/public/overview/components/detection_response/hooks/use_navigate_to_timeline.test.ts index ce779a2c29202..49f3281f14e1d 100644 --- a/x-pack/plugins/security_solution/public/overview/components/detection_response/hooks/use_navigate_to_timeline.test.ts +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/hooks/use_navigate_to_timeline.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import { useDeepEqualSelector } from '../../../../common/hooks/use_selector'; import { updateProviders } from '../../../../timelines/store/actions'; diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/host_alerts_table/use_host_alerts_items.test.ts b/x-pack/plugins/security_solution/public/overview/components/detection_response/host_alerts_table/use_host_alerts_items.test.ts index d38f0a4bfaa77..c536628bfe48f 100644 --- a/x-pack/plugins/security_solution/public/overview/components/detection_response/host_alerts_table/use_host_alerts_items.test.ts +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/host_alerts_table/use_host_alerts_items.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import { mockQuery, @@ -51,7 +51,7 @@ jest.mock('../../../../common/containers/use_global_time', () => { }); const renderUseHostAlertsItems = (overrides: Partial = {}) => - renderHook>(() => + renderHook, UseHostAlertsItemsProps>(() => useHostAlertsItems({ skip: false, signalIndexName, diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/use_rule_alerts_items.test.ts b/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/use_rule_alerts_items.test.ts index bf60d795c26f1..3765373c4f9dc 100644 --- a/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/use_rule_alerts_items.test.ts +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/use_rule_alerts_items.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import { ALERTS_QUERY_NAMES } from '../../../../detections/containers/detection_engine/alerts/constants'; import { @@ -49,7 +49,7 @@ jest.mock('../../../../common/containers/use_global_time', () => { // helper function to render the hook const renderUseRuleAlertsItems = (props: Partial = {}) => - renderHook>(() => + renderHook, UseRuleAlertsItemsProps>(() => useRuleAlertsItems({ queryId: 'test', signalIndexName: 'signal-alerts', diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/soc_trends/hooks/use_cases_mttr.test.tsx b/x-pack/plugins/security_solution/public/overview/components/detection_response/soc_trends/hooks/use_cases_mttr.test.tsx index 8658571d03901..8fd3602b8e62e 100644 --- a/x-pack/plugins/security_solution/public/overview/components/detection_response/soc_trends/hooks/use_cases_mttr.test.tsx +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/soc_trends/hooks/use_cases_mttr.test.tsx @@ -8,7 +8,7 @@ import React from 'react'; import type { UseCasesMttr } from './use_cases_mttr'; import { useCasesMttr } from './use_cases_mttr'; -import { act, renderHook } from '@testing-library/react-hooks'; +import { act, waitFor, renderHook } from '@testing-library/react'; import { TestProviders } from '../../../../../common/mock'; import { useKibana as useKibanaMock } from '../../../../../common/lib/kibana/__mocks__'; import * as i18n from '../translations'; @@ -53,12 +53,13 @@ describe('useCasesMttr', () => { afterEach(() => { jest.clearAllMocks(); }); + it('loads initial state', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useCasesMttr(props), { - wrapper: wrapperContainer, - }); - await waitForNextUpdate(); + const { result } = renderHook(() => useCasesMttr(props), { + wrapper: wrapperContainer, + }); + + await waitFor(() => { expect(result.current).toEqual({ stat: '-', isLoading: true, @@ -71,16 +72,15 @@ describe('useCasesMttr', () => { }); }); }); + it('finds positive percentage change', async () => { useKibanaMock().services.cases.api.cases.getCasesMetrics = mockGetCasesMetrics .mockReturnValueOnce({ mttr: 10000 }) .mockReturnValue({ mttr: 5000 }); - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useCasesMttr(props), { - wrapper: wrapperContainer, - }); - await waitForNextUpdate(); - await waitForNextUpdate(); + const { result } = renderHook(() => useCasesMttr(props), { + wrapper: wrapperContainer, + }); + await waitFor(() => expect(result.current).toEqual({ stat: '2h', isLoading: false, @@ -95,19 +95,17 @@ describe('useCasesMttr', () => { }), }, ...basicData, - }); - }); + }) + ); }); it('finds negative percentage change', async () => { useKibanaMock().services.cases.api.cases.getCasesMetrics = mockGetCasesMetrics .mockReturnValueOnce({ mttr: 5000 }) .mockReturnValue({ mttr: 10000 }); - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useCasesMttr(props), { - wrapper: wrapperContainer, - }); - await waitForNextUpdate(); - await waitForNextUpdate(); + const { result } = renderHook(() => useCasesMttr(props), { + wrapper: wrapperContainer, + }); + await waitFor(() => expect(result.current).toEqual({ stat: '1h', isLoading: false, @@ -122,19 +120,17 @@ describe('useCasesMttr', () => { }), }, ...basicData, - }); - }); + }) + ); }); it('finds zero percentage change', async () => { useKibanaMock().services.cases.api.cases.getCasesMetrics = mockGetCasesMetrics.mockReturnValue({ mttr: 10000, }); - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useCasesMttr(props), { - wrapper: wrapperContainer, - }); - await waitForNextUpdate(); - await waitForNextUpdate(); + const { result } = renderHook(() => useCasesMttr(props), { + wrapper: wrapperContainer, + }); + await waitFor(() => expect(result.current).toEqual({ stat: '2h', isLoading: false, @@ -144,19 +140,17 @@ describe('useCasesMttr', () => { note: i18n.NO_CHANGE('case resolution time'), }, ...basicData, - }); - }); + }) + ); }); it('handles null mttr - current time range', async () => { useKibanaMock().services.cases.api.cases.getCasesMetrics = mockGetCasesMetrics .mockReturnValueOnce({ mttr: null }) .mockReturnValue({ mttr: 10000 }); - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useCasesMttr(props), { - wrapper: wrapperContainer, - }); - await waitForNextUpdate(); - await waitForNextUpdate(); + const { result } = renderHook(() => useCasesMttr(props), { + wrapper: wrapperContainer, + }); + await waitFor(() => expect(result.current).toEqual({ stat: '-', isLoading: false, @@ -166,19 +160,17 @@ describe('useCasesMttr', () => { note: i18n.NO_DATA_CURRENT('case'), }, ...basicData, - }); - }); + }) + ); }); it('handles null mttr - compare time range', async () => { useKibanaMock().services.cases.api.cases.getCasesMetrics = mockGetCasesMetrics .mockReturnValueOnce({ mttr: 10000 }) .mockReturnValue({ mttr: null }); - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useCasesMttr(props), { - wrapper: wrapperContainer, - }); - await waitForNextUpdate(); - await waitForNextUpdate(); + const { result } = renderHook(() => useCasesMttr(props), { + wrapper: wrapperContainer, + }); + await waitFor(() => expect(result.current).toEqual({ stat: '2h', isLoading: false, @@ -188,8 +180,8 @@ describe('useCasesMttr', () => { note: i18n.NO_DATA_COMPARE('case'), }, ...basicData, - }); - }); + }) + ); }); it('handles null mttr - current & compare time range', async () => { useKibanaMock().services.cases.api.cases.getCasesMetrics = mockGetCasesMetrics @@ -198,13 +190,11 @@ describe('useCasesMttr', () => { .mockReturnValue({ mttr: null, }); - await act(async () => { - let ourProps = props; - const { result, rerender, waitForNextUpdate } = renderHook(() => useCasesMttr(ourProps), { - wrapper: wrapperContainer, - }); - await waitForNextUpdate(); - await waitForNextUpdate(); + let ourProps = props; + const { result, rerender } = renderHook(() => useCasesMttr(ourProps), { + wrapper: wrapperContainer, + }); + await waitFor(() => expect(result.current).toEqual({ stat: '2h', isLoading: false, @@ -214,14 +204,16 @@ describe('useCasesMttr', () => { note: i18n.NO_CHANGE('case resolution time'), }, ...basicData, - }); - ourProps = { - ...props, - from: '2020-07-08T08:20:18.966Z', - to: '2020-07-09T08:20:18.966Z', - }; - rerender(); - await waitForNextUpdate(); + }) + ); + + ourProps = { + ...props, + from: '2020-07-08T08:20:18.966Z', + to: '2020-07-09T08:20:18.966Z', + }; + rerender(); + await waitFor(() => expect(result.current).toEqual({ stat: '-', isLoading: false, @@ -231,8 +223,8 @@ describe('useCasesMttr', () => { note: i18n.NO_DATA('case'), }, ...basicData, - }); - }); + }) + ); }); it('handles undefined mttr - current & compare time range', async () => { useKibanaMock().services.cases.api.cases.getCasesMetrics = mockGetCasesMetrics @@ -241,13 +233,12 @@ describe('useCasesMttr', () => { .mockReturnValue({ mttr: undefined, }); - await act(async () => { - let ourProps = props; - const { result, rerender, waitForNextUpdate } = renderHook(() => useCasesMttr(ourProps), { - wrapper: wrapperContainer, - }); - await waitForNextUpdate(); - await waitForNextUpdate(); + let ourProps = props; + const { result, rerender } = renderHook(() => useCasesMttr(ourProps), { + wrapper: wrapperContainer, + }); + + await waitFor(() => expect(result.current).toEqual({ stat: '2h', isLoading: false, @@ -257,15 +248,21 @@ describe('useCasesMttr', () => { note: i18n.NO_CHANGE('case resolution time'), }, ...basicData, - }); - ourProps = { - ...props, - from: '2020-07-08T08:20:18.966Z', - to: '2020-07-09T08:20:18.966Z', - }; + }) + ); + + ourProps = { + ...props, + from: '2020-07-08T08:20:18.966Z', + to: '2020-07-09T08:20:18.966Z', + }; + + act(() => { rerender(); rerender(); - await waitForNextUpdate(); + }); + + await waitFor(() => expect(result.current).toEqual({ stat: '-', isLoading: false, @@ -275,7 +272,7 @@ describe('useCasesMttr', () => { note: i18n.NO_DATA('case'), }, ...basicData, - }); - }); + }) + ); }); }); diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/soc_trends/hooks/use_critical_alerts.test.tsx b/x-pack/plugins/security_solution/public/overview/components/detection_response/soc_trends/hooks/use_critical_alerts.test.tsx index 7a63e93e6c765..16607879a8fe8 100644 --- a/x-pack/plugins/security_solution/public/overview/components/detection_response/soc_trends/hooks/use_critical_alerts.test.tsx +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/soc_trends/hooks/use_critical_alerts.test.tsx @@ -8,7 +8,7 @@ import React from 'react'; import type { UseCriticalAlerts } from './use_critical_alerts'; import { useCriticalAlerts } from './use_critical_alerts'; -import { act, renderHook } from '@testing-library/react-hooks'; +import { waitFor, renderHook } from '@testing-library/react'; import { TestProviders } from '../../../../../common/mock'; import * as i18n from '../translations'; import { useQueryAlerts } from '../../../../../detections/containers/detection_engine/alerts/use_query'; @@ -66,14 +66,20 @@ describe('useCriticalAlerts', () => { jest.clearAllMocks(); }); it('loads initial state', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useCriticalAlerts(props), { - wrapper: wrapperContainer, - }); - await waitForNextUpdate(); + // mock useQuery into state before data fetch + mockUseQueryAlerts.mockReturnValue({ + ...basicReturn, + data: null, + }); + + const { result } = renderHook(() => useCriticalAlerts(props), { + wrapper: wrapperContainer, + }); + + await waitFor(() => { expect(result.current).toEqual({ stat: '-', - isLoading: true, + isLoading: false, percentage: { percent: null, color: 'hollow', @@ -95,12 +101,10 @@ describe('useCriticalAlerts', () => { ...basicReturn, } ); - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useCriticalAlerts(props), { - wrapper: wrapperContainer, - }); - await waitForNextUpdate(); - await waitForNextUpdate(); + const { result } = renderHook(() => useCriticalAlerts(props), { + wrapper: wrapperContainer, + }); + await waitFor(() => expect(result.current).toEqual({ stat: '100', isLoading: false, @@ -115,8 +119,8 @@ describe('useCriticalAlerts', () => { }), }, ...basicData, - }); - }); + }) + ); }); it('finds negative percentage change', async () => { mockUseQueryAlerts.mockImplementation((args) => @@ -130,12 +134,10 @@ describe('useCriticalAlerts', () => { ...basicReturn, } ); - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useCriticalAlerts(props), { - wrapper: wrapperContainer, - }); - await waitForNextUpdate(); - await waitForNextUpdate(); + const { result } = renderHook(() => useCriticalAlerts(props), { + wrapper: wrapperContainer, + }); + await waitFor(() => expect(result.current).toEqual({ stat: '50', isLoading: false, @@ -150,20 +152,18 @@ describe('useCriticalAlerts', () => { }), }, ...basicData, - }); - }); + }) + ); }); it('finds zero percentage change', async () => { mockUseQueryAlerts.mockImplementation((args) => ({ data: { aggregations: { open: { critical: { doc_count: 100 } } } }, ...basicReturn, })); - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useCriticalAlerts(props), { - wrapper: wrapperContainer, - }); - await waitForNextUpdate(); - await waitForNextUpdate(); + const { result } = renderHook(() => useCriticalAlerts(props), { + wrapper: wrapperContainer, + }); + await waitFor(() => expect(result.current).toEqual({ stat: '100', isLoading: false, @@ -173,8 +173,8 @@ describe('useCriticalAlerts', () => { note: i18n.NO_CHANGE('open critical alert count'), }, ...basicData, - }); - }); + }) + ); }); it('handles null data - current time range', async () => { mockUseQueryAlerts.mockImplementation((args) => @@ -188,12 +188,10 @@ describe('useCriticalAlerts', () => { ...basicReturn, } ); - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useCriticalAlerts(props), { - wrapper: wrapperContainer, - }); - await waitForNextUpdate(); - await waitForNextUpdate(); + const { result } = renderHook(() => useCriticalAlerts(props), { + wrapper: wrapperContainer, + }); + await waitFor(() => expect(result.current).toEqual({ stat: '-', isLoading: false, @@ -203,8 +201,8 @@ describe('useCriticalAlerts', () => { note: i18n.NO_DATA_CURRENT('alerts'), }, ...basicData, - }); - }); + }) + ); }); it('handles null data - compare time range', async () => { mockUseQueryAlerts.mockImplementation((args) => @@ -218,12 +216,10 @@ describe('useCriticalAlerts', () => { ...basicReturn, } ); - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useCriticalAlerts(props), { - wrapper: wrapperContainer, - }); - await waitForNextUpdate(); - await waitForNextUpdate(); + const { result } = renderHook(() => useCriticalAlerts(props), { + wrapper: wrapperContainer, + }); + await waitFor(() => expect(result.current).toEqual({ stat: '100', isLoading: false, @@ -233,8 +229,8 @@ describe('useCriticalAlerts', () => { note: i18n.NO_DATA_COMPARE('alerts'), }, ...basicData, - }); - }); + }) + ); }); it('handles null data - current & compare time range', async () => { mockUseQueryAlerts.mockImplementation((args) => @@ -249,16 +245,12 @@ describe('useCriticalAlerts', () => { ...basicReturn, } ); - await act(async () => { - let ourProps = props; - const { result, rerender, waitForNextUpdate } = renderHook( - () => useCriticalAlerts(ourProps), - { - wrapper: wrapperContainer, - } - ); - await waitForNextUpdate(); - await waitForNextUpdate(); + let ourProps = props; + const { result, rerender } = renderHook(() => useCriticalAlerts(ourProps), { + wrapper: wrapperContainer, + }); + + await waitFor(() => expect(result.current).toEqual({ stat: '100', isLoading: false, @@ -268,16 +260,18 @@ describe('useCriticalAlerts', () => { note: i18n.NO_CHANGE('open critical alert count'), }, ...basicData, - }); - ourProps = { - ...props, - from: '2020-09-08T08:20:18.966Z', - to: '2020-09-09T08:20:18.966Z', - fromCompare: '2020-09-07T08:20:18.966Z', - toCompare: '2020-09-08T08:20:18.966Z', - }; - rerender(); - await waitForNextUpdate(); + }) + ); + + ourProps = { + ...props, + from: '2020-09-08T08:20:18.966Z', + to: '2020-09-09T08:20:18.966Z', + fromCompare: '2020-09-07T08:20:18.966Z', + toCompare: '2020-09-08T08:20:18.966Z', + }; + rerender(); + await waitFor(() => expect(result.current).toEqual({ stat: '-', isLoading: false, @@ -287,8 +281,8 @@ describe('useCriticalAlerts', () => { note: i18n.NO_DATA('alerts'), }, ...basicData, - }); - }); + }) + ); }); it('handles undefined data - current & compare time range', async () => { mockUseQueryAlerts.mockImplementation((args) => @@ -303,16 +297,11 @@ describe('useCriticalAlerts', () => { ...basicReturn, } ); - await act(async () => { - let ourProps = props; - const { result, rerender, waitForNextUpdate } = renderHook( - () => useCriticalAlerts(ourProps), - { - wrapper: wrapperContainer, - } - ); - await waitForNextUpdate(); - await waitForNextUpdate(); + let ourProps = props; + const { result, rerender } = renderHook(() => useCriticalAlerts(ourProps), { + wrapper: wrapperContainer, + }); + await waitFor(() => expect(result.current).toEqual({ stat: '100', isLoading: false, @@ -322,16 +311,17 @@ describe('useCriticalAlerts', () => { note: i18n.NO_CHANGE('open critical alert count'), }, ...basicData, - }); - ourProps = { - ...props, - from: '2020-09-08T08:20:18.966Z', - to: '2020-09-09T08:20:18.966Z', - fromCompare: '2020-09-07T08:20:18.966Z', - toCompare: '2020-09-08T08:20:18.966Z', - }; - rerender(); - await waitForNextUpdate(); + }) + ); + ourProps = { + ...props, + from: '2020-09-08T08:20:18.966Z', + to: '2020-09-09T08:20:18.966Z', + fromCompare: '2020-09-07T08:20:18.966Z', + toCompare: '2020-09-08T08:20:18.966Z', + }; + rerender(); + await waitFor(() => expect(result.current).toEqual({ stat: '-', isLoading: false, @@ -341,7 +331,7 @@ describe('useCriticalAlerts', () => { note: i18n.NO_DATA('alerts'), }, ...basicData, - }); - }); + }) + ); }); }); diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/soc_trends/hooks/use_soc_trends.test.tsx b/x-pack/plugins/security_solution/public/overview/components/detection_response/soc_trends/hooks/use_soc_trends.test.tsx index b008668f9865a..0a4d7e8249a55 100644 --- a/x-pack/plugins/security_solution/public/overview/components/detection_response/soc_trends/hooks/use_soc_trends.test.tsx +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/soc_trends/hooks/use_soc_trends.test.tsx @@ -6,8 +6,9 @@ */ import React from 'react'; +import { renderHook, waitFor } from '@testing-library/react'; + import { useSocTrends } from './use_soc_trends'; -import { act, renderHook } from '@testing-library/react-hooks'; import { TestProviders } from '../../../../../common/mock'; import { useGlobalTime } from '../../../../../common/containers/use_global_time'; import * as i18n from '../translations'; @@ -42,14 +43,13 @@ describe('useSocTrends', () => { jest.clearAllMocks(); }); it('loads initial state', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook( - () => useSocTrends({ skip: false, signalIndexName: '.alerts-default' }), - { - wrapper: wrapperContainer, - } - ); - await waitForNextUpdate(); + const { result } = renderHook( + () => useSocTrends({ skip: false, signalIndexName: '.alerts-default' }), + { + wrapper: wrapperContainer, + } + ); + await waitFor(() => { expect(result.current).toEqual({ stats: [ { diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/user_alerts_table/use_user_alerts_items.test.ts b/x-pack/plugins/security_solution/public/overview/components/detection_response/user_alerts_table/use_user_alerts_items.test.ts index 3aef486805322..00b919959922d 100644 --- a/x-pack/plugins/security_solution/public/overview/components/detection_response/user_alerts_table/use_user_alerts_items.test.ts +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/user_alerts_table/use_user_alerts_items.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import { mockQuery, @@ -14,7 +14,7 @@ import { } from './mock_data'; import { useUserAlertsItems } from './use_user_alerts_items'; -import type { UseUserAlertsItems, UseUserAlertsItemsProps } from './use_user_alerts_items'; +import type { UseUserAlertsItemsProps } from './use_user_alerts_items'; const signalIndexName = 'signal-alerts'; @@ -50,7 +50,7 @@ jest.mock('../../../../common/containers/use_global_time', () => { }); const renderUseUserAlertsItems = (overrides: Partial = {}) => - renderHook>(() => + renderHook(() => useUserAlertsItems({ skip: false, signalIndexName, diff --git a/x-pack/plugins/security_solution/public/overview/containers/overview_host/index.test.tsx b/x-pack/plugins/security_solution/public/overview/containers/overview_host/index.test.tsx index bae3b708ec3a5..921892ceed148 100644 --- a/x-pack/plugins/security_solution/public/overview/containers/overview_host/index.test.tsx +++ b/x-pack/plugins/security_solution/public/overview/containers/overview_host/index.test.tsx @@ -4,7 +4,8 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; + +import { renderHook, act } from '@testing-library/react'; import { TestProviders } from '../../../common/mock'; import { useHostOverview } from '.'; import { useSearchStrategy } from '../../../common/containers/use_search_strategy'; diff --git a/x-pack/plugins/security_solution/public/overview/containers/overview_network/index.test.tsx b/x-pack/plugins/security_solution/public/overview/containers/overview_network/index.test.tsx index c842fb0a51cae..036c3ec701f79 100644 --- a/x-pack/plugins/security_solution/public/overview/containers/overview_network/index.test.tsx +++ b/x-pack/plugins/security_solution/public/overview/containers/overview_network/index.test.tsx @@ -4,7 +4,8 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; + +import { renderHook, act } from '@testing-library/react'; import { TestProviders } from '../../../common/mock'; import { useNetworkOverview } from '.'; import { useSearchStrategy } from '../../../common/containers/use_search_strategy'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/links.ts b/x-pack/plugins/security_solution/public/siem_migrations/links.ts index 34db8a357785a..a98f823957acf 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/links.ts +++ b/x-pack/plugins/security_solution/public/siem_migrations/links.ts @@ -13,7 +13,7 @@ import { } from '../../common/constants'; import { SIEM_MIGRATIONS_RULES } from '../app/translations'; import type { LinkItem } from '../common/links/types'; -import { IconConsoleCloud } from '../common/icons/console_cloud'; +import { SiemMigrationsIcon } from '../common/icons/siem_migrations'; export const siemMigrationsLinks: LinkItem = { id: SecurityPageName.siemMigrationsRules, @@ -21,7 +21,7 @@ export const siemMigrationsLinks: LinkItem = { description: i18n.translate('xpack.securitySolution.appLinks.siemMigrationsRulesDescription', { defaultMessage: 'SIEM Rules Migrations.', }), - landingIcon: IconConsoleCloud, + landingIcon: SiemMigrationsIcon, path: SIEM_MIGRATIONS_RULES_PATH, capabilities: [`${SERVER_APP_ID}.show`], skipUrlState: true, diff --git a/x-pack/plugins/security_solution/public/siem_migrations/routes.tsx b/x-pack/plugins/security_solution/public/siem_migrations/routes.tsx index cc2b9fbad3451..179cf064c4926 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/routes.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/routes.tsx @@ -10,16 +10,19 @@ import { Routes, Route } from '@kbn/shared-ux-router'; import type { SecuritySubPluginRoutes } from '../app/types'; import { SIEM_MIGRATIONS_RULES_PATH, SecurityPageName } from '../../common/constants'; -import { RulesPage } from './rules/pages'; +import { MigrationRulesPage } from './rules/pages'; import { PluginTemplateWrapper } from '../common/components/plugin_template_wrapper'; import { SecurityRoutePageWrapper } from '../common/components/security_route_page_wrapper'; -export const RulesRoutes = () => { +export const SiemMigrationsRoutes = () => { return ( - + @@ -29,6 +32,6 @@ export const RulesRoutes = () => { export const routes: SecuritySubPluginRoutes = [ { path: SIEM_MIGRATIONS_RULES_PATH, - component: RulesRoutes, + component: SiemMigrationsRoutes, }, ]; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/api/hooks/use_get_migration_rules_query.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/api/hooks/use_get_migration_rules_query.ts deleted file mode 100644 index fece8f8c3ca07..0000000000000 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/api/hooks/use_get_migration_rules_query.ts +++ /dev/null @@ -1,54 +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 { UseQueryOptions } from '@tanstack/react-query'; -import { useQuery, useQueryClient } from '@tanstack/react-query'; -import { replaceParams } from '@kbn/openapi-common/shared'; -import { useCallback } from 'react'; -import { DEFAULT_QUERY_OPTIONS } from './constants'; -import { getRuleMigrations } from '../api'; -import type { GetRuleMigrationResponse } from '../../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; -import { SIEM_RULE_MIGRATION_PATH } from '../../../../../common/siem_migrations/constants'; - -export const useGetMigrationRulesQuery = ( - migrationId: string, - options?: UseQueryOptions -) => { - const SPECIFIC_MIGRATION_PATH = replaceParams(SIEM_RULE_MIGRATION_PATH, { - migration_id: migrationId, - }); - return useQuery( - ['GET', SPECIFIC_MIGRATION_PATH], - async ({ signal }) => { - return getRuleMigrations({ migrationId, signal }); - }, - { - ...DEFAULT_QUERY_OPTIONS, - ...options, - } - ); -}; - -/** - * We should use this hook to invalidate the rule migrations cache. For - * example, rule migrations mutations, like installing a rule, should lead to cache invalidation. - * - * @returns A rule migrations cache invalidation callback - */ -export const useInvalidateGetMigrationRulesQuery = (migrationId: string) => { - const queryClient = useQueryClient(); - - const SPECIFIC_MIGRATION_PATH = replaceParams(SIEM_RULE_MIGRATION_PATH, { - migration_id: migrationId, - }); - - return useCallback(() => { - queryClient.invalidateQueries(['GET', SPECIFIC_MIGRATION_PATH], { - refetchType: 'active', - }); - }, [SPECIFIC_MIGRATION_PATH, queryClient]); -}; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/api/hooks/use_install_all_migration_rules_mutation.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/api/hooks/use_install_all_migration_rules_mutation.ts deleted file mode 100644 index f946dc165450f..0000000000000 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/api/hooks/use_install_all_migration_rules_mutation.ts +++ /dev/null @@ -1,39 +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 { UseMutationOptions } from '@tanstack/react-query'; -import { useMutation } from '@tanstack/react-query'; -import type { InstallTranslatedMigrationRulesResponse } from '../../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; -import { SIEM_RULE_MIGRATION_INSTALL_TRANSLATED_PATH } from '../../../../../common/siem_migrations/constants'; -import { installTranslatedMigrationRules } from '../api'; -import { useInvalidateGetMigrationRulesQuery } from './use_get_migration_rules_query'; - -export const INSTALL_ALL_MIGRATION_RULES_MUTATION_KEY = [ - 'POST', - SIEM_RULE_MIGRATION_INSTALL_TRANSLATED_PATH, -]; - -export const useInstallAllMigrationRulesMutation = ( - migrationId: string, - options?: UseMutationOptions -) => { - const invalidateGetRuleMigrationsQuery = useInvalidateGetMigrationRulesQuery(migrationId); - - return useMutation( - () => installTranslatedMigrationRules({ migrationId }), - { - ...options, - mutationKey: INSTALL_ALL_MIGRATION_RULES_MUTATION_KEY, - onSettled: (...args) => { - invalidateGetRuleMigrationsQuery(); - - if (options?.onSettled) { - options.onSettled(...args); - } - }, - } - ); -}; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/api/hooks/use_install_migration_rules_mutation.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/api/hooks/use_install_migration_rules_mutation.ts deleted file mode 100644 index 6aaff55e24513..0000000000000 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/api/hooks/use_install_migration_rules_mutation.ts +++ /dev/null @@ -1,36 +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 { UseMutationOptions } from '@tanstack/react-query'; -import { useMutation } from '@tanstack/react-query'; -import type { InstallMigrationRulesResponse } from '../../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; -import { SIEM_RULE_MIGRATION_INSTALL_PATH } from '../../../../../common/siem_migrations/constants'; -import { installMigrationRules } from '../api'; -import { useInvalidateGetMigrationRulesQuery } from './use_get_migration_rules_query'; - -export const INSTALL_MIGRATION_RULES_MUTATION_KEY = ['POST', SIEM_RULE_MIGRATION_INSTALL_PATH]; - -export const useInstallMigrationRulesMutation = ( - migrationId: string, - options?: UseMutationOptions -) => { - const invalidateGetRuleMigrationsQuery = useInvalidateGetMigrationRulesQuery(migrationId); - - return useMutation( - (ids: string[]) => installMigrationRules({ migrationId, ids }), - { - ...options, - mutationKey: INSTALL_MIGRATION_RULES_MUTATION_KEY, - onSettled: (...args) => { - invalidateGetRuleMigrationsQuery(); - - if (options?.onSettled) { - options.onSettled(...args); - } - }, - } - ); -}; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/api/api.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/api/index.ts similarity index 72% rename from x-pack/plugins/security_solution/public/siem_migrations/rules/api/api.ts rename to x-pack/plugins/security_solution/public/siem_migrations/rules/api/index.ts index 3b7605e032259..592b93f438197 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/api/api.ts +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/api/index.ts @@ -15,15 +15,16 @@ import { SIEM_RULE_MIGRATION_INSTALL_PATH, SIEM_RULE_MIGRATION_PATH, SIEM_RULE_MIGRATION_START_PATH, + SIEM_RULE_MIGRATION_TRANSLATION_STATS_PATH, } from '../../../../common/siem_migrations/constants'; import type { GetAllStatsRuleMigrationResponse, GetRuleMigrationResponse, + GetRuleMigrationTranslationStatsResponse, InstallTranslatedMigrationRulesResponse, InstallMigrationRulesResponse, StartRuleMigrationRequestBody, } from '../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; -import type { InstallTranslatedRulesProps, InstallRulesProps } from '../types'; /** * Retrieves the stats for all the existing migrations, aggregated by `migration_id`. @@ -67,6 +68,31 @@ export const startRuleMigration = async ({ ); }; +/** + * Retrieves the translation stats for the migraion. + * + * @param migrationId `id` of the migration to retrieve translation stats for + * @param signal AbortSignal for cancelling request + * + * @throws An error if response is not OK + */ +export const getRuleMigrationTranslationStats = async ({ + migrationId, + signal, +}: { + migrationId: string; + signal: AbortSignal | undefined; +}): Promise => { + return KibanaServices.get().http.fetch( + replaceParams(SIEM_RULE_MIGRATION_TRANSLATION_STATS_PATH, { migration_id: migrationId }), + { + method: 'GET', + version: '1', + signal, + } + ); +}; + /** * Retrieves all the migration rule documents of a specific migration. * @@ -77,14 +103,29 @@ export const startRuleMigration = async ({ */ export const getRuleMigrations = async ({ migrationId, + page, + perPage, + searchTerm, signal, }: { migrationId: string; + page?: number; + perPage?: number; + searchTerm?: string; signal: AbortSignal | undefined; }): Promise => { return KibanaServices.get().http.fetch( replaceParams(SIEM_RULE_MIGRATION_PATH, { migration_id: migrationId }), - { method: 'GET', version: '1', signal } + { + method: 'GET', + version: '1', + query: { + page, + per_page: perPage, + search_term: searchTerm, + }, + signal, + } ); }; @@ -92,7 +133,11 @@ export const installMigrationRules = async ({ migrationId, ids, signal, -}: InstallRulesProps): Promise => { +}: { + migrationId: string; + ids: string[]; + signal?: AbortSignal; +}): Promise => { return KibanaServices.get().http.fetch( replaceParams(SIEM_RULE_MIGRATION_INSTALL_PATH, { migration_id: migrationId }), { @@ -107,7 +152,10 @@ export const installMigrationRules = async ({ export const installTranslatedMigrationRules = async ({ migrationId, signal, -}: InstallTranslatedRulesProps): Promise => { +}: { + migrationId: string; + signal?: AbortSignal; +}): Promise => { return KibanaServices.get().http.fetch( replaceParams(SIEM_RULE_MIGRATION_INSTALL_TRANSLATED_PATH, { migration_id: migrationId }), { diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/header_buttons/index.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/header_buttons/index.tsx index ba73bd9c84946..728873f046d2e 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/header_buttons/index.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/header_buttons/index.tsx @@ -10,12 +10,13 @@ import React, { useMemo } from 'react'; import type { EuiComboBoxOptionOption } from '@elastic/eui'; import { EuiComboBox, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import * as i18n from './translations'; +import type { RuleMigrationTask } from '../../types'; export interface HeaderButtonsProps { /** - * Available rule migrations ids + * Available rule migrations stats */ - migrationsIds: string[]; + ruleMigrationsStats: RuleMigrationTask[]; /** * Selected rule migration id @@ -30,55 +31,53 @@ export interface HeaderButtonsProps { onMigrationIdChange: (selectedId?: string) => void; } -const HeaderButtonsComponent: React.FC = ({ - migrationsIds, - selectedMigrationId, - onMigrationIdChange, -}) => { - const migrationOptions = useMemo(() => { - const options: Array> = migrationsIds.map((id, index) => ({ - value: id, - 'data-test-subj': `migrationSelectionOption-${index}`, - label: i18n.SIEM_MIGRATIONS_OPTION_LABEL(index + 1), - })); - return options; - }, [migrationsIds]); - const selectedMigrationOption = useMemo>>(() => { - const index = migrationsIds.findIndex((id) => id === selectedMigrationId); - return index !== -1 - ? [ - { - value: selectedMigrationId, - 'data-test-subj': `migrationSelectionOption-${index}`, - label: i18n.SIEM_MIGRATIONS_OPTION_LABEL(index + 1), - }, - ] - : []; - }, [migrationsIds, selectedMigrationId]); +export const HeaderButtons: React.FC = React.memo( + ({ ruleMigrationsStats, selectedMigrationId, onMigrationIdChange }) => { + const migrationOptions = useMemo(() => { + const options: Array> = ruleMigrationsStats.map( + ({ id, number }) => ({ + value: id, + 'data-test-subj': `migrationSelectionOption-${number}`, + label: i18n.SIEM_MIGRATIONS_OPTION_LABEL(number), + }) + ); + return options; + }, [ruleMigrationsStats]); + const selectedMigrationOption = useMemo>>(() => { + const stats = ruleMigrationsStats.find(({ id }) => id === selectedMigrationId); + return stats + ? [ + { + value: selectedMigrationId, + 'data-test-subj': `migrationSelectionOption-${stats.number}`, + label: i18n.SIEM_MIGRATIONS_OPTION_LABEL(stats.number), + }, + ] + : []; + }, [ruleMigrationsStats, selectedMigrationId]); - const onChange = (selected: Array>) => { - onMigrationIdChange(selected[0].value); - }; + const onChange = (selected: Array>) => { + onMigrationIdChange(selected[0].value); + }; - if (!migrationsIds.length) { - return null; - } - - return ( - - - - - - ); -}; + if (!ruleMigrationsStats.length) { + return null; + } -export const HeaderButtons = React.memo(HeaderButtonsComponent); + return ( + + + + + + ); + } +); HeaderButtons.displayName = 'HeaderButtons'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/constants.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/constants.ts similarity index 100% rename from x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/constants.ts rename to x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/constants.ts diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/index.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/index.tsx new file mode 100644 index 0000000000000..9353d0063b8ab --- /dev/null +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/index.tsx @@ -0,0 +1,194 @@ +/* + * 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 { FC, PropsWithChildren } from 'react'; +import React, { useMemo, useState, useEffect } from 'react'; +import { css } from '@emotion/css'; +import { euiThemeVars } from '@kbn/ui-theme'; +import { + EuiButtonEmpty, + EuiTitle, + EuiFlyout, + EuiFlyoutHeader, + EuiFlyoutBody, + EuiFlyoutFooter, + EuiTabbedContent, + EuiSpacer, + EuiFlexGroup, + EuiFlexItem, + useGeneratedHtmlId, +} from '@elastic/eui'; +import type { EuiTabbedContentTab, EuiTabbedContentProps, EuiFlyoutProps } from '@elastic/eui'; + +import { + DEFAULT_TRANSLATION_SEVERITY, + DEFAULT_TRANSLATION_FIELDS, +} from '../../../../../common/siem_migrations/constants'; +import type { RuleMigration } from '../../../../../common/siem_migrations/model/rule_migration.gen'; +import { + RuleOverviewTab, + useOverviewTabSections, +} from '../../../../detection_engine/rule_management/components/rule_details/rule_overview_tab'; +import { + type RuleResponse, + type Severity, +} from '../../../../../common/api/detection_engine/model/rule_schema'; + +import * as i18n from './translations'; +import { + DEFAULT_DESCRIPTION_LIST_COLUMN_WIDTHS, + LARGE_DESCRIPTION_LIST_COLUMN_WIDTHS, +} from './constants'; +import { TranslationTab } from './translation_tab'; + +/* + * Fixes tabs to the top and allows the content to scroll. + */ +const ScrollableFlyoutTabbedContent = (props: EuiTabbedContentProps) => ( + + + + + +); + +const tabPaddingClassName = css` + padding: 0 ${euiThemeVars.euiSizeM} ${euiThemeVars.euiSizeXL} ${euiThemeVars.euiSizeM}; +`; + +export const TabContentPadding: FC> = ({ children }) => ( +

      {children}
      +); + +interface MigrationRuleDetailsFlyoutProps { + ruleActions?: React.ReactNode; + ruleMigration: RuleMigration; + size?: EuiFlyoutProps['size']; + extraTabs?: EuiTabbedContentTab[]; + closeFlyout: () => void; +} + +export const MigrationRuleDetailsFlyout: React.FC = React.memo( + ({ + ruleActions, + ruleMigration, + size = 'm', + extraTabs = [], + closeFlyout, + }: MigrationRuleDetailsFlyoutProps) => { + const { expandedOverviewSections, toggleOverviewSection } = useOverviewTabSections(); + + const rule: RuleResponse = useMemo(() => { + const esqlLanguage = ruleMigration.elastic_rule?.query_language ?? 'esql'; + return { + type: esqlLanguage, + language: esqlLanguage, + name: ruleMigration.elastic_rule?.title, + description: ruleMigration.elastic_rule?.description, + query: ruleMigration.elastic_rule?.query, + + ...DEFAULT_TRANSLATION_FIELDS, + severity: + (ruleMigration.elastic_rule?.severity as Severity) ?? DEFAULT_TRANSLATION_SEVERITY, + } as RuleResponse; // TODO: we need to adjust RuleOverviewTab to allow partial RuleResponse as a parameter + }, [ruleMigration]); + + const translationTab: EuiTabbedContentTab = useMemo( + () => ({ + id: 'translation', + name: i18n.TRANSLATION_TAB_LABEL, + content: ( + + + + ), + }), + [ruleMigration] + ); + + const overviewTab: EuiTabbedContentTab = useMemo( + () => ({ + id: 'overview', + name: i18n.OVERVIEW_TAB_LABEL, + content: ( + + + + ), + }), + [rule, size, expandedOverviewSections, toggleOverviewSection] + ); + + const tabs = useMemo(() => { + return [...extraTabs, translationTab, overviewTab]; + }, [extraTabs, translationTab, overviewTab]); + + const [selectedTabId, setSelectedTabId] = useState(tabs[0].id); + const selectedTab = tabs.find((tab) => tab.id === selectedTabId) ?? tabs[0]; + + useEffect(() => { + if (!tabs.find((tab) => tab.id === selectedTabId)) { + // Switch to first tab if currently selected tab is not available for this rule + setSelectedTabId(tabs[0].id); + } + }, [tabs, selectedTabId]); + + const onTabClick = (tab: EuiTabbedContentTab) => { + setSelectedTabId(tab.id); + }; + + const migrationsRulesFlyoutTitleId = useGeneratedHtmlId({ + prefix: 'migrationRulesFlyoutTitle', + }); + + return ( + + + +

      {rule.name}

      +
      + +
      + + + + + + + + {i18n.DISMISS_BUTTON_LABEL} + + + {ruleActions} + + +
      + ); + } +); +MigrationRuleDetailsFlyout.displayName = 'MigrationRuleDetailsFlyout'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/translation_tab/header.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translation_tab/header.tsx similarity index 82% rename from x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/translation_tab/header.tsx rename to x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translation_tab/header.tsx index 57e99440e60a1..2775c9569917a 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/translation_tab/header.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translation_tab/header.tsx @@ -9,7 +9,7 @@ import React from 'react'; import { EuiFlexGroup, EuiTitle } from '@elastic/eui'; import * as i18n from './translations'; -export function TranslationTabHeader(): JSX.Element { +export const TranslationTabHeader: React.FC = React.memo(() => { return ( @@ -17,4 +17,5 @@ export function TranslationTabHeader(): JSX.Element { ); -} +}); +TranslationTabHeader.displayName = 'TranslationTabHeader'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/translation_tab/index.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translation_tab/index.tsx similarity index 87% rename from x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/translation_tab/index.tsx rename to x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translation_tab/index.tsx index 66836b8ea5631..a2e590b85ac09 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/translation_tab/index.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translation_tab/index.tsx @@ -22,15 +22,18 @@ import { css } from '@emotion/css'; import { FormattedMessage } from '@kbn/i18n-react'; import type { RuleMigration } from '../../../../../../common/siem_migrations/model/rule_migration.gen'; import { TranslationTabHeader } from './header'; -import { RuleQueryComponent } from './rule_query'; +import { MigrationRuleQuery } from './migration_rule_query'; import * as i18n from './translations'; -import { convertTranslationResultIntoText } from '../../../utils/helpers'; +import { + convertTranslationResultIntoColor, + convertTranslationResultIntoText, +} from '../../../utils/helpers'; interface TranslationTabProps { ruleMigration: RuleMigration; } -export const TranslationTab = ({ ruleMigration }: TranslationTabProps) => { +export const TranslationTab: React.FC = React.memo(({ ruleMigration }) => { const { euiTheme } = useEuiTheme(); const name = ruleMigration.elastic_rule?.title ?? ruleMigration.original_rule.title; @@ -66,9 +69,7 @@ export const TranslationTab = ({ ruleMigration }: TranslationTabProps) => { {}} onClickAriaLabel={'Click to update translation status'} > @@ -80,7 +81,7 @@ export const TranslationTab = ({ ruleMigration }: TranslationTabProps) => { - { `} /> - { ); -}; +}); +TranslationTab.displayName = 'TranslationTab'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translation_tab/migration_rule_query.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translation_tab/migration_rule_query.tsx new file mode 100644 index 0000000000000..534f765da97bc --- /dev/null +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translation_tab/migration_rule_query.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, { useMemo } from 'react'; +import { + EuiFlexGroup, + EuiFlexItem, + EuiHorizontalRule, + EuiMarkdownEditor, + EuiMarkdownFormat, + EuiTitle, + useEuiTheme, +} from '@elastic/eui'; +import { css } from '@emotion/react'; +import * as i18n from './translations'; + +interface MigrationRuleQueryProps { + title: string; + query: string; + canEdit?: boolean; +} + +export const MigrationRuleQuery: React.FC = React.memo( + ({ title, query, canEdit }) => { + const { euiTheme } = useEuiTheme(); + + const headerComponent = useMemo(() => { + return ( + + + +

      {title}

      +
      +
      +
      + ); + }, [euiTheme, title]); + + const queryTextComponent = useMemo(() => { + if (canEdit) { + return ( + {}} + height={400} + initialViewMode={'viewing'} + /> + ); + } else { + return {query}; + } + }, [canEdit, query]); + + return ( + <> + {headerComponent} + + {queryTextComponent} + + ); + } +); +MigrationRuleQuery.displayName = 'MigrationRuleQuery'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/translation_tab/translations.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translation_tab/translations.ts similarity index 100% rename from x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/translation_tab/translations.ts rename to x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translation_tab/translations.ts diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/translations.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translations.ts similarity index 100% rename from x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/translations.ts rename to x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translations.ts diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/bulk_actions.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/bulk_actions.tsx index df6d01d876fce..a58681b6e771f 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/bulk_actions.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/bulk_actions.tsx @@ -28,9 +28,9 @@ export const BulkActions: React.FC = React.memo( installTranslatedRule, installSelectedRule, }) => { - const showInstallTranslatedRulesButton = numberOfTranslatedRules > 0; + const disableInstallTranslatedRulesButton = isTableLoading || !numberOfTranslatedRules; const showInstallSelectedRulesButton = - showInstallTranslatedRulesButton && numberOfSelectedRules > 0; + disableInstallTranslatedRulesButton && numberOfSelectedRules > 0; return ( {showInstallSelectedRulesButton ? ( @@ -46,21 +46,21 @@ export const BulkActions: React.FC = React.memo(
      ) : null} - {showInstallTranslatedRulesButton ? ( - - - {i18n.INSTALL_ALL_RULES(numberOfTranslatedRules)} - {isTableLoading && } - - - ) : null} + + + {numberOfTranslatedRules > 0 + ? i18n.INSTALL_TRANSLATED_RULES(numberOfTranslatedRules) + : i18n.INSTALL_TRANSLATED_RULES_EMPTY_STATE} + {isTableLoading && } + + ); } diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/no_items_message.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/empty_migration.tsx similarity index 93% rename from x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/no_items_message.tsx rename to x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/empty_migration.tsx index 7aeaac7ab2f6b..a8bd20d4a557e 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/no_items_message.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/empty_migration.tsx @@ -11,7 +11,7 @@ import { SecurityPageName } from '../../../../../common'; import { useGetSecuritySolutionLinkProps } from '../../../../common/components/links'; import * as i18n from './translations'; -const NoItemsMessageComponent = () => { +export const EmptyMigration: React.FC = React.memo(() => { const getSecuritySolutionLinkProps = useGetSecuritySolutionLinkProps(); const { onClick: onClickLink } = getSecuritySolutionLinkProps({ deepLinkId: SecurityPageName.landing, @@ -47,6 +47,5 @@ const NoItemsMessageComponent = () => { ); -}; - -export const NoItemsMessage = React.memo(NoItemsMessageComponent); +}); +EmptyMigration.displayName = 'EmptyMigration'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/filters.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/filters.tsx deleted file mode 100644 index 25dffc64cccc5..0000000000000 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/filters.tsx +++ /dev/null @@ -1,54 +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 { EuiFlexGroup } from '@elastic/eui'; -import type { Dispatch, SetStateAction } from 'react'; -import React, { useCallback } from 'react'; -import * as i18n from './translations'; -import { RuleSearchField } from '../../../../detection_engine/rule_management_ui/components/rules_table/rules_table_filters/rule_search_field'; -import type { TableFilterOptions } from '../../hooks/use_filter_rules_to_install'; - -export interface FiltersComponentProps { - /** - * Currently selected table filter - */ - filterOptions: TableFilterOptions; - - /** - * Handles filter options changes - */ - setFilterOptions: Dispatch>; -} - -/** - * Collection of filters for filtering data within the SIEM Rules Migrations table. - * Contains search bar and tag selection - */ -const FiltersComponent: React.FC = ({ filterOptions, setFilterOptions }) => { - const handleOnSearch = useCallback( - (filterString: string) => { - setFilterOptions((filters) => ({ - ...filters, - filter: filterString.trim(), - })); - }, - [setFilterOptions] - ); - - return ( - - - - ); -}; - -export const Filters = React.memo(FiltersComponent); -Filters.displayName = 'Filters'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/index.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/index.tsx index 16f93a1cdebaf..e7af1af93e2ba 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/index.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/index.tsx @@ -5,35 +5,34 @@ * 2.0. */ +import type { CriteriaWithPagination } from '@elastic/eui'; import { - EuiInMemoryTable, EuiSkeletonLoading, - EuiProgress, EuiSkeletonTitle, EuiSkeletonText, EuiFlexGroup, EuiFlexItem, EuiSpacer, + EuiBasicTable, } from '@elastic/eui'; import React, { useCallback, useMemo, useState } from 'react'; +import { useAppToasts } from '../../../../common/hooks/use_app_toasts'; import type { RuleMigration } from '../../../../../common/siem_migrations/model/rule_migration.gen'; -import { - RULES_TABLE_INITIAL_PAGE_SIZE, - RULES_TABLE_PAGE_SIZE_OPTIONS, -} from '../../../../detection_engine/rule_management_ui/components/rules_table/constants'; -import { NoItemsMessage } from './no_items_message'; -import { Filters } from './filters'; -import { useRulesTableColumns } from '../../hooks/use_rules_table_columns'; -import type { TableFilterOptions } from '../../hooks/use_filter_rules_to_install'; -import { useFilterRulesToInstall } from '../../hooks/use_filter_rules_to_install'; -import { useRulePreviewFlyout } from '../../hooks/use_rule_preview_flyout'; +import { EmptyMigration } from './empty_migration'; +import { useMigrationRulesTableColumns } from '../../hooks/use_migration_rules_table_columns'; +import { useMigrationRuleDetailsFlyout } from '../../hooks/use_migration_rule_preview_flyout'; import { useInstallMigrationRules } from '../../logic/use_install_migration_rules'; import { useGetMigrationRules } from '../../logic/use_get_migration_rules'; -import { useInstallAllMigrationRules } from '../../logic/use_install_all_migration_rules'; +import { useInstallTranslatedMigrationRules } from '../../logic/use_install_translated_migration_rules'; +import { useGetMigrationTranslationStats } from '../../logic/use_get_migration_translation_stats'; +import * as logicI18n from '../../logic/translations'; import { BulkActions } from './bulk_actions'; +import { SearchField } from './search_field'; + +const DEFAULT_PAGE_SIZE = 10; -export interface RulesTableComponentProps { +export interface MigrationRulesTableProps { /** * Selected rule migration id */ @@ -43,138 +42,152 @@ export interface RulesTableComponentProps { /** * Table Component for displaying SIEM rules migrations */ -const RulesTableComponent: React.FC = ({ migrationId }) => { - const { data: ruleMigrations, isLoading: isDataLoading } = useGetMigrationRules(migrationId); - - const [selectedRuleMigrations, setSelectedRuleMigrations] = useState([]); - - const [filterOptions, setFilterOptions] = useState({ - filter: '', - }); - - const filteredRuleMigrations = useFilterRulesToInstall({ - filterOptions, - ruleMigrations: ruleMigrations ?? [], - }); - - const { mutateAsync: installMigrationRules } = useInstallMigrationRules(migrationId); - const { mutateAsync: installAllMigrationRules } = useInstallAllMigrationRules(migrationId); - - const numberOfTranslatedRules = useMemo(() => { - return filteredRuleMigrations.filter( - (rule) => - !rule.elastic_rule?.id && - (rule.elastic_rule?.prebuilt_rule_id || rule.translation_result === 'full') - ).length; - }, [filteredRuleMigrations]); - - const [isTableLoading, setTableLoading] = useState(false); - const installSingleRule = useCallback( - async (migrationRule: RuleMigration, enable?: boolean) => { - setTableLoading(true); - try { - await installMigrationRules([migrationRule.id]); - } finally { - setTableLoading(false); +export const MigrationRulesTable: React.FC = React.memo( + ({ migrationId }) => { + const { addError } = useAppToasts(); + + const [pageIndex, setPageIndex] = useState(0); + const [pageSize, setPageSize] = useState(DEFAULT_PAGE_SIZE); + const [searchTerm, setSearchTerm] = useState(); + + const { data: translationStats, isLoading: isStatsLoading } = + useGetMigrationTranslationStats(migrationId); + + const { + data: { ruleMigrations, total } = { ruleMigrations: [], total: 0 }, + isLoading: isDataLoading, + } = useGetMigrationRules({ + migrationId, + page: pageIndex, + perPage: pageSize, + searchTerm, + }); + + const [selectedRuleMigrations, setSelectedRuleMigrations] = useState([]); + + const pagination = useMemo(() => { + return { + pageIndex, + pageSize, + totalItemCount: total, + }; + }, [pageIndex, pageSize, total]); + + const onTableChange = useCallback(({ page, sort }: CriteriaWithPagination) => { + if (page) { + setPageIndex(page.index); + setPageSize(page.size); } - }, - [installMigrationRules] - ); - - const installTranslatedRules = useCallback( - async (enable?: boolean) => { - setTableLoading(true); - try { - await installAllMigrationRules(); - } finally { - setTableLoading(false); - } - }, - [installAllMigrationRules] - ); - - const ruleActionsFactory = useCallback( - (ruleMigration: RuleMigration, closeRulePreview: () => void) => { - // TODO: Add flyout action buttons - return null; - }, - [] - ); - - const { rulePreviewFlyout, openRulePreview } = useRulePreviewFlyout({ - ruleActionsFactory, - }); - - const shouldShowProgress = isDataLoading; - - const rulesColumns = useRulesTableColumns({ - disableActions: isTableLoading, - openMigrationRulePreview: openRulePreview, - installMigrationRule: installSingleRule, - }); - - return ( - <> - {shouldShowProgress && ( - - )} - - - - + }, []); + + const handleOnSearch = useCallback((value: string) => { + setSearchTerm(value.trim()); + }, []); + + const { mutateAsync: installMigrationRules } = useInstallMigrationRules(migrationId); + const { mutateAsync: installTranslatedMigrationRules } = + useInstallTranslatedMigrationRules(migrationId); + + const [isTableLoading, setTableLoading] = useState(false); + const installSingleRule = useCallback( + async (migrationRule: RuleMigration, enable?: boolean) => { + setTableLoading(true); + try { + await installMigrationRules([migrationRule.id]); + } catch (error) { + addError(error, { title: logicI18n.INSTALL_MIGRATION_RULES_FAILURE }); + } finally { + setTableLoading(false); } - loadedContent={ - !filteredRuleMigrations.length ? ( - - ) : ( + }, + [addError, installMigrationRules] + ); + + const installTranslatedRules = useCallback( + async (enable?: boolean) => { + setTableLoading(true); + try { + await installTranslatedMigrationRules(); + } catch (error) { + addError(error, { title: logicI18n.INSTALL_MIGRATION_RULES_FAILURE }); + } finally { + setTableLoading(false); + } + }, + [addError, installTranslatedMigrationRules] + ); + + const ruleActionsFactory = useCallback( + (ruleMigration: RuleMigration, closeRulePreview: () => void) => { + // TODO: Add flyout action buttons + return null; + }, + [] + ); + + const { + migrationRuleDetailsFlyout: rulePreviewFlyout, + openMigrationRuleDetails: openRulePreview, + } = useMigrationRuleDetailsFlyout({ + ruleActionsFactory, + }); + + const rulesColumns = useMigrationRulesTableColumns({ + disableActions: isTableLoading, + openMigrationRuleDetails: openRulePreview, + installMigrationRule: installSingleRule, + }); + + return ( + <> + - - - - - - - - - - true, - onSelectionChange: setSelectedRuleMigrations, - initialSelected: selectedRuleMigrations, - }} - itemId="rule_id" - data-test-subj="rules-translation-table" - columns={rulesColumns} - /> + + - ) - } - /> - {rulePreviewFlyout} - - ); -}; - -export const RulesTable = React.memo(RulesTableComponent); -RulesTable.displayName = 'RulesTable'; + } + loadedContent={ + !translationStats?.rules.total ? ( + + ) : ( + <> + + + + + + + + + + + loading={isTableLoading} + items={ruleMigrations} + pagination={pagination} + onChange={onTableChange} + selection={{ + selectable: () => true, + onSelectionChange: setSelectedRuleMigrations, + initialSelected: selectedRuleMigrations, + }} + itemId={'id'} + data-test-subj={'rules-translation-table'} + columns={rulesColumns} + /> + + ) + } + /> + {rulePreviewFlyout} + + ); + } +); +MigrationRulesTable.displayName = 'MigrationRulesTable'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/search_field.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/search_field.tsx new file mode 100644 index 0000000000000..7b7a576cb1dd9 --- /dev/null +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/search_field.tsx @@ -0,0 +1,47 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { ChangeEvent } from 'react'; +import React, { useCallback, useEffect, useState } from 'react'; +import { EuiFieldSearch, EuiFlexItem } from '@elastic/eui'; +import * as i18n from './translations'; + +interface SearchFieldProps { + initialValue?: string; + onSearch: (value: string) => void; + placeholder?: string; +} + +export const SearchField: React.FC = React.memo( + ({ initialValue, onSearch, placeholder }) => { + const [searchText, setSearchText] = useState(initialValue); + const handleChange = useCallback( + (e: ChangeEvent) => setSearchText(e.target.value), + [setSearchText] + ); + + useEffect(() => { + setSearchText(initialValue); + }, [initialValue]); + + return ( + + + + ); + } +); +SearchField.displayName = 'SearchField'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/translations.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/translations.ts index 3da9886659916..6803deb895d9b 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/translations.ts +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/translations.ts @@ -7,10 +7,17 @@ import { i18n } from '@kbn/i18n'; -export const SEARCH_PLACEHOLDER = i18n.translate( +export const SEARCH_MIGRATION_RULES = i18n.translate( + 'xpack.securitySolution.siemMigrations.rules.table.searchAriaLabel', + { + defaultMessage: 'Search migration rules', + } +); + +export const SEARCH_MIGRATION_RULES_PLACEHOLDER = i18n.translate( 'xpack.securitySolution.siemMigrations.rules.table.searchBarPlaceholder', { - defaultMessage: 'Search by rule name', + defaultMessage: 'Search by migration rule name', } ); @@ -42,12 +49,22 @@ export const INSTALL_SELECTED_RULES = (numberOfSelectedRules: number) => { }); }; -export const INSTALL_ALL_RULES = (numberOfAllRules: number) => { - return i18n.translate('xpack.securitySolution.siemMigrations.rules.table.installAllRules', { - defaultMessage: - 'Install translated {numberOfAllRules, plural, one {rule} other {rules}} ({numberOfAllRules})', - values: { numberOfAllRules }, - }); +export const INSTALL_TRANSLATED_RULES_EMPTY_STATE = i18n.translate( + 'xpack.securitySolution.siemMigrations.rules.table.installTranslatedRulesEmptyState', + { + defaultMessage: 'Install translated rules', + } +); + +export const INSTALL_TRANSLATED_RULES = (numberOfAllRules: number) => { + return i18n.translate( + 'xpack.securitySolution.siemMigrations.rules.table.installTranslatedRules', + { + defaultMessage: + 'Install translated {numberOfAllRules, plural, one {rule} other {rules}} ({numberOfAllRules})', + values: { numberOfAllRules }, + } + ); }; export const INSTALL_SELECTED_ARIA_LABEL = i18n.translate( @@ -57,8 +74,8 @@ export const INSTALL_SELECTED_ARIA_LABEL = i18n.translate( } ); -export const INSTALL_ALL_ARIA_LABEL = i18n.translate( - 'xpack.securitySolution.siemMigrations.rules.table.installAllButtonAriaLabel', +export const INSTALL_TRANSLATED_ARIA_LABEL = i18n.translate( + 'xpack.securitySolution.siemMigrations.rules.table.installTranslatedButtonAriaLabel', { defaultMessage: 'Install all translated rules', } diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table_columns/actions.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table_columns/actions.tsx index 7122949dee907..45de70582d4b1 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table_columns/actions.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table_columns/actions.tsx @@ -17,14 +17,14 @@ import type { TableColumn } from './constants'; interface ActionNameProps { disableActions?: boolean; migrationRule: RuleMigration; - openMigrationRulePreview: (migrationRule: RuleMigration) => void; + openMigrationRuleDetails: (migrationRule: RuleMigration) => void; installMigrationRule: (migrationRule: RuleMigration, enable?: boolean) => void; } const ActionName = ({ disableActions, migrationRule, - openMigrationRulePreview, + openMigrationRuleDetails, installMigrationRule, }: ActionNameProps) => { const { navigateToApp } = useKibana().services.application; @@ -72,7 +72,7 @@ const ActionName = ({ { - openMigrationRulePreview(migrationRule); + openMigrationRuleDetails(migrationRule); }} data-test-subj="editRule" > @@ -83,13 +83,13 @@ const ActionName = ({ interface CreateActionsColumnProps { disableActions?: boolean; - openMigrationRulePreview: (migrationRule: RuleMigration) => void; + openMigrationRuleDetails: (migrationRule: RuleMigration) => void; installMigrationRule: (migrationRule: RuleMigration, enable?: boolean) => void; } export const createActionsColumn = ({ disableActions, - openMigrationRulePreview, + openMigrationRuleDetails, installMigrationRule, }: CreateActionsColumnProps): TableColumn => { return { @@ -100,7 +100,7 @@ export const createActionsColumn = ({ ); diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table_columns/index.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table_columns/index.tsx index a402e61a444af..4220a35ed4622 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table_columns/index.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table_columns/index.tsx @@ -12,3 +12,4 @@ export * from './name'; export * from './risk_score'; export * from './severity'; export * from './status'; +export * from './updated'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table_columns/name.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table_columns/name.tsx index 7b7cf228895fc..085a2f5c6a254 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table_columns/name.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table_columns/name.tsx @@ -14,14 +14,14 @@ import type { TableColumn } from './constants'; interface NameProps { name: string; rule: RuleMigration; - openMigrationRulePreview: (rule: RuleMigration) => void; + openMigrationRuleDetails: (rule: RuleMigration) => void; } -const Name = ({ name, rule, openMigrationRulePreview }: NameProps) => { +const Name = ({ name, rule, openMigrationRuleDetails }: NameProps) => { return ( { - openMigrationRulePreview(rule); + openMigrationRuleDetails(rule); }} data-test-subj="ruleName" > @@ -31,15 +31,15 @@ const Name = ({ name, rule, openMigrationRulePreview }: NameProps) => { }; export const createNameColumn = ({ - openMigrationRulePreview, + openMigrationRuleDetails, }: { - openMigrationRulePreview: (rule: RuleMigration) => void; + openMigrationRuleDetails: (rule: RuleMigration) => void; }): TableColumn => { return { field: 'original_rule.title', name: i18n.COLUMN_NAME, render: (value: RuleMigration['original_rule']['title'], rule: RuleMigration) => ( - + ), sortable: true, truncateText: true, diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table_columns/translations.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table_columns/translations.ts index 906e752d79aa0..5b40abd3d7485 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table_columns/translations.ts +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table_columns/translations.ts @@ -69,3 +69,10 @@ export const COLUMN_SEVERITY = i18n.translate( defaultMessage: 'Severity', } ); + +export const COLUMN_UPDATED = i18n.translate( + 'xpack.securitySolution.siemMigrations.rules.tableColumn.updatedLabel', + { + defaultMessage: 'Updated', + } +); diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table_columns/updated.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table_columns/updated.tsx new file mode 100644 index 0000000000000..cec9f86eb7bde --- /dev/null +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table_columns/updated.tsx @@ -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 React from 'react'; +import { FormattedRelativePreferenceDate } from '../../../../common/components/formatted_date'; +import type { RuleMigration } from '../../../../../common/siem_migrations/model/rule_migration.gen'; +import * as i18n from './translations'; +import type { TableColumn } from './constants'; + +export const createUpdatedColumn = (): TableColumn => { + return { + field: 'updated_at', + name: i18n.COLUMN_UPDATED, + render: (value: RuleMigration['updated_at']) => ( + + ), + sortable: true, + truncateText: false, + align: 'center', + width: '10%', + }; +}; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/status_badge/index.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/status_badge/index.tsx index 40b3c5ceb5719..60f0ed94862ca 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/status_badge/index.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/status_badge/index.tsx @@ -19,31 +19,27 @@ const statusToColorMap: Record = { untranslatable: euiColorVis9, }; -interface Props { +interface StatusBadgeProps { value?: RuleMigrationTranslationResult; installedRuleId?: string; 'data-test-subj'?: string; } -const StatusBadgeComponent: React.FC = ({ - value, - installedRuleId, - 'data-test-subj': dataTestSubj = 'translation-result', -}) => { - const translationResult = installedRuleId || !value ? 'full' : value; - const displayValue = convertTranslationResultIntoText(translationResult); - const color = statusToColorMap[translationResult]; +export const StatusBadge: React.FC = React.memo( + ({ value, installedRuleId, 'data-test-subj': dataTestSubj = 'translation-result' }) => { + const translationResult = installedRuleId ? 'full' : value ?? 'untranslatable'; + const displayValue = convertTranslationResultIntoText(translationResult); + const color = statusToColorMap[translationResult]; - return ( - - {displayValue} - - ); -}; - -export const StatusBadge = React.memo(StatusBadgeComponent); + return ( + + {displayValue} + + ); + } +); StatusBadge.displayName = 'StatusBadge'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/index.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/index.tsx deleted file mode 100644 index b6dce09c311e1..0000000000000 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/index.tsx +++ /dev/null @@ -1,246 +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 { FC, PropsWithChildren } from 'react'; -import React, { useMemo, useState, useEffect } from 'react'; -import styled from 'styled-components'; -import { css } from '@emotion/css'; -import { euiThemeVars } from '@kbn/ui-theme'; -import { - EuiButtonEmpty, - EuiTitle, - EuiFlyout, - EuiFlyoutHeader, - EuiFlyoutBody, - EuiFlyoutFooter, - EuiTabbedContent, - EuiSpacer, - EuiFlexGroup, - EuiFlexItem, - useGeneratedHtmlId, -} from '@elastic/eui'; -import type { EuiTabbedContentTab, EuiTabbedContentProps, EuiFlyoutProps } from '@elastic/eui'; - -import { - DEFAULT_TRANSLATION_RISK_SCORE, - DEFAULT_TRANSLATION_SEVERITY, -} from '../../../../../common/siem_migrations/constants'; -import type { RuleMigration } from '../../../../../common/siem_migrations/model/rule_migration.gen'; -import { - RuleOverviewTab, - useOverviewTabSections, -} from '../../../../detection_engine/rule_management/components/rule_details/rule_overview_tab'; -import { - type RuleResponse, - type Severity, -} from '../../../../../common/api/detection_engine/model/rule_schema'; - -import * as i18n from './translations'; -import { - DEFAULT_DESCRIPTION_LIST_COLUMN_WIDTHS, - LARGE_DESCRIPTION_LIST_COLUMN_WIDTHS, -} from './constants'; -import { TranslationTab } from './translation_tab'; - -const StyledEuiFlyoutBody = styled(EuiFlyoutBody)` - .euiFlyoutBody__overflow { - display: flex; - flex: 1; - overflow: hidden; - - .euiFlyoutBody__overflowContent { - flex: 1; - overflow: hidden; - padding: ${({ theme }) => `0 ${theme.eui.euiSizeL} 0`}; - } - } -`; - -const StyledFlexGroup = styled(EuiFlexGroup)` - height: 100%; -`; - -const StyledEuiFlexItem = styled(EuiFlexItem)` - &.euiFlexItem { - flex: 1 0 0; - overflow: hidden; - } -`; - -const StyledEuiTabbedContent = styled(EuiTabbedContent)` - display: flex; - flex: 1; - flex-direction: column; - overflow: hidden; - - > [role='tabpanel'] { - display: flex; - flex: 1; - flex-direction: column; - overflow: hidden; - overflow-y: auto; - - ::-webkit-scrollbar { - -webkit-appearance: none; - width: 7px; - } - - ::-webkit-scrollbar-thumb { - border-radius: 4px; - background-color: rgba(0, 0, 0, 0.5); - -webkit-box-shadow: 0 0 1px rgba(255, 255, 255, 0.5); - } - } -`; - -/* - * Fixes tabs to the top and allows the content to scroll. - */ -const ScrollableFlyoutTabbedContent = (props: EuiTabbedContentProps) => ( - - - - - -); - -const tabPaddingClassName = css` - padding: 0 ${euiThemeVars.euiSizeM} ${euiThemeVars.euiSizeXL} ${euiThemeVars.euiSizeM}; -`; - -export const TabContentPadding: FC> = ({ children }) => ( -
      {children}
      -); - -interface TranslationDetailsFlyoutProps { - ruleActions?: React.ReactNode; - ruleMigration: RuleMigration; - size?: EuiFlyoutProps['size']; - extraTabs?: EuiTabbedContentTab[]; - closeFlyout: () => void; -} - -export const TranslationDetailsFlyout = ({ - ruleActions, - ruleMigration, - size = 'm', - extraTabs = [], - closeFlyout, -}: TranslationDetailsFlyoutProps) => { - const { expandedOverviewSections, toggleOverviewSection } = useOverviewTabSections(); - - const rule: RuleResponse = useMemo(() => { - const esqlLanguage = ruleMigration.elastic_rule?.query_language ?? 'esql'; - return { - type: esqlLanguage, - language: esqlLanguage, - name: ruleMigration.elastic_rule?.title, - description: ruleMigration.elastic_rule?.description, - query: ruleMigration.elastic_rule?.query, - - // Default values - severity: (ruleMigration.elastic_rule?.severity as Severity) ?? DEFAULT_TRANSLATION_SEVERITY, - risk_score: DEFAULT_TRANSLATION_RISK_SCORE, - from: 'now-360s', - to: 'now', - interval: '5m', - } as RuleResponse; // TODO: we need to adjust RuleOverviewTab to allow partial RuleResponse as a parameter - }, [ruleMigration]); - - const translationTab: EuiTabbedContentTab = useMemo( - () => ({ - id: 'translation', - name: i18n.TRANSLATION_TAB_LABEL, - content: ( - - - - ), - }), - [ruleMigration] - ); - - const overviewTab: EuiTabbedContentTab = useMemo( - () => ({ - id: 'overview', - name: i18n.OVERVIEW_TAB_LABEL, - content: ( - - - - ), - }), - [rule, size, expandedOverviewSections, toggleOverviewSection] - ); - - const tabs = useMemo(() => { - return [...extraTabs, translationTab, overviewTab]; - }, [extraTabs, translationTab, overviewTab]); - - const [selectedTabId, setSelectedTabId] = useState(tabs[0].id); - const selectedTab = tabs.find((tab) => tab.id === selectedTabId) ?? tabs[0]; - - useEffect(() => { - if (!tabs.find((tab) => tab.id === selectedTabId)) { - // Switch to first tab if currently selected tab is not available for this rule - setSelectedTabId(tabs[0].id); - } - }, [tabs, selectedTabId]); - - const onTabClick = (tab: EuiTabbedContentTab) => { - setSelectedTabId(tab.id); - }; - - const migrationsRulesFlyoutTitleId = useGeneratedHtmlId({ - prefix: 'migrationRulesFlyoutTitle', - }); - - return ( - - - -

      {rule.name}

      -
      - -
      - - - - - - - - {i18n.DISMISS_BUTTON_LABEL} - - - {ruleActions} - - -
      - ); -}; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/translation_tab/rule_query.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/translation_tab/rule_query.tsx deleted file mode 100644 index 50977cafb18d0..0000000000000 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/translation_tab/rule_query.tsx +++ /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; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React, { useMemo } from 'react'; -import { EuiMarkdownEditor, EuiMarkdownFormat, EuiTitle } from '@elastic/eui'; -import { SideHeader } from '../../../../../detection_engine/rule_management/components/rule_details/three_way_diff/components/side_header'; -import { FinalSideHelpInfo } from '../../../../../detection_engine/rule_management/components/rule_details/three_way_diff/final_side/final_side_help_info'; -import * as i18n from './translations'; - -interface RuleQueryProps { - title: string; - query: string; - canEdit?: boolean; -} - -export const RuleQueryComponent = ({ title, query, canEdit }: RuleQueryProps) => { - const queryTextComponent = useMemo(() => { - if (canEdit) { - return ( - {}} - height={400} - initialViewMode={'viewing'} - /> - ); - } else { - return {query}; - } - }, [canEdit, query]); - return ( - <> - - -

      - {title} - -

      -
      -
      - {queryTextComponent} - - ); -}; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/unknown_migration/index.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/unknown_migration/index.tsx index 0a33869eff418..dd48d3b357e18 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/unknown_migration/index.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/unknown_migration/index.tsx @@ -9,7 +9,7 @@ import React from 'react'; import { EuiEmptyPrompt, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import * as i18n from './translations'; -const UnknownMigrationComponent = () => { +export const UnknownMigration: React.FC = React.memo(() => { return ( { title={

      {i18n.UNKNOWN_MIGRATION}

      } titleSize="s" body={i18n.UNKNOWN_MIGRATION_BODY} - data-test-subj="noMigrationsAvailable" + data-test-subj="unknownMigration" />
      ); -}; - -export const UnknownMigration = React.memo(UnknownMigrationComponent); +}); UnknownMigration.displayName = 'UnknownMigration'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/hooks/use_filter_rules_to_install.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/hooks/use_filter_rules_to_install.ts deleted file mode 100644 index f6862d3d90380..0000000000000 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/hooks/use_filter_rules_to_install.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { useMemo } from 'react'; -import type { RuleMigration } from '../../../../common/siem_migrations/model/rule_migration.gen'; -import type { FilterOptions } from '../../../detection_engine/rule_management/logic/types'; - -export type TableFilterOptions = Pick; - -export const useFilterRulesToInstall = ({ - ruleMigrations, - filterOptions, -}: { - ruleMigrations: RuleMigration[]; - filterOptions: TableFilterOptions; -}) => { - const filteredRules = useMemo(() => { - const { filter } = filterOptions; - return ruleMigrations.filter((migration) => { - const name = migration.elastic_rule?.title ?? migration.original_rule.title; - if (filter && !name.toLowerCase().includes(filter.toLowerCase())) { - return false; - } - return true; - }); - }, [filterOptions, ruleMigrations]); - - return filteredRules; -}; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/hooks/use_rule_preview_flyout.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/hooks/use_migration_rule_preview_flyout.tsx similarity index 55% rename from x-pack/plugins/security_solution/public/siem_migrations/rules/hooks/use_rule_preview_flyout.tsx rename to x-pack/plugins/security_solution/public/siem_migrations/rules/hooks/use_migration_rule_preview_flyout.tsx index 1721b4e280aad..4823e48de97c6 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/hooks/use_rule_preview_flyout.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/hooks/use_migration_rule_preview_flyout.tsx @@ -9,28 +9,28 @@ import type { ReactNode } from 'react'; import React, { useCallback, useState, useMemo } from 'react'; import type { EuiTabbedContentTab } from '@elastic/eui'; import type { RuleMigration } from '../../../../common/siem_migrations/model/rule_migration.gen'; -import { TranslationDetailsFlyout } from '../components/translation_details_flyout'; +import { MigrationRuleDetailsFlyout } from '../components/rule_details_flyout'; -interface UseRulePreviewFlyoutParams { +interface UseMigrationRuleDetailsFlyoutParams { ruleActionsFactory: (ruleMigration: RuleMigration, closeRulePreview: () => void) => ReactNode; extraTabsFactory?: (ruleMigration: RuleMigration) => EuiTabbedContentTab[]; } -interface UseRulePreviewFlyoutResult { - rulePreviewFlyout: ReactNode; - openRulePreview: (rule: RuleMigration) => void; - closeRulePreview: () => void; +interface UseMigrationRuleDetailsFlyoutResult { + migrationRuleDetailsFlyout: ReactNode; + openMigrationRuleDetails: (rule: RuleMigration) => void; + closeMigrationRuleDetails: () => void; } -export function useRulePreviewFlyout({ +export function useMigrationRuleDetailsFlyout({ extraTabsFactory, ruleActionsFactory, -}: UseRulePreviewFlyoutParams): UseRulePreviewFlyoutResult { - const [ruleMigration, setRuleMigrationForPreview] = useState(); - const closeRulePreview = useCallback(() => setRuleMigrationForPreview(undefined), []); +}: UseMigrationRuleDetailsFlyoutParams): UseMigrationRuleDetailsFlyoutResult { + const [ruleMigration, setMigrationRuleForPreview] = useState(); + const closeMigrationRuleDetails = useCallback(() => setMigrationRuleForPreview(undefined), []); const ruleActions = useMemo( - () => ruleMigration && ruleActionsFactory(ruleMigration, closeRulePreview), - [ruleMigration, ruleActionsFactory, closeRulePreview] + () => ruleMigration && ruleActionsFactory(ruleMigration, closeMigrationRuleDetails), + [ruleMigration, ruleActionsFactory, closeMigrationRuleDetails] ); const extraTabs = useMemo( () => (ruleMigration && extraTabsFactory ? extraTabsFactory(ruleMigration) : []), @@ -38,18 +38,18 @@ export function useRulePreviewFlyout({ ); return { - rulePreviewFlyout: ruleMigration && ( - ), - openRulePreview: useCallback((rule: RuleMigration) => { - setRuleMigrationForPreview(rule); + openMigrationRuleDetails: useCallback((rule: RuleMigration) => { + setMigrationRuleForPreview(rule); }, []), - closeRulePreview, + closeMigrationRuleDetails, }; } diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/hooks/use_rules_table_columns.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/hooks/use_migration_rules_table_columns.tsx similarity index 74% rename from x-pack/plugins/security_solution/public/siem_migrations/rules/hooks/use_rules_table_columns.tsx rename to x-pack/plugins/security_solution/public/siem_migrations/rules/hooks/use_migration_rules_table_columns.tsx index b7e06b4ea938a..b8b37bccaffd3 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/hooks/use_rules_table_columns.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/hooks/use_migration_rules_table_columns.tsx @@ -14,29 +14,31 @@ import { createRiskScoreColumn, createSeverityColumn, createStatusColumn, + createUpdatedColumn, } from '../components/rules_table_columns'; -export const useRulesTableColumns = ({ +export const useMigrationRulesTableColumns = ({ disableActions, - openMigrationRulePreview, + openMigrationRuleDetails, installMigrationRule, }: { disableActions?: boolean; - openMigrationRulePreview: (rule: RuleMigration) => void; + openMigrationRuleDetails: (rule: RuleMigration) => void; installMigrationRule: (migrationRule: RuleMigration, enable?: boolean) => void; }): TableColumn[] => { return useMemo( () => [ - createNameColumn({ openMigrationRulePreview }), + createUpdatedColumn(), + createNameColumn({ openMigrationRuleDetails }), createStatusColumn(), createRiskScoreColumn(), createSeverityColumn(), createActionsColumn({ disableActions, - openMigrationRulePreview, + openMigrationRuleDetails, installMigrationRule, }), ], - [disableActions, installMigrationRule, openMigrationRulePreview] + [disableActions, installMigrationRule, openMigrationRuleDetails] ); }; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/api/hooks/constants.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/constants.ts similarity index 100% rename from x-pack/plugins/security_solution/public/siem_migrations/rules/api/hooks/constants.ts rename to x-pack/plugins/security_solution/public/siem_migrations/rules/logic/constants.ts diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/translations.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/translations.ts index 23f5a6e3849a0..3b13daa8f0682 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/translations.ts +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/translations.ts @@ -14,6 +14,13 @@ export const GET_MIGRATION_RULES_FAILURE = i18n.translate( } ); +export const GET_MIGRATION_TRANSLATION_STATS_FAILURE = i18n.translate( + 'xpack.securitySolution.siemMigrations.rules.getMigrationTranslationStatsFailDescription', + { + defaultMessage: 'Failed to fetch migration translation stats', + } +); + export const INSTALL_MIGRATION_RULES_FAILURE = i18n.translate( 'xpack.securitySolution.siemMigrations.rules.installMigrationRulesFailDescription', { diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_get_migration_rules.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_get_migration_rules.ts index 27637daf142ff..5f59ceb9f76c2 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_get_migration_rules.ts +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_get_migration_rules.ts @@ -5,16 +5,64 @@ * 2.0. */ +import { useQuery, useQueryClient } from '@tanstack/react-query'; +import { replaceParams } from '@kbn/openapi-common/shared'; +import { useCallback } from 'react'; +import { SIEM_RULE_MIGRATION_PATH } from '../../../../common/siem_migrations/constants'; import { useAppToasts } from '../../../common/hooks/use_app_toasts'; -import { useGetMigrationRulesQuery } from '../api/hooks/use_get_migration_rules_query'; import * as i18n from './translations'; +import { getRuleMigrations } from '../api'; +import { DEFAULT_QUERY_OPTIONS } from './constants'; -export const useGetMigrationRules = (migrationId: string) => { +export const useGetMigrationRules = (params: { + migrationId: string; + page?: number; + perPage?: number; + searchTerm?: string; +}) => { const { addError } = useAppToasts(); - return useGetMigrationRulesQuery(migrationId, { - onError: (error) => { - addError(error, { title: i18n.GET_MIGRATION_RULES_FAILURE }); + const { migrationId } = params; + const SPECIFIC_MIGRATION_PATH = replaceParams(SIEM_RULE_MIGRATION_PATH, { + migration_id: migrationId, + }); + + return useQuery( + ['GET', SPECIFIC_MIGRATION_PATH, params], + async ({ signal }) => { + const response = await getRuleMigrations({ signal, ...params }); + + return { ruleMigrations: response.data, total: response.total }; }, + { + ...DEFAULT_QUERY_OPTIONS, + onError: (error) => { + addError(error, { title: i18n.GET_MIGRATION_RULES_FAILURE }); + }, + } + ); +}; + +/** + * We should use this hook to invalidate the rule migrations cache. For + * example, rule migrations mutations, like installing a rule, should lead to cache invalidation. + * + * @returns A rule migrations cache invalidation callback + */ +export const useInvalidateGetMigrationRules = (migrationId: string) => { + const queryClient = useQueryClient(); + + const SPECIFIC_MIGRATION_PATH = replaceParams(SIEM_RULE_MIGRATION_PATH, { + migration_id: migrationId, }); + + return useCallback(() => { + /** + * Invalidate all queries that start with SPECIFIC_MIGRATION_PATH. This + * includes the in-memory query cache and paged query cache. + */ + queryClient.invalidateQueries(['GET', SPECIFIC_MIGRATION_PATH], { + refetchType: 'active', + }); + }, [SPECIFIC_MIGRATION_PATH, queryClient]); }; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_get_migration_translation_stats.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_get_migration_translation_stats.ts new file mode 100644 index 0000000000000..b19a1133e3061 --- /dev/null +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_get_migration_translation_stats.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 { replaceParams } from '@kbn/openapi-common/shared'; +import { useQuery, useQueryClient } from '@tanstack/react-query'; +import { useCallback } from 'react'; +import type { GetRuleMigrationTranslationStatsResponse } from '../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; +import { SIEM_RULE_MIGRATION_TRANSLATION_STATS_PATH } from '../../../../common/siem_migrations/constants'; +import { useAppToasts } from '../../../common/hooks/use_app_toasts'; +import * as i18n from './translations'; +import { getRuleMigrationTranslationStats } from '../api'; +import { DEFAULT_QUERY_OPTIONS } from './constants'; + +export const useGetMigrationTranslationStats = (migrationId: string) => { + const { addError } = useAppToasts(); + + const SPECIFIC_MIGRATION_TRANSLATION_PATH = replaceParams( + SIEM_RULE_MIGRATION_TRANSLATION_STATS_PATH, + { + migration_id: migrationId, + } + ); + return useQuery( + ['GET', SPECIFIC_MIGRATION_TRANSLATION_PATH], + async ({ signal }) => { + return getRuleMigrationTranslationStats({ migrationId, signal }); + }, + { + ...DEFAULT_QUERY_OPTIONS, + onError: (error) => { + addError(error, { title: i18n.GET_MIGRATION_TRANSLATION_STATS_FAILURE }); + }, + } + ); +}; + +/** + * We should use this hook to invalidate the translation stats cache. For + * example, rule migrations mutations, like installing a rule, should lead to cache invalidation. + * + * @returns A translation stats cache invalidation callback + */ +export const useInvalidateGetMigrationTranslationStats = (migrationId: string) => { + const queryClient = useQueryClient(); + + const SPECIFIC_MIGRATION_TRANSLATION_PATH = replaceParams( + SIEM_RULE_MIGRATION_TRANSLATION_STATS_PATH, + { + migration_id: migrationId, + } + ); + + return useCallback(() => { + queryClient.invalidateQueries(['GET', SPECIFIC_MIGRATION_TRANSLATION_PATH], { + refetchType: 'active', + }); + }, [SPECIFIC_MIGRATION_TRANSLATION_PATH, queryClient]); +}; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_install_all_migration_rules.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_install_all_migration_rules.ts deleted file mode 100644 index 105ea651d0a8c..0000000000000 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_install_all_migration_rules.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; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { useAppToasts } from '../../../common/hooks/use_app_toasts'; -import { useInstallAllMigrationRulesMutation } from '../api/hooks/use_install_all_migration_rules_mutation'; -import * as i18n from './translations'; - -export const useInstallAllMigrationRules = (migrationId: string) => { - const { addError } = useAppToasts(); - - return useInstallAllMigrationRulesMutation(migrationId, { - onError: (error) => { - addError(error, { title: i18n.INSTALL_MIGRATION_RULES_FAILURE }); - }, - }); -}; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_install_migration_rules.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_install_migration_rules.ts index dcc19f290f87f..755faa03bff14 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_install_migration_rules.ts +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_install_migration_rules.ts @@ -5,16 +5,35 @@ * 2.0. */ +import { useMutation } from '@tanstack/react-query'; +import { SIEM_RULE_MIGRATION_INSTALL_PATH } from '../../../../common/siem_migrations/constants'; +import type { InstallMigrationRulesResponse } from '../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; import { useAppToasts } from '../../../common/hooks/use_app_toasts'; -import { useInstallMigrationRulesMutation } from '../api/hooks/use_install_migration_rules_mutation'; import * as i18n from './translations'; +import { useInvalidateGetMigrationRules } from './use_get_migration_rules'; +import { useInvalidateGetMigrationTranslationStats } from './use_get_migration_translation_stats'; +import { installMigrationRules } from '../api'; + +export const INSTALL_MIGRATION_RULES_MUTATION_KEY = ['POST', SIEM_RULE_MIGRATION_INSTALL_PATH]; export const useInstallMigrationRules = (migrationId: string) => { const { addError } = useAppToasts(); - return useInstallMigrationRulesMutation(migrationId, { - onError: (error) => { - addError(error, { title: i18n.INSTALL_MIGRATION_RULES_FAILURE }); - }, - }); + const invalidateGetRuleMigrations = useInvalidateGetMigrationRules(migrationId); + const invalidateGetMigrationTranslationStats = + useInvalidateGetMigrationTranslationStats(migrationId); + + return useMutation( + (ids: string[]) => installMigrationRules({ migrationId, ids }), + { + mutationKey: INSTALL_MIGRATION_RULES_MUTATION_KEY, + onError: (error) => { + addError(error, { title: i18n.INSTALL_MIGRATION_RULES_FAILURE }); + }, + onSettled: () => { + invalidateGetRuleMigrations(); + invalidateGetMigrationTranslationStats(); + }, + } + ); }; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_install_translated_migration_rules.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_install_translated_migration_rules.ts new file mode 100644 index 0000000000000..b0d9e11136396 --- /dev/null +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_install_translated_migration_rules.ts @@ -0,0 +1,42 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useMutation } from '@tanstack/react-query'; +import type { InstallTranslatedMigrationRulesResponse } from '../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; +import { SIEM_RULE_MIGRATION_INSTALL_TRANSLATED_PATH } from '../../../../common/siem_migrations/constants'; +import { useAppToasts } from '../../../common/hooks/use_app_toasts'; +import * as i18n from './translations'; +import { useInvalidateGetMigrationRules } from './use_get_migration_rules'; +import { useInvalidateGetMigrationTranslationStats } from './use_get_migration_translation_stats'; +import { installTranslatedMigrationRules } from '../api'; + +export const INSTALL_ALL_MIGRATION_RULES_MUTATION_KEY = [ + 'POST', + SIEM_RULE_MIGRATION_INSTALL_TRANSLATED_PATH, +]; + +export const useInstallTranslatedMigrationRules = (migrationId: string) => { + const { addError } = useAppToasts(); + + const invalidateGetRuleMigrations = useInvalidateGetMigrationRules(migrationId); + const invalidateGetMigrationTranslationStats = + useInvalidateGetMigrationTranslationStats(migrationId); + + return useMutation( + () => installTranslatedMigrationRules({ migrationId }), + { + mutationKey: INSTALL_ALL_MIGRATION_RULES_MUTATION_KEY, + onError: (error) => { + addError(error, { title: i18n.INSTALL_MIGRATION_RULES_FAILURE }); + }, + onSettled: () => { + invalidateGetRuleMigrations(); + invalidateGetMigrationTranslationStats(); + }, + } + ); +}; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/pages/index.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/pages/index.tsx index dabdb83cccbab..018aa5d77559e 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/pages/index.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/pages/index.tsx @@ -9,22 +9,23 @@ import React, { useEffect, useMemo } from 'react'; import { EuiSkeletonLoading, EuiSkeletonText, EuiSkeletonTitle } from '@elastic/eui'; import type { RouteComponentProps } from 'react-router-dom'; +import { SiemMigrationTaskStatus } from '../../../../common/siem_migrations/constants'; import { useNavigation } from '../../../common/lib/kibana'; import { HeaderPage } from '../../../common/components/header_page'; import { SecuritySolutionPageWrapper } from '../../../common/components/page_wrapper'; import { SecurityPageName } from '../../../app/types'; import * as i18n from './translations'; -import { RulesTable } from '../components/rules_table'; +import { MigrationRulesTable } from '../components/rules_table'; import { NeedAdminForUpdateRulesCallOut } from '../../../detections/components/callouts/need_admin_for_update_callout'; import { MissingPrivilegesCallOut } from '../../../detections/components/callouts/missing_privileges_callout'; import { HeaderButtons } from '../components/header_buttons'; import { UnknownMigration } from '../components/unknown_migration'; import { useLatestStats } from '../hooks/use_latest_stats'; -type RulesMigrationPageProps = RouteComponentProps<{ migrationId?: string }>; +type MigrationRulesPageProps = RouteComponentProps<{ migrationId?: string }>; -export const RulesPage: React.FC = React.memo( +export const MigrationRulesPage: React.FC = React.memo( ({ match: { params: { migrationId }, @@ -34,13 +35,13 @@ export const RulesPage: React.FC = React.memo( const { data: ruleMigrationsStatsAll, isLoading: isLoadingMigrationsStats } = useLatestStats(); - const migrationsIds = useMemo(() => { + const finishedRuleMigrationsStats = useMemo(() => { if (isLoadingMigrationsStats || !ruleMigrationsStatsAll?.length) { return []; } - return ruleMigrationsStatsAll - .filter((migration) => migration.status === 'finished') - .map((migration) => migration.id); + return ruleMigrationsStatsAll.filter( + (migration) => migration.status === SiemMigrationTaskStatus.FINISHED + ); }, [isLoadingMigrationsStats, ruleMigrationsStatsAll]); useEffect(() => { @@ -49,27 +50,30 @@ export const RulesPage: React.FC = React.memo( } // Navigate to landing page if there are no migrations - if (!migrationsIds.length) { + if (!finishedRuleMigrationsStats.length) { navigateTo({ deepLinkId: SecurityPageName.landing, path: 'siem_migrations' }); return; } // Navigate to the most recent migration if none is selected if (!migrationId) { - navigateTo({ deepLinkId: SecurityPageName.siemMigrationsRules, path: migrationsIds[0] }); + navigateTo({ + deepLinkId: SecurityPageName.siemMigrationsRules, + path: finishedRuleMigrationsStats[0].id, + }); } - }, [isLoadingMigrationsStats, migrationId, migrationsIds, navigateTo]); + }, [isLoadingMigrationsStats, migrationId, finishedRuleMigrationsStats, navigateTo]); const onMigrationIdChange = (selectedId?: string) => { navigateTo({ deepLinkId: SecurityPageName.siemMigrationsRules, path: selectedId }); }; const content = useMemo(() => { - if (!migrationId || !migrationsIds.includes(migrationId)) { + if (!migrationId || !finishedRuleMigrationsStats.some((stats) => stats.id === migrationId)) { return ; } - return ; - }, [migrationId, migrationsIds]); + return ; + }, [migrationId, finishedRuleMigrationsStats]); return ( <> @@ -79,7 +83,7 @@ export const RulesPage: React.FC = React.memo( @@ -99,4 +103,4 @@ export const RulesPage: React.FC = React.memo( ); } ); -RulesPage.displayName = 'RulesPage'; +MigrationRulesPage.displayName = 'MigrationRulesPage'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/service/rule_migrations_service.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/service/rule_migrations_service.ts index a872d79a46027..3162cc3d58e63 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/service/rule_migrations_service.ts +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/service/rule_migrations_service.ts @@ -12,7 +12,7 @@ import { SiemMigrationTaskStatus } from '../../../../common/siem_migrations/cons import type { StartPluginsDependencies } from '../../../types'; import { ExperimentalFeaturesService } from '../../../common/experimental_features_service'; import { licenseService } from '../../../common/hooks/use_license'; -import { getRuleMigrationsStatsAll, startRuleMigration } from '../api/api'; +import { getRuleMigrationsStatsAll, startRuleMigration } from '../api'; import type { RuleMigrationTask } from '../types'; import { getSuccessToast } from './success_notification'; import { RuleMigrationsStorage } from './storage'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/types.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/types.ts index b395fa0199de8..4c704e97179c0 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/types.ts +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/types.ts @@ -11,14 +11,3 @@ export interface RuleMigrationTask extends RuleMigrationTaskStats { /** The sequential number of the migration */ number: number; } - -export interface InstallRulesProps { - migrationId: string; - ids: string[]; - signal?: AbortSignal; -} - -export interface InstallTranslatedRulesProps { - migrationId: string; - signal?: AbortSignal; -} diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/utils/helpers.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/utils/helpers.tsx index cd49311db21eb..fe3fbf9945077 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/utils/helpers.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/utils/helpers.tsx @@ -11,6 +11,22 @@ import { } from '../../../../common/siem_migrations/model/rule_migration.gen'; import * as i18n from './translations'; +export const convertTranslationResultIntoColor = (status?: RuleMigrationTranslationResult) => { + switch (status) { + case RuleMigrationTranslationResultEnum.full: + return 'primary'; + + case RuleMigrationTranslationResultEnum.partial: + return 'warning'; + + case RuleMigrationTranslationResultEnum.untranslatable: + return 'danger'; + + default: + throw new Error(i18n.SIEM_TRANSLATION_RESULT_UNKNOWN_ERROR(status)); + } +}; + export const convertTranslationResultIntoText = (status?: RuleMigrationTranslationResult) => { switch (status) { case RuleMigrationTranslationResultEnum.full: @@ -23,6 +39,6 @@ export const convertTranslationResultIntoText = (status?: RuleMigrationTranslati return i18n.SIEM_TRANSLATION_RESULT_UNTRANSLATABLE_LABEL; default: - return i18n.SIEM_TRANSLATION_RESULT_UNKNOWN_LABEL; + throw new Error(i18n.SIEM_TRANSLATION_RESULT_UNKNOWN_ERROR(status)); } }; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/utils/translations.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/utils/translations.ts index bc098936c00f7..366ad435c61b4 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/utils/translations.ts +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/utils/translations.ts @@ -34,3 +34,13 @@ export const SIEM_TRANSLATION_RESULT_UNKNOWN_LABEL = i18n.translate( defaultMessage: 'Unknown', } ); + +export const SIEM_TRANSLATION_RESULT_UNKNOWN_ERROR = (status?: string) => { + return i18n.translate( + 'xpack.securitySolution.siemMigrations.rules.translationResult.unknownError', + { + defaultMessage: 'Unknown translation result status: ({status})', + values: { status }, + } + ); +}; diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/helpers.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/helpers.tsx index 43c4648abb83a..a5570d2750f5f 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/helpers.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/helpers.tsx @@ -184,7 +184,7 @@ export const focusUtilityBarAction = (containerElement: HTMLElement | null) => { * Resets keyboard focus on the page */ export const resetKeyboardFocus = () => { - document.querySelector('header.headerGlobalNav a.chrHeaderLogo')?.focus(); + document.body.focus(); }; interface OperatorHandler { diff --git a/x-pack/plugins/security_solution/server/assistant/tools/defend_insights/index.ts b/x-pack/plugins/security_solution/server/assistant/tools/defend_insights/index.ts index 1ea26b88a15cf..49524a9f15190 100644 --- a/x-pack/plugins/security_solution/server/assistant/tools/defend_insights/index.ts +++ b/x-pack/plugins/security_solution/server/assistant/tools/defend_insights/index.ts @@ -11,21 +11,29 @@ import { LLMChain } from 'langchain/chains'; import { OutputFixingParser } from 'langchain/output_parsers'; import type { AssistantTool, AssistantToolParams } from '@kbn/elastic-assistant-plugin/server'; -import type { DefendInsightType } from '@kbn/elastic-assistant-common'; +import type { + DefendInsight, + DefendInsightType, + DefendInsightsPostRequestBody, +} from '@kbn/elastic-assistant-common'; +import type { KibanaRequest } from '@kbn/core/server'; import { requestHasRequiredAnonymizationParams } from '@kbn/elastic-assistant-plugin/server/lib/langchain/helpers'; import { DEFEND_INSIGHTS_TOOL_ID } from '@kbn/elastic-assistant-common'; import { APP_UI_ID } from '../../../../common'; +import { securityWorkflowInsightsService } from '../../../endpoint/services'; import { getAnonymizedEvents } from './get_events'; import { getDefendInsightsOutputParser } from './output_parsers'; import { getDefendInsightsPrompt } from './prompts'; +import { buildWorkflowInsights } from './workflow_insights_builders'; export const DEFEND_INSIGHTS_TOOL_DESCRIPTION = 'Call this for Elastic Defend insights.'; export interface DefendInsightsToolParams extends AssistantToolParams { endpointIds: string[]; insightType: DefendInsightType; + request: KibanaRequest; } /** @@ -55,6 +63,7 @@ export const DEFEND_INSIGHTS_TOOL: AssistantTool = Object.freeze({ llm, onNewReplacements, replacements, + request, } = params as DefendInsightsToolParams; return new DynamicTool({ @@ -104,7 +113,13 @@ export const DEFEND_INSIGHTS_TOOL: AssistantTool = Object.freeze({ }), timeout: langChainTimeout, }); - const insights = result.records; + const insights: DefendInsight[] = result.records; + + const workflowInsights = buildWorkflowInsights({ + defendInsights: insights, + request, + }); + workflowInsights.map(securityWorkflowInsightsService.create); return JSON.stringify({ eventsContextCount, insights }, null, 2); }, diff --git a/x-pack/plugins/security_solution/server/assistant/tools/defend_insights/workflow_insights_builders/incompatible_antivirus.ts b/x-pack/plugins/security_solution/server/assistant/tools/defend_insights/workflow_insights_builders/incompatible_antivirus.ts new file mode 100644 index 0000000000000..c9d091f76dbc3 --- /dev/null +++ b/x-pack/plugins/security_solution/server/assistant/tools/defend_insights/workflow_insights_builders/incompatible_antivirus.ts @@ -0,0 +1,86 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import moment from 'moment'; + +import { ENDPOINT_ARTIFACT_LISTS } from '@kbn/securitysolution-list-constants'; + +import type { DefendInsight } from '@kbn/elastic-assistant-common'; +import type { BuildWorkflowInsightParams } from '.'; +import type { SecurityWorkflowInsight } from '../../../../../common/endpoint/types/workflow_insights'; + +import { + ActionType, + Category, + SourceType, + TargetType, +} from '../../../../../common/endpoint/types/workflow_insights'; +import { SUPPORTED_HOST_OS_TYPE } from '../../../../../common/endpoint/constants'; + +export function buildIncompatibleAntivirusWorkflowInsights( + params: BuildWorkflowInsightParams +): SecurityWorkflowInsight[] { + const currentTime = moment(); + const { defendInsights, request } = params; + const { insightType, endpointIds, apiConfig } = request.body; + return defendInsights.map((defendInsight: DefendInsight) => { + const filePaths = (defendInsight.events ?? []).map((event) => event.value); + return { + '@timestamp': currentTime, + // TODO add i18n support + message: 'Incompatible antiviruses detected', + category: Category.Endpoint, + type: insightType, + source: { + type: SourceType.LlmConnector, + id: apiConfig.connectorId, + // TODO use actual time range when we add support + data_range_start: currentTime, + data_range_end: currentTime.clone().add(24, 'hours'), + }, + target: { + type: TargetType.Endpoint, + ids: endpointIds, + }, + action: { + type: ActionType.Refreshed, + timestamp: currentTime, + }, + value: defendInsight.group, + remediation: { + exception_list_items: [ + { + list_id: ENDPOINT_ARTIFACT_LISTS.blocklists.id, + name: defendInsight.group, + description: 'Suggested by Security Workflow Insights', + entries: [ + { + field: 'file.path.caseless', + operator: 'included', + type: 'match_any', + value: filePaths, + }, + ], + // TODO add per policy support + tags: ['policy:all'], + os_types: [ + // TODO pick this based on endpointIds + SUPPORTED_HOST_OS_TYPE[0], + SUPPORTED_HOST_OS_TYPE[1], + SUPPORTED_HOST_OS_TYPE[2], + ], + }, + ], + }, + metadata: { + notes: { + llm_model: apiConfig.model ?? '', + }, + }, + }; + }); +} diff --git a/x-pack/plugins/security_solution/server/assistant/tools/defend_insights/workflow_insights_builders/index.ts b/x-pack/plugins/security_solution/server/assistant/tools/defend_insights/workflow_insights_builders/index.ts new file mode 100644 index 0000000000000..4694617229f04 --- /dev/null +++ b/x-pack/plugins/security_solution/server/assistant/tools/defend_insights/workflow_insights_builders/index.ts @@ -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 type { KibanaRequest } from '@kbn/core/server'; + +import type { DefendInsight, DefendInsightsPostRequestBody } from '@kbn/elastic-assistant-common'; +import { DefendInsightType } from '@kbn/elastic-assistant-common'; +import type { SecurityWorkflowInsight } from '../../../../../common/endpoint/types/workflow_insights'; + +import { InvalidDefendInsightTypeError } from '../errors'; +import { buildIncompatibleAntivirusWorkflowInsights } from './incompatible_antivirus'; + +export interface BuildWorkflowInsightParams { + defendInsights: DefendInsight[]; + request: KibanaRequest; +} + +export function buildWorkflowInsights( + params: BuildWorkflowInsightParams +): SecurityWorkflowInsight[] { + if (params.request.body.insightType === DefendInsightType.Enum.incompatible_antivirus) { + return buildIncompatibleAntivirusWorkflowInsights(params); + } + + throw new InvalidDefendInsightTypeError(); +} diff --git a/x-pack/plugins/security_solution/server/assistant/tools/index.ts b/x-pack/plugins/security_solution/server/assistant/tools/index.ts index f7824e688afe2..dc32e01335b30 100644 --- a/x-pack/plugins/security_solution/server/assistant/tools/index.ts +++ b/x-pack/plugins/security_solution/server/assistant/tools/index.ts @@ -5,8 +5,7 @@ * 2.0. */ -import type { AssistantTool } from '@kbn/elastic-assistant-plugin/server'; - +import { PRODUCT_DOCUMENTATION_TOOL } from './product_docs/product_documentation_tool'; import { NL_TO_ESQL_TOOL } from './esql/nl_to_esql_tool'; import { ALERT_COUNTS_TOOL } from './alert_counts/alert_counts_tool'; import { OPEN_AND_ACKNOWLEDGED_ALERTS_TOOL } from './open_and_acknowledged_alerts/open_and_acknowledged_alerts_tool'; @@ -15,12 +14,13 @@ import { KNOWLEDGE_BASE_RETRIEVAL_TOOL } from './knowledge_base/knowledge_base_r import { KNOWLEDGE_BASE_WRITE_TOOL } from './knowledge_base/knowledge_base_write_tool'; import { SECURITY_LABS_KNOWLEDGE_BASE_TOOL } from './security_labs/security_labs_tool'; -export const assistantTools: AssistantTool[] = [ +export const assistantTools = [ ALERT_COUNTS_TOOL, DEFEND_INSIGHTS_TOOL, - NL_TO_ESQL_TOOL, KNOWLEDGE_BASE_RETRIEVAL_TOOL, KNOWLEDGE_BASE_WRITE_TOOL, + NL_TO_ESQL_TOOL, OPEN_AND_ACKNOWLEDGED_ALERTS_TOOL, + PRODUCT_DOCUMENTATION_TOOL, SECURITY_LABS_KNOWLEDGE_BASE_TOOL, ]; diff --git a/x-pack/plugins/security_solution/server/assistant/tools/product_docs/product_documentation_tool.test.ts b/x-pack/plugins/security_solution/server/assistant/tools/product_docs/product_documentation_tool.test.ts new file mode 100644 index 0000000000000..d8d7e5995c92e --- /dev/null +++ b/x-pack/plugins/security_solution/server/assistant/tools/product_docs/product_documentation_tool.test.ts @@ -0,0 +1,93 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { RetrievalQAChain } from 'langchain/chains'; +import type { DynamicStructuredTool, DynamicTool } from '@langchain/core/tools'; +import type { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; +import type { KibanaRequest } from '@kbn/core-http-server'; +import type { ExecuteConnectorRequestBody } from '@kbn/elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.gen'; +import { loggerMock } from '@kbn/logging-mocks'; +import { PRODUCT_DOCUMENTATION_TOOL } from './product_documentation_tool'; +import type { LlmTasksPluginStart } from '@kbn/llm-tasks-plugin/server'; + +describe('ProductDocumentationTool', () => { + const chain = {} as RetrievalQAChain; + const esClient = { + search: jest.fn().mockResolvedValue({}), + } as unknown as ElasticsearchClient; + const request = {} as unknown as KibanaRequest; + const logger = loggerMock.create(); + const retrieveDocumentation = jest.fn(); + const llmTasks = { + retrieveDocumentation, + retrieveDocumentationAvailable: jest.fn(), + } as LlmTasksPluginStart; + const connectorId = 'fake-connector'; + const defaultArgs = { + chain, + esClient, + logger, + request, + llmTasks, + connectorId, + isEnabledKnowledgeBase: true, + }; + beforeEach(() => { + jest.clearAllMocks(); + }); + + describe('isSupported', () => { + it('returns true if connectorId and llmTasks have values', () => { + expect(PRODUCT_DOCUMENTATION_TOOL.isSupported(defaultArgs)).toBe(true); + }); + }); + + describe('getTool', () => { + it('should return a tool as expected when all required values are present', () => { + const tool = PRODUCT_DOCUMENTATION_TOOL.getTool(defaultArgs) as DynamicTool; + expect(tool.name).toEqual('ProductDocumentationTool'); + expect(tool.tags).toEqual(['product-documentation']); + }); + + it('returns null if llmTasks plugin is not provided', () => { + const tool = PRODUCT_DOCUMENTATION_TOOL.getTool({ + ...defaultArgs, + llmTasks: undefined, + }); + + expect(tool).toBeNull(); + }); + + it('returns null if connectorId is not provided', () => { + const tool = PRODUCT_DOCUMENTATION_TOOL.getTool({ + ...defaultArgs, + connectorId: undefined, + }); + + expect(tool).toBeNull(); + }); + }); + describe('DynamicStructuredTool', () => { + beforeEach(() => { + retrieveDocumentation.mockResolvedValue({ documents: [] }); + }); + it('the tool invokes retrieveDocumentation', async () => { + const tool = PRODUCT_DOCUMENTATION_TOOL.getTool(defaultArgs) as DynamicStructuredTool; + + await tool.func({ query: 'What is Kibana Security?', product: 'kibana' }); + + expect(retrieveDocumentation).toHaveBeenCalledWith({ + searchTerm: 'What is Kibana Security?', + products: ['kibana'], + max: 3, + connectorId: 'fake-connector', + request, + functionCalling: 'native', + }); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/server/assistant/tools/product_docs/product_documentation_tool.ts b/x-pack/plugins/security_solution/server/assistant/tools/product_docs/product_documentation_tool.ts new file mode 100644 index 0000000000000..071a435e1311f --- /dev/null +++ b/x-pack/plugins/security_solution/server/assistant/tools/product_docs/product_documentation_tool.ts @@ -0,0 +1,79 @@ +/* + * 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 { DynamicStructuredTool } from '@langchain/core/tools'; + +import { z } from '@kbn/zod'; +import type { AssistantTool, AssistantToolParams } from '@kbn/elastic-assistant-plugin/server'; +import { APP_UI_ID } from '../../../../common'; + +const toolDetails = { + description: + 'Use this tool to retrieve documentation about Elastic products. You can retrieve documentation about the Elastic stack, such as Kibana and Elasticsearch, or for Elastic solutions, such as Elastic Security, Elastic Observability or Elastic Enterprise Search.', + id: 'product-documentation-tool', + name: 'ProductDocumentationTool', +}; +export const PRODUCT_DOCUMENTATION_TOOL: AssistantTool = { + ...toolDetails, + sourceRegister: APP_UI_ID, + isSupported: (params: AssistantToolParams): params is AssistantToolParams => { + return params.llmTasks != null && params.connectorId != null; + }, + getTool(params: AssistantToolParams) { + if (!this.isSupported(params)) return null; + + const { connectorId, llmTasks, request } = params as AssistantToolParams; + + // This check is here in order to satisfy TypeScript + if (llmTasks == null || connectorId == null) return null; + + return new DynamicStructuredTool({ + name: toolDetails.name, + description: toolDetails.description, + schema: z.object({ + query: z.string().describe( + `The query to use to retrieve documentation + Examples: + - "How to enable TLS for Elasticsearch?" + - "What is Kibana Security?"` + ), + product: z + .enum(['kibana', 'elasticsearch', 'observability', 'security']) + .describe( + `If specified, will filter the products to retrieve documentation for + Possible options are: + - "kibana": Kibana product + - "elasticsearch": Elasticsearch product + - "observability": Elastic Observability solution + - "security": Elastic Security solution + If not specified, will search against all products + ` + ) + .optional(), + }), + func: async ({ query, product }) => { + const response = await llmTasks.retrieveDocumentation({ + searchTerm: query, + products: product ? [product] : undefined, + max: 3, + connectorId, + request, + // o11y specific parameter, hardcode to native as we do not utilize the other value (simulated) + functionCalling: 'native', + }); + + return { + content: { + documents: response.documents, + }, + }; + }, + tags: ['product-documentation'], + // TODO: Remove after ZodAny is fixed https://github.com/langchain-ai/langchainjs/blob/main/langchain-core/src/tools.ts + }) as unknown as DynamicStructuredTool; + }, +}; diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/get_insights.test.ts b/x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/get_insights.test.ts new file mode 100644 index 0000000000000..6f928ee599b34 --- /dev/null +++ b/x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/get_insights.test.ts @@ -0,0 +1,104 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { httpServerMock, httpServiceMock } from '@kbn/core/server/mocks'; +import { createMockEndpointAppContext, getRegisteredVersionedRouteMock } from '../../mocks'; +import { registerGetInsightsRoute } from './get_insights'; +import { WORKFLOW_INSIGHTS_ROUTE } from '../../../../common/endpoint/constants'; + +jest.mock('../../services', () => ({ + securityWorkflowInsightsService: { + fetch: jest.fn(), + }, +})); + +const fetchMock = jest.requireMock('../../services').securityWorkflowInsightsService + .fetch as jest.Mock; + +describe('Get Insights Route Handler', () => { + let mockResponse: ReturnType; + let callRoute: (params: Record, authz?: Record) => Promise; + + beforeEach(() => { + mockResponse = httpServerMock.createResponseFactory(); + + const mockEndpointContext = createMockEndpointAppContext(); + const router = httpServiceMock.createRouter(); + + registerGetInsightsRoute(router, mockEndpointContext); + + callRoute = async (params, authz = { canReadSecuritySolution: true }) => { + const mockContext = { + core: { + security: { + authc: { + getCurrentUser: jest + .fn() + .mockReturnValue({ username: 'test-user', roles: ['admin'] }), + }, + }, + }, + securitySolution: { + getEndpointAuthz: jest.fn().mockResolvedValue(authz), + }, + }; + + const request = httpServerMock.createKibanaRequest({ + method: 'get', + path: WORKFLOW_INSIGHTS_ROUTE, + query: params, + }); + + const { routeHandler } = getRegisteredVersionedRouteMock( + router, + 'get', + WORKFLOW_INSIGHTS_ROUTE, + '1' + )!; + await routeHandler(mockContext, request, mockResponse); + }; + }); + + describe('with valid privileges', () => { + it('should fetch insights and return them', async () => { + const mockInsights = [ + { _source: { id: 1, name: 'Insight 1' } }, + { _source: { id: 2, name: 'Insight 2' } }, + ]; + fetchMock.mockResolvedValue(mockInsights); + + await callRoute({ query: 'test-query' }); + + expect(fetchMock).toHaveBeenCalledWith({ query: 'test-query' }); + expect(mockResponse.ok).toHaveBeenCalledWith({ + body: [ + { id: 1, name: 'Insight 1' }, + { id: 2, name: 'Insight 2' }, + ], + }); + }); + + it('should handle missing query parameters', async () => { + fetchMock.mockResolvedValue([]); + + await callRoute({}); + + expect(fetchMock).toHaveBeenCalledWith({}); + expect(mockResponse.ok).toHaveBeenCalledWith({ + body: [], + }); + }); + }); + + describe('with invalid privileges', () => { + it('should return forbidden if user lacks read privileges', async () => { + await callRoute({}, { canReadSecuritySolution: false }); + + expect(mockResponse.forbidden).toHaveBeenCalled(); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/get_insights.ts b/x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/get_insights.ts new file mode 100644 index 0000000000000..910df9b593fad --- /dev/null +++ b/x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/get_insights.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 type { IKibanaResponse, RequestHandler } from '@kbn/core/server'; +import type { GetWorkflowInsightsRequestQueryParams } from '../../../../common/api/endpoint/workflow_insights/workflow_insights'; +import { GetWorkflowInsightsRequestSchema } from '../../../../common/api/endpoint/workflow_insights/workflow_insights'; +import type { + SearchParams, + SecurityWorkflowInsight, +} from '../../../../common/endpoint/types/workflow_insights'; +import { securityWorkflowInsightsService } from '../../services'; +import { errorHandler } from '../error_handler'; +import { WORKFLOW_INSIGHTS_ROUTE } from '../../../../common/endpoint/constants'; +import { withEndpointAuthz } from '../with_endpoint_authz'; +import type { + SecuritySolutionPluginRouter, + SecuritySolutionRequestHandlerContext, +} from '../../../types'; +import type { EndpointAppContext } from '../../types'; + +export const registerGetInsightsRoute = ( + router: SecuritySolutionPluginRouter, + endpointContext: EndpointAppContext +) => { + router.versioned + .get({ + access: 'internal', + path: WORKFLOW_INSIGHTS_ROUTE, + security: { + authz: { + requiredPrivileges: ['securitySolution'], + }, + }, + options: { authRequired: true }, + }) + .addVersion( + { + version: '1', + validate: { + request: GetWorkflowInsightsRequestSchema, + }, + }, + withEndpointAuthz( + { all: ['canReadSecuritySolution'] }, + endpointContext.logFactory.get('workflowInsights'), + getInsightsRouteHandler(endpointContext) + ) + ); +}; + +export const getInsightsRouteHandler = ( + endpointContext: EndpointAppContext +): RequestHandler< + never, + GetWorkflowInsightsRequestQueryParams, + unknown, + SecuritySolutionRequestHandlerContext +> => { + const logger = endpointContext.logFactory.get('workflowInsights'); + + return async (_, request, response): Promise> => { + try { + logger.debug('Fetching workflow insights'); + + const insightsResponse = await securityWorkflowInsightsService.fetch( + request.query as SearchParams + ); + + const body = insightsResponse.flatMap((insight) => insight._source || []); + + return response.ok({ body }); + } catch (e) { + return errorHandler(logger, response, e); + } + }; +}; diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/index.ts b/x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/index.ts new file mode 100644 index 0000000000000..3fc3a0a70d1b9 --- /dev/null +++ b/x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/index.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 { registerUpdateInsightsRoute } from './update_insight'; +import { registerGetInsightsRoute } from './get_insights'; +import type { SecuritySolutionPluginRouter } from '../../../types'; +import type { ConfigType } from '../../..'; +import type { EndpointAppContext } from '../../types'; + +export const registerWorkflowInsightsRoutes = ( + router: SecuritySolutionPluginRouter, + config: ConfigType, + endpointContext: EndpointAppContext +) => { + if (config.experimentalFeatures.defendInsights) { + registerGetInsightsRoute(router, endpointContext); + registerUpdateInsightsRoute(router, endpointContext); + } +}; diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/update_insight.test.ts b/x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/update_insight.test.ts new file mode 100644 index 0000000000000..0a8e2e1bf8771 --- /dev/null +++ b/x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/update_insight.test.ts @@ -0,0 +1,111 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { httpServerMock, httpServiceMock } from '@kbn/core/server/mocks'; +import { registerUpdateInsightsRoute } from './update_insight'; +import { createMockEndpointAppContext, getRegisteredVersionedRouteMock } from '../../mocks'; +import { WORKFLOW_INSIGHTS_UPDATE_ROUTE } from '../../../../common/endpoint/constants'; + +jest.mock('../../services', () => ({ + securityWorkflowInsightsService: { + update: jest.fn(), + }, +})); + +const updateMock = jest.requireMock('../../services').securityWorkflowInsightsService + .update as jest.Mock; + +describe('Update Insights Route Handler', () => { + let mockResponse: ReturnType; + let callRoute: ( + params: Record, + body: Record, + authz?: Record + ) => Promise; + + beforeEach(() => { + mockResponse = httpServerMock.createResponseFactory(); + + const mockEndpointContext = createMockEndpointAppContext(); + const router = httpServiceMock.createRouter(); + + registerUpdateInsightsRoute(router, mockEndpointContext); + + callRoute = async (params, body, authz = { canReadSecuritySolution: true }) => { + const mockContext = { + core: { + security: { + authc: { + getCurrentUser: jest + .fn() + .mockReturnValue({ username: 'test-user', roles: ['admin'] }), + }, + }, + }, + securitySolution: { + getEndpointAuthz: jest.fn().mockResolvedValue(authz), + }, + }; + + const request = httpServerMock.createKibanaRequest({ + method: 'put', + path: WORKFLOW_INSIGHTS_UPDATE_ROUTE, + params, + body, + }); + + const { routeHandler } = getRegisteredVersionedRouteMock( + router, + 'put', + WORKFLOW_INSIGHTS_UPDATE_ROUTE, + '1' + )!; + await routeHandler(mockContext, request, mockResponse); + }; + }); + + describe('with valid privileges', () => { + it('should update insight and return the updated data', async () => { + const mockUpdatedInsight = { id: 1, name: 'Updated Insight', type: 'incompatible_antivirus' }; + updateMock.mockResolvedValue(mockUpdatedInsight); + + const updateBody = { name: 'Updated Insight' }; + + await callRoute({ insightId: '1' }, updateBody); + + expect(updateMock).toHaveBeenCalledWith('1', updateBody); + expect(mockResponse.ok).toHaveBeenCalledWith({ + body: mockUpdatedInsight, + }); + }); + + it('should handle missing body parameters', async () => { + updateMock.mockResolvedValue({ id: 1, name: 'Insight 1' }); + + const updateBody = {}; // Empty body to test missing parameters + + await callRoute({ insightId: '1' }, updateBody); + + expect(updateMock).toHaveBeenCalledWith('1', {}); + expect(mockResponse.ok).toHaveBeenCalledWith({ + body: { id: 1, name: 'Insight 1' }, + }); + }); + }); + + describe('with invalid privileges', () => { + it('should return forbidden if user lacks read privileges', async () => { + await callRoute( + { insightId: '1' }, + { name: 'Updated Insight' }, + { canReadSecuritySolution: false } + ); + + expect(mockResponse.forbidden).toHaveBeenCalled(); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/update_insight.ts b/x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/update_insight.ts new file mode 100644 index 0000000000000..82ffc547067c1 --- /dev/null +++ b/x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/update_insight.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 type { RequestHandler } from '@kbn/core/server'; +import type { + UpdateWorkflowInsightsRequestBody, + UpdateWorkflowInsightsRequestParams, +} from '../../../../common/api/endpoint/workflow_insights/workflow_insights'; +import { UpdateWorkflowInsightRequestSchema } from '../../../../common/api/endpoint/workflow_insights/workflow_insights'; +import { securityWorkflowInsightsService } from '../../services'; + +import { errorHandler } from '../error_handler'; +import { WORKFLOW_INSIGHTS_UPDATE_ROUTE } from '../../../../common/endpoint/constants'; +import { withEndpointAuthz } from '../with_endpoint_authz'; +import type { + SecuritySolutionPluginRouter, + SecuritySolutionRequestHandlerContext, +} from '../../../types'; +import type { EndpointAppContext } from '../../types'; +import type { SecurityWorkflowInsight } from '../../../../common/endpoint/types/workflow_insights'; + +export const registerUpdateInsightsRoute = ( + router: SecuritySolutionPluginRouter, + endpointContext: EndpointAppContext +) => { + router.versioned + .put({ + access: 'internal', + path: WORKFLOW_INSIGHTS_UPDATE_ROUTE, + security: { + authz: { + requiredPrivileges: ['securitySolution'], + }, + }, + options: { authRequired: true }, + }) + .addVersion( + { + version: '1', + validate: { + request: UpdateWorkflowInsightRequestSchema, + }, + }, + withEndpointAuthz( + { all: ['canReadSecuritySolution'] }, + endpointContext.logFactory.get('workflowInsights'), + updateInsightsRouteHandler(endpointContext) + ) + ); +}; + +const updateInsightsRouteHandler = ( + endpointContext: EndpointAppContext +): RequestHandler< + UpdateWorkflowInsightsRequestParams, + unknown, + UpdateWorkflowInsightsRequestBody, + SecuritySolutionRequestHandlerContext +> => { + const logger = endpointContext.logFactory.get('workflowInsights'); + + return async (_, request, response) => { + const { insightId } = request.params; + + logger.debug(`Updating insight ${insightId}`); + try { + const body = await securityWorkflowInsightsService.update( + insightId, + request.body as Partial + ); + return response.ok({ body }); + } catch (e) { + return errorHandler(logger, response, e); + } + }; +}; diff --git a/x-pack/plugins/security_solution/server/endpoint/services/workflow_insights/index.test.ts b/x-pack/plugins/security_solution/server/endpoint/services/workflow_insights/index.test.ts index 792a7a9ecd949..1b7ba20f6af88 100644 --- a/x-pack/plugins/security_solution/server/endpoint/services/workflow_insights/index.test.ts +++ b/x-pack/plugins/security_solution/server/endpoint/services/workflow_insights/index.test.ts @@ -212,6 +212,7 @@ describe('SecurityWorkflowInsightsService', () => { expect(esClient.index).toHaveBeenCalledWith({ index: DATA_STREAM_NAME, body: insight, + refresh: 'wait_for', }); }); }); @@ -225,16 +226,18 @@ describe('SecurityWorkflowInsightsService', () => { await securityWorkflowInsightsService.start({ esClient }); const insightId = 'some-insight-id'; const insight = getDefaultInsight(); - await securityWorkflowInsightsService.update(insightId, insight); + const indexName = 'backing-index-name'; + await securityWorkflowInsightsService.update(insightId, insight, indexName); // ensure it waits for initialization first expect(isInitializedSpy).toHaveBeenCalledTimes(1); // updates the doc expect(esClient.update).toHaveBeenCalledTimes(1); expect(esClient.update).toHaveBeenCalledWith({ - index: DATA_STREAM_NAME, + index: indexName, id: insightId, body: { doc: insight }, + refresh: 'wait_for', }); }); }); diff --git a/x-pack/plugins/security_solution/server/endpoint/services/workflow_insights/index.ts b/x-pack/plugins/security_solution/server/endpoint/services/workflow_insights/index.ts index 0aa495dac0931..e03b9340e9784 100644 --- a/x-pack/plugins/security_solution/server/endpoint/services/workflow_insights/index.ts +++ b/x-pack/plugins/security_solution/server/endpoint/services/workflow_insights/index.ts @@ -114,6 +114,7 @@ class SecurityWorkflowInsightsService { const response = await this.esClient.index({ index: DATA_STREAM_NAME, body: insight, + refresh: 'wait_for', }); return response; @@ -121,14 +122,26 @@ class SecurityWorkflowInsightsService { public async update( id: string, - insight: Partial + insight: Partial, + backingIndex?: string ): Promise { await this.isInitialized; + let index = backingIndex; + if (!index) { + const retrievedInsight = (await this.fetch({ ids: [id] }))[0]; + index = retrievedInsight?._index; + } + + if (!index) { + throw new Error('invalid backing index for updating workflow insight'); + } + const response = await this.esClient.update({ - index: DATA_STREAM_NAME, + index, id, body: { doc: insight }, + refresh: 'wait_for', }); return response; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/bulk_actions/bulk_edit_rules.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/bulk_actions/bulk_edit_rules.ts index bee44a3600f97..b9c97c2412b1a 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/bulk_actions/bulk_edit_rules.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/bulk_actions/bulk_edit_rules.ts @@ -92,14 +92,20 @@ export const bulkEditRules = async ({ params: modifiedParams, }; const ruleResponse = convertAlertingRuleToRuleResponse(updatedRule); + let isCustomized = false; + if (ruleResponse.immutable === true) { + isCustomized = calculateIsCustomized({ + baseRule: baseVersionsMap.get(ruleResponse.rule_id), + nextRule: ruleResponse, + isRuleCustomizationEnabled: experimentalFeatures.prebuiltRulesCustomizationEnabled, + }); + } + const ruleSource = ruleResponse.immutable === true ? { type: 'external' as const, - isCustomized: calculateIsCustomized( - baseVersionsMap.get(ruleResponse.rule_id), - ruleResponse - ), + isCustomized, } : { type: 'internal' as const, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.create_custom_rule.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.create_custom_rule.test.ts index af3f85f3e1345..b07f95f74d2f9 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.create_custom_rule.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.create_custom_rule.test.ts @@ -51,6 +51,7 @@ describe('DetectionRulesClient.createCustomRule', () => { rulesClient, mlAuthz, savedObjectsClient, + isRuleCustomizationEnabled: true, }); }); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.create_prebuilt_rule.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.create_prebuilt_rule.test.ts index 4caeb4bd9b940..6e1e75855b6a0 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.create_prebuilt_rule.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.create_prebuilt_rule.test.ts @@ -44,6 +44,7 @@ describe('DetectionRulesClient.createPrebuiltRule', () => { rulesClient, mlAuthz, savedObjectsClient, + isRuleCustomizationEnabled: true, }); }); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.delete_rule.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.delete_rule.test.ts index ea5d1453753c3..a4afe5abadb6b 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.delete_rule.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.delete_rule.test.ts @@ -30,6 +30,7 @@ describe('DetectionRulesClient.deleteRule', () => { rulesClient, mlAuthz, savedObjectsClient, + isRuleCustomizationEnabled: true, }); }); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.import_rule.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.import_rule.test.ts index 4300b17b3be80..5f8bfb5577740 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.import_rule.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.import_rule.test.ts @@ -51,6 +51,7 @@ describe('DetectionRulesClient.importRule', () => { rulesClient, mlAuthz, savedObjectsClient, + isRuleCustomizationEnabled: true, }); }); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.import_rules.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.import_rules.test.ts index 58b1385dda09c..3dfd859fb0b7b 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.import_rules.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.import_rules.test.ts @@ -32,6 +32,7 @@ describe('detectionRulesClient.importRules', () => { rulesClient: rulesClientMock.create(), mlAuthz: buildMlAuthz(), savedObjectsClient: savedObjectsClientMock.create(), + isRuleCustomizationEnabled: true, }); (checkRuleExceptionReferences as jest.Mock).mockReturnValue([[], []]); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.patch_rule.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.patch_rule.test.ts index 448df6b581a3b..18fe3c54da7e0 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.patch_rule.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.patch_rule.test.ts @@ -50,6 +50,7 @@ describe('DetectionRulesClient.patchRule', () => { rulesClient, mlAuthz, savedObjectsClient, + isRuleCustomizationEnabled: true, }); }); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.ts index fb6f5c4a03c1f..57c8f12c09aa9 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.ts @@ -38,6 +38,7 @@ interface DetectionRulesClientParams { rulesClient: RulesClient; savedObjectsClient: SavedObjectsClientContract; mlAuthz: MlAuthz; + isRuleCustomizationEnabled: boolean; } export const createDetectionRulesClient = ({ @@ -45,6 +46,7 @@ export const createDetectionRulesClient = ({ rulesClient, mlAuthz, savedObjectsClient, + isRuleCustomizationEnabled, }: DetectionRulesClientParams): IDetectionRulesClient => { const prebuiltRuleAssetClient = createPrebuiltRuleAssetsClient(savedObjectsClient); @@ -89,6 +91,7 @@ export const createDetectionRulesClient = ({ prebuiltRuleAssetClient, mlAuthz, ruleUpdate, + isRuleCustomizationEnabled, }); }); }, @@ -101,6 +104,7 @@ export const createDetectionRulesClient = ({ prebuiltRuleAssetClient, mlAuthz, rulePatch, + isRuleCustomizationEnabled, }); }); }, @@ -119,6 +123,7 @@ export const createDetectionRulesClient = ({ ruleAsset, mlAuthz, prebuiltRuleAssetClient, + isRuleCustomizationEnabled, }); }); }, @@ -131,6 +136,7 @@ export const createDetectionRulesClient = ({ importRulePayload: args, mlAuthz, prebuiltRuleAssetClient, + isRuleCustomizationEnabled, }); }); }, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.update_rule.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.update_rule.test.ts index cbd0fb1fe3680..64c01ab395529 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.update_rule.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.update_rule.test.ts @@ -50,6 +50,7 @@ describe('DetectionRulesClient.updateRule', () => { rulesClient, mlAuthz, savedObjectsClient, + isRuleCustomizationEnabled: true, }); }); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.upgrade_prebuilt_rule.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.upgrade_prebuilt_rule.test.ts index acdb7b9653930..ed186abe5a7c3 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.upgrade_prebuilt_rule.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client.upgrade_prebuilt_rule.test.ts @@ -48,6 +48,7 @@ describe('DetectionRulesClient.upgradePrebuiltRule', () => { rulesClient, mlAuthz, savedObjectsClient, + isRuleCustomizationEnabled: true, }); }); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/apply_rule_patch.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/apply_rule_patch.test.ts index abf90c3f4dfc4..0d780c07aac19 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/apply_rule_patch.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/apply_rule_patch.test.ts @@ -37,6 +37,7 @@ describe('applyRulePatch', () => { rulePatch, existingRule, prebuiltRuleAssetClient, + isRuleCustomizationEnabled: true, }); expect(patchedRule).toEqual( expect.objectContaining({ @@ -65,6 +66,7 @@ describe('applyRulePatch', () => { rulePatch, existingRule, prebuiltRuleAssetClient, + isRuleCustomizationEnabled: true, }); expect(patchedRule).toEqual( expect.objectContaining({ @@ -94,6 +96,7 @@ describe('applyRulePatch', () => { rulePatch, existingRule, prebuiltRuleAssetClient, + isRuleCustomizationEnabled: true, }) ).rejects.toThrowError( 'event_category_override: Expected string, received number, tiebreaker_field: Expected string, received number, timestamp_field: Expected string, received number' @@ -119,6 +122,7 @@ describe('applyRulePatch', () => { rulePatch, existingRule, prebuiltRuleAssetClient, + isRuleCustomizationEnabled: true, }) ).rejects.toThrowError('alert_suppression.group_by: Expected array, received string'); }); @@ -134,6 +138,7 @@ describe('applyRulePatch', () => { rulePatch, existingRule, prebuiltRuleAssetClient, + isRuleCustomizationEnabled: true, }); expect(patchedRule).toEqual( expect.objectContaining({ @@ -154,6 +159,7 @@ describe('applyRulePatch', () => { rulePatch, existingRule, prebuiltRuleAssetClient, + isRuleCustomizationEnabled: true, }) ).rejects.toThrowError( 'threat_query: Expected string, received number, threat_indicator_path: Expected string, received number' @@ -170,6 +176,7 @@ describe('applyRulePatch', () => { rulePatch, existingRule, prebuiltRuleAssetClient, + isRuleCustomizationEnabled: true, }); expect(patchedRule).toEqual( expect.objectContaining({ @@ -190,6 +197,7 @@ describe('applyRulePatch', () => { rulePatch, existingRule, prebuiltRuleAssetClient, + isRuleCustomizationEnabled: true, }) ).rejects.toThrowError( "index.0: Expected string, received number, language: Invalid enum value. Expected 'kuery' | 'lucene', received 'non-language'" @@ -206,6 +214,7 @@ describe('applyRulePatch', () => { rulePatch, existingRule, prebuiltRuleAssetClient, + isRuleCustomizationEnabled: true, }); expect(patchedRule).toEqual( expect.objectContaining({ @@ -226,6 +235,7 @@ describe('applyRulePatch', () => { rulePatch, existingRule, prebuiltRuleAssetClient, + isRuleCustomizationEnabled: true, }) ).rejects.toThrowError( "index.0: Expected string, received number, language: Invalid enum value. Expected 'kuery' | 'lucene', received 'non-language'" @@ -244,6 +254,7 @@ describe('applyRulePatch', () => { rulePatch, existingRule, prebuiltRuleAssetClient, + isRuleCustomizationEnabled: true, }); expect(patchedRule).toEqual( expect.objectContaining({ @@ -268,6 +279,7 @@ describe('applyRulePatch', () => { rulePatch, existingRule, prebuiltRuleAssetClient, + isRuleCustomizationEnabled: true, }) ).rejects.toThrowError('threshold.value: Expected number, received string'); }); @@ -285,6 +297,7 @@ describe('applyRulePatch', () => { rulePatch, existingRule, prebuiltRuleAssetClient, + isRuleCustomizationEnabled: true, }); expect(patchedRule).toEqual( expect.objectContaining({ @@ -308,6 +321,7 @@ describe('applyRulePatch', () => { rulePatch, existingRule, prebuiltRuleAssetClient, + isRuleCustomizationEnabled: true, }); expect(patchedRule).toEqual( expect.objectContaining({ @@ -330,6 +344,7 @@ describe('applyRulePatch', () => { rulePatch, existingRule, prebuiltRuleAssetClient, + isRuleCustomizationEnabled: true, }); expect(patchedRule).toEqual( expect.objectContaining({ @@ -354,6 +369,7 @@ describe('applyRulePatch', () => { rulePatch, existingRule, prebuiltRuleAssetClient, + isRuleCustomizationEnabled: true, }); expect(patchedRule).toEqual( expect.objectContaining({ @@ -376,6 +392,7 @@ describe('applyRulePatch', () => { rulePatch, existingRule, prebuiltRuleAssetClient, + isRuleCustomizationEnabled: true, }); expect(patchedRule).toEqual( expect.objectContaining({ @@ -394,6 +411,7 @@ describe('applyRulePatch', () => { rulePatch, existingRule, prebuiltRuleAssetClient, + isRuleCustomizationEnabled: true, }) ).rejects.toThrowError('anomaly_threshold: Expected number, received string'); }); @@ -410,6 +428,7 @@ describe('applyRulePatch', () => { rulePatch, existingRule, prebuiltRuleAssetClient, + isRuleCustomizationEnabled: true, }); expect(patchedRule).toEqual( @@ -432,6 +451,7 @@ describe('applyRulePatch', () => { rulePatch, existingRule, prebuiltRuleAssetClient, + isRuleCustomizationEnabled: true, }); expect(patchedRule).toEqual( expect.objectContaining({ @@ -450,6 +470,7 @@ describe('applyRulePatch', () => { rulePatch, existingRule, prebuiltRuleAssetClient, + isRuleCustomizationEnabled: true, }) ).rejects.toThrowError('new_terms_fields: Expected array, received string'); }); @@ -472,6 +493,7 @@ describe('applyRulePatch', () => { rulePatch, existingRule, prebuiltRuleAssetClient, + isRuleCustomizationEnabled: true, }); expect(patchedRule).toEqual( expect.objectContaining({ diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/apply_rule_patch.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/apply_rule_patch.ts index 9f5b167322491..aaaab474c2fbe 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/apply_rule_patch.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/apply_rule_patch.ts @@ -51,6 +51,7 @@ interface ApplyRulePatchProps { prebuiltRuleAssetClient: IPrebuiltRuleAssetsClient; existingRule: RuleResponse; rulePatch: PatchRuleRequestBody; + isRuleCustomizationEnabled: boolean; } // eslint-disable-next-line complexity @@ -58,6 +59,7 @@ export const applyRulePatch = async ({ rulePatch, existingRule, prebuiltRuleAssetClient, + isRuleCustomizationEnabled, }: ApplyRulePatchProps): Promise => { const typeSpecificParams = patchTypeSpecificParams(rulePatch, existingRule); @@ -122,6 +124,7 @@ export const applyRulePatch = async ({ nextRule.rule_source = await calculateRuleSource({ rule: nextRule, prebuiltRuleAssetClient, + isRuleCustomizationEnabled, }); return nextRule; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/apply_rule_update.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/apply_rule_update.ts index b911e66a1fc45..850924d3cd04d 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/apply_rule_update.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/apply_rule_update.ts @@ -17,12 +17,14 @@ interface ApplyRuleUpdateProps { prebuiltRuleAssetClient: IPrebuiltRuleAssetsClient; existingRule: RuleResponse; ruleUpdate: RuleUpdateProps; + isRuleCustomizationEnabled: boolean; } export const applyRuleUpdate = async ({ prebuiltRuleAssetClient, existingRule, ruleUpdate, + isRuleCustomizationEnabled, }: ApplyRuleUpdateProps): Promise => { const nextRule: RuleResponse = { ...applyRuleDefaults(ruleUpdate), @@ -46,6 +48,7 @@ export const applyRuleUpdate = async ({ nextRule.rule_source = await calculateRuleSource({ rule: nextRule, prebuiltRuleAssetClient, + isRuleCustomizationEnabled, }); return nextRule; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/rule_source/calculate_is_customized.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/rule_source/calculate_is_customized.ts index 92c7d941dd7f1..a94506486cc53 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/rule_source/calculate_is_customized.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/rule_source/calculate_is_customized.ts @@ -12,10 +12,22 @@ import { calculateRuleFieldsDiff } from '../../../../../prebuilt_rules/logic/dif import { convertRuleToDiffable } from '../../../../../../../../common/detection_engine/prebuilt_rules/diff/convert_rule_to_diffable'; import { convertPrebuiltRuleAssetToRuleResponse } from '../../converters/convert_prebuilt_rule_asset_to_rule_response'; -export function calculateIsCustomized( - baseRule: PrebuiltRuleAsset | undefined, - nextRule: RuleResponse -) { +interface CalculateIsCustomizedArgs { + baseRule: PrebuiltRuleAsset | undefined; + nextRule: RuleResponse; + isRuleCustomizationEnabled: boolean; +} + +export function calculateIsCustomized({ + baseRule, + nextRule, + isRuleCustomizationEnabled, +}: CalculateIsCustomizedArgs) { + if (!isRuleCustomizationEnabled) { + // We don't want to accidentally mark rules as customized when customization is disabled. + return false; + } + if (baseRule == null) { // If the base version is missing, we consider the rule to be customized return true; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/rule_source/calculate_rule_source.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/rule_source/calculate_rule_source.test.ts index e44c69d2705d5..d0b9f722458a1 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/rule_source/calculate_rule_source.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/rule_source/calculate_rule_source.test.ts @@ -43,6 +43,7 @@ describe('calculateRuleSource', () => { const result = await calculateRuleSource({ prebuiltRuleAssetClient, rule, + isRuleCustomizationEnabled: true, }); expect(result).toEqual({ type: 'internal', @@ -59,6 +60,7 @@ describe('calculateRuleSource', () => { const result = await calculateRuleSource({ prebuiltRuleAssetClient, rule, + isRuleCustomizationEnabled: true, }); expect(result).toEqual( expect.objectContaining({ @@ -79,6 +81,7 @@ describe('calculateRuleSource', () => { const result = await calculateRuleSource({ prebuiltRuleAssetClient, rule, + isRuleCustomizationEnabled: true, }); expect(result).toEqual( expect.objectContaining({ @@ -101,6 +104,28 @@ describe('calculateRuleSource', () => { const result = await calculateRuleSource({ prebuiltRuleAssetClient, rule, + isRuleCustomizationEnabled: true, + }); + expect(result).toEqual( + expect.objectContaining({ + type: 'external', + is_customized: false, + }) + ); + }); + + it('returns is_customized false when the rule is customized but customization is disabled', async () => { + const rule = getSampleRule(); + rule.immutable = true; + rule.name = 'Updated name'; + + const baseRule = getSampleRuleAsset(); + prebuiltRuleAssetClient.fetchAssetsByVersion.mockResolvedValueOnce([baseRule]); + + const result = await calculateRuleSource({ + prebuiltRuleAssetClient, + rule, + isRuleCustomizationEnabled: false, }); expect(result).toEqual( expect.objectContaining({ diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/rule_source/calculate_rule_source.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/rule_source/calculate_rule_source.ts index 742cd20544a60..6c3d2419159a6 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/rule_source/calculate_rule_source.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/mergers/rule_source/calculate_rule_source.ts @@ -16,11 +16,13 @@ import { calculateIsCustomized } from './calculate_is_customized'; interface CalculateRuleSourceProps { prebuiltRuleAssetClient: IPrebuiltRuleAssetsClient; rule: RuleResponse; + isRuleCustomizationEnabled: boolean; } export async function calculateRuleSource({ prebuiltRuleAssetClient, rule, + isRuleCustomizationEnabled, }: CalculateRuleSourceProps): Promise { if (rule.immutable) { // This is a prebuilt rule and, despite the name, they are not immutable. So @@ -33,7 +35,11 @@ export async function calculateRuleSource({ ]); const baseRule: PrebuiltRuleAsset | undefined = prebuiltRulesResponse.at(0); - const isCustomized = calculateIsCustomized(baseRule, rule); + const isCustomized = calculateIsCustomized({ + baseRule, + nextRule: rule, + isRuleCustomizationEnabled, + }); return { type: 'external', diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/import_rule.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/import_rule.ts index dd57e66c41a64..16fda89391ab9 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/import_rule.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/import_rule.ts @@ -26,6 +26,7 @@ interface ImportRuleOptions { prebuiltRuleAssetClient: IPrebuiltRuleAssetsClient; importRulePayload: ImportRuleArgs; mlAuthz: MlAuthz; + isRuleCustomizationEnabled: boolean; } export const importRule = async ({ @@ -34,6 +35,7 @@ export const importRule = async ({ importRulePayload, prebuiltRuleAssetClient, mlAuthz, + isRuleCustomizationEnabled, }: ImportRuleOptions): Promise => { const { ruleToImport, overwriteRules, overrideFields, allowMissingConnectorSecrets } = importRulePayload; @@ -60,6 +62,7 @@ export const importRule = async ({ prebuiltRuleAssetClient, existingRule, ruleUpdate: rule, + isRuleCustomizationEnabled, }); // applyRuleUpdate prefers the existing rule's values for `rule_source` and `immutable`, but we want to use the importing rule's calculated values ruleWithUpdates = { ...ruleWithUpdates, ...overrideFields }; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/patch_rule.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/patch_rule.ts index 113576e8d02e2..0b22ea39eaef4 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/patch_rule.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/patch_rule.ts @@ -28,6 +28,7 @@ interface PatchRuleOptions { prebuiltRuleAssetClient: IPrebuiltRuleAssetsClient; rulePatch: RulePatchProps; mlAuthz: MlAuthz; + isRuleCustomizationEnabled: boolean; } export const patchRule = async ({ @@ -36,6 +37,7 @@ export const patchRule = async ({ prebuiltRuleAssetClient, rulePatch, mlAuthz, + isRuleCustomizationEnabled, }: PatchRuleOptions): Promise => { const { rule_id: ruleId, id } = rulePatch; @@ -58,6 +60,7 @@ export const patchRule = async ({ prebuiltRuleAssetClient, existingRule, rulePatch, + isRuleCustomizationEnabled, }); const patchedInternalRule = await rulesClient.update({ diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/update_rule.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/update_rule.ts index 8fd7f7a89dcb7..3d465d44fdc1d 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/update_rule.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/update_rule.ts @@ -27,6 +27,7 @@ interface UpdateRuleArguments { prebuiltRuleAssetClient: IPrebuiltRuleAssetsClient; ruleUpdate: RuleUpdateProps; mlAuthz: MlAuthz; + isRuleCustomizationEnabled: boolean; } export const updateRule = async ({ @@ -35,6 +36,7 @@ export const updateRule = async ({ prebuiltRuleAssetClient, ruleUpdate, mlAuthz, + isRuleCustomizationEnabled, }: UpdateRuleArguments): Promise => { const { rule_id: ruleId, id } = ruleUpdate; @@ -57,6 +59,7 @@ export const updateRule = async ({ prebuiltRuleAssetClient, existingRule, ruleUpdate, + isRuleCustomizationEnabled, }); const updatedRule = await rulesClient.update({ diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/upgrade_prebuilt_rule.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/upgrade_prebuilt_rule.ts index 64486bed14304..dff7c8a333ca7 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/upgrade_prebuilt_rule.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/detection_rules_client/methods/upgrade_prebuilt_rule.ts @@ -25,12 +25,14 @@ export const upgradePrebuiltRule = async ({ ruleAsset, mlAuthz, prebuiltRuleAssetClient, + isRuleCustomizationEnabled, }: { actionsClient: ActionsClient; rulesClient: RulesClient; ruleAsset: PrebuiltRuleAsset; mlAuthz: MlAuthz; prebuiltRuleAssetClient: IPrebuiltRuleAssetsClient; + isRuleCustomizationEnabled: boolean; }): Promise => { await validateMlAuth(mlAuthz, ruleAsset.type); @@ -73,6 +75,7 @@ export const upgradePrebuiltRule = async ({ prebuiltRuleAssetClient, existingRule, ruleUpdate: ruleAsset, + isRuleCustomizationEnabled, }); const updatedInternalRule = await rulesClient.update({ diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/import/calculate_rule_source_for_import.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/import/calculate_rule_source_for_import.test.ts index e3bfb75c6a88d..b1952ff6948c7 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/import/calculate_rule_source_for_import.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/import/calculate_rule_source_for_import.test.ts @@ -15,6 +15,7 @@ describe('calculateRuleSourceForImport', () => { rule: getRulesSchemaMock(), prebuiltRuleAssetsByRuleId: {}, isKnownPrebuiltRule: false, + isRuleCustomizationEnabled: true, }); expect(result).toEqual({ @@ -33,6 +34,7 @@ describe('calculateRuleSourceForImport', () => { rule, prebuiltRuleAssetsByRuleId: {}, isKnownPrebuiltRule: true, + isRuleCustomizationEnabled: true, }); expect(result).toEqual({ @@ -53,6 +55,7 @@ describe('calculateRuleSourceForImport', () => { rule, prebuiltRuleAssetsByRuleId, isKnownPrebuiltRule: true, + isRuleCustomizationEnabled: true, }); expect(result).toEqual({ @@ -73,6 +76,7 @@ describe('calculateRuleSourceForImport', () => { rule, prebuiltRuleAssetsByRuleId, isKnownPrebuiltRule: true, + isRuleCustomizationEnabled: true, }); expect(result).toEqual({ diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/import/calculate_rule_source_for_import.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/import/calculate_rule_source_for_import.ts index 133566a7b776b..32a1f622b08d8 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/import/calculate_rule_source_for_import.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/import/calculate_rule_source_for_import.ts @@ -28,10 +28,12 @@ export const calculateRuleSourceForImport = ({ rule, prebuiltRuleAssetsByRuleId, isKnownPrebuiltRule, + isRuleCustomizationEnabled, }: { rule: ValidatedRuleToImport; prebuiltRuleAssetsByRuleId: Record; isKnownPrebuiltRule: boolean; + isRuleCustomizationEnabled: boolean; }): { ruleSource: RuleSource; immutable: boolean } => { const assetWithMatchingVersion = prebuiltRuleAssetsByRuleId[rule.rule_id]; // We convert here so that RuleSource calculation can @@ -43,6 +45,7 @@ export const calculateRuleSourceForImport = ({ rule: ruleResponseForImport, assetWithMatchingVersion, isKnownPrebuiltRule, + isRuleCustomizationEnabled, }); return { diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/import/calculate_rule_source_from_asset.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/import/calculate_rule_source_from_asset.test.ts index 9a2f68479fdea..099c0f41f1720 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/import/calculate_rule_source_from_asset.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/import/calculate_rule_source_from_asset.test.ts @@ -15,6 +15,7 @@ describe('calculateRuleSourceFromAsset', () => { rule: getRulesSchemaMock(), assetWithMatchingVersion: undefined, isKnownPrebuiltRule: false, + isRuleCustomizationEnabled: true, }); expect(result).toEqual({ @@ -28,6 +29,7 @@ describe('calculateRuleSourceFromAsset', () => { rule: ruleToImport, assetWithMatchingVersion: undefined, isKnownPrebuiltRule: true, + isRuleCustomizationEnabled: true, }); expect(result).toEqual({ @@ -47,6 +49,7 @@ describe('calculateRuleSourceFromAsset', () => { // no other overwrites -> no differences }), isKnownPrebuiltRule: true, + isRuleCustomizationEnabled: true, }); expect(result).toEqual({ @@ -65,6 +68,7 @@ describe('calculateRuleSourceFromAsset', () => { name: 'Customized name', // mock a customization }), isKnownPrebuiltRule: true, + isRuleCustomizationEnabled: true, }); expect(result).toEqual({ diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/import/calculate_rule_source_from_asset.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/import/calculate_rule_source_from_asset.ts index 4f0caf9b10056..33063bedb11b2 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/import/calculate_rule_source_from_asset.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/import/calculate_rule_source_from_asset.ts @@ -24,10 +24,12 @@ export const calculateRuleSourceFromAsset = ({ rule, assetWithMatchingVersion, isKnownPrebuiltRule, + isRuleCustomizationEnabled, }: { rule: RuleResponse; assetWithMatchingVersion: PrebuiltRuleAsset | undefined; isKnownPrebuiltRule: boolean; + isRuleCustomizationEnabled: boolean; }): RuleSource => { if (!isKnownPrebuiltRule) { return { @@ -38,11 +40,15 @@ export const calculateRuleSourceFromAsset = ({ if (assetWithMatchingVersion == null) { return { type: 'external', - is_customized: true, + is_customized: isRuleCustomizationEnabled ? true : false, }; } - const isCustomized = calculateIsCustomized(assetWithMatchingVersion, rule); + const isCustomized = calculateIsCustomized({ + baseRule: assetWithMatchingVersion, + nextRule: rule, + isRuleCustomizationEnabled, + }); return { type: 'external', diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/import/rule_source_importer/rule_source_importer.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/import/rule_source_importer/rule_source_importer.test.ts index 39c937f4645a7..426109bbeb3bb 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/import/rule_source_importer/rule_source_importer.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/import/rule_source_importer/rule_source_importer.test.ts @@ -138,6 +138,7 @@ describe('ruleSourceImporter', () => { rule, prebuiltRuleAssetsByRuleId: { 'rule-1': expect.objectContaining({ rule_id: 'rule-1' }) }, isKnownPrebuiltRule: true, + isRuleCustomizationEnabled: true, }); }); @@ -166,6 +167,7 @@ describe('ruleSourceImporter', () => { rule, prebuiltRuleAssetsByRuleId: { 'rule-1': expect.objectContaining({ rule_id: 'rule-1' }) }, isKnownPrebuiltRule: true, + isRuleCustomizationEnabled: true, }); }); }); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/import/rule_source_importer/rule_source_importer.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/import/rule_source_importer/rule_source_importer.ts index 1f5c2c5aa543b..0c553e6bb7c56 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/import/rule_source_importer/rule_source_importer.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/import/rule_source_importer/rule_source_importer.ts @@ -143,6 +143,8 @@ export class RuleSourceImporter implements IRuleSourceImporter { rule, prebuiltRuleAssetsByRuleId: this.matchingAssetsByRuleId, isKnownPrebuiltRule: this.availableRuleAssetIds.has(rule.rule_id), + isRuleCustomizationEnabled: + this.config.experimentalFeatures.prebuiltRulesCustomizationEnabled, }); } diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/build_alert_group_from_sequence.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/build_alert_group_from_sequence.test.ts index 84349e9142e22..a2b0d4f21fc78 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/build_alert_group_from_sequence.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/build_alert_group_from_sequence.test.ts @@ -43,19 +43,19 @@ describe('buildAlert', () => { sampleDocNoSortId('619389b2-b077-400e-b40b-abde20d675d3'), ], }; - const alertGroup = buildAlertGroupFromSequence( - ruleExecutionLoggerMock, - eqlSequence, + const { shellAlert, buildingBlocks } = buildAlertGroupFromSequence({ + ruleExecutionLogger: ruleExecutionLoggerMock, + sequence: eqlSequence, completeRule, - 'allFields', - SPACE_ID, - jest.fn(), - completeRule.ruleParams.index as string[], - undefined, - PUBLIC_BASE_URL - ); - expect(alertGroup.length).toEqual(3); - expect(alertGroup[0]).toEqual( + mergeStrategy: 'allFields', + spaceId: SPACE_ID, + buildReasonMessage: jest.fn(), + indicesToQuery: completeRule.ruleParams.index as string[], + alertTimestampOverride: undefined, + publicBaseUrl: PUBLIC_BASE_URL, + }); + expect(buildingBlocks.length).toEqual(2); + expect(buildingBlocks[0]).toEqual( expect.objectContaining({ _source: expect.objectContaining({ [ALERT_ANCESTORS]: [ @@ -72,10 +72,10 @@ describe('buildAlert', () => { }), }) ); - expect(alertGroup[0]._source[ALERT_URL]).toContain( + expect(buildingBlocks[0]?._source?.[ALERT_URL]).toContain( 'http://testkibanabaseurl.com/s/space/app/security/alerts/redirect/f2db3574eaf8450e3f4d1cf4f416d70b110b035ae0a7a00026242df07f0a6c90?index=.alerts-security.alerts-space' ); - expect(alertGroup[1]).toEqual( + expect(buildingBlocks[1]).toEqual( expect.objectContaining({ _source: expect.objectContaining({ [ALERT_ANCESTORS]: [ @@ -92,10 +92,10 @@ describe('buildAlert', () => { }), }) ); - expect(alertGroup[1]._source[ALERT_URL]).toContain( + expect(buildingBlocks[1]._source[ALERT_URL]).toContain( 'http://testkibanabaseurl.com/s/space/app/security/alerts/redirect/1dbc416333244efbda833832eb83f13ea5d980a33c2f981ca8d2b35d82a045da?index=.alerts-security.alerts-space' ); - expect(alertGroup[2]).toEqual( + expect(shellAlert).toEqual( expect.objectContaining({ _source: expect.objectContaining({ [ALERT_ANCESTORS]: expect.arrayContaining([ @@ -113,14 +113,14 @@ describe('buildAlert', () => { }, { depth: 1, - id: alertGroup[0]._id, + id: buildingBlocks[0]?._id, index: '', rule: sampleRuleGuid, type: 'signal', }, { depth: 1, - id: alertGroup[1]._id, + id: buildingBlocks[0]._id, index: '', rule: sampleRuleGuid, type: 'signal', @@ -132,10 +132,10 @@ describe('buildAlert', () => { }), }) ); - expect(alertGroup[2]._source[ALERT_URL]).toContain( + expect(shellAlert?._source[ALERT_URL]).toContain( 'http://testkibanabaseurl.com/s/space/app/security/alerts/redirect/1b7d06954e74257140f3bf73f139078483f9658fe829fd806cc307fc0388fb23?index=.alerts-security.alerts-space' ); - const groupIds = alertGroup.map((alert) => alert._source[ALERT_GROUP_ID]); + const groupIds = buildingBlocks.map((alert) => alert?._source?.[ALERT_GROUP_ID]); for (const groupId of groupIds) { expect(groupId).toEqual(groupIds[0]); } diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/build_alert_group_from_sequence.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/build_alert_group_from_sequence.ts index 185aa1236a234..2e0948b1af4d9 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/build_alert_group_from_sequence.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/build_alert_group_from_sequence.ts @@ -5,6 +5,13 @@ * 2.0. */ +import type { + ALERT_SUPPRESSION_DOCS_COUNT, + ALERT_INSTANCE_ID, + ALERT_SUPPRESSION_TERMS, + ALERT_SUPPRESSION_START, + ALERT_SUPPRESSION_END, +} from '@kbn/rule-data-utils'; import { ALERT_URL, ALERT_UUID } from '@kbn/rule-data-utils'; import { intersection as lodashIntersection, isArray } from 'lodash'; @@ -30,6 +37,35 @@ import type { EqlShellFieldsLatest, WrappedFieldsLatest, } from '../../../../../common/api/detection_engine/model/alerts'; +import type { SuppressionTerm } from '../utils'; + +export interface ExtraFieldsForShellAlert { + [ALERT_INSTANCE_ID]: string; + [ALERT_SUPPRESSION_TERMS]: SuppressionTerm[]; + [ALERT_SUPPRESSION_START]: Date; + [ALERT_SUPPRESSION_END]: Date; + [ALERT_SUPPRESSION_DOCS_COUNT]: number; +} + +export interface BuildAlertGroupFromSequence { + ruleExecutionLogger: IRuleExecutionLogForExecutors; + sequence: EqlSequence; + completeRule: CompleteRule; + mergeStrategy: ConfigType['alertMergeStrategy']; + spaceId: string | null | undefined; + buildReasonMessage: BuildReasonMessage; + indicesToQuery: string[]; + alertTimestampOverride: Date | undefined; + applyOverrides?: boolean; + publicBaseUrl?: string; + intendedTimestamp?: Date; +} + +// eql shell alerts can have a subAlerts property +// when suppression is used in EQL sequence queries +export type WrappedEqlShellOptionalSubAlertsType = WrappedFieldsLatest & { + subAlerts?: Array>; +}; /** * Takes N raw documents from ES that form a sequence and builds them into N+1 signals ready to be indexed - @@ -38,25 +74,30 @@ import type { * @param sequence The raw ES documents that make up the sequence * @param completeRule object representing the rule that found the sequence */ -export const buildAlertGroupFromSequence = ( - ruleExecutionLogger: IRuleExecutionLogForExecutors, - sequence: EqlSequence, - completeRule: CompleteRule, - mergeStrategy: ConfigType['alertMergeStrategy'], - spaceId: string | null | undefined, - buildReasonMessage: BuildReasonMessage, - indicesToQuery: string[], - alertTimestampOverride: Date | undefined, - publicBaseUrl?: string, - intendedTimestamp?: Date -): Array> => { +export const buildAlertGroupFromSequence = ({ + ruleExecutionLogger, + sequence, + completeRule, + mergeStrategy, + spaceId, + buildReasonMessage, + indicesToQuery, + alertTimestampOverride, + publicBaseUrl, + intendedTimestamp, +}: BuildAlertGroupFromSequence): { + shellAlert: WrappedFieldsLatest | undefined; + buildingBlocks: Array>; +} => { const ancestors: Ancestor[] = sequence.events.flatMap((event) => buildAncestors(event)); if (ancestors.some((ancestor) => ancestor?.rule === completeRule.alertId)) { - return []; + return { shellAlert: undefined, buildingBlocks: [] }; } - // The "building block" alerts start out as regular BaseFields. We'll add the group ID and index fields - // after creating the shell alert later on, since that's when the group ID is determined. + // The "building block" alerts start out as regular BaseFields. + // We'll add the group ID and index fields + // after creating the shell alert later on + // since that's when the group ID is determined. let baseAlerts: BaseFieldsLatest[] = []; try { baseAlerts = sequence.events.map((event) => @@ -79,7 +120,7 @@ export const buildAlertGroupFromSequence = ( ); } catch (error) { ruleExecutionLogger.error(error); - return []; + return { shellAlert: undefined, buildingBlocks: [] }; } // The ID of each building block alert depends on all of the other building blocks as well, @@ -99,16 +140,16 @@ export const buildAlertGroupFromSequence = ( // Now that we have an array of building blocks for the events in the sequence, // we can build the signal that links the building blocks together // and also insert the group id (which is also the "shell" signal _id) in each building block - const shellAlert = buildAlertRoot( - wrappedBaseFields, + const shellAlert = buildAlertRoot({ + wrappedBuildingBlocks: wrappedBaseFields, completeRule, spaceId, buildReasonMessage, indicesToQuery, alertTimestampOverride, publicBaseUrl, - intendedTimestamp - ); + intendedTimestamp, + }); const sequenceAlert: WrappedFieldsLatest = { _id: shellAlert[ALERT_UUID], _index: '', @@ -139,19 +180,30 @@ export const buildAlertGroupFromSequence = ( } ); - return [...wrappedBuildingBlocks, sequenceAlert]; + return { shellAlert: sequenceAlert, buildingBlocks: wrappedBuildingBlocks }; }; -export const buildAlertRoot = ( - wrappedBuildingBlocks: Array>, - completeRule: CompleteRule, - spaceId: string | null | undefined, - buildReasonMessage: BuildReasonMessage, - indicesToQuery: string[], - alertTimestampOverride: Date | undefined, - publicBaseUrl?: string, - intendedTimestamp?: Date -): EqlShellFieldsLatest => { +export interface BuildAlertRootParams { + wrappedBuildingBlocks: Array>; + completeRule: CompleteRule; + spaceId: string | null | undefined; + buildReasonMessage: BuildReasonMessage; + indicesToQuery: string[]; + alertTimestampOverride: Date | undefined; + publicBaseUrl?: string; + intendedTimestamp?: Date; +} + +export const buildAlertRoot = ({ + wrappedBuildingBlocks, + completeRule, + spaceId, + buildReasonMessage, + indicesToQuery, + alertTimestampOverride, + publicBaseUrl, + intendedTimestamp, +}: BuildAlertRootParams): EqlShellFieldsLatest => { const mergedAlerts = objectArrayIntersection(wrappedBuildingBlocks.map((alert) => alert._source)); const reason = buildReasonMessage({ name: completeRule.ruleConfig.name, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/create_eql_alert_type.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/create_eql_alert_type.ts index 2bdf0d913d156..79bc9c9849da1 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/create_eql_alert_type.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/create_eql_alert_type.ts @@ -13,9 +13,10 @@ import { EqlRuleParams } from '../../rule_schema'; import { eqlExecutor } from './eql'; import type { CreateRuleOptions, SecurityAlertType, SignalSourceHit } from '../types'; import { validateIndexPatterns } from '../utils'; -import type { BuildReasonMessage } from '../utils/reason_formatters'; -import { wrapSuppressedAlerts } from '../utils/wrap_suppressed_alerts'; import { getIsAlertSuppressionActive } from '../utils/get_is_alert_suppression_active'; +import type { SharedParams } from '../utils/utils'; +import { wrapSuppressedAlerts } from '../utils/wrap_suppressed_alerts'; +import type { BuildReasonMessage } from '../utils/reason_formatters'; export const createEqlAlertType = ( createOptions: CreateRuleOptions @@ -86,6 +87,24 @@ export const createEqlAlertType = ( spaceId, } = execOptions; + const isAlertSuppressionActive = await getIsAlertSuppressionActive({ + alertSuppression: completeRule.ruleParams.alertSuppression, + licensing, + }); + + const sharedParams: SharedParams = { + spaceId, + completeRule, + mergeStrategy, + indicesToQuery: inputIndex, + alertTimestampOverride, + ruleExecutionLogger, + publicBaseUrl, + primaryTimestamp, + secondaryTimestamp, + intendedTimestamp, + }; + const wrapSuppressedHits = ( events: SignalSourceHit[], buildReasonMessage: BuildReasonMessage @@ -104,10 +123,7 @@ export const createEqlAlertType = ( secondaryTimestamp, intendedTimestamp, }); - const isNonSeqAlertSuppressionActive = await getIsAlertSuppressionActive({ - alertSuppression: completeRule.ruleParams.alertSuppression, - licensing, - }); + const { result, loggedRequests } = await eqlExecutor({ completeRule, tuple, @@ -124,9 +140,10 @@ export const createEqlAlertType = ( exceptionFilter, unprocessedExceptions, wrapSuppressedHits, + sharedParams, alertTimestampOverride, alertWithSuppression, - isAlertSuppressionActive: isNonSeqAlertSuppressionActive, + isAlertSuppressionActive, experimentalFeatures, state, scheduleNotificationResponseActionsService, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/eql.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/eql.test.ts index 4f5aa7d322c9e..f1fabcfd0f96b 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/eql.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/eql.test.ts @@ -18,6 +18,7 @@ import { getCompleteRuleMock, getEqlRuleParams } from '../../rule_schema/mocks'; import { ruleExecutionLogMock } from '../../rule_monitoring/mocks'; import { eqlExecutor } from './eql'; import { getDataTierFilter } from '../utils/get_data_tier_filter'; +import type { SharedParams } from '../utils/utils'; jest.mock('../../routes/index/get_index_version'); jest.mock('../utils/get_data_tier_filter', () => ({ getDataTierFilter: jest.fn() })); @@ -38,6 +39,21 @@ describe('eql_executor', () => { }; const mockExperimentalFeatures = {} as ExperimentalFeatures; const mockScheduleNotificationResponseActionsService = jest.fn(); + const ruleExecutionLoggerMock = ruleExecutionLogMock.forExecutors.create(); + const SPACE_ID = 'space'; + const PUBLIC_BASE_URL = 'http://testkibanabaseurl.com'; + + const sharedParams: SharedParams = { + ruleExecutionLogger: ruleExecutionLoggerMock, + completeRule: eqlCompleteRule, + mergeStrategy: 'allFields', + spaceId: SPACE_ID, + indicesToQuery: eqlCompleteRule.ruleParams.index as string[], + alertTimestampOverride: undefined, + publicBaseUrl: PUBLIC_BASE_URL, + intendedTimestamp: undefined, + primaryTimestamp: new Date().toISOString(), + }; beforeEach(() => { jest.clearAllMocks(); @@ -69,6 +85,7 @@ describe('eql_executor', () => { exceptionFilter: undefined, unprocessedExceptions: [getExceptionListItemSchemaMock()], wrapSuppressedHits: jest.fn(), + sharedParams, alertTimestampOverride: undefined, alertWithSuppression: jest.fn(), isAlertSuppressionActive: false, @@ -82,56 +99,6 @@ describe('eql_executor', () => { }`, ]); }); - - it('warns when a sequence query is used with alert suppression', async () => { - // mock a sequences response - alertServices.scopedClusterClient.asCurrentUser.eql.search.mockReset().mockResolvedValue({ - hits: { - total: { relation: 'eq', value: 10 }, - sequences: [], - }, - }); - - const ruleWithSequenceAndSuppression = getCompleteRuleMock({ - ...params, - query: 'sequence [any where true] [any where true]', - alertSuppression: { - groupBy: ['event.type'], - duration: { - value: 10, - unit: 'm', - }, - missingFieldsStrategy: 'suppress', - }, - }); - - const { result } = await eqlExecutor({ - inputIndex: DEFAULT_INDEX_PATTERN, - runtimeMappings: {}, - completeRule: ruleWithSequenceAndSuppression, - tuple, - ruleExecutionLogger, - services: alertServices, - version, - bulkCreate: jest.fn(), - wrapHits: jest.fn(), - wrapSequences: jest.fn(), - primaryTimestamp: '@timestamp', - exceptionFilter: undefined, - unprocessedExceptions: [], - wrapSuppressedHits: jest.fn(), - alertTimestampOverride: undefined, - alertWithSuppression: jest.fn(), - isAlertSuppressionActive: true, - experimentalFeatures: mockExperimentalFeatures, - scheduleNotificationResponseActionsService: - mockScheduleNotificationResponseActionsService, - }); - - expect(result.warningMessages).toContain( - 'Suppression is not supported for EQL sequence queries. The rule will proceed without suppression.' - ); - }); }); it('should classify EQL verification exceptions as "user errors" when reporting to the framework', async () => { @@ -155,6 +122,7 @@ describe('eql_executor', () => { exceptionFilter: undefined, unprocessedExceptions: [], wrapSuppressedHits: jest.fn(), + sharedParams, alertTimestampOverride: undefined, alertWithSuppression: jest.fn(), isAlertSuppressionActive: true, @@ -180,6 +148,7 @@ describe('eql_executor', () => { exceptionFilter: undefined, unprocessedExceptions: [], wrapSuppressedHits: jest.fn(), + sharedParams, alertTimestampOverride: undefined, alertWithSuppression: jest.fn(), isAlertSuppressionActive: false, @@ -220,6 +189,7 @@ describe('eql_executor', () => { exceptionFilter: undefined, unprocessedExceptions: [], wrapSuppressedHits: jest.fn(), + sharedParams, alertTimestampOverride: undefined, alertWithSuppression: jest.fn(), isAlertSuppressionActive: true, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/eql.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/eql.ts index cd8b76a93d23b..756f220f06d55 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/eql.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/eql.ts @@ -5,6 +5,7 @@ * 2.0. */ import { performance } from 'perf_hooks'; + import type { SuppressedAlertService } from '@kbn/rule-registry-plugin/server'; import type { ExceptionListItemSchema } from '@kbn/securitysolution-io-ts-list-types'; import type { @@ -25,9 +26,10 @@ import type { RuleRangeTuple, SearchAfterAndBulkCreateReturnType, SignalSource, - WrapSuppressedHits, CreateRuleOptions, + WrapSuppressedHits, } from '../types'; +import type { SharedParams } from '../utils/utils'; import { addToSearchAfterReturn, createSearchAfterReturnType, @@ -44,11 +46,15 @@ import type { WrappedFieldsLatest, } from '../../../../../common/api/detection_engine/model/alerts'; import type { IRuleExecutionLogForExecutors } from '../../rule_monitoring'; -import { bulkCreateSuppressedAlertsInMemory } from '../utils/bulk_create_suppressed_alerts_in_memory'; +import { + bulkCreateSuppressedAlertsInMemory, + bulkCreateSuppressedSequencesInMemory, +} from '../utils/bulk_create_suppressed_alerts_in_memory'; import { getDataTierFilter } from '../utils/get_data_tier_filter'; import type { RulePreviewLoggedRequest } from '../../../../../common/api/detection_engine/rule_preview/rule_preview.gen'; import { logEqlRequest } from '../utils/logged_requests'; import * as i18n from '../translations'; +import { alertSuppressionTypeGuard } from '../utils/get_is_alert_suppression_active'; interface EqlExecutorParams { inputIndex: string[]; @@ -60,6 +66,7 @@ interface EqlExecutorParams { version: string; bulkCreate: BulkCreate; wrapHits: WrapHits; + sharedParams: SharedParams; wrapSequences: WrapSequences; primaryTimestamp: string; secondaryTimestamp?: string; @@ -90,6 +97,7 @@ export const eqlExecutor = async ({ exceptionFilter, unprocessedExceptions, wrapSuppressedHits, + sharedParams, alertTimestampOverride, alertWithSuppression, isAlertSuppressionActive, @@ -104,6 +112,7 @@ export const eqlExecutor = async ({ const isLoggedRequestsEnabled = state?.isLoggedRequestsEnabled ?? false; const loggedRequests: RulePreviewLoggedRequest[] = []; + // eslint-disable-next-line complexity return withSecuritySpan('eqlExecutor', async () => { const result = createSearchAfterReturnType(); @@ -179,12 +188,28 @@ export const eqlExecutor = async ({ newSignals = wrapHits(events, buildReasonMessageForEqlAlert); } } else if (sequences) { - if (isAlertSuppressionActive) { - result.warningMessages.push( - 'Suppression is not supported for EQL sequence queries. The rule will proceed without suppression.' - ); + if ( + isAlertSuppressionActive && + experimentalFeatures.alertSuppressionForSequenceEqlRuleEnabled && + alertSuppressionTypeGuard(completeRule.ruleParams.alertSuppression) + ) { + await bulkCreateSuppressedSequencesInMemory({ + sequences, + toReturn: result, + bulkCreate, + services, + buildReasonMessage: buildReasonMessageForEqlAlert, + ruleExecutionLogger, + tuple, + alertSuppression: completeRule.ruleParams.alertSuppression, + sharedParams, + alertTimestampOverride, + alertWithSuppression, + experimentalFeatures, + }); + } else { + newSignals = wrapSequences(sequences, buildReasonMessageForEqlAlert); } - newSignals = wrapSequences(sequences, buildReasonMessageForEqlAlert); } else { throw new Error( 'eql query response should have either `sequences` or `events` but had neither' diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/wrap_sequences_factory.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/wrap_sequences_factory.ts index 39f9df366627e..d7ce37dd1feb0 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/wrap_sequences_factory.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/wrap_sequences_factory.ts @@ -11,7 +11,8 @@ import type { ConfigType } from '../../../../config'; import type { CompleteRule, RuleParams } from '../../rule_schema'; import type { IRuleExecutionLogForExecutors } from '../../rule_monitoring'; import type { - BaseFieldsLatest, + EqlBuildingBlockFieldsLatest, + EqlShellFieldsLatest, WrappedFieldsLatest, } from '../../../../../common/api/detection_engine/model/alerts'; @@ -38,21 +39,27 @@ export const wrapSequencesFactory = intendedTimestamp: Date | undefined; }): WrapSequences => (sequences, buildReasonMessage) => - sequences.reduce( - (acc: Array>, sequence) => [ - ...acc, - ...buildAlertGroupFromSequence( - ruleExecutionLogger, - sequence, - completeRule, - mergeStrategy, - spaceId, - buildReasonMessage, - indicesToQuery, - alertTimestampOverride, - publicBaseUrl, - intendedTimestamp - ), - ], - [] - ); + sequences.reduce< + Array< + | WrappedFieldsLatest + | WrappedFieldsLatest + > + >((acc, sequence) => { + const { shellAlert, buildingBlocks } = buildAlertGroupFromSequence({ + ruleExecutionLogger, + sequence, + completeRule, + mergeStrategy, + spaceId, + buildReasonMessage, + indicesToQuery, + alertTimestampOverride, + publicBaseUrl, + intendedTimestamp, + }); + if (shellAlert) { + acc.push(shellAlert, ...buildingBlocks); + return acc; + } + return acc; + }, []); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/wrap_suppressed_esql_alerts.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/wrap_suppressed_esql_alerts.ts index b2d01e4d5ee7a..fe72aa566583a 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/wrap_suppressed_esql_alerts.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/wrap_suppressed_esql_alerts.ts @@ -61,7 +61,7 @@ export const wrapSuppressedEsqlAlerts = ({ const suppressionTerms = getSuppressionTerms({ alertSuppression: completeRule?.ruleParams?.alertSuppression, - fields: combinedFields, + input: combinedFields, }); const id = generateAlertId({ diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/new_terms/wrap_suppressed_new_terms_alerts.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/new_terms/wrap_suppressed_new_terms_alerts.ts index fa3781b2a2e63..dc9a322301126 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/new_terms/wrap_suppressed_new_terms_alerts.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/new_terms/wrap_suppressed_new_terms_alerts.ts @@ -58,7 +58,7 @@ export const wrapSuppressedNewTermsAlerts = ({ const suppressionTerms = getSuppressionTerms({ alertSuppression: completeRule?.ruleParams?.alertSuppression, - fields: event.fields, + input: event.fields, }); const instanceId = objectHash([suppressionTerms, completeRule.alertId, spaceId]); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/query/query.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/query/query.ts index 8c235c5e8f238..106a7589a2826 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/query/query.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/query/query.ts @@ -65,6 +65,7 @@ export const queryExecutor = async ({ const hasPlatinumLicense = license.hasAtLeast('platinum'); const result = + // TODO: replace this with getIsAlertSuppressionActive function ruleParams.alertSuppression?.groupBy != null && hasPlatinumLicense ? await groupAndBulkCreate({ runOpts, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/types.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/types.ts index c1e8165fe3aed..94aa55e6b0dd5 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/types.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/types.ts @@ -52,6 +52,8 @@ import type { BuildReasonMessage } from './utils/reason_formatters'; import type { BaseFieldsLatest, DetectionAlert, + EqlBuildingBlockFieldsLatest, + EqlShellFieldsLatest, WrappedFieldsLatest, } from '../../../../common/api/detection_engine/model/alerts'; import type { @@ -354,7 +356,9 @@ export type WrapSuppressedHits = ( export type WrapSequences = ( sequences: Array>, buildReasonMessage: BuildReasonMessage -) => Array>; +) => Array< + WrappedFieldsLatest | WrappedFieldsLatest +>; export type RuleServices = RuleExecutorServices< AlertInstanceState, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/bulk_create_suppressed_alerts_in_memory.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/bulk_create_suppressed_alerts_in_memory.ts index 030cb213d94dd..291b5cfa0d2f6 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/bulk_create_suppressed_alerts_in_memory.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/bulk_create_suppressed_alerts_in_memory.ts @@ -7,14 +7,18 @@ import type { SuppressedAlertService } from '@kbn/rule-registry-plugin/server'; import type { SuppressionFieldsLatest } from '@kbn/rule-registry-plugin/common/schemas'; +import type { EqlHitsSequence } from '@elastic/elasticsearch/lib/api/types'; + import type { SearchAfterAndBulkCreateParams, SearchAfterAndBulkCreateReturnType, WrapSuppressedHits, SignalSourceHit, + SignalSource, } from '../types'; import { MAX_SIGNALS_SUPPRESSION_MULTIPLIER } from '../constants'; -import { addToSearchAfterReturn } from './utils'; +import type { SharedParams } from './utils'; +import { addToSearchAfterReturn, buildShellAlertSuppressionTermsAndFields } from './utils'; import type { AlertSuppressionCamel } from '../../../../../common/api/detection_engine/model/rule_schema'; import { DEFAULT_SUPPRESSION_MISSING_FIELDS_STRATEGY } from '../../../../../common/detection_engine/constants'; import { partitionMissingFieldsEvents } from './partition_missing_fields_events'; @@ -25,8 +29,12 @@ import type { ExperimentalFeatures } from '../../../../../common'; import type { BaseFieldsLatest, + EqlBuildingBlockFieldsLatest, + EqlShellFieldsLatest, WrappedFieldsLatest, } from '../../../../../common/api/detection_engine/model/alerts'; +import { robustGet } from './source_fields_merging/utils/robust_field_access'; +import { buildAlertGroupFromSequence } from '../eql/build_alert_group_from_sequence'; interface SearchAfterAndBulkCreateSuppressedAlertsParams extends SearchAfterAndBulkCreateParams { wrapSuppressedHits: WrapSuppressedHits; @@ -54,9 +62,31 @@ export interface BulkCreateSuppressedAlertsParams mergeSourceAndFields?: boolean; maxNumberOfAlertsMultiplier?: number; } + +export interface BulkCreateSuppressedSequencesParams + extends Pick< + SearchAfterAndBulkCreateSuppressedAlertsParams, + | 'bulkCreate' + | 'services' + | 'buildReasonMessage' + | 'ruleExecutionLogger' + | 'tuple' + | 'alertSuppression' + | 'alertWithSuppression' + | 'alertTimestampOverride' + > { + sequences: Array>; + buildingBlockAlerts?: Array>; + toReturn: SearchAfterAndBulkCreateReturnType; + experimentalFeatures: ExperimentalFeatures; + maxNumberOfAlertsMultiplier?: number; + sharedParams: SharedParams; + alertSuppression: AlertSuppressionCamel; +} /** * wraps, bulk create and suppress alerts in memory, also takes care of missing fields logic. - * If parameter alertSuppression.missingFieldsStrategy configured not to be suppressed, regular alerts will be created for such events without suppression + * If parameter alertSuppression.missingFieldsStrategy configured not to be suppressed, + * regular alerts will be created for such events without suppression */ export const bulkCreateSuppressedAlertsInMemory = async ({ enrichedEvents, @@ -112,6 +142,90 @@ export const bulkCreateSuppressedAlertsInMemory = async ({ }); }; +/** + * wraps, bulk create and suppress alerts in memory, also takes care of missing fields logic. + * If parameter alertSuppression.missingFieldsStrategy configured not to be suppressed, + * regular alerts will be created for such events without suppression + */ +export const bulkCreateSuppressedSequencesInMemory = async ({ + sequences, + toReturn, + bulkCreate, + services, + ruleExecutionLogger, + tuple, + alertSuppression, + buildReasonMessage, + sharedParams, + alertWithSuppression, + alertTimestampOverride, + experimentalFeatures, + maxNumberOfAlertsMultiplier, +}: BulkCreateSuppressedSequencesParams) => { + const suppressOnMissingFields = + (alertSuppression.missingFieldsStrategy ?? DEFAULT_SUPPRESSION_MISSING_FIELDS_STRATEGY) === + AlertSuppressionMissingFieldsStrategyEnum.suppress; + + const suppressibleWrappedSequences: Array< + WrappedFieldsLatest & { + subAlerts: Array>; + } + > = []; + const unsuppressibleWrappedDocs: Array> = []; + + sequences.forEach((sequence) => { + const alertGroupFromSequence = buildAlertGroupFromSequence({ + sequence, + applyOverrides: true, + buildReasonMessage, + ...sharedParams, + }); + const shellAlert = alertGroupFromSequence.shellAlert; + const buildingBlocks = alertGroupFromSequence.buildingBlocks; + if (shellAlert) { + if (!suppressOnMissingFields) { + // does the shell alert have all the suppression fields? + const hasEverySuppressionField = alertSuppression.groupBy.every( + (suppressionPath) => + robustGet({ key: suppressionPath, document: shellAlert._source }) != null + ); + if (!hasEverySuppressionField) { + unsuppressibleWrappedDocs.push(shellAlert, ...buildingBlocks); + } else { + const wrappedWithSuppressionTerms = buildShellAlertSuppressionTermsAndFields({ + shellAlert, + buildingBlockAlerts: buildingBlocks, + ...sharedParams, + }); + suppressibleWrappedSequences.push(wrappedWithSuppressionTerms); + } + } else { + const wrappedWithSuppressionTerms = buildShellAlertSuppressionTermsAndFields({ + shellAlert, + buildingBlockAlerts: buildingBlocks, + ...sharedParams, + }); + suppressibleWrappedSequences.push(wrappedWithSuppressionTerms); + } + } + }); + + return executeBulkCreateAlerts({ + suppressibleWrappedDocs: suppressibleWrappedSequences, + unsuppressibleWrappedDocs, + toReturn, + bulkCreate, + services, + ruleExecutionLogger, + tuple, + alertSuppression, + alertWithSuppression, + alertTimestampOverride, + experimentalFeatures, + maxNumberOfAlertsMultiplier, + }); +}; + export interface ExecuteBulkCreateAlertsParams extends Pick< SearchAfterAndBulkCreateSuppressedAlertsParams, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/bulk_create_with_suppression.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/bulk_create_with_suppression.ts index 7decfd8294913..6c7228d6b78af 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/bulk_create_with_suppression.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/bulk_create_with_suppression.ts @@ -53,7 +53,7 @@ export const bulkCreateWithSuppression = async < }: { alertWithSuppression: SuppressedAlertService; ruleExecutionLogger: IRuleExecutionLogForExecutors; - wrappedDocs: Array>; + wrappedDocs: Array & { subAlerts?: Array> }>; services: RuleServices; suppressionWindow: string; alertTimestampOverride: Date | undefined; @@ -97,13 +97,19 @@ export const bulkCreateWithSuppression = async < } }; + const alerts = wrappedDocs.map((doc) => ({ + _id: doc._id, + // `fields` should have already been merged into `doc._source` + _source: doc._source, + subAlerts: + doc?.subAlerts != null + ? doc?.subAlerts?.map((subAlert) => ({ _id: subAlert._id, _source: subAlert._source })) + : undefined, + })); + const { createdAlerts, errors, suppressedAlerts, alertsWereTruncated } = await alertWithSuppression( - wrappedDocs.map((doc) => ({ - _id: doc._id, - // `fields` should have already been merged into `doc._source` - _source: doc._source, - })), + alerts, suppressionWindow, enrichAlertsWrapper, alertTimestampOverride, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_is_alert_suppression_active.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_is_alert_suppression_active.ts index 5ab06db3043af..263bd88bc1b0e 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_is_alert_suppression_active.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_is_alert_suppression_active.ts @@ -17,6 +17,10 @@ interface GetIsAlertSuppressionActiveParams { licensing: LicensingPluginSetup; } +export const alertSuppressionTypeGuard = ( + alertSuppression: AlertSuppressionCamel | undefined +): alertSuppression is AlertSuppressionCamel => Boolean(alertSuppression?.groupBy?.length); + /** * checks if alert suppression is active: * - rule should have alert suppression config @@ -32,7 +36,7 @@ export const getIsAlertSuppressionActive = async ({ return false; } - const isAlertSuppressionConfigured = Boolean(alertSuppression?.groupBy?.length); + const isAlertSuppressionConfigured = alertSuppressionTypeGuard(alertSuppression); if (!isAlertSuppressionConfigured) { return false; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/source_fields_merging/utils/robust_field_access.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/source_fields_merging/utils/robust_field_access.test.ts index 646068b59eec7..1b4b9e7d49174 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/source_fields_merging/utils/robust_field_access.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/source_fields_merging/utils/robust_field_access.test.ts @@ -34,6 +34,9 @@ describe('robust field access', () => { it('returns undefined if the key does not exist', () => { expect(robustGet({ key: 'a.b.c', document: { a: { b: 'my-value' } } })).toEqual(undefined); }); + it('returns an array if the key exists', () => { + expect(robustGet({ key: 'a.b', document: { a: { b: ['my-value'] } } })).toEqual(['my-value']); + }); }); describe('set', () => { diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/suppression_utils.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/suppression_utils.test.ts index 745dd08977520..46aa25d08d44a 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/suppression_utils.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/suppression_utils.test.ts @@ -85,17 +85,37 @@ describe('getSuppressionTerms', () => { alertSuppression: { groupBy: ['host.name'], }, - fields: { 'host.name': 'localhost-1' }, + input: { 'host.name': 'localhost-1' }, }) ).toEqual([{ field: 'host.name', value: 'localhost-1' }]); }); + it('should return suppression terms when using source', () => { + expect( + getSuppressionTerms({ + alertSuppression: { + groupBy: ['host.name'], + }, + input: { host: { name: 'localhost-1' } }, + }) + ).toEqual([{ field: 'host.name', value: 'localhost-1' }]); + }); + it('should return suppression terms when using source and mixed notation', () => { + expect( + getSuppressionTerms({ + alertSuppression: { + groupBy: ['host.something.name'], + }, + input: { 'host.something': { name: 'localhost-1' } }, + }) + ).toEqual([{ field: 'host.something.name', value: 'localhost-1' }]); + }); it('should return suppression terms array when fields do not have matches', () => { expect( getSuppressionTerms({ alertSuppression: { groupBy: ['host.name'], }, - fields: { 'host.ip': '127.0.0.1' }, + input: { 'host.ip': '127.0.0.1' }, }) ).toEqual([{ field: 'host.name', value: null }]); }); @@ -105,7 +125,7 @@ describe('getSuppressionTerms', () => { alertSuppression: { groupBy: ['host.name'], }, - fields: { 'host.name': ['localhost-2', 'localhost-1'] }, + input: { 'host.name': ['localhost-2', 'localhost-1'] }, }) ).toEqual([{ field: 'host.name', value: ['localhost-1', 'localhost-2'] }]); }); @@ -115,7 +135,7 @@ describe('getSuppressionTerms', () => { alertSuppression: { groupBy: ['host.name', 'host.ip'], }, - fields: { 'host.name': ['localhost-1'], 'agent.name': 'test', 'host.ip': '127.0.0.1' }, + input: { 'host.name': ['localhost-1'], 'agent.name': 'test', 'host.ip': '127.0.0.1' }, }) ).toEqual([ { field: 'host.name', value: ['localhost-1'] }, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/suppression_utils.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/suppression_utils.ts index 44febba73e68e..0e066069665dd 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/suppression_utils.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/suppression_utils.ts @@ -5,7 +5,6 @@ * 2.0. */ -import pick from 'lodash/pick'; import get from 'lodash/get'; import sortBy from 'lodash/sortBy'; @@ -17,10 +16,13 @@ import { ALERT_SUPPRESSION_END, } from '@kbn/rule-data-utils'; import type { AlertSuppressionCamel } from '../../../../../common/api/detection_engine/model/rule_schema'; +import type { ExtraFieldsForShellAlert } from '../eql/build_alert_group_from_sequence'; +import { robustGet } from './source_fields_merging/utils/robust_field_access'; +import type { SearchTypes } from '../../../../../common/detection_engine/types'; export interface SuppressionTerm { field: string; - value: string[] | number[] | null; + value: SearchTypes | null; } /** @@ -47,7 +49,7 @@ export const getSuppressionAlertFields = ({ fallbackTimestamp ); - const suppressionFields = { + const suppressionFields: ExtraFieldsForShellAlert = { [ALERT_INSTANCE_ID]: instanceId, [ALERT_SUPPRESSION_TERMS]: suppressionTerms, [ALERT_SUPPRESSION_START]: suppressionTime, @@ -59,23 +61,21 @@ export const getSuppressionAlertFields = ({ }; /** + * generates values from a source event for the fields provided in the alertSuppression object + * @param alertSuppression {@link AlertSuppressionCamel} options defining how to suppress alerts + * @param input source data from either the _source of "fields" property on the event * returns an array of {@link SuppressionTerm}s by retrieving the appropriate field values based on the provided alertSuppression configuration */ export const getSuppressionTerms = ({ alertSuppression, - fields, + input, }: { - fields: Record | undefined; alertSuppression: AlertSuppressionCamel | undefined; + input: Record | undefined; }): SuppressionTerm[] => { const suppressedBy = alertSuppression?.groupBy ?? []; - - const suppressedProps = pick(fields, suppressedBy) as Record< - string, - string[] | number[] | undefined - >; const suppressionTerms = suppressedBy.map((field) => { - const value = suppressedProps[field] ?? null; + const value = input != null ? robustGet({ document: input, key: field }) ?? null : null; const sortedValue = Array.isArray(value) ? (sortBy(value) as string[] | number[]) : value; return { field, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/utils.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/utils.ts index bf0899978f2b2..271a2ce64883e 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/utils.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/utils.ts @@ -5,14 +5,25 @@ * 2.0. */ import { createHash } from 'crypto'; -import { chunk, get, invert, isEmpty, partition } from 'lodash'; +import { chunk, get, invert, isEmpty, merge, partition } from 'lodash'; import moment from 'moment'; +import objectHash from 'object-hash'; import dateMath from '@kbn/datemath'; import { isCCSRemoteIndexName } from '@kbn/es-query'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { TransportResult } from '@elastic/elasticsearch'; -import { ALERT_UUID, ALERT_RULE_UUID, ALERT_RULE_PARAMETERS } from '@kbn/rule-data-utils'; +import { + ALERT_UUID, + ALERT_RULE_UUID, + ALERT_RULE_PARAMETERS, + TIMESTAMP, + ALERT_INSTANCE_ID, + ALERT_SUPPRESSION_DOCS_COUNT, + ALERT_SUPPRESSION_END, + ALERT_SUPPRESSION_START, + ALERT_SUPPRESSION_TERMS, +} from '@kbn/rule-data-utils'; import type { ListArray, ExceptionListItemSchema, @@ -33,6 +44,7 @@ import type { import { parseDuration } from '@kbn/alerting-plugin/server'; import type { ExceptionListClient, ListClient, ListPluginSetup } from '@kbn/lists-plugin/server'; import type { SanitizedRuleAction } from '@kbn/alerting-plugin/common'; +import type { SuppressionFieldsLatest } from '@kbn/rule-registry-plugin/common/schemas'; import type { TimestampOverride } from '../../../../../common/api/detection_engine/model/rule_schema'; import type { Privilege } from '../../../../../common/api/detection_engine'; import { RuleExecutionStatusEnum } from '../../../../../common/api/detection_engine/rule_monitoring'; @@ -51,6 +63,7 @@ import type { } from '../types'; import type { ShardError } from '../../../types'; import type { + CompleteRule, EqlRuleParams, EsqlRuleParams, MachineLearningRuleParams, @@ -65,9 +78,20 @@ import { withSecuritySpan } from '../../../../utils/with_security_span'; import type { BaseFieldsLatest, DetectionAlert, + EqlBuildingBlockFieldsLatest, + EqlShellFieldsLatest, + WrappedFieldsLatest, } from '../../../../../common/api/detection_engine/model/alerts'; import { ENABLE_CCS_READ_WARNING_SETTING } from '../../../../../common/constants'; import type { GenericBulkCreateResponse } from '../factories'; +import type { ConfigType } from '../../../../config'; +import type { + ExtraFieldsForShellAlert, + WrappedEqlShellOptionalSubAlertsType, +} from '../eql/build_alert_group_from_sequence'; +import type { BuildReasonMessage } from './reason_formatters'; +import { getSuppressionTerms } from './suppression_utils'; +import { robustGet } from './source_fields_merging/utils/robust_field_access'; export const MAX_RULE_GAP_RATIO = 4; @@ -1027,3 +1051,96 @@ export const getDisabledActionsWarningText = ({ return `${alertsGeneratedText} connector ${actionTypesJoined} is not enabled. To send notifications, you need a higher Security Analytics license / tier`; } }; + +export interface SharedParams { + spaceId: string; + completeRule: CompleteRule; + mergeStrategy: ConfigType['alertMergeStrategy']; + indicesToQuery: string[]; + alertTimestampOverride: Date | undefined; + ruleExecutionLogger: IRuleExecutionLogForExecutors; + publicBaseUrl: string | undefined; + primaryTimestamp: string; + secondaryTimestamp?: string; + intendedTimestamp: Date | undefined; +} + +export type RuleWithInMemorySuppression = + | ThreatRuleParams + | EqlRuleParams + | MachineLearningRuleParams; + +export interface SequenceSuppressionTermsAndFieldsParams { + shellAlert: WrappedFieldsLatest; + buildingBlockAlerts: Array>; + spaceId: string; + completeRule: CompleteRule; + indicesToQuery: string[]; + alertTimestampOverride: Date | undefined; + primaryTimestamp: string; + secondaryTimestamp?: string; +} + +export type SequenceSuppressionTermsAndFieldsFactory = ( + shellAlert: WrappedEqlShellOptionalSubAlertsType, + buildingBlockAlerts: Array>, + buildReasonMessage: BuildReasonMessage +) => WrappedFieldsLatest & { + subAlerts: Array>; +}; + +export const buildShellAlertSuppressionTermsAndFields = ({ + shellAlert, + buildingBlockAlerts, + spaceId, + completeRule, + alertTimestampOverride, + primaryTimestamp, + secondaryTimestamp, +}: SequenceSuppressionTermsAndFieldsParams): WrappedFieldsLatest< + EqlShellFieldsLatest & SuppressionFieldsLatest +> & { + subAlerts: Array>; +} => { + const suppressionTerms = getSuppressionTerms({ + alertSuppression: completeRule?.ruleParams?.alertSuppression, + input: shellAlert._source, + }); + const instanceId = objectHash([suppressionTerms, completeRule.alertId, spaceId]); + + const primarySuppressionTime = robustGet({ + key: primaryTimestamp, + document: shellAlert._source, + }) as string | undefined; + + const secondarySuppressionTime = + secondaryTimestamp && + (robustGet({ + key: secondaryTimestamp, + document: shellAlert._source, + }) as string | undefined); + + const suppressionTime = new Date( + primarySuppressionTime ?? + secondarySuppressionTime ?? + alertTimestampOverride ?? + shellAlert._source[TIMESTAMP] + ); + + const suppressionFields: ExtraFieldsForShellAlert = { + [ALERT_INSTANCE_ID]: instanceId, + [ALERT_SUPPRESSION_TERMS]: suppressionTerms, + [ALERT_SUPPRESSION_START]: suppressionTime, + [ALERT_SUPPRESSION_END]: suppressionTime, + [ALERT_SUPPRESSION_DOCS_COUNT]: 0, + }; + + merge(shellAlert._source, suppressionFields); + + return { + _id: shellAlert._id, + _index: shellAlert._index, + _source: shellAlert._source as EqlShellFieldsLatest & SuppressionFieldsLatest, + subAlerts: buildingBlockAlerts, + }; +}; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/wrap_suppressed_alerts.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/wrap_suppressed_alerts.ts index 2e40026c38e4a..6cb176ba70f77 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/wrap_suppressed_alerts.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/wrap_suppressed_alerts.ts @@ -9,28 +9,19 @@ import objectHash from 'object-hash'; import { TIMESTAMP } from '@kbn/rule-data-utils'; import type { SuppressionFieldsLatest } from '@kbn/rule-registry-plugin/common/schemas'; -import type { SignalSourceHit } from '../types'; +import type { SignalSourceHit } from '../types'; import type { BaseFieldsLatest, WrappedFieldsLatest, } from '../../../../../common/api/detection_engine/model/alerts'; -import type { ConfigType } from '../../../../config'; -import type { - CompleteRule, - EqlRuleParams, - MachineLearningRuleParams, - ThreatRuleParams, -} from '../../rule_schema'; -import type { IRuleExecutionLogForExecutors } from '../../rule_monitoring'; + import { transformHitToAlert } from '../factories/utils/transform_hit_to_alert'; import { getSuppressionAlertFields, getSuppressionTerms } from './suppression_utils'; +import type { SharedParams } from './utils'; import { generateId } from './utils'; - import type { BuildReasonMessage } from './reason_formatters'; -type RuleWithInMemorySuppression = ThreatRuleParams | EqlRuleParams | MachineLearningRuleParams; - /** * wraps suppressed alerts * creates instanceId hash, which is used to search on time interval alerts @@ -51,22 +42,12 @@ export const wrapSuppressedAlerts = ({ intendedTimestamp, }: { events: SignalSourceHit[]; - spaceId: string; - completeRule: CompleteRule; - mergeStrategy: ConfigType['alertMergeStrategy']; - indicesToQuery: string[]; buildReasonMessage: BuildReasonMessage; - alertTimestampOverride: Date | undefined; - ruleExecutionLogger: IRuleExecutionLogForExecutors; - publicBaseUrl: string | undefined; - primaryTimestamp: string; - secondaryTimestamp?: string; - intendedTimestamp: Date | undefined; -}): Array> => { +} & SharedParams): Array> => { return events.map((event) => { const suppressionTerms = getSuppressionTerms({ alertSuppression: completeRule?.ruleParams?.alertSuppression, - fields: event.fields, + input: event.fields, }); const id = generateId( diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/post_rule.sh b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/post_rule.sh index e8f5c627d3c88..b40c416943295 100755 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/post_rule.sh +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/post_rule.sh @@ -22,6 +22,7 @@ do { curl -s -k \ -H 'Content-Type: application/json' \ -H 'kbn-xsrf: 123' \ + -H 'elastic-api-version: 2023-10-31' \ -u ${ELASTICSEARCH_USERNAME}:${ELASTICSEARCH_PASSWORD} \ -X POST ${KIBANA_URL}${SPACE_URL}/api/detection_engine/rules \ -d @${RULE} \ diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/rules/queries/sequence_eql_query.json b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/rules/queries/sequence_eql_query.json new file mode 100644 index 0000000000000..8c5531188379b --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/rules/queries/sequence_eql_query.json @@ -0,0 +1,62 @@ +{ + "name": "EQL sequence duration", + "description": "Rule with an eql query", + "false_positives": ["https://www.example.com/some-article-about-a-false-positive"], + "rule_id": "rule-id-eql-1", + "enabled": true, + "index": ["auditbeat*", "packetbeat*"], + "interval": "30s", + "query": "sequence with maxspan=10m [any where agent.type == \"auditbeat\"] [any where event.category == \"network_traffic\"]", + "meta": { + "anything_you_want_ui_related_or_otherwise": { + "as_deep_structured_as_you_need": { + "any_data_type": {} + } + } + }, + "risk_score": 99, + "to": "now", + "from": "now-120s", + "severity": "high", + "type": "eql", + "language": "eql", + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0040", + "name": "impact", + "reference": "https://attack.mitre.org/tactics/TA0040/" + }, + "technique": [ + { + "id": "T1499", + "name": "endpoint denial of service", + "reference": "https://attack.mitre.org/techniques/T1499/" + } + ] + }, + { + "framework": "Some other Framework you want", + "tactic": { + "id": "some-other-id", + "name": "Some other name", + "reference": "https://example.com" + }, + "technique": [ + { + "id": "some-other-id", + "name": "some other technique name", + "reference": "https://example.com" + } + ] + } + ], + "references": ["http://www.example.com/some-article-about-attack"], + "alert_suppression": { + "group_by": ["agent.name"], + "duration": { "value": 5, "unit": "h" }, + "missing_fields_strategy": "suppress" + }, + "version": 1 +} diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/rules/queries/sequence_eql_query_no_duration.json b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/rules/queries/sequence_eql_query_no_duration.json new file mode 100644 index 0000000000000..a3df1cfe24938 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/rules/queries/sequence_eql_query_no_duration.json @@ -0,0 +1,61 @@ +{ + "name": "EQL sequence no duration", + "description": "Rule with an eql query", + "false_positives": ["https://www.example.com/some-article-about-a-false-positive"], + "rule_id": "rule-id-eql-2", + "enabled": true, + "index": ["auditbeat*", "packetbeat*"], + "interval": "30s", + "query": "sequence with maxspan=10m [any where agent.type == \"auditbeat\"] [any where event.category == \"network_traffic\"]", + "meta": { + "anything_you_want_ui_related_or_otherwise": { + "as_deep_structured_as_you_need": { + "any_data_type": {} + } + } + }, + "risk_score": 99, + "to": "now", + "from": "now-120s", + "severity": "high", + "type": "eql", + "language": "eql", + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0040", + "name": "impact", + "reference": "https://attack.mitre.org/tactics/TA0040/" + }, + "technique": [ + { + "id": "T1499", + "name": "endpoint denial of service", + "reference": "https://attack.mitre.org/techniques/T1499/" + } + ] + }, + { + "framework": "Some other Framework you want", + "tactic": { + "id": "some-other-id", + "name": "Some other name", + "reference": "https://example.com" + }, + "technique": [ + { + "id": "some-other-id", + "name": "some other technique name", + "reference": "https://example.com" + } + ] + } + ], + "references": ["http://www.example.com/some-article-about-attack"], + "alert_suppression": { + "group_by": ["agent.name"], + "missing_fields_strategy": "suppress" + }, + "version": 1 +} diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/entity_store_data_client.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/entity_store_data_client.ts index 72d650846fc55..dc4e9d7af2ff6 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/entity_store_data_client.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/entity_store_data_client.ts @@ -132,7 +132,7 @@ export class EntityStoreDataClient { this.esClient = clusterClient.asCurrentUser; this.entityClient = new EntityClient({ - esClient: this.esClient, + clusterClient, soClient, logger, }); diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/saved_object/engine_descriptor.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/saved_object/engine_descriptor.ts index cfaea1b1da0ff..a3c7a7d0266a1 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/saved_object/engine_descriptor.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/saved_object/engine_descriptor.ts @@ -49,6 +49,7 @@ export class EngineDescriptorClient { const old = engineDescriptor.saved_objects[0].attributes; const update = { ...old, + error: undefined, // if the engine is being re-initialized, clear any previous error status: ENGINE_STATUS.INSTALLING, filter, fieldHistoryLength, diff --git a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/get.ts b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/get.ts index 0d880484877f6..b9645a3de374e 100644 --- a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/get.ts +++ b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/get.ts @@ -9,6 +9,7 @@ import type { IKibanaResponse, Logger } from '@kbn/core/server'; import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; import { GetRuleMigrationRequestParams, + GetRuleMigrationRequestQuery, type GetRuleMigrationResponse, } from '../../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; import { SIEM_RULE_MIGRATION_PATH } from '../../../../../common/siem_migrations/constants'; @@ -29,18 +30,35 @@ export const registerSiemRuleMigrationsGetRoute = ( { version: '1', validate: { - request: { params: buildRouteValidationWithZod(GetRuleMigrationRequestParams) }, + request: { + params: buildRouteValidationWithZod(GetRuleMigrationRequestParams), + query: buildRouteValidationWithZod(GetRuleMigrationRequestQuery), + }, }, }, withLicense(async (context, req, res): Promise> => { - const migrationId = req.params.migration_id; + const { migration_id: migrationId } = req.params; + const { page, per_page: perPage, search_term: searchTerm } = req.query; try { const ctx = await context.resolve(['securitySolution']); const ruleMigrationsClient = ctx.securitySolution.getSiemRuleMigrationsClient(); - const migrationRules = await ruleMigrationsClient.data.rules.get({ migrationId }); + let from = 0; + if (page && perPage) { + from = page * perPage; + } + const size = perPage; - return res.ok({ body: migrationRules }); + const result = await ruleMigrationsClient.data.rules.get( + { + migrationId, + searchTerm, + }, + from, + size + ); + + return res.ok({ body: result }); } catch (err) { logger.error(err); return res.badRequest({ body: err.message }); diff --git a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/index.ts b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/index.ts index 601b156aee040..c6f3c51a1bb53 100644 --- a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/index.ts +++ b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/index.ts @@ -12,13 +12,14 @@ import { registerSiemRuleMigrationsUpdateRoute } from './update'; import { registerSiemRuleMigrationsGetRoute } from './get'; import { registerSiemRuleMigrationsStartRoute } from './start'; import { registerSiemRuleMigrationsStatsRoute } from './stats'; +import { registerSiemRuleMigrationsTranslationStatsRoute } from './translation_stats'; import { registerSiemRuleMigrationsStopRoute } from './stop'; import { registerSiemRuleMigrationsStatsAllRoute } from './stats_all'; import { registerSiemRuleMigrationsResourceUpsertRoute } from './resources/upsert'; import { registerSiemRuleMigrationsResourceGetRoute } from './resources/get'; import { registerSiemRuleMigrationsRetryRoute } from './retry'; -import { registerSiemRuleMigrationsInstallRoute } from './rules/install'; -import { registerSiemRuleMigrationsInstallTranslatedRoute } from './rules/install_translated'; +import { registerSiemRuleMigrationsInstallRoute } from './install'; +import { registerSiemRuleMigrationsInstallTranslatedRoute } from './install_translated'; export const registerSiemRuleMigrationsRoutes = ( router: SecuritySolutionPluginRouter, @@ -31,6 +32,7 @@ export const registerSiemRuleMigrationsRoutes = ( registerSiemRuleMigrationsStartRoute(router, logger); registerSiemRuleMigrationsRetryRoute(router, logger); registerSiemRuleMigrationsStatsRoute(router, logger); + registerSiemRuleMigrationsTranslationStatsRoute(router, logger); registerSiemRuleMigrationsStopRoute(router, logger); registerSiemRuleMigrationsInstallRoute(router, logger); registerSiemRuleMigrationsInstallTranslatedRoute(router, logger); diff --git a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/rules/install.ts b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/install.ts similarity index 85% rename from x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/rules/install.ts rename to x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/install.ts index 7e8b1a25a4837..7b41ea536aadf 100644 --- a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/rules/install.ts +++ b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/install.ts @@ -7,15 +7,15 @@ import type { IKibanaResponse, Logger } from '@kbn/core/server'; import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; -import { SIEM_RULE_MIGRATION_INSTALL_PATH } from '../../../../../../common/siem_migrations/constants'; -import type { InstallMigrationRulesResponse } from '../../../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; +import { SIEM_RULE_MIGRATION_INSTALL_PATH } from '../../../../../common/siem_migrations/constants'; +import type { InstallMigrationRulesResponse } from '../../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; import { InstallMigrationRulesRequestBody, InstallMigrationRulesRequestParams, -} from '../../../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; -import type { SecuritySolutionPluginRouter } from '../../../../../types'; -import { withLicense } from '../util/with_license'; -import { installTranslated } from '../util/installation'; +} from '../../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; +import type { SecuritySolutionPluginRouter } from '../../../../types'; +import { withLicense } from './util/with_license'; +import { installTranslated } from './util/installation'; export const registerSiemRuleMigrationsInstallRoute = ( router: SecuritySolutionPluginRouter, diff --git a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/rules/install_translated.ts b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/install_translated.ts similarity index 84% rename from x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/rules/install_translated.ts rename to x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/install_translated.ts index 6fd4b5f0980b6..ac6a598c4b92f 100644 --- a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/rules/install_translated.ts +++ b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/install_translated.ts @@ -7,12 +7,12 @@ import type { IKibanaResponse, Logger } from '@kbn/core/server'; import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; -import { SIEM_RULE_MIGRATION_INSTALL_TRANSLATED_PATH } from '../../../../../../common/siem_migrations/constants'; -import type { InstallTranslatedMigrationRulesResponse } from '../../../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; -import { InstallTranslatedMigrationRulesRequestParams } from '../../../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; -import type { SecuritySolutionPluginRouter } from '../../../../../types'; -import { withLicense } from '../util/with_license'; -import { installTranslated } from '../util/installation'; +import { SIEM_RULE_MIGRATION_INSTALL_TRANSLATED_PATH } from '../../../../../common/siem_migrations/constants'; +import type { InstallTranslatedMigrationRulesResponse } from '../../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; +import { InstallTranslatedMigrationRulesRequestParams } from '../../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; +import type { SecuritySolutionPluginRouter } from '../../../../types'; +import { withLicense } from './util/with_license'; +import { installTranslated } from './util/installation'; export const registerSiemRuleMigrationsInstallTranslatedRoute = ( router: SecuritySolutionPluginRouter, diff --git a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/translation_stats.ts b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/translation_stats.ts new file mode 100644 index 0000000000000..4f9d12385e32d --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/translation_stats.ts @@ -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 type { IKibanaResponse, Logger } from '@kbn/core/server'; +import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; +import type { GetRuleMigrationTranslationStatsResponse } from '../../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; +import { GetRuleMigrationTranslationStatsRequestParams } from '../../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; +import { SIEM_RULE_MIGRATION_TRANSLATION_STATS_PATH } from '../../../../../common/siem_migrations/constants'; +import type { SecuritySolutionPluginRouter } from '../../../../types'; +import { withLicense } from './util/with_license'; + +export const registerSiemRuleMigrationsTranslationStatsRoute = ( + router: SecuritySolutionPluginRouter, + logger: Logger +) => { + router.versioned + .get({ + path: SIEM_RULE_MIGRATION_TRANSLATION_STATS_PATH, + access: 'internal', + security: { authz: { requiredPrivileges: ['securitySolution'] } }, + }) + .addVersion( + { + version: '1', + validate: { + request: { + params: buildRouteValidationWithZod(GetRuleMigrationTranslationStatsRequestParams), + }, + }, + }, + withLicense( + async ( + context, + req, + res + ): Promise> => { + const migrationId = req.params.migration_id; + try { + const ctx = await context.resolve(['securitySolution']); + const ruleMigrationsClient = ctx.securitySolution.getSiemRuleMigrationsClient(); + + const stats = await ruleMigrationsClient.data.rules.getTranslationStats(migrationId); + + return res.ok({ body: stats }); + } catch (err) { + logger.error(err); + return res.badRequest({ body: err.message }); + } + } + ) + ); +}; diff --git a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/util/installation.ts b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/util/installation.ts index ee211e8a935de..df86a1f953656 100644 --- a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/util/installation.ts +++ b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/util/installation.ts @@ -42,7 +42,7 @@ const installPrebuiltRules = async ( const rulesToUpdate: UpdateRuleMigrationInput[] = []; const assetsToInstall: PrebuiltRuleAsset[] = []; rulesToInstall.forEach((ruleToInstall) => { - // If prebuilt rule has already been install, then just update migration rule with the installed rule id + // If prebuilt rule has already been installed, then just update migration rule with the installed rule id const installedRule = currentRules.find( (rule) => rule.rule_id === ruleToInstall.elastic_rule?.prebuilt_rule_id ); @@ -177,7 +177,7 @@ export const installTranslated = async ({ const detectionRulesClient = securitySolutionContext.getDetectionRulesClient(); const ruleMigrationsClient = securitySolutionContext.getSiemRuleMigrationsClient(); - const rulesToInstall = await ruleMigrationsClient.data.rules.get({ + const { data: rulesToInstall } = await ruleMigrationsClient.data.rules.get({ migrationId, ids, installable: true, diff --git a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/data/rule_migrations_data_rules_client.ts b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/data/rule_migrations_data_rules_client.ts index 0a82e2c311906..209f2e4416e16 100644 --- a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/data/rule_migrations_data_rules_client.ts +++ b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/data/rule_migrations_data_rules_client.ts @@ -15,11 +15,15 @@ import type { QueryDslQueryContainer, } from '@elastic/elasticsearch/lib/api/types'; import type { StoredRuleMigration } from '../types'; -import { SiemMigrationStatus } from '../../../../../common/siem_migrations/constants'; +import { + SiemMigrationRuleTranslationResult, + SiemMigrationStatus, +} from '../../../../../common/siem_migrations/constants'; import type { ElasticRule, RuleMigration, RuleMigrationTaskStats, + RuleMigrationTranslationStats, } from '../../../../../common/siem_migrations/model/rule_migration.gen'; import { RuleMigrationsDataBaseClient } from './rule_migrations_data_base_client'; @@ -39,6 +43,7 @@ export interface RuleMigrationFilterOptions { status?: SiemMigrationStatus | SiemMigrationStatus[]; ids?: string[]; installable?: boolean; + searchTerm?: string; } /* BULK_MAX_SIZE defines the number to break down the bulk operations by. @@ -46,6 +51,20 @@ export interface RuleMigrationFilterOptions { */ const BULK_MAX_SIZE = 500 as const; +const getInstallableConditions = (): QueryDslQueryContainer[] => { + return [ + { term: { translation_result: SiemMigrationRuleTranslationResult.FULL } }, + { + nested: { + path: 'elastic_rule', + query: { + bool: { must_not: { exists: { field: 'elastic_rule.id' } } }, + }, + }, + }, + ]; +}; + export class RuleMigrationsDataRulesClient extends RuleMigrationsDataBaseClient { /** Indexes an array of rule migrations to be processed */ async create(ruleMigrations: CreateRuleMigrationInput[]): Promise { @@ -108,18 +127,24 @@ export class RuleMigrationsDataRulesClient extends RuleMigrationsDataBaseClient } /** Retrieves an array of rule documents of a specific migrations */ - async get(filters: RuleMigrationFilterOptions): Promise { + async get( + filters: RuleMigrationFilterOptions, + from?: number, + size?: number + ): Promise<{ total: number; data: StoredRuleMigration[] }> { const index = await this.getIndexName(); const query = this.getFilterQuery(filters); - const storedRuleMigrations = await this.esClient - .search({ index, query, sort: '_doc' }) - .then(this.processResponseHits.bind(this)) + const result = await this.esClient + .search({ index, query, sort: '_doc', from, size }) .catch((error) => { this.logger.error(`Error searching rule migrations: ${error.message}`); throw error; }); - return storedRuleMigrations; + return { + total: this.getTotalHits(result), + data: this.processResponseHits(result), + }; } /** @@ -217,6 +242,49 @@ export class RuleMigrationsDataRulesClient extends RuleMigrationsDataBaseClient }); } + /** Retrieves the translation stats for the rule migrations with the provided id */ + async getTranslationStats(migrationId: string): Promise { + const index = await this.getIndexName(); + const query = this.getFilterQuery({ migrationId }); + + const aggregations = { + prebuilt: { + filter: { + nested: { + path: 'elastic_rule', + query: { exists: { field: 'elastic_rule.prebuilt_rule_id' } }, + }, + }, + }, + installable: { + filter: { + bool: { + must: getInstallableConditions(), + }, + }, + }, + }; + const result = await this.esClient + .search({ index, query, aggregations, _source: false }) + .catch((error) => { + this.logger.error(`Error getting rule migrations stats: ${error.message}`); + throw error; + }); + + const bucket = result.aggregations ?? {}; + const total = this.getTotalHits(result); + const prebuilt = (bucket.prebuilt as AggregationsFilterAggregate)?.doc_count ?? 0; + return { + id: migrationId, + rules: { + total, + prebuilt, + custom: total - prebuilt, + installable: (bucket.installable as AggregationsFilterAggregate)?.doc_count ?? 0, + }, + }; + } + /** Retrieves the stats for the rule migrations with the provided id */ async getStats(migrationId: string): Promise { const index = await this.getIndexName(); @@ -295,6 +363,7 @@ export class RuleMigrationsDataRulesClient extends RuleMigrationsDataBaseClient status, ids, installable, + searchTerm, }: RuleMigrationFilterOptions): QueryDslQueryContainer { const filter: QueryDslQueryContainer[] = [{ term: { migration_id: migrationId } }]; if (status) { @@ -308,15 +377,15 @@ export class RuleMigrationsDataRulesClient extends RuleMigrationsDataBaseClient filter.push({ terms: { _id: ids } }); } if (installable) { - filter.push( - { term: { translation_result: 'full' } }, - { - nested: { - path: 'elastic_rule', - query: { bool: { must_not: { exists: { field: 'elastic_rule.id' } } } }, - }, - } - ); + filter.push(...getInstallableConditions()); + } + if (searchTerm?.length) { + filter.push({ + nested: { + path: 'elastic_rule', + query: { match: { 'elastic_rule.title': searchTerm } }, + }, + }); } return { bool: { filter } }; } diff --git a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/data/rule_migrations_field_maps.ts b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/data/rule_migrations_field_maps.ts index 8e8a3c5ee0f27..09a4bef34c279 100644 --- a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/data/rule_migrations_field_maps.ts +++ b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/data/rule_migrations_field_maps.ts @@ -19,17 +19,17 @@ export const ruleMigrationsFieldMap: FieldMap { registerFleetIntegrationsRoutes(router); registerLegacyRuleActionsRoutes(router, logger); @@ -154,4 +157,6 @@ export const initRoutes = ( // Security Integrations getFleetManagedIndexTemplatesRoute(router); + + registerWorkflowInsightsRoutes(router, config, endpointContext); }; diff --git a/x-pack/plugins/security_solution/tsconfig.json b/x-pack/plugins/security_solution/tsconfig.json index 4ed7e1cbdd35f..7767fffe69824 100644 --- a/x-pack/plugins/security_solution/tsconfig.json +++ b/x-pack/plugins/security_solution/tsconfig.json @@ -209,8 +209,6 @@ "@kbn/core-theme-browser", "@kbn/integration-assistant-plugin", "@kbn/avc-banner", - "@kbn/esql-ast", - "@kbn/esql-validation-autocomplete", "@kbn/config", "@kbn/openapi-common", "@kbn/securitysolution-lists-common", @@ -235,6 +233,7 @@ "@kbn/discover-shared-plugin", "@kbn/react-hooks", "@kbn/index-adapter", - "@kbn/core-http-server-utils" + "@kbn/core-http-server-utils", + "@kbn/llm-tasks-plugin" ] } diff --git a/x-pack/plugins/stack_connectors/public/connector_types/inference/connector.test.tsx b/x-pack/plugins/stack_connectors/public/connector_types/inference/connector.test.tsx index d445504011b5f..4b4beb16d798e 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/inference/connector.test.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/inference/connector.test.tsx @@ -25,13 +25,19 @@ jest.mock('@kbn/triggers-actions-ui-plugin/public/common/lib/kibana', () => ({ })), })); -jest.mock('@faker-js/faker', () => ({ - faker: { - string: { - alpha: jest.fn().mockReturnValue('123'), +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; diff --git a/x-pack/plugins/stack_connectors/public/connector_types/inference/params.tsx b/x-pack/plugins/stack_connectors/public/connector_types/inference/params.tsx index 0013f943e3639..c24fff24c33f6 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/inference/params.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/inference/params.tsx @@ -11,7 +11,7 @@ import { type ActionParamsProps, } from '@kbn/triggers-actions-ui-plugin/public'; import { EuiTextArea, EuiFormRow, EuiSpacer, EuiSelect } from '@elastic/eui'; -import { RuleFormParamsErrors } from '@kbn/alerts-ui-shared'; +import type { RuleFormParamsErrors } from '@kbn/response-ops-rule-form'; import { ChatCompleteParams, RerankParams, diff --git a/x-pack/plugins/stack_connectors/tsconfig.json b/x-pack/plugins/stack_connectors/tsconfig.json index 66c84d17408bc..fa7e2dd9be6f8 100644 --- a/x-pack/plugins/stack_connectors/tsconfig.json +++ b/x-pack/plugins/stack_connectors/tsconfig.json @@ -42,8 +42,8 @@ "@kbn/utility-types", "@kbn/task-manager-plugin", "@kbn/alerting-types", - "@kbn/alerts-ui-shared", "@kbn/core-notifications-browser", + "@kbn/response-ops-rule-form", ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/streams/common/index.ts b/x-pack/plugins/streams/common/index.ts index 3a7306e46cae2..634994cb87f13 100644 --- a/x-pack/plugins/streams/common/index.ts +++ b/x-pack/plugins/streams/common/index.ts @@ -5,4 +5,4 @@ * 2.0. */ -export type { StreamDefinition } from './types'; +export type { StreamDefinition, ReadStreamDefinition } from './types'; diff --git a/x-pack/plugins/streams/common/types.ts b/x-pack/plugins/streams/common/types.ts index c2d99d4ba1d89..59cdd1cf9c4b9 100644 --- a/x-pack/plugins/streams/common/types.ts +++ b/x-pack/plugins/streams/common/types.ts @@ -33,11 +33,11 @@ export interface AndCondition { and: Condition[]; } -export interface RerouteOrCondition { +export interface OrCondition { or: Condition[]; } -export type Condition = FilterCondition | AndCondition | RerouteOrCondition | undefined; +export type Condition = FilterCondition | AndCondition | OrCondition | undefined; export const conditionSchema: z.ZodType = z.lazy(() => z.union([ @@ -77,17 +77,17 @@ export const fieldDefinitionSchema = z.object({ export type FieldDefinition = z.infer; +export const streamChildSchema = z.object({ + id: z.string(), + condition: z.optional(conditionSchema), +}); + +export type StreamChild = z.infer; + export const streamWithoutIdDefinitonSchema = z.object({ processing: z.array(processingDefinitionSchema).default([]), fields: z.array(fieldDefinitionSchema).default([]), - children: z - .array( - z.object({ - id: z.string(), - condition: z.optional(conditionSchema), - }) - ) - .default([]), + children: z.array(streamChildSchema).default([]), }); export type StreamWithoutIdDefinition = z.infer; @@ -110,3 +110,9 @@ export type StreamDefinition = z.infer; export const streamDefinitonWithoutChildrenSchema = streamDefinitonSchema.omit({ children: true }); export type StreamWithoutChildrenDefinition = z.infer; + +export const readStreamDefinitonSchema = streamDefinitonSchema.extend({ + inheritedFields: z.array(fieldDefinitionSchema.extend({ from: z.string() })).default([]), +}); + +export type ReadStreamDefinition = z.infer; diff --git a/x-pack/plugins/streams/kibana.jsonc b/x-pack/plugins/streams/kibana.jsonc index 06c37ed245cf1..b9ce6ef68e27e 100644 --- a/x-pack/plugins/streams/kibana.jsonc +++ b/x-pack/plugins/streams/kibana.jsonc @@ -1,7 +1,7 @@ { "type": "plugin", "id": "@kbn/streams-plugin", - "owner": "@simianhacker @flash1293 @dgieselaar", + "owner": "@elastic/streams-program-team", "description": "A manager for Streams", "group": "observability", "visibility": "private", diff --git a/x-pack/plugins/streams/server/lib/streams/helpers/condition_fields.ts b/x-pack/plugins/streams/server/lib/streams/helpers/condition_fields.ts new file mode 100644 index 0000000000000..48b06b8ea0701 --- /dev/null +++ b/x-pack/plugins/streams/server/lib/streams/helpers/condition_fields.ts @@ -0,0 +1,85 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { Condition, FilterCondition } from '../../../../common/types'; +import { isAndCondition, isFilterCondition, isOrCondition } from './condition_guards'; + +export function isComplete(condition: Condition): boolean { + if (isFilterCondition(condition)) { + return condition.field !== undefined && condition.field !== ''; + } + if (isAndCondition(condition)) { + return condition.and.every(isComplete); + } + if (isOrCondition(condition)) { + return condition.or.every(isComplete); + } + return false; +} + +export function getFields( + condition: Condition +): Array<{ name: string; type: 'number' | 'string' }> { + const fields = collectFields(condition); + // deduplicate fields, if mapped as string and number, keep as number + const uniqueFields = new Map(); + fields.forEach((field) => { + const existing = uniqueFields.get(field.name); + if (existing === 'number') { + return; + } + if (existing === 'string' && field.type === 'number') { + uniqueFields.set(field.name, 'number'); + return; + } + uniqueFields.set(field.name, field.type); + }); + + return Array.from(uniqueFields).map(([name, type]) => ({ name, type })); +} + +function collectFields(condition: Condition): Array<{ name: string; type: 'number' | 'string' }> { + if (isFilterCondition(condition)) { + return [{ name: condition.field, type: getFieldTypeForFilterCondition(condition) }]; + } + if (isAndCondition(condition)) { + return condition.and.flatMap(collectFields); + } + if (isOrCondition(condition)) { + return condition.or.flatMap(collectFields); + } + return []; +} + +function getFieldTypeForFilterCondition(condition: FilterCondition): 'number' | 'string' { + switch (condition.operator) { + case 'gt': + case 'gte': + case 'lt': + case 'lte': + return 'number'; + case 'neq': + case 'eq': + case 'exists': + case 'contains': + case 'startsWith': + case 'endsWith': + case 'notExists': + return 'string'; + default: + return 'string'; + } +} + +export function validateCondition(condition: Condition) { + if (isFilterCondition(condition)) { + // check whether a field is specified + if (!condition.field.trim()) { + throw new Error('Field is required in conditions'); + } + } +} diff --git a/x-pack/plugins/streams/server/lib/streams/helpers/condition_guards.ts b/x-pack/plugins/streams/server/lib/streams/helpers/condition_guards.ts new file mode 100644 index 0000000000000..1469471bd8943 --- /dev/null +++ b/x-pack/plugins/streams/server/lib/streams/helpers/condition_guards.ts @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + AndCondition, + conditionSchema, + FilterCondition, + filterConditionSchema, + OrCondition, +} from '../../../../common/types'; + +export function isFilterCondition(subject: any): subject is FilterCondition { + const result = filterConditionSchema.safeParse(subject); + return result.success; +} + +export function isAndCondition(subject: any): subject is AndCondition { + const result = conditionSchema.safeParse(subject); + return result.success && subject.and != null; +} + +export function isOrCondition(subject: any): subject is OrCondition { + const result = conditionSchema.safeParse(subject); + return result.success && subject.or != null; +} diff --git a/x-pack/plugins/streams/server/lib/streams/helpers/condition_to_painless.ts b/x-pack/plugins/streams/server/lib/streams/helpers/condition_to_painless.ts index dccc15b2ec8fc..1894ebaa6226d 100644 --- a/x-pack/plugins/streams/server/lib/streams/helpers/condition_to_painless.ts +++ b/x-pack/plugins/streams/server/lib/streams/helpers/condition_to_painless.ts @@ -7,30 +7,12 @@ import { isBoolean, isString } from 'lodash'; import { - AndCondition, BinaryFilterCondition, Condition, - conditionSchema, FilterCondition, - filterConditionSchema, - RerouteOrCondition, UnaryFilterCondition, } from '../../../../common/types'; - -function isFilterCondition(subject: any): subject is FilterCondition { - const result = filterConditionSchema.safeParse(subject); - return result.success; -} - -function isAndCondition(subject: any): subject is AndCondition { - const result = conditionSchema.safeParse(subject); - return result.success && subject.and != null; -} - -function isOrCondition(subject: any): subject is RerouteOrCondition { - const result = conditionSchema.safeParse(subject); - return result.success && subject.or != null; -} +import { isAndCondition, isFilterCondition, isOrCondition } from './condition_guards'; function safePainlessField(condition: FilterCondition) { return `ctx.${condition.field.split('.').join('?.')}`; diff --git a/x-pack/plugins/streams/server/lib/streams/helpers/condition_to_query_dsl.ts b/x-pack/plugins/streams/server/lib/streams/helpers/condition_to_query_dsl.ts new file mode 100644 index 0000000000000..3864639175008 --- /dev/null +++ b/x-pack/plugins/streams/server/lib/streams/helpers/condition_to_query_dsl.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 { Condition, FilterCondition } from '../../../../common/types'; +import { isAndCondition, isFilterCondition, isOrCondition } from './condition_guards'; + +function conditionToClause(condition: FilterCondition) { + switch (condition.operator) { + case 'neq': + return { bool: { must_not: { match: { [condition.field]: condition.value } } } }; + case 'eq': + return { match: { [condition.field]: condition.value } }; + case 'exists': + return { exists: { field: condition.field } }; + case 'gt': + return { range: { [condition.field]: { gt: condition.value } } }; + case 'gte': + return { range: { [condition.field]: { gte: condition.value } } }; + case 'lt': + return { range: { [condition.field]: { lt: condition.value } } }; + case 'lte': + return { range: { [condition.field]: { lte: condition.value } } }; + case 'contains': + return { wildcard: { [condition.field]: `*${condition.value}*` } }; + case 'startsWith': + return { prefix: { [condition.field]: condition.value } }; + case 'endsWith': + return { wildcard: { [condition.field]: `*${condition.value}` } }; + case 'notExists': + return { bool: { must_not: { exists: { field: condition.field } } } }; + default: + return { match_none: {} }; + } +} + +export function conditionToQueryDsl(condition: Condition): any { + if (isFilterCondition(condition)) { + return conditionToClause(condition); + } + if (isAndCondition(condition)) { + const and = condition.and.map((filter) => conditionToQueryDsl(filter)); + return { + bool: { + must: and, + }, + }; + } + if (isOrCondition(condition)) { + const or = condition.or.map((filter) => conditionToQueryDsl(filter)); + return { + bool: { + should: or, + }, + }; + } + return { + match_none: {}, + }; +} diff --git a/x-pack/plugins/streams/server/lib/streams/ingest_pipelines/logs_default_pipeline.ts b/x-pack/plugins/streams/server/lib/streams/ingest_pipelines/logs_default_pipeline.ts index 762155ba5047c..90f941657faf4 100644 --- a/x-pack/plugins/streams/server/lib/streams/ingest_pipelines/logs_default_pipeline.ts +++ b/x-pack/plugins/streams/server/lib/streams/ingest_pipelines/logs_default_pipeline.ts @@ -20,4 +20,9 @@ export const logsDefaultPipelineProcessors = [ ignore_missing_pipeline: true, }, }, + { + dot_expander: { + field: '*', + }, + }, ]; diff --git a/x-pack/plugins/streams/server/lib/streams/stream_crud.ts b/x-pack/plugins/streams/server/lib/streams/stream_crud.ts index 245e06e8b4573..452b0f40cb38e 100644 --- a/x-pack/plugins/streams/server/lib/streams/stream_crud.ts +++ b/x-pack/plugins/streams/server/lib/streams/stream_crud.ts @@ -89,7 +89,6 @@ async function upsertInternalStream({ definition, scopedClusterClient }: BasePar type ListStreamsParams = BaseParams; export interface ListStreamResponse { - total: number; definitions: StreamDefinition[]; } @@ -103,12 +102,14 @@ export async function listStreams({ }); const dataStreams = await listDataStreamsAsStreams({ scopedClusterClient }); - const definitions = response.hits.hits.map((hit) => ({ ...hit._source!, managed: true })); - const total = response.hits.total!; + let definitions = response.hits.hits.map((hit) => ({ ...hit._source!, managed: true })); + const hasAccess = await Promise.all( + definitions.map((definition) => checkReadAccess({ id: definition.id, scopedClusterClient })) + ); + definitions = definitions.filter((_, index) => hasAccess[index]); return { definitions: [...definitions, ...dataStreams], - total: (typeof total === 'number' ? total : total.value) + dataStreams.length, }; } @@ -244,7 +245,9 @@ export async function readAncestors({ return { ancestors: await Promise.all( - ancestorIds.map((ancestorId) => readStream({ scopedClusterClient, id: ancestorId })) + ancestorIds.map((ancestorId) => + readStream({ scopedClusterClient, id: ancestorId, skipAccessCheck: true }) + ) ), }; } diff --git a/x-pack/plugins/streams/server/routes/index.ts b/x-pack/plugins/streams/server/routes/index.ts index 7267dbedeacff..cf130e99db3fc 100644 --- a/x-pack/plugins/streams/server/routes/index.ts +++ b/x-pack/plugins/streams/server/routes/index.ts @@ -14,6 +14,7 @@ import { forkStreamsRoute } from './streams/fork'; import { listStreamsRoute } from './streams/list'; import { readStreamRoute } from './streams/read'; import { resyncStreamsRoute } from './streams/resync'; +import { sampleStreamRoute } from './streams/sample'; import { streamsStatusRoutes } from './streams/settings'; export const streamsRouteRepository = { @@ -27,6 +28,7 @@ export const streamsRouteRepository = { ...streamsStatusRoutes, ...esqlRoutes, ...disableStreamsRoute, + ...sampleStreamRoute, }; export type StreamsRouteRepository = typeof streamsRouteRepository; diff --git a/x-pack/plugins/streams/server/routes/streams/edit.ts b/x-pack/plugins/streams/server/routes/streams/edit.ts index 6125aa2470b94..e280796bc9780 100644 --- a/x-pack/plugins/streams/server/routes/streams/edit.ts +++ b/x-pack/plugins/streams/server/routes/streams/edit.ts @@ -27,6 +27,7 @@ import { import { MalformedStreamId } from '../../lib/streams/errors/malformed_stream_id'; import { getParentId } from '../../lib/streams/helpers/hierarchy'; import { MalformedChildren } from '../../lib/streams/errors/malformed_children'; +import { validateCondition } from '../../lib/streams/helpers/condition_fields'; export const editStreamRoute = createServerRoute({ endpoint: 'PUT /api/streams/{id}', @@ -57,7 +58,7 @@ export const editStreamRoute = createServerRoute({ const parentId = getParentId(params.path.id); let parentDefinition: StreamDefinition | undefined; - const streamDefinition = { ...params.body }; + const streamDefinition = { ...params.body, id: params.path.id }; // always need to go from the leaves to the parent when syncing ingest pipelines, otherwise data // will be routed before the data stream is ready @@ -151,7 +152,7 @@ async function updateParentStream( async function validateStreamChildren( scopedClusterClient: IScopedClusterClient, id: string, - children: Array<{ id: string }> + children: StreamDefinition['children'] ) { try { const { definition: oldDefinition } = await readStream({ @@ -160,6 +161,9 @@ async function validateStreamChildren( }); const oldChildren = oldDefinition.children.map((child) => child.id); const newChildren = new Set(children.map((child) => child.id)); + children.forEach((child) => { + validateCondition(child.condition); + }); if (oldChildren.some((child) => !newChildren.has(child))) { throw new MalformedChildren( 'Cannot remove children from a stream, please delete the stream instead' diff --git a/x-pack/plugins/streams/server/routes/streams/fork.ts b/x-pack/plugins/streams/server/routes/streams/fork.ts index a4d846ceccb35..070dc66b9ab10 100644 --- a/x-pack/plugins/streams/server/routes/streams/fork.ts +++ b/x-pack/plugins/streams/server/routes/streams/fork.ts @@ -18,6 +18,7 @@ import { conditionSchema, streamDefinitonWithoutChildrenSchema } from '../../../ import { syncStream, readStream, validateAncestorFields } from '../../lib/streams/stream_crud'; import { MalformedStreamId } from '../../lib/streams/errors/malformed_stream_id'; import { isChildOf } from '../../lib/streams/helpers/hierarchy'; +import { validateCondition } from '../../lib/streams/helpers/condition_fields'; export const forkStreamsRoute = createServerRoute({ endpoint: 'POST /api/streams/{id}/_fork', @@ -48,6 +49,8 @@ export const forkStreamsRoute = createServerRoute({ throw new ForkConditionMissing('You must provide a condition to fork a stream'); } + validateCondition(params.body.condition); + const { scopedClusterClient } = await getScopedClients({ request }); const { definition: rootDefinition } = await readStream({ diff --git a/x-pack/plugins/streams/server/routes/streams/read.ts b/x-pack/plugins/streams/server/routes/streams/read.ts index 5c503e2b7e625..dbbda8c0dc5de 100644 --- a/x-pack/plugins/streams/server/routes/streams/read.ts +++ b/x-pack/plugins/streams/server/routes/streams/read.ts @@ -7,10 +7,10 @@ import { z } from '@kbn/zod'; import { notFound, internal } from '@hapi/boom'; +import { ReadStreamDefinition } from '../../../common/types'; import { createServerRoute } from '../create_server_route'; import { DefinitionNotFound } from '../../lib/streams/errors'; import { readAncestors, readStream } from '../../lib/streams/stream_crud'; -import { StreamDefinition } from '../../../common'; export const readStreamRoute = createServerRoute({ endpoint: 'GET /api/streams/{id}', @@ -33,11 +33,7 @@ export const readStreamRoute = createServerRoute({ request, logger, getScopedClients, - }): Promise< - StreamDefinition & { - inheritedFields: Array; - } - > => { + }): Promise => { try { const { scopedClusterClient } = await getScopedClients({ request }); const streamEntity = await readStream({ diff --git a/x-pack/plugins/streams/server/routes/streams/sample.ts b/x-pack/plugins/streams/server/routes/streams/sample.ts new file mode 100644 index 0000000000000..cd3a989c29109 --- /dev/null +++ b/x-pack/plugins/streams/server/routes/streams/sample.ts @@ -0,0 +1,105 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { z } from '@kbn/zod'; +import { notFound, internal } from '@hapi/boom'; +import { conditionSchema } from '../../../common/types'; +import { createServerRoute } from '../create_server_route'; +import { DefinitionNotFound } from '../../lib/streams/errors'; +import { checkReadAccess } from '../../lib/streams/stream_crud'; +import { conditionToQueryDsl } from '../../lib/streams/helpers/condition_to_query_dsl'; +import { getFields, isComplete } from '../../lib/streams/helpers/condition_fields'; + +export const sampleStreamRoute = createServerRoute({ + endpoint: 'POST /api/streams/{id}/_sample', + options: { + access: 'internal', + }, + security: { + authz: { + enabled: false, + reason: + 'This API delegates security to the currently logged in user and their Elasticsearch permissions.', + }, + }, + params: z.object({ + path: z.object({ id: z.string() }), + body: z.object({ + condition: z.optional(conditionSchema), + start: z.optional(z.number()), + end: z.optional(z.number()), + number: z.optional(z.number()), + }), + }), + handler: async ({ + response, + params, + request, + logger, + getScopedClients, + }): Promise<{ documents: unknown[] }> => { + try { + const { scopedClusterClient } = await getScopedClients({ request }); + + const hasAccess = await checkReadAccess({ id: params.path.id, scopedClusterClient }); + if (!hasAccess) { + throw new DefinitionNotFound(`Stream definition for ${params.path.id} not found.`); + } + const searchBody = { + query: { + bool: { + must: [ + isComplete(params.body.condition) + ? conditionToQueryDsl(params.body.condition) + : { match_all: {} }, + { + range: { + '@timestamp': { + gte: params.body.start, + lte: params.body.end, + format: 'epoch_millis', + }, + }, + }, + ], + }, + }, + // Conditions could be using fields which are not indexed or they could use it with other types than they are eventually mapped as. + // Because of this we can't rely on mapped fields to draw a sample, instead we need to use runtime fields to simulate what happens during + // ingest in the painless condition checks. + // This is less efficient than it could be - in some cases, these fields _are_ indexed with the right type and we could use them directly. + // This can be optimized in the future. + runtime_mappings: Object.fromEntries( + getFields(params.body.condition).map((field) => [ + field.name, + { type: field.type === 'string' ? 'keyword' : 'double' }, + ]) + ), + sort: [ + { + '@timestamp': { + order: 'desc', + }, + }, + ], + size: params.body.number, + }; + const results = await scopedClusterClient.asCurrentUser.search({ + index: params.path.id, + ...searchBody, + }); + + return { documents: results.hits.hits.map((hit) => hit._source) }; + } catch (e) { + if (e instanceof DefinitionNotFound) { + throw notFound(e); + } + + throw internal(e); + } + }, +}); diff --git a/x-pack/plugins/streams_app/.storybook/get_mock_streams_app_context.tsx b/x-pack/plugins/streams_app/.storybook/get_mock_streams_app_context.tsx index 1660042b2cb66..cb3148a7f6644 100644 --- a/x-pack/plugins/streams_app/.storybook/get_mock_streams_app_context.tsx +++ b/x-pack/plugins/streams_app/.storybook/get_mock_streams_app_context.tsx @@ -12,6 +12,7 @@ import type { StreamsPluginStart } from '@kbn/streams-plugin/public'; import type { ObservabilitySharedPluginStart } from '@kbn/observability-shared-plugin/public'; import type { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/public'; import type { SharePublicStart } from '@kbn/share-plugin/public/plugin'; +import { NavigationPublicStart } from '@kbn/navigation-plugin/public/types'; import type { StreamsAppKibanaContext } from '../public/hooks/use_kibana'; export function getMockStreamsAppContext(): StreamsAppKibanaContext { @@ -27,6 +28,7 @@ export function getMockStreamsAppContext(): StreamsAppKibanaContext { unifiedSearch: {} as unknown as UnifiedSearchPublicPluginStart, streams: {} as unknown as StreamsPluginStart, share: {} as unknown as SharePublicStart, + navigation: {} as unknown as NavigationPublicStart, }, }, services: { diff --git a/x-pack/plugins/streams_app/kibana.jsonc b/x-pack/plugins/streams_app/kibana.jsonc index 16666084c53e5..09f356f0654ba 100644 --- a/x-pack/plugins/streams_app/kibana.jsonc +++ b/x-pack/plugins/streams_app/kibana.jsonc @@ -1,7 +1,7 @@ { "type": "plugin", "id": "@kbn/streams-app-plugin", - "owner": "@simianhacker @flash1293 @dgieselaar", + "owner": "@elastic/streams-program-team", "group": "observability", "visibility": "private", "plugin": { @@ -15,7 +15,8 @@ "data", "dataViews", "unifiedSearch", - "share" + "share", + "navigation" ], "requiredBundles": [ "kibanaReact" diff --git a/x-pack/plugins/streams_app/public/components/assets/illustration.png b/x-pack/plugins/streams_app/public/components/assets/illustration.png new file mode 100644 index 0000000000000..58b0f61a94399 Binary files /dev/null and b/x-pack/plugins/streams_app/public/components/assets/illustration.png differ diff --git a/x-pack/plugins/streams_app/public/components/condition_editor/index.tsx b/x-pack/plugins/streams_app/public/components/condition_editor/index.tsx new file mode 100644 index 0000000000000..e7e2a79b59294 --- /dev/null +++ b/x-pack/plugins/streams_app/public/components/condition_editor/index.tsx @@ -0,0 +1,297 @@ +/* + * 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, + EuiFieldText, + EuiFlexGroup, + EuiFlexItem, + EuiPanel, + EuiSelect, + EuiSwitch, + EuiText, +} from '@elastic/eui'; +import { + AndCondition, + BinaryFilterCondition, + Condition, + FilterCondition, + OrCondition, +} from '@kbn/streams-plugin/common/types'; +import React, { useEffect } from 'react'; +import { i18n } from '@kbn/i18n'; +import { css } from '@emotion/css'; +import { CodeEditor } from '@kbn/code-editor'; + +export function ConditionEditor(props: { + condition: Condition; + readonly?: boolean; + onConditionChange?: (condition: Condition) => void; +}) { + if (!props.condition) { + return null; + } + if (props.readonly) { + return ( + + + + ); + } + return ( + {})} + /> + ); +} + +export function ConditionForm(props: { + condition: Condition; + onConditionChange: (condition: Condition) => void; +}) { + const [syntaxEditor, setSyntaxEditor] = React.useState(() => + Boolean(props.condition && !('operator' in props.condition)) + ); + const [jsonCondition, setJsonCondition] = React.useState(() => + JSON.stringify(props.condition, null, 2) + ); + useEffect(() => { + if (!syntaxEditor && props.condition) { + setJsonCondition(JSON.stringify(props.condition, null, 2)); + } + }, [syntaxEditor, props.condition]); + return ( + + + + + {i18n.translate('xpack.streams.conditionEditor.title', { defaultMessage: 'Condition' })} + + + setSyntaxEditor(!syntaxEditor)} + /> + + {syntaxEditor ? ( + { + setJsonCondition(e); + try { + const condition = JSON.parse(e); + props.onConditionChange(condition); + } catch (error: unknown) { + // do nothing + } + }} + /> + ) : ( + props.condition && + ('operator' in props.condition ? ( + + ) : ( +
      {JSON.stringify(props.condition, null, 2)}
      + )) + )} +
      + ); +} + +const operatorMap = { + eq: i18n.translate('xpack.streams.filter.equals', { defaultMessage: 'equals' }), + neq: i18n.translate('xpack.streams.filter.notEquals', { defaultMessage: 'not equals' }), + lt: i18n.translate('xpack.streams.filter.lessThan', { defaultMessage: 'less than' }), + lte: i18n.translate('xpack.streams.filter.lessThanOrEquals', { + defaultMessage: 'less than or equals', + }), + gt: i18n.translate('xpack.streams.filter.greaterThan', { defaultMessage: 'greater than' }), + gte: i18n.translate('xpack.streams.filter.greaterThanOrEquals', { + defaultMessage: 'greater than or equals', + }), + contains: i18n.translate('xpack.streams.filter.contains', { defaultMessage: 'contains' }), + startsWith: i18n.translate('xpack.streams.filter.startsWith', { defaultMessage: 'starts with' }), + endsWith: i18n.translate('xpack.streams.filter.endsWith', { defaultMessage: 'ends with' }), + exists: i18n.translate('xpack.streams.filter.exists', { defaultMessage: 'exists' }), + notExists: i18n.translate('xpack.streams.filter.notExists', { defaultMessage: 'not exists' }), +}; + +function FilterForm(props: { + condition: FilterCondition; + onConditionChange: (condition: FilterCondition) => void; +}) { + return ( + + + { + props.onConditionChange({ ...props.condition, field: e.target.value }); + }} + /> + + + ({ + value, + text, + })) as Array<{ value: FilterCondition['operator']; text: string }> + } + value={props.condition.operator} + compressed + onChange={(e) => { + const newCondition: Partial = { + ...props.condition, + }; + + const newOperator = e.target.value as FilterCondition['operator']; + if ( + 'value' in newCondition && + (newOperator === 'exists' || newOperator === 'notExists') + ) { + delete newCondition.value; + } else if (!('value' in newCondition)) { + (newCondition as BinaryFilterCondition).value = ''; + } + props.onConditionChange({ + ...newCondition, + operator: newOperator, + } as FilterCondition); + }} + /> + + + {'value' in props.condition && ( + + { + props.onConditionChange({ + ...props.condition, + value: e.target.value, + } as BinaryFilterCondition); + }} + /> + + )} + + ); +} + +export function ConditionDisplay(props: { condition: Condition }) { + if (!props.condition) { + return null; + } + return ( + <> + {'or' in props.condition ? ( + + ) : 'and' in props.condition ? ( + + ) : ( + + )} + + ); +} + +function OrDisplay(props: { condition: OrCondition }) { + return ( +
      + {i18n.translate('xpack.streams.orDisplay.orLabel', { defaultMessage: 'Or' })} +
      + {props.condition.or.map((condition, index) => ( + + ))} +
      +
      + ); +} + +function AndDisplay(props: { condition: AndCondition }) { + return ( +
      + {i18n.translate('xpack.streams.andDisplay.andLabel', { defaultMessage: 'And' })} +
      + {props.condition.and.map((condition, index) => ( + + ))} +
      +
      + ); +} + +function FilterDisplay(props: { condition: FilterCondition }) { + return ( + + + {i18n.translate('xpack.streams.filter.field', { defaultMessage: 'Field' })} + + {props.condition.field} + + {i18n.translate('xpack.streams.filter.operator', { defaultMessage: 'Operator' })} + + {props.condition.operator} + {'value' in props.condition && ( + <> + + {i18n.translate('xpack.streams.filter.value', { defaultMessage: 'Value' })} + + {props.condition.value} + + )} + + ); +} diff --git a/x-pack/plugins/streams_app/public/components/entity_detail_view/index.tsx b/x-pack/plugins/streams_app/public/components/entity_detail_view/index.tsx index 8e423908af27d..4e1ec87866aee 100644 --- a/x-pack/plugins/streams_app/public/components/entity_detail_view/index.tsx +++ b/x-pack/plugins/streams_app/public/components/entity_detail_view/index.tsx @@ -7,6 +7,7 @@ import { EuiFlexGroup, EuiFlexItem, EuiIcon, EuiLink, EuiPanel, EuiBadge } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React from 'react'; +import { css } from '@emotion/css'; import { StreamDefinition } from '@kbn/streams-plugin/common'; import { useStreamsAppBreadcrumbs } from '../../hooks/use_streams_app_breadcrumbs'; import { useStreamsAppRouter } from '../../hooks/use_streams_app_router'; @@ -73,7 +74,13 @@ export function EntityDetailViewWithoutParams({ const selectedTabObject = tabMap[selectedTab]; return ( - + diff --git a/x-pack/plugins/streams_app/public/components/nested_view/index.tsx b/x-pack/plugins/streams_app/public/components/nested_view/index.tsx new file mode 100644 index 0000000000000..e19a97053f080 --- /dev/null +++ b/x-pack/plugins/streams_app/public/components/nested_view/index.tsx @@ -0,0 +1,40 @@ +/* + * 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/css'; +import { euiThemeVars } from '@kbn/ui-theme'; + +const borderSpec = `1px solid ${euiThemeVars.euiColorLightShade}`; + +export function NestedView({ children, last }: { children: React.ReactNode; last?: boolean }) { + return ( +
      +
      + {children} +
      + ); +} diff --git a/x-pack/plugins/streams_app/public/components/preview_table/index.tsx b/x-pack/plugins/streams_app/public/components/preview_table/index.tsx new file mode 100644 index 0000000000000..22db6ff294079 --- /dev/null +++ b/x-pack/plugins/streams_app/public/components/preview_table/index.tsx @@ -0,0 +1,71 @@ +/* + * 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 { EuiDataGrid } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import React, { useEffect, useMemo, useState } from 'react'; + +export function PreviewTable({ documents }: { documents: unknown[] }) { + const [height, setHeight] = useState('100px'); + useEffect(() => { + // set height to 100% after a short delay otherwise it doesn't calculate correctly + // TODO: figure out a better way to do this + setTimeout(() => { + setHeight(`100%`); + }, 50); + }, []); + + const columns = useMemo(() => { + const cols = new Set(); + documents.forEach((doc) => { + if (!doc || typeof doc !== 'object') { + return; + } + Object.keys(doc).forEach((key) => { + cols.add(key); + }); + }); + return Array.from(cols); + }, [documents]); + + const gridColumns = useMemo(() => { + return Array.from(columns).map((column) => ({ + id: column, + displayAsText: column, + })); + }, [columns]); + + return ( + {}, + canDragAndDropColumns: false, + }} + toolbarVisibility={false} + rowCount={documents.length} + height={height} + renderCellValue={({ rowIndex, columnId }) => { + const doc = documents[rowIndex]; + if (!doc || typeof doc !== 'object') { + return ''; + } + const value = (doc as Record)[columnId]; + if (value === undefined || value === null) { + return ''; + } + if (typeof value === 'object') { + return JSON.stringify(value); + } + return String(value); + }} + /> + ); +} diff --git a/x-pack/plugins/streams_app/public/components/stream_delete_modal/index.tsx b/x-pack/plugins/streams_app/public/components/stream_delete_modal/index.tsx new file mode 100644 index 0000000000000..5b6c04fa805a9 --- /dev/null +++ b/x-pack/plugins/streams_app/public/components/stream_delete_modal/index.tsx @@ -0,0 +1,121 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { + EuiButton, + EuiButtonEmpty, + EuiFlexGroup, + EuiModal, + EuiModalBody, + EuiModalFooter, + EuiModalHeader, + EuiModalHeaderTitle, + EuiText, + useGeneratedHtmlId, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { useAbortController } from '@kbn/observability-utils-browser/hooks/use_abort_controller'; +import React from 'react'; +import { useKibana } from '../../hooks/use_kibana'; + +export function StreamDeleteModal({ + closeModal, + clearChildUnderEdit, + refreshDefinition, + id, +}: { + closeModal: () => void; + clearChildUnderEdit: () => void; + refreshDefinition: () => void; + id: string; +}) { + const { + core: { notifications }, + dependencies: { + start: { + streams: { streamsRepositoryClient }, + }, + }, + } = useKibana(); + const abortController = useAbortController(); + const [deleteInProgress, setDeleteInProgress] = React.useState(false); + const modalTitleId = useGeneratedHtmlId(); + return ( + + + + {i18n.translate('xpack.streams.streamDetailRouting.deleteModalTitle', { + defaultMessage: 'Are you sure you want to delete this data stream?', + })} + + + + + + {i18n.translate('xpack.streams.streamDetailRouting.deleteModalDescription', { + defaultMessage: + 'Deleting this stream will remove all of its children and the data will no longer be routed. All existing data will be removed as well.', + })} + + + + + + + {i18n.translate('xpack.streams.streamDetailRouting.deleteModalCancel', { + defaultMessage: 'Cancel', + })} + + { + try { + setDeleteInProgress(true); + await streamsRepositoryClient.fetch('DELETE /api/streams/{id}', { + signal: abortController.signal, + params: { + path: { + id, + }, + }, + }); + setDeleteInProgress(false); + notifications.toasts.addSuccess({ + title: i18n.translate('xpack.streams.streamDetailRouting.deleted', { + defaultMessage: 'Stream deleted', + }), + }); + clearChildUnderEdit(); + closeModal(); + refreshDefinition(); + } catch (error) { + setDeleteInProgress(false); + notifications.toasts.addError(error, { + title: i18n.translate('xpack.streams.failedToDelete', { + defaultMessage: 'Failed to delete stream {id}', + values: { + id, + }, + }), + }); + } + }} + isLoading={deleteInProgress} + > + {i18n.translate('xpack.streams.streamDetailRouting.delete', { + defaultMessage: 'Delete', + })} + + + + + ); +} diff --git a/x-pack/plugins/streams_app/public/components/stream_detail_management/index.tsx b/x-pack/plugins/streams_app/public/components/stream_detail_management/index.tsx index 749b0e659d659..1e66490bca3c9 100644 --- a/x-pack/plugins/streams_app/public/components/stream_detail_management/index.tsx +++ b/x-pack/plugins/streams_app/public/components/stream_detail_management/index.tsx @@ -6,7 +6,8 @@ */ import React from 'react'; import { i18n } from '@kbn/i18n'; -import { StreamDefinition } from '@kbn/streams-plugin/common'; +import { ReadStreamDefinition, StreamDefinition } from '@kbn/streams-plugin/common'; +import { css } from '@emotion/css'; import { EuiButtonGroup, EuiFlexGroup, EuiFlexItem, EuiListGroup, EuiText } from '@elastic/eui'; import { useStreamsAppParams } from '../../hooks/use_streams_app_params'; import { RedirectTo } from '../redirect_to'; @@ -26,7 +27,7 @@ export function StreamDetailManagement({ definition, refreshDefinition, }: { - definition?: StreamDefinition; + definition?: ReadStreamDefinition; refreshDefinition: () => void; }) { const { @@ -91,7 +92,13 @@ export function StreamDetailManagement({ const selectedTabObject = tabs[subtab]; return ( - + - {selectedTabObject.content} + + {selectedTabObject.content} + ); } diff --git a/x-pack/plugins/streams_app/public/components/stream_detail_routing/index.tsx b/x-pack/plugins/streams_app/public/components/stream_detail_routing/index.tsx index af65c7eab4235..ca58051f9db2b 100644 --- a/x-pack/plugins/streams_app/public/components/stream_detail_routing/index.tsx +++ b/x-pack/plugins/streams_app/public/components/stream_detail_routing/index.tsx @@ -4,15 +4,778 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { StreamDefinition } from '@kbn/streams-plugin/common'; +import { + EuiButton, + EuiButtonEmpty, + EuiButtonIcon, + EuiFieldText, + EuiFlexGroup, + EuiFlexItem, + EuiFormRow, + EuiIcon, + EuiImage, + EuiLoadingSpinner, + EuiPanel, + EuiResizableContainer, + EuiSpacer, + EuiText, + useEuiTheme, +} from '@elastic/eui'; +import { css } from '@emotion/css'; +import { i18n } from '@kbn/i18n'; +import { useAbortController } from '@kbn/observability-utils-browser/hooks/use_abort_controller'; +import { useDateRange } from '@kbn/observability-utils-browser/hooks/use_date_range'; +import { ReadStreamDefinition } from '@kbn/streams-plugin/common'; import React from 'react'; +import { StreamChild } from '@kbn/streams-plugin/common/types'; +import { AbortableAsyncState } from '@kbn/observability-utils-browser/hooks/use_abortable_async'; +import { useKibana } from '../../hooks/use_kibana'; +import { useStreamsAppFetch } from '../../hooks/use_streams_app_fetch'; +import { StreamsAppSearchBar } from '../streams_app_search_bar'; +import { ConditionEditor } from '../condition_editor'; +import { useDebounced } from '../../util/use_debounce'; +import { useStreamsAppRouter } from '../../hooks/use_streams_app_router'; +import { NestedView } from '../nested_view'; +import illustration from '../assets/illustration.png'; +import { PreviewTable } from '../preview_table'; +import { StreamDeleteModal } from '../stream_delete_modal'; + +function useRoutingState() { + const [childUnderEdit, setChildUnderEdit] = React.useState< + { isNew: boolean; child: StreamChild } | undefined + >(); + + const debouncedChildUnderEdit = useDebounced(childUnderEdit, 300); + + const [saveInProgress, setSaveInProgress] = React.useState(false); + const [showDeleteModal, setShowDeleteModal] = React.useState(false); + + return { + debouncedChildUnderEdit, + childUnderEdit, + setChildUnderEdit, + saveInProgress, + setSaveInProgress, + showDeleteModal, + setShowDeleteModal, + }; +} export function StreamDetailRouting({ - definition: _definition, - refreshDefinition: _refreshDefinition, + definition, + refreshDefinition, +}: { + definition?: ReadStreamDefinition; + refreshDefinition: () => void; +}) { + const theme = useEuiTheme().euiTheme; + const routingAppState = useRoutingState(); + + if (!definition) { + return null; + } + + const closeModal = () => routingAppState.setShowDeleteModal(false); + + return ( + <> + {routingAppState.showDeleteModal && routingAppState.childUnderEdit && ( + routingAppState.setChildUnderEdit(undefined)} + refreshDefinition={refreshDefinition} + id={routingAppState.childUnderEdit.child.id} + /> + )} + + + + {(EuiResizablePanel, EuiResizableButton) => ( + <> + + + + + + + + + + + )} + + + + + + + + ); +} + +function ControlBar({ + definition, + routingAppState, + refreshDefinition, }: { - definition?: StreamDefinition; + definition: ReadStreamDefinition; + routingAppState: ReturnType; refreshDefinition: () => void; }) { - return <>{'TODO'}; + const { + core: { notifications }, + dependencies: { + start: { + streams: { streamsRepositoryClient }, + }, + }, + } = useKibana(); + + const { signal } = useAbortController(); + + if (!routingAppState.childUnderEdit) { + return ( + + + {i18n.translate('xpack.streams.streamDetailRouting.save', { + defaultMessage: 'Save', + })} + + + ); + } + + function forkChild() { + if (!routingAppState.childUnderEdit) { + return; + } + return streamsRepositoryClient.fetch('POST /api/streams/{id}/_fork', { + signal, + params: { + path: { + id: definition.id, + }, + body: { + condition: routingAppState.childUnderEdit.child.condition, + stream: { + id: routingAppState.childUnderEdit.child.id, + processing: [], + fields: [], + }, + }, + }, + }); + } + + function updateChild() { + if (!routingAppState.childUnderEdit) { + return; + } + + const childUnderEdit = routingAppState.childUnderEdit.child; + const { inheritedFields, id, ...definitionToUpdate } = definition; + return streamsRepositoryClient.fetch('PUT /api/streams/{id}', { + signal, + params: { + path: { + id: definition.id, + }, + body: { + ...definitionToUpdate, + children: definition.children.map((child) => + child.id === childUnderEdit.id ? childUnderEdit : child + ), + }, + }, + }); + } + + async function saveOrUpdateChild() { + if (!routingAppState.childUnderEdit) { + return; + } + try { + routingAppState.setSaveInProgress(true); + + if (routingAppState.childUnderEdit.isNew) { + await forkChild(); + } else { + await updateChild(); + } + + routingAppState.setSaveInProgress(false); + notifications.toasts.addSuccess({ + title: i18n.translate('xpack.streams.streamDetailRouting.saved', { + defaultMessage: 'Stream saved', + }), + }); + routingAppState.setChildUnderEdit(undefined); + refreshDefinition(); + } catch (error) { + routingAppState.setSaveInProgress(false); + notifications.toasts.addError(error, { + title: i18n.translate('xpack.streams.failedToSave', { + defaultMessage: 'Failed to save', + }), + toastMessage: 'body' in error ? error.body.message : error.message, + }); + } + } + + return ( + + {!routingAppState.childUnderEdit.isNew && ( + <> + { + routingAppState.setShowDeleteModal(true); + }} + > + {i18n.translate('xpack.streams.streamDetailRouting.remove', { + defaultMessage: 'Remove', + })} + + + + )} + { + routingAppState.setChildUnderEdit(undefined); + }} + > + {i18n.translate('xpack.streams.streamDetailRouting.cancel', { + defaultMessage: 'Cancel', + })} + + + {routingAppState.childUnderEdit.isNew + ? i18n.translate('xpack.streams.streamDetailRouting.add', { + defaultMessage: 'Save', + }) + : i18n.translate('xpack.streams.streamDetailRouting.change', { + defaultMessage: 'Change routing', + })} + + + ); +} + +function PreviewPanel({ + definition, + routingAppState, +}: { + definition: ReadStreamDefinition; + routingAppState: ReturnType; +}) { + const { + dependencies: { + start: { + data, + streams: { streamsRepositoryClient }, + }, + }, + } = useKibana(); + + const { + timeRange, + absoluteTimeRange: { start, end }, + setTimeRange, + } = useDateRange({ data }); + + const previewSampleFetch = useStreamsAppFetch( + ({ signal }) => { + if ( + !definition || + !routingAppState.debouncedChildUnderEdit || + !routingAppState.debouncedChildUnderEdit.isNew + ) { + return Promise.resolve({ documents: [] }); + } + return streamsRepositoryClient.fetch('POST /api/streams/{id}/_sample', { + signal, + params: { + path: { + id: definition.id, + }, + body: { + condition: routingAppState.debouncedChildUnderEdit.child.condition, + start: start?.valueOf(), + end: end?.valueOf(), + number: 100, + }, + }, + }); + }, + [definition, routingAppState.debouncedChildUnderEdit, streamsRepositoryClient, start, end], + { + disableToastOnError: true, + } + ); + + let content = ( + + ); + + if (routingAppState.debouncedChildUnderEdit?.isNew) { + if (previewSampleFetch.error) { + content = ( + + + + {i18n.translate('xpack.streams.streamDetail.preview.error', { + defaultMessage: 'Error loading preview', + })} + + + + ); + } else if (previewSampleFetch.value?.documents && previewSampleFetch.value.documents.length) { + content = ( + + + + ); + } + } + + return ( + <> + + + + + + + {i18n.translate('xpack.streams.streamDetail.preview.header', { + defaultMessage: 'Data Preview', + })} + {previewSampleFetch.loading && } + + + + + { + if (!isUpdate) { + previewSampleFetch.refresh(); + return; + } + + if (dateRange) { + setTimeRange({ + from: dateRange.from, + to: dateRange?.to, + mode: dateRange.mode, + }); + } + }} + onRefresh={() => { + previewSampleFetch.refresh(); + }} + dateRangeFrom={timeRange.from} + dateRangeTo={timeRange.to} + /> + + + + + {content} + + ); +} + +function PreviewPanelIllustration({ + previewSampleFetch, + routingAppState, +}: { + routingAppState: ReturnType; + previewSampleFetch: AbortableAsyncState<{ + documents: unknown[]; + }>; +}) { + return ( + + + + {previewSampleFetch.loading ? ( + + + + ) : ( + <> + {routingAppState.debouncedChildUnderEdit && + routingAppState.debouncedChildUnderEdit.isNew && ( + + {i18n.translate('xpack.streams.streamDetail.preview.empty', { + defaultMessage: 'No documents to preview', + })} + + )} + {routingAppState.debouncedChildUnderEdit && + !routingAppState.debouncedChildUnderEdit.isNew && ( + + {i18n.translate('xpack.streams.streamDetail.preview.editPreviewMessage', { + defaultMessage: 'Preview is not available while editing streams', + })} + + )} + {!routingAppState.debouncedChildUnderEdit && ( + <> + + {i18n.translate('xpack.streams.streamDetail.preview.editPreviewMessageEmpty', { + defaultMessage: 'Your preview will appear here', + })} + + + {i18n.translate( + 'xpack.streams.streamDetail.preview.editPreviewMessageEmptyDescription', + { + defaultMessage: + 'Create a new child stream to see what will be routed to it based on the conditions', + } + )} + + + )} + + )} + + + ); +} + +function ChildStreamList({ + definition, + routingAppState: { childUnderEdit, setChildUnderEdit }, +}: { + definition: ReadStreamDefinition; + routingAppState: ReturnType; +}) { + return ( + + + + {i18n.translate('xpack.streams.streamDetailRouting.rules.header', { + defaultMessage: 'Routing rules', + })} + + + + + + {definition.children.map((child, i) => ( + + { + if (child.id === childUnderEdit?.child.id) { + setChildUnderEdit(undefined); + } else { + setChildUnderEdit({ isNew: false, child }); + } + }} + onChildChange={(newChild) => { + setChildUnderEdit({ + isNew: false, + child: newChild, + }); + }} + /> + + ))} + {childUnderEdit?.isNew ? ( + + { + if (!newChild) { + setChildUnderEdit(undefined); + return; + } + setChildUnderEdit({ + isNew: true, + child: newChild, + }); + }} + /> + + ) : ( + + + { + setChildUnderEdit({ + isNew: true, + child: { + id: `${definition.id}.child`, + condition: { + field: '', + operator: 'eq', + value: '', + }, + }, + }); + }} + > + {i18n.translate('xpack.streams.streamDetailRouting.addRule', { + defaultMessage: 'Create a new child stream', + })} + + + + )} + + + ); +} + +function CurrentStreamEntry({ definition }: { definition: ReadStreamDefinition }) { + return ( + + + {definition.id} + + {i18n.translate('xpack.streams.streamDetailRouting.currentStream', { + defaultMessage: 'Current stream', + })} + + + + ); +} + +function PreviousStreamEntry({ definition }: { definition: ReadStreamDefinition }) { + const router = useStreamsAppRouter(); + + const parentId = definition.id.split('.').slice(0, -1).join('.'); + if (parentId === '') { + return null; + } + + return ( + + + + + {i18n.translate('xpack.streams.streamDetailRouting.previousStream', { + defaultMessage: '.. (Previous stream)', + })} + + + + + ); +} + +function RoutingStreamEntry({ + child, + onChildChange, + onEditStateChange, + edit, +}: { + child: StreamChild; + onChildChange: (child: StreamChild) => void; + onEditStateChange: () => void; + edit?: boolean; +}) { + const router = useStreamsAppRouter(); + return ( + + + + {child.id} + + { + onEditStateChange(); + }} + aria-label={i18n.translate('xpack.streams.streamDetailRouting.edit', { + defaultMessage: 'Edit', + })} + /> + + + {child.condition && ( + { + onChildChange({ + ...child, + condition, + }); + }} + /> + )} + {!child.condition && ( + + {i18n.translate('xpack.streams.streamDetailRouting.noCondition', { + defaultMessage: 'No condition, no documents will be routed', + })} + + )} + + ); +} + +function NewRoutingStreamEntry({ + child, + onChildChange, +}: { + child: StreamChild; + onChildChange: (child?: StreamChild) => void; +}) { + return ( + + + + { + onChildChange({ + ...child, + id: e.target.value, + }); + }} + /> + + {child.condition && ( + { + onChildChange({ + ...child, + condition, + }); + }} + /> + )} + {!child.condition && ( + + {i18n.translate('xpack.streams.streamDetailRouting.noCondition', { + defaultMessage: 'No condition, no documents will be routed', + })} + + )} + + + ); } diff --git a/x-pack/plugins/streams_app/public/components/stream_detail_view/index.tsx b/x-pack/plugins/streams_app/public/components/stream_detail_view/index.tsx index d091fb5758a1e..b0a2307f7b2b7 100644 --- a/x-pack/plugins/streams_app/public/components/stream_detail_view/index.tsx +++ b/x-pack/plugins/streams_app/public/components/stream_detail_view/index.tsx @@ -14,10 +14,12 @@ import { StreamDetailOverview } from '../stream_detail_overview'; import { StreamDetailManagement } from '../stream_detail_management'; export function StreamDetailView() { - const { path } = useStreamsAppParams('/{key}/*'); + const params1 = useStreamsAppParams('/{key}/{tab}', true); - const key = path.key; - const tab = 'tab' in path ? path.tab : 'management'; + const params2 = useStreamsAppParams('/{key}/management/{subtab}', true); + + const key = params1?.path?.key || params2.path.key; + const tab = params1?.path?.tab || 'management'; const { dependencies: { diff --git a/x-pack/plugins/streams_app/public/components/streams_app_page_body/index.tsx b/x-pack/plugins/streams_app/public/components/streams_app_page_body/index.tsx index 04b44f82df0fd..1718e2e638a51 100644 --- a/x-pack/plugins/streams_app/public/components/streams_app_page_body/index.tsx +++ b/x-pack/plugins/streams_app/public/components/streams_app_page_body/index.tsx @@ -18,6 +18,7 @@ export function StreamsAppPageBody({ children }: { children: React.ReactNode }) border-top: 1px solid ${theme.colors.lightShade}; border-radius: 0px; display: flex; + overflow-y: auto; `} paddingSize="l" > diff --git a/x-pack/plugins/streams_app/public/components/streams_app_page_template/index.tsx b/x-pack/plugins/streams_app/public/components/streams_app_page_template/index.tsx index 942d2937dba81..280c32841811a 100644 --- a/x-pack/plugins/streams_app/public/components/streams_app_page_template/index.tsx +++ b/x-pack/plugins/streams_app/public/components/streams_app_page_template/index.tsx @@ -6,23 +6,32 @@ */ import { css } from '@emotion/css'; import React from 'react'; -import { EuiPanel, EuiSpacer } from '@elastic/eui'; +import { EuiPanel } from '@elastic/eui'; +import useObservable from 'react-use/lib/useObservable'; import { useKibana } from '../../hooks/use_kibana'; export function StreamsAppPageTemplate({ children }: { children: React.ReactNode }) { const { dependencies: { - start: { observabilityShared }, + start: { observabilityShared, navigation }, }, } = useKibana(); const { PageTemplate } = observabilityShared.navigation; + const isSolutionNavEnabled = useObservable(navigation.isSolutionNavEnabled$); + return ( - {children} diff --git a/x-pack/plugins/streams_app/public/components/streams_app_search_bar/index.tsx b/x-pack/plugins/streams_app/public/components/streams_app_search_bar/index.tsx index 563fb752efbd5..cd07f540f3ba1 100644 --- a/x-pack/plugins/streams_app/public/components/streams_app_search_bar/index.tsx +++ b/x-pack/plugins/streams_app/public/components/streams_app_search_bar/index.tsx @@ -4,17 +4,12 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { css } from '@emotion/css'; import type { TimeRange } from '@kbn/es-query'; import { SearchBar } from '@kbn/unified-search-plugin/public'; import React, { useMemo } from 'react'; import type { DataView } from '@kbn/data-views-plugin/common'; import { useKibana } from '../../hooks/use_kibana'; -const parentClassName = css` - width: 100%; -`; - interface Props { query?: string; dateRangeFrom?: string; @@ -47,32 +42,30 @@ export function StreamsAppSearchBar({ const showQueryInput = query === undefined; return ( -
      - { - onQuerySubmit?.( - { dateRange, query: (nextQuery?.query as string | undefined) ?? '' }, - isUpdate - ); - }} - onQueryChange={({ dateRange, query: nextQuery }) => { - onQueryChange?.({ dateRange, query: (nextQuery?.query as string | undefined) ?? '' }); - }} - query={queryObj} - showQueryInput={showQueryInput} - showFilterBar={false} - showQueryMenu={false} - showDatePicker={Boolean(dateRangeFrom && dateRangeTo)} - showSubmitButton={true} - dateRangeFrom={dateRangeFrom} - dateRangeTo={dateRangeTo} - onRefresh={onRefresh} - displayStyle="inPage" - disableQueryLanguageSwitcher - placeholder={placeholder} - indexPatterns={dataViews} - /> -
      + { + onQuerySubmit?.( + { dateRange, query: (nextQuery?.query as string | undefined) ?? '' }, + isUpdate + ); + }} + onQueryChange={({ dateRange, query: nextQuery }) => { + onQueryChange?.({ dateRange, query: (nextQuery?.query as string | undefined) ?? '' }); + }} + query={queryObj} + showQueryInput={showQueryInput} + showFilterBar={false} + showQueryMenu={false} + showDatePicker={Boolean(dateRangeFrom && dateRangeTo)} + showSubmitButton={true} + dateRangeFrom={dateRangeFrom} + dateRangeTo={dateRangeTo} + onRefresh={onRefresh} + displayStyle="inPage" + disableQueryLanguageSwitcher + placeholder={placeholder} + indexPatterns={dataViews} + /> ); } diff --git a/x-pack/plugins/streams_app/public/routes/config.tsx b/x-pack/plugins/streams_app/public/routes/config.tsx index 444218c6f9769..5887528f07b16 100644 --- a/x-pack/plugins/streams_app/public/routes/config.tsx +++ b/x-pack/plugins/streams_app/public/routes/config.tsx @@ -68,6 +68,15 @@ const streamsAppRoutes = { }), }), }, + '/{key}/{tab}/{subtab}': { + element: , + params: t.type({ + path: t.type({ + tab: t.string, + subtab: t.string, + }), + }), + }, }, }, '/': { diff --git a/x-pack/plugins/streams_app/public/types.ts b/x-pack/plugins/streams_app/public/types.ts index 58d44784fe031..680dd008d2e1f 100644 --- a/x-pack/plugins/streams_app/public/types.ts +++ b/x-pack/plugins/streams_app/public/types.ts @@ -16,6 +16,7 @@ import type { import type { StreamsPluginSetup, StreamsPluginStart } from '@kbn/streams-plugin/public'; import type { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/public'; import type { SharePublicSetup, SharePublicStart } from '@kbn/share-plugin/public/plugin'; +import { NavigationPublicStart } from '@kbn/navigation-plugin/public/types'; /* eslint-disable @typescript-eslint/no-empty-interface*/ export interface ConfigSchema {} @@ -36,6 +37,7 @@ export interface StreamsAppStartDependencies { observabilityShared: ObservabilitySharedPluginStart; unifiedSearch: UnifiedSearchPublicPluginStart; share: SharePublicStart; + navigation: NavigationPublicStart; } export interface StreamsAppPublicSetup {} diff --git a/x-pack/plugins/streams_app/public/util/use_debounce.ts b/x-pack/plugins/streams_app/public/util/use_debounce.ts new file mode 100644 index 0000000000000..eee9accd2e29e --- /dev/null +++ b/x-pack/plugins/streams_app/public/util/use_debounce.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 useDebounce from 'react-use/lib/useDebounce'; +import { useState } from 'react'; + +export function useDebounced(value: T, debounceDelay: number = 300) { + const [debouncedValue, setValue] = useState(value); + + useDebounce( + () => { + setValue(value); + }, + debounceDelay, + [value, setValue] + ); + + return debouncedValue; +} diff --git a/x-pack/plugins/streams_app/tsconfig.json b/x-pack/plugins/streams_app/tsconfig.json index 39acb94665ae5..cba6a2d993bd4 100644 --- a/x-pack/plugins/streams_app/tsconfig.json +++ b/x-pack/plugins/streams_app/tsconfig.json @@ -33,5 +33,8 @@ "@kbn/streams-plugin", "@kbn/share-plugin", "@kbn/observability-utils-server", + "@kbn/code-editor", + "@kbn/ui-theme", + "@kbn/navigation-plugin", ] } diff --git a/x-pack/plugins/threat_intelligence/scripts/generate_indicators.js b/x-pack/plugins/threat_intelligence/scripts/generate_indicators.js index 0d5c170965fe7..daa869c76cf70 100644 --- a/x-pack/plugins/threat_intelligence/scripts/generate_indicators.js +++ b/x-pack/plugins/threat_intelligence/scripts/generate_indicators.js @@ -6,7 +6,7 @@ */ const { Client } = require('@elastic/elasticsearch'); -const faker = require('faker'); +const { faker } = require('@faker-js/faker'); const THREAT_INDEX = 'logs-ti'; diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index c7a1ebde48eda..cd243a3351aae 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -103,40 +103,6 @@ "aiAssistantManagementSelection.preferredAIAssistantTypeSettingValueObservability": "Partout", "alertingTypes.builtinActionGroups.recovered": "Récupéré", "alertsGrouping.unit": "{totalCount, plural, =1 {alerte} other {alertes}}", - "alertsUIShared.actiActionsonNotifyWhen.forEachOption": "Pour chaque alerte", - "alertsUIShared.actiActionsonNotifyWhen.summaryOption": "Résumé des alertes", - "alertsUIShared.actionForm.actionGroupRecoveredMessage": "Récupéré", - "alertsUIShared.actionVariables.alertActionGroupLabel": "Groupe d'actions de l'alerte ayant programmé les actions pour la règle.", - "alertsUIShared.actionVariables.alertActionGroupNameLabel": "Nom lisible par l'utilisateur du groupe d'actions de l'alerte ayant programmé les actions pour la règle.", - "alertsUIShared.actionVariables.alertConsecutiveMatchesLabel": "Le nombre de courses consécutives qui remplissent les conditions de la règle.", - "alertsUIShared.actionVariables.alertFlappingLabel": "Indicateur sur l'alerte spécifiant si le statut de l'alerte change fréquemment.", - "alertsUIShared.actionVariables.alertIdLabel": "ID de l'alerte ayant programmé les actions pour la règle.", - "alertsUIShared.actionVariables.alertUuidLabel": "UUID de l'alerte ayant programmé les actions pour la règle.", - "alertsUIShared.actionVariables.allAlertsCountLabel": "Décompte de toutes les alertes.", - "alertsUIShared.actionVariables.allAlertsDataLabel": "Tableau d'objets pour toutes les alertes.", - "alertsUIShared.actionVariables.dateLabel": "Date à laquelle la règle a programmé l'action.", - "alertsUIShared.actionVariables.kibanaBaseUrlLabel": "Valeur server.publicBaseUrl configurée ou chaîne vide si elle n'est pas configurée.", - "alertsUIShared.actionVariables.legacyAlertActionGroupLabel": "Cet élément a été déclassé au profit de {variable}.", - "alertsUIShared.actionVariables.legacyAlertActionGroupNameLabel": "Cet élément a été déclassé au profit de {variable}.", - "alertsUIShared.actionVariables.legacyAlertIdLabel": "Cet élément a été déclassé au profit de {variable}.", - "alertsUIShared.actionVariables.legacyAlertInstanceIdLabel": "Cet élément a été déclassé au profit de {variable}.", - "alertsUIShared.actionVariables.legacyAlertNameLabel": "Cet élément a été déclassé au profit de {variable}.", - "alertsUIShared.actionVariables.legacyParamsLabel": "Cet élément a été déclassé au profit de {variable}.", - "alertsUIShared.actionVariables.legacySpaceIdLabel": "Cet élément a été déclassé au profit de {variable}.", - "alertsUIShared.actionVariables.legacyTagsLabel": "Cet élément a été déclassé au profit de {variable}.", - "alertsUIShared.actionVariables.newAlertsCountLabel": "Décompte des nouvelles alertes.", - "alertsUIShared.actionVariables.newAlertsDataLabel": "Tableau d'objets pour les nouvelles alertes.", - "alertsUIShared.actionVariables.ongoingAlertsCountLabel": "Décompte des alertes en cours.", - "alertsUIShared.actionVariables.ongoingAlertsDataLabel": "Tableau d'objets pour les alertes en cours.", - "alertsUIShared.actionVariables.recoveredAlertsCountLabel": "Décompte des alertes récupérées.", - "alertsUIShared.actionVariables.recoveredAlertsDataLabel": "Tableau d'objets pour les alertes récupérées.", - "alertsUIShared.actionVariables.ruleIdLabel": "ID de la règle.", - "alertsUIShared.actionVariables.ruleNameLabel": "Nom de la règle.", - "alertsUIShared.actionVariables.ruleParamsLabel": "Les paramètres de la règle.", - "alertsUIShared.actionVariables.ruleSpaceIdLabel": "ID d'espace de la règle.", - "alertsUIShared.actionVariables.ruleTagsLabel": "Balises de la règle.", - "alertsUIShared.actionVariables.ruleTypeLabel": "Type de règle.", - "alertsUIShared.actionVariables.ruleUrlLabel": "L'URL d'accès à la règle qui a généré l'alerte. La chaîne sera vide si server.publicBaseUrl n'est pas configuré.", "alertsUIShared.alertFieldsTable.field": "Champ", "alertsUIShared.alertFieldsTable.filter.placeholder": "Filtre par Champ, Valeur ou Description...", "alertsUIShared.alertFieldsTable.value": "Valeur", @@ -160,13 +126,6 @@ "alertsUIShared.components.alertLifecycleStatusBadge.flappingLabel": "Bagotement", "alertsUIShared.components.alertLifecycleStatusBadge.recoveredLabel": "Récupéré", "alertsUIShared.components.alertLifecycleStatusBadge.untrackedLabel": "Non suivi", - "alertsUIShared.components.ruleTypeModal.allRuleTypes": "Tous", - "alertsUIShared.components.ruleTypeModal.loadingRuleTypes": "Chargement des types de règles", - "alertsUIShared.components.ruleTypeModal.noRuleTypesErrorBody": "Essayez une autre recherche ou modifiez vos paramètres de filtrage", - "alertsUIShared.components.ruleTypeModal.noRuleTypesErrorTitle": "Aucun type de règles trouvé", - "alertsUIShared.components.ruleTypeModal.searchPlaceholder": "Recherche", - "alertsUIShared.components.ruleTypeModal.title": "Sélectionner le type de règle", - "alertsUIShared.disabledActionsWarningTitle": "Cette règle possède des actions qui sont désactivées", "alertsUIShared.filterGroup.contextMenu.reset": "Réinitialiser les contrôles", "alertsUIShared.filterGroup.contextMenu.resetTooltip": "Réinitialiser les contrôles aux paramètres d'usine", "alertsUIShared.filterGroup.filtersChangedBanner": "Les contrôles de filtre ont changé", @@ -181,15 +140,6 @@ "alertsUIShared.filtersGroup.discardChanges": "Abandonner les modifications", "alertsUIShared.filtersGroup.pendingChanges": "Enregistrer les modifications en attente", "alertsUIShared.filtersGroup.urlParam.arrayError": "Les paramètres d'URL du filtre de page doivent être un tableau", - "alertsUIShared.healthCheck.actionText": "En savoir plus.", - "alertsUIShared.healthCheck.alertsErrorText": "Pour créer une règle, vous devez activer les plug-ins d'alerting et d'actions.", - "alertsUIShared.healthCheck.alertsErrorTitle": "Vous devez activer Alerting et Actions", - "alertsUIShared.healthCheck.apiKeysAndEncryptionErrorText": "Vous devez activer les clés d'API et configurer une clé de chiffrement pour utiliser Alerting.", - "alertsUIShared.healthCheck.apiKeysDisabledErrorText": "Vous devez activer les clés d'API pour utiliser Alerting.", - "alertsUIShared.healthCheck.apiKeysDisabledErrorTitle": "Configuration supplémentaire requise", - "alertsUIShared.healthCheck.encryptionErrorText": "Vous devez configurer une clé de chiffrement pour utiliser Alerting.", - "alertsUIShared.healthCheck.encryptionErrorTitle": "Configuration supplémentaire requise", - "alertsUIShared.healthCheck.healthCheck.apiKeysAndEncryptionErrorTitle": "Configuration supplémentaire requise", "alertsUIShared.hooks.useAlertDataView.fetchErrorMessage": "Impossible de charger la vue des données de l'alerte", "alertsUIShared.hooks.useFindAlertsQuery.unableToFindAlertsQueryMessage": "Impossible de trouver les alertes", "alertsUIShared.hooks.useLoadRuleTypesQuery.unableToLoadRuleTypesMessage": "Impossible de charger les types de règles", @@ -201,163 +151,6 @@ "alertsUIShared.maintenanceWindowCallout.maintenanceWindowMultipleCategoryNames": "{commaSeparatedList} et {last}", "alertsUIShared.maintenanceWindowCallout.maintenanceWindowTwoCategoryNames": "{first} et {second}", "alertsUIShared.maintenanceWindowCallout.managementCategoryLabel": "Suite", - "alertsUIShared.producerDisplayNames.apm": "APM et expérience utilisateur", - "alertsUIShared.producerDisplayNames.infrastructure": "Infrastructure", - "alertsUIShared.producerDisplayNames.logs": "Logs", - "alertsUIShared.producerDisplayNames.metrics": "Indicateurs", - "alertsUIShared.producerDisplayNames.ml": "Machine Learning", - "alertsUIShared.producerDisplayNames.monitoring": "Monitoring de la Suite", - "alertsUIShared.producerDisplayNames.observability": "Observabilité", - "alertsUIShared.producerDisplayNames.siem": "Sécurité", - "alertsUIShared.producerDisplayNames.slo": "SLO", - "alertsUIShared.producerDisplayNames.stackAlerts": "Alertes de la suite", - "alertsUIShared.producerDisplayNames.uptime": "Synthetics et Uptime", - "alertsUIShared.ruleActionsAlertsFilter.ActionAlertsFilterQueryPlaceholder": "Filtrer les alertes à l'aide de la syntaxe KQL", - "alertsUIShared.ruleActionsAlertsFilter.ActionAlertsFilterQueryToggleLabel": "Si l'alerte correspond à une requête", - "alertsUIShared.ruleActionsItem.actionErrorToolTip": "L’action contient des erreurs.", - "alertsUIShared.ruleActionsItem.actionUnableToLoadConnectorTitle": "Créez un connecteur et réessayez. Si vous ne parvenez pas à créer un connecteur, contactez votre administrateur système.", - "alertsUIShared.ruleActionsItem.actionUseAadTemplateFieldsLabel": "Utiliser les champs de modèle de l'index des alertes", - "alertsUIShared.ruleActionsItem.actionWarningsTitle": "1 avertissement", - "alertsUIShared.ruleActionsItem.existingAlertActionTypeEditTitle": "{actionConnectorName}", - "alertsUIShared.ruleActionsItem.runWhenGroupTitle": "Exécuter lorsque {groupName}", - "alertsUIShared.ruleActionsItem.summaryGroupTitle": "Résumé des alertes", - "alertsUIShared.ruleActionsNotifyWhen.actionFrequencyLabel": "Fréquence d'action", - "alertsUIShared.ruleActionsNotifyWhen.frequencyNotifyWhen.label": "Exécuter chaque", - "alertsUIShared.ruleActionsNotifyWhen.notifyWhenThrottleWarning": "Les intervalles d'action personnalisés ne peuvent pas être plus courts que l'intervalle de vérification de la règle", - "alertsUIShared.ruleActionsNotifyWhen.onActionGroupChange.description": "Actions exécutées si le statut de l'alerte change.", - "alertsUIShared.ruleActionsNotifyWhen.onActionGroupChange.display": "Lors de changements de statut", - "alertsUIShared.ruleActionsNotifyWhen.onActionGroupChange.label": "Lors de changements de statut", - "alertsUIShared.ruleActionsNotifyWhen.onActiveAlert.description": "Les actions sont exécutées si les conditions de règle sont remplies.", - "alertsUIShared.ruleActionsNotifyWhen.onActiveAlert.display": "Selon les intervalles de vérification", - "alertsUIShared.ruleActionsNotifyWhen.onActiveAlert.label": "Selon les intervalles de vérification", - "alertsUIShared.ruleActionsNotifyWhen.onThrottleInterval.description": "Les actions sont exécutées si les conditions de règle sont remplies.", - "alertsUIShared.ruleActionsNotifyWhen.onThrottleInterval.display": "Selon des intervalles d'action personnalisés", - "alertsUIShared.ruleActionsNotifyWhen.onThrottleInterval.label": "Selon des intervalles d'action personnalisés", - "alertsUIShared.ruleActionsNotifyWhen.summaryOrRulePerSelectRoleDescription": "Sélection du type de fréquence d'action", - "alertsUIShared.ruleActionsSetting.actionGroupNotSupported": "{actionGroupName} (non pris en charge actuellement)", - "alertsUIShared.ruleActionsSetting.actionGroupRunWhen": "Exécuter quand", - "alertsUIShared.ruleActionsSystemActionsItem.deleteActionAriaLabel": "supprimer l'action", - "alertsUIShared.ruleForm.actionsForm.publicBaseUrl": "server.publicBaseUrl n'est pas défini. Les URL générées seront relatives ou vides.", - "alertsUIShared.ruleForm.actionsForm.requiredFilterQuery": "Une requête personnalisée est requise.", - "alertsUIShared.ruleForm.actionTypeModalEmptyText": "Essayez une autre recherche ou modifiez vos paramètres de filtrage.", - "alertsUIShared.ruleForm.actionTypeModalEmptyTitle": "Aucun connecteur trouvé", - "alertsUIShared.ruleForm.actionTypeModalFilterAll": "Tous", - "alertsUIShared.ruleForm.actionTypeModalTitle": "Sélectionner un connecteur", - "alertsUIShared.ruleForm.circuitBreakerHideFullErrorText": "Masquer l'erreur en intégralité", - "alertsUIShared.ruleForm.circuitBreakerSeeFullErrorText": "Afficher l'erreur en intégralité", - "alertsUIShared.ruleForm.confirmRuleSaveCancelButtonText": "Annuler", - "alertsUIShared.ruleForm.confirmRuleSaveConfirmButtonText": "Enregistrer la règle", - "alertsUIShared.ruleForm.confirmRuleSaveMessageText": "Vous pouvez ajouter une action à tout moment.", - "alertsUIShared.ruleForm.confirmRuleSaveTitle": "Enregistrer la règle ne contenant aucune action ?", - "alertsUIShared.ruleForm.createErrorText": "Impossible de créer une règle.", - "alertsUIShared.ruleForm.createSuccessText": "Création de la règle \"{ruleName}\" effectuée", - "alertsUIShared.ruleForm.editErrorText": "Impossible de mettre à jour la règle.", - "alertsUIShared.ruleForm.editSuccessText": "Mise à jour de \"{ruleName}\" effectuée", - "alertsUIShared.ruleForm.error.belowMinimumAlertDelayText": "Le délai d'alerte doit être supérieur ou égal à 1.", - "alertsUIShared.ruleForm.error.belowMinimumText": "L'intervalle doit être au minimum de {minimum}.", - "alertsUIShared.ruleForm.error.requiredConsumerText": "La portée est requise.", - "alertsUIShared.ruleForm.error.requiredIntervalText": "L'intervalle de vérification est requis.", - "alertsUIShared.ruleForm.error.requiredNameText": "Le nom est requis.", - "alertsUIShared.ruleForm.error.requiredRuleTypeIdText": "Le type de règle est requis.", - "alertsUIShared.ruleForm.intervalWarningText": "Des intervalles inférieurs à {minimum} ne sont pas recommandés pour des raisons de performances.", - "alertsUIShared.ruleForm.modalSearchClearFiltersText": "Effacer les filtres", - "alertsUIShared.ruleForm.modalSearchPlaceholder": "Recherche", - "alertsUIShared.ruleForm.returnTitle": "Renvoyer", - "alertsUIShared.ruleForm.routeParamsErrorText": "Une erreur s'est produite lors du chargement du formulaire de la règle. Veuillez vérifier que le chemin est correct.", - "alertsUIShared.ruleForm.routeParamsErrorTitle": "Impossible de charger le formulaire de règle", - "alertsUIShared.ruleForm.ruleActions.addActionText": "Ajouter une action", - "alertsUIShared.ruleForm.ruleActionsAlertsFilterTimeframeTimezoneLabel": "Fuseau horaire", - "alertsUIShared.ruleForm.ruleActionsAlertsFilterTimeframeToggleLabel": "Si l'alerte est générée pendant l'intervalle de temps", - "alertsUIShared.ruleForm.ruleActionsAlertsFilterTimeframeWeekdays": "Jours de la semaine", - "alertsUIShared.ruleForm.ruleActionsNoPermissionDescription": "Pour modifier les règles, vous devez avoir un accès en lecture aux actions et aux connecteurs.", - "alertsUIShared.ruleForm.ruleActionsNoPermissionTitle": "Privilèges manquants pour les actions et les connecteurs", - "alertsUIShared.ruleForm.ruleActionsTitle": "Actions", - "alertsUIShared.ruleForm.ruleAlertDelay.alertDelayHelpText": "Une alerte n'est déclenchée que si le nombre spécifié d'exécutions consécutives remplit les conditions de la règle.", - "alertsUIShared.ruleForm.ruleAlertDelay.alertDelayTitlePrefix": "Après une alerte", - "alertsUIShared.ruleForm.ruleAlertDelay.alertDelayTitleSuffix": "correspondances consécutives", - "alertsUIShared.ruleForm.ruleDefinition.advancedOptionsTitle": "Options avancées", - "alertsUIShared.ruleForm.ruleDefinition.alertDelayDescription": "Définir le nombre d’exécutions consécutives pour lesquelles cette règle doit répondre aux conditions d'alerte avant qu'une alerte ne se déclenche", - "alertsUIShared.ruleForm.ruleDefinition.alertDelayTitle": "Délai d'alerte", - "alertsUIShared.ruleForm.ruleDefinition.alertFlappingDetectionDescription": "Détectez les alertes qui passent rapidement de l'état actif à l'état récupéré et réduisez le bruit non souhaité de ces alertes instables", - "alertsUIShared.ruleForm.ruleDefinition.alertFlappingDetectionTitle": "Détection de bagotement d'alerte", - "alertsUIShared.ruleForm.ruleDefinition.docLinkTitle": "Afficher la documentation", - "alertsUIShared.ruleForm.ruleDefinition.loadingRuleTypeParamsTitle": "Chargement des paramètres de types de règles", - "alertsUIShared.ruleForm.ruleDefinition.scheduleDescriptionText": "Définir la fréquence de vérification des conditions de l'alerte", - "alertsUIShared.ruleForm.ruleDefinition.scheduleTitle": "Calendrier des règles", - "alertsUIShared.ruleForm.ruleDefinition.scheduleTooltipText": "Les vérifications sont mises en file d'attente ; elles seront exécutées au plus près de la valeur définie, en fonction de la capacité.", - "alertsUIShared.ruleForm.ruleDefinition.scopeDescriptionText": "Sélectionnez les applications auxquelles associer le privilège de rôle correspondant", - "alertsUIShared.ruleForm.ruleDefinition.scopeTitle": "Portée de la règle", - "alertsUIShared.ruleForm.ruleDefinitionTitle": "Définition de la règle", - "alertsUIShared.ruleForm.ruleDetails.description": "Définissez un nom et des balises pour votre règle.", - "alertsUIShared.ruleForm.ruleDetails.ruleNameInputButtonAriaLabel": "Enregistrer le nom de la règle", - "alertsUIShared.ruleForm.ruleDetails.ruleNameInputTitle": "Nom de règle", - "alertsUIShared.ruleForm.ruleDetails.ruleTagsInputTitle": "Balises", - "alertsUIShared.ruleForm.ruleDetails.ruleTagsPlaceholder": "Ajouter des balises", - "alertsUIShared.ruleForm.ruleDetails.title": "Nom et balises de la règle", - "alertsUIShared.ruleForm.ruleDetailsTitle": "Détails de la règle", - "alertsUIShared.ruleForm.ruleFormCancelModalCancel": "Annuler", - "alertsUIShared.ruleForm.ruleFormCancelModalConfirm": "Abandonner les modifications", - "alertsUIShared.ruleForm.ruleFormCancelModalDescription": "Vous ne pouvez pas récupérer de modifications non enregistrées.", - "alertsUIShared.ruleForm.ruleFormCancelModalTitle": "Abandonner les modifications non enregistrées apportées à la règle ?", - "alertsUIShared.ruleForm.ruleFormConsumerSelection.apm": "APM et expérience utilisateur", - "alertsUIShared.ruleForm.ruleFormConsumerSelection.consumerSelectComboBoxTitle": "Sélectionner une portée", - "alertsUIShared.ruleForm.ruleFormConsumerSelection.consumerSelectTitle": "Visibilité du rôle", - "alertsUIShared.ruleForm.ruleFormConsumerSelection.infrastructure": "Indicateurs", - "alertsUIShared.ruleForm.ruleFormConsumerSelection.logs": "Logs", - "alertsUIShared.ruleForm.ruleFormConsumerSelection.slo": "SLO", - "alertsUIShared.ruleForm.ruleFormConsumerSelection.stackAlerts": "Règles de la Suite Elastic", - "alertsUIShared.ruleForm.ruleFormConsumerSelection.uptime": "Synthetics et Uptime", - "alertsUIShared.ruleForm.ruleNotFoundErrorText": "Une erreur s'est produite lors du chargement de la règle. Veuillez vous assurer que la règle existe et que vous y avez accès.", - "alertsUIShared.ruleForm.ruleNotFoundErrorTitle": "Impossible de charger la règle", - "alertsUIShared.ruleForm.rulePage.ruleNameAriaLabelText": "Modifier le nom de la règle", - "alertsUIShared.ruleForm.rulePageFooter.cancelText": "Annuler", - "alertsUIShared.ruleForm.rulePageFooter.createText": "Créer une règle", - "alertsUIShared.ruleForm.rulePageFooter.saveText": "Enregistrer la règle", - "alertsUIShared.ruleForm.rulePageFooter.showRequestText": "Afficher la requête", - "alertsUIShared.ruleForm.ruleSchedule.scheduleTitlePrefix": "Chaque", - "alertsUIShared.ruleForm.ruleTypeNotFoundErrorText": "Une erreur s'est produite lors du chargement du type de règle. Veuillez vous assurer que vous avez accès au type de règle sélectionné.", - "alertsUIShared.ruleForm.ruleTypeNotFoundErrorTitle": "Impossible de charger le type de règle", - "alertsUIShared.ruleForm.showRequestModal.headerTitle": "{requestType} requête de règle d'alerte", - "alertsUIShared.ruleForm.showRequestModal.headerTitleCreate": "Créer", - "alertsUIShared.ruleForm.showRequestModal.headerTitleEdit": "Modifier", - "alertsUIShared.ruleForm.showRequestModal.somethingWentWrongDescription": "Désolé, un problème est survenu.", - "alertsUIShared.ruleForm.showRequestModal.subheadingTitle": "La requête Kibana va {requestType} cette règle.", - "alertsUIShared.ruleForm.showRequestModal.subheadingTitleCreate": "créer", - "alertsUIShared.ruleForm.showRequestModal.subheadingTitleEdit": "modifier", - "alertsUIShared.ruleSettingsFlappingForm.flappingExternalLinkLabel": "Qu'est-ce que c'est ?", - "alertsUIShared.ruleSettingsFlappingForm.flappingLabel": "Détection des éléments instables", - "alertsUIShared.ruleSettingsFlappingForm.flappingOffContentRules": "Règles", - "alertsUIShared.ruleSettingsFlappingForm.flappingOffContentSettings": "Paramètres", - "alertsUIShared.ruleSettingsFlappingForm.flappingOffPopoverContent": "Accédez à {rules} > {settings} pour activer la détection d'instabilité pour l'ensemble des règles d'un espace. Vous pouvez ensuite personnaliser la période d'analyse et les valeurs seuils de chaque règle.", - "alertsUIShared.ruleSettingsFlappingForm.flappingOverrideConfiguration": "Personnaliser la configuration", - "alertsUIShared.ruleSettingsFlappingForm.offLabel": "DÉSACTIVÉ", - "alertsUIShared.ruleSettingsFlappingForm.onLabel": "ACTIVÉ", - "alertsUIShared.ruleSettingsFlappingForm.overrideLabel": "Personnalisé", - "alertsUIShared.ruleSettingsFlappingInputsProps.lookBackWindowHelp": "Nombre minimal d'exécutions pour lesquelles le seuil doit être atteint.", - "alertsUIShared.ruleSettingsFlappingInputsProps.lookBackWindowLabel": "Fenêtre d'historique d'exécution de la règle", - "alertsUIShared.ruleSettingsFlappingInputsProps.statusChangeThresholdHelp": "Nombre minimal de fois où une alerte doit changer d'état dans la fenêtre d'historique.", - "alertsUIShared.ruleSettingsFlappingInputsProps.statusChangeThresholdLabel": "Seuil de modification du statut d'alerte", - "alertsUIShared.ruleSettingsFlappingMessage.flappingOffMessage": "La détection de bagotement d'alerte est désactivée. Les alertes seront générées en fonction de l'intervalle de la règle, ce qui peut entraîner des volumes d'alertes plus importants.", - "alertsUIShared.ruleSettingsFlappingMessage.flappingSettingsDescription": "Cette règle détecte qu'une alerte est instable si son statut change au moins {statusChangeThreshold} au cours des derniers/dernières {lookBackWindow}.", - "alertsUIShared.ruleSettingsFlappingMessage.lookBackWindowLabelRuleRuns": "{amount, number} règle {amount, plural, one {exécute} other {exécutent}}", - "alertsUIShared.ruleSettingsFlappingMessage.spaceFlappingSettingsDescription": "L'ensemble des règles (de cet espace) détecte qu'une alerte est instable lorsque son statut change au moins {statusChangeThreshold} au cours des derniers/dernières {lookBackWindow}.", - "alertsUIShared.ruleSettingsFlappingMessage.statusChangeThresholdTimes": "{amount, number} {amount, plural, other {fois}}", - "alertsUIShared.ruleSettingsFlappingTitleTooltip.flappingOffContentRules": "Règles", - "alertsUIShared.ruleSettingsFlappingTitleTooltip.flappingOffContentSettings": "Paramètres", - "alertsUIShared.ruleSettingsFlappingTitleTooltip.flappingTitlePopover1": "Lorsque la {flappingDetection} est activée, les alertes qui passent rapidement de l'état actif à l'état récupéré sont identifiées comme \"instables\" et les notifications sont réduites.", - "alertsUIShared.ruleSettingsFlappingTitleTooltip.flappingTitlePopover2": "Le statut {alertStatus} définit une période (nombre minimum d'exécutions) utilisée dans l'algorithme de détection.", - "alertsUIShared.ruleSettingsFlappingTitleTooltip.flappingTitlePopover3": "Le paramètre {lookBack} indique le nombre minimum de fois que les alertes doivent changer d'état au cours de la période seuil pour être considérées comme des alertes instables.", - "alertsUIShared.ruleSettingsFlappingTitleTooltip.flappingTitlePopover4": "Accédez à {rules} > {settings} pour activer la détection d'instabilité pour l'ensemble des règles d'un espace. Vous pouvez ensuite personnaliser la période d'analyse et les valeurs seuils de chaque règle.", - "alertsUIShared.ruleSettingsFlappingTitleTooltip.flappingTitlePopoverAlertStatus": "seuil de modification du statut d'alerte", - "alertsUIShared.ruleSettingsFlappingTitleTooltip.flappingTitlePopoverFlappingDetection": "détection des éléments instables", - "alertsUIShared.ruleSettingsFlappingTitleTooltip.flappingTitlePopoverLookBack": "fenêtre d'historique d'exécution de la règle", - "alertsUIShared.ruleSettingsFlappingTitleTooltip.tooltipTitle": "Détection de bagotement d'alerte", - "alertsUIShared.technicalPreviewBadgeDescription": "Cette fonctionnalité est en version d'évaluation technique et pourra être modifiée ou retirée complètement dans une future version. Elastic s'efforcera de corriger tout problème, mais les fonctionnalités des versions d'évaluation technique ne sont pas soumises aux SLA de support des fonctionnalités officielles en disponibilité générale.", - "alertsUIShared.technicalPreviewBadgeLabel": "Version d'évaluation technique", - "alertsUIShared.timeUnits.dayLabel": "{timeValue, plural, one {jour} other {jours}}", - "alertsUIShared.timeUnits.hourLabel": "{timeValue, plural, one {heure} other {heures}}", - "alertsUIShared.timeUnits.minuteLabel": "{timeValue, plural, one {minute} other {minutes}}", - "alertsUIShared.timeUnits.secondLabel": "{timeValue, plural, one {seconde} other {secondes}}", "alertsUIShared.typeRegistry.get.missingActionTypeErrorMessage": "Le type d'objet \"{id}\" n'est pas enregistré.", "alertsUIShared.typeRegistry.register.duplicateObjectTypeErrorMessage": "Le type d'objet \"{id}\" est déjà enregistré.", "autocomplete.conflictIndicesWarning.description": "Ce champ est défini avec différents types dans les index suivants ou il n'est pas mappé, ce qui peut entraîner des résultats inattendus lors des requêtes.", @@ -6637,6 +6430,121 @@ "reporting.share.screenCapturePanelContent.optimizeForPrintingLabel": "Optimiser pour l'impression", "reporting.shareContextMenu.ExportsButtonLabel": "PDF", "reporting.shareContextMenu.ExportsButtonLabelPNG": "Export PNG", + "responseOpsRuleForm.disabledActionsWarningTitle": "Cette règle possède des actions qui sont désactivées", + "responseOpsRuleForm.ruleActionsAlertsFilter.ActionAlertsFilterQueryPlaceholder": "Filtrer les alertes à l'aide de la syntaxe KQL", + "responseOpsRuleForm.ruleActionsAlertsFilter.ActionAlertsFilterQueryToggleLabel": "Si l'alerte correspond à une requête", + "responseOpsRuleForm.ruleActionsItem.actionErrorToolTip": "L’action contient des erreurs.", + "responseOpsRuleForm.ruleActionsItem.actionUnableToLoadConnectorTitle": "Créez un connecteur et réessayez. Si vous ne parvenez pas à créer un connecteur, contactez votre administrateur système.", + "responseOpsRuleForm.ruleActionsItem.actionUseAadTemplateFieldsLabel": "Utiliser les champs de modèle de l'index des alertes", + "responseOpsRuleForm.ruleActionsItem.actionWarningsTitle": "1 avertissement", + "responseOpsRuleForm.ruleActionsItem.existingAlertActionTypeEditTitle": "{actionConnectorName}", + "responseOpsRuleForm.ruleActionsItem.runWhenGroupTitle": "Exécuter lorsque {groupName}", + "responseOpsRuleForm.ruleActionsItem.summaryGroupTitle": "Résumé des alertes", + "responseOpsRuleForm.ruleActionsNotifyWhen.actionFrequencyLabel": "Fréquence d'action", + "responseOpsRuleForm.ruleActionsNotifyWhen.frequencyNotifyWhen.label": "Exécuter chaque", + "responseOpsRuleForm.ruleActionsNotifyWhen.notifyWhenThrottleWarning": "Les intervalles d'action personnalisés ne peuvent pas être plus courts que l'intervalle de vérification de la règle", + "responseOpsRuleForm.ruleActionsNotifyWhen.onActionGroupChange.description": "Actions exécutées si le statut de l'alerte change.", + "responseOpsRuleForm.ruleActionsNotifyWhen.onActionGroupChange.display": "Lors de changements de statut", + "responseOpsRuleForm.ruleActionsNotifyWhen.onActionGroupChange.label": "Lors de changements de statut", + "responseOpsRuleForm.ruleActionsNotifyWhen.onActiveAlert.description": "Les actions sont exécutées si les conditions de règle sont remplies.", + "responseOpsRuleForm.ruleActionsNotifyWhen.onActiveAlert.display": "Selon les intervalles de vérification", + "responseOpsRuleForm.ruleActionsNotifyWhen.onActiveAlert.label": "Selon les intervalles de vérification", + "responseOpsRuleForm.ruleActionsNotifyWhen.onThrottleInterval.description": "Les actions sont exécutées si les conditions de règle sont remplies.", + "responseOpsRuleForm.ruleActionsNotifyWhen.onThrottleInterval.display": "Selon des intervalles d'action personnalisés", + "responseOpsRuleForm.ruleActionsNotifyWhen.onThrottleInterval.label": "Selon des intervalles d'action personnalisés", + "responseOpsRuleForm.ruleActionsNotifyWhen.summaryOrRulePerSelectRoleDescription": "Sélection du type de fréquence d'action", + "responseOpsRuleForm.ruleActionsSetting.actionGroupNotSupported": "{actionGroupName} (non pris en charge actuellement)", + "responseOpsRuleForm.ruleActionsSetting.actionGroupRunWhen": "Exécuter quand", + "responseOpsRuleForm.ruleActionsSystemActionsItem.deleteActionAriaLabel": "supprimer l'action", + "responseOpsRuleForm.ruleForm.actionsForm.publicBaseUrl": "server.publicBaseUrl n'est pas défini. Les URL générées seront relatives ou vides.", + "responseOpsRuleForm.ruleForm.actionsForm.requiredFilterQuery": "Une requête personnalisée est requise.", + "responseOpsRuleForm.ruleForm.actionTypeModalEmptyText": "Essayez une autre recherche ou modifiez vos paramètres de filtrage.", + "responseOpsRuleForm.ruleForm.actionTypeModalEmptyTitle": "Aucun connecteur trouvé", + "responseOpsRuleForm.ruleForm.actionTypeModalFilterAll": "Tous", + "responseOpsRuleForm.ruleForm.actionTypeModalTitle": "Sélectionner un connecteur", + "responseOpsRuleForm.ruleForm.circuitBreakerHideFullErrorText": "Masquer l'erreur en intégralité", + "responseOpsRuleForm.ruleForm.circuitBreakerSeeFullErrorText": "Afficher l'erreur en intégralité", + "responseOpsRuleForm.ruleForm.confirmRuleSaveCancelButtonText": "Annuler", + "responseOpsRuleForm.ruleForm.confirmRuleSaveConfirmButtonText": "Enregistrer la règle", + "responseOpsRuleForm.ruleForm.confirmRuleSaveMessageText": "Vous pouvez ajouter une action à tout moment.", + "responseOpsRuleForm.ruleForm.confirmRuleSaveTitle": "Enregistrer la règle ne contenant aucune action ?", + "responseOpsRuleForm.ruleForm.createErrorText": "Impossible de créer une règle.", + "responseOpsRuleForm.ruleForm.createSuccessText": "Création de la règle \"{ruleName}\" effectuée", + "responseOpsRuleForm.ruleForm.editErrorText": "Impossible de mettre à jour la règle.", + "responseOpsRuleForm.ruleForm.editSuccessText": "Mise à jour de \"{ruleName}\" effectuée", + "responseOpsRuleForm.ruleForm.error.belowMinimumAlertDelayText": "Le délai d'alerte doit être supérieur ou égal à 1.", + "responseOpsRuleForm.ruleForm.error.belowMinimumText": "L'intervalle doit être au minimum de {minimum}.", + "responseOpsRuleForm.ruleForm.error.requiredConsumerText": "La portée est requise.", + "responseOpsRuleForm.ruleForm.error.requiredIntervalText": "L'intervalle de vérification est requis.", + "responseOpsRuleForm.ruleForm.error.requiredNameText": "Le nom est requis.", + "responseOpsRuleForm.ruleForm.error.requiredRuleTypeIdText": "Le type de règle est requis.", + "responseOpsRuleForm.ruleForm.intervalWarningText": "Des intervalles inférieurs à {minimum} ne sont pas recommandés pour des raisons de performances.", + "responseOpsRuleForm.ruleForm.modalSearchClearFiltersText": "Effacer les filtres", + "responseOpsRuleForm.ruleForm.modalSearchPlaceholder": "Recherche", + "responseOpsRuleForm.ruleForm.returnTitle": "Renvoyer", + "responseOpsRuleForm.ruleForm.routeParamsErrorText": "Une erreur s'est produite lors du chargement du formulaire de la règle. Veuillez vérifier que le chemin est correct.", + "responseOpsRuleForm.ruleForm.routeParamsErrorTitle": "Impossible de charger le formulaire de règle", + "responseOpsRuleForm.ruleForm.ruleActions.addActionText": "Ajouter une action", + "responseOpsRuleForm.ruleForm.ruleActionsAlertsFilterTimeframeTimezoneLabel": "Fuseau horaire", + "responseOpsRuleForm.ruleForm.ruleActionsAlertsFilterTimeframeToggleLabel": "Si l'alerte est générée pendant l'intervalle de temps", + "responseOpsRuleForm.ruleForm.ruleActionsAlertsFilterTimeframeWeekdays": "Jours de la semaine", + "responseOpsRuleForm.ruleForm.ruleActionsNoPermissionDescription": "Pour modifier les règles, vous devez avoir un accès en lecture aux actions et aux connecteurs.", + "responseOpsRuleForm.ruleForm.ruleActionsNoPermissionTitle": "Privilèges manquants pour les actions et les connecteurs", + "responseOpsRuleForm.ruleForm.ruleActionsTitle": "Actions", + "responseOpsRuleForm.ruleForm.ruleAlertDelay.alertDelayHelpText": "Une alerte n'est déclenchée que si le nombre spécifié d'exécutions consécutives remplit les conditions de la règle.", + "responseOpsRuleForm.ruleForm.ruleAlertDelay.alertDelayTitlePrefix": "Après une alerte", + "responseOpsRuleForm.ruleForm.ruleAlertDelay.alertDelayTitleSuffix": "correspondances consécutives", + "responseOpsRuleForm.ruleForm.ruleDefinition.advancedOptionsTitle": "Options avancées", + "responseOpsRuleForm.ruleForm.ruleDefinition.alertDelayDescription": "Définir le nombre d’exécutions consécutives pour lesquelles cette règle doit répondre aux conditions d'alerte avant qu'une alerte ne se déclenche", + "responseOpsRuleForm.ruleForm.ruleDefinition.alertDelayTitle": "Délai d'alerte", + "responseOpsRuleForm.ruleForm.ruleDefinition.alertFlappingDetectionDescription": "Détectez les alertes qui passent rapidement de l'état actif à l'état récupéré et réduisez le bruit non souhaité de ces alertes instables", + "responseOpsRuleForm.ruleForm.ruleDefinition.alertFlappingDetectionTitle": "Détection de bagotement d'alerte", + "responseOpsRuleForm.ruleForm.ruleDefinition.docLinkTitle": "Afficher la documentation", + "responseOpsRuleForm.ruleForm.ruleDefinition.loadingRuleTypeParamsTitle": "Chargement des paramètres de types de règles", + "responseOpsRuleForm.ruleForm.ruleDefinition.scheduleDescriptionText": "Définir la fréquence de vérification des conditions de l'alerte", + "responseOpsRuleForm.ruleForm.ruleDefinition.scheduleTitle": "Calendrier des règles", + "responseOpsRuleForm.ruleForm.ruleDefinition.scheduleTooltipText": "Les vérifications sont mises en file d'attente ; elles seront exécutées au plus près de la valeur définie, en fonction de la capacité.", + "responseOpsRuleForm.ruleForm.ruleDefinition.scopeDescriptionText": "Sélectionnez les applications auxquelles associer le privilège de rôle correspondant", + "responseOpsRuleForm.ruleForm.ruleDefinition.scopeTitle": "Portée de la règle", + "responseOpsRuleForm.ruleForm.ruleDefinitionTitle": "Définition de la règle", + "responseOpsRuleForm.ruleForm.ruleDetails.description": "Définissez un nom et des balises pour votre règle.", + "responseOpsRuleForm.ruleForm.ruleDetails.ruleNameInputButtonAriaLabel": "Enregistrer le nom de la règle", + "responseOpsRuleForm.ruleForm.ruleDetails.ruleNameInputTitle": "Nom de règle", + "responseOpsRuleForm.ruleForm.ruleDetails.ruleTagsInputTitle": "Balises", + "responseOpsRuleForm.ruleForm.ruleDetails.ruleTagsPlaceholder": "Ajouter des balises", + "responseOpsRuleForm.ruleForm.ruleDetails.title": "Nom et balises de la règle", + "responseOpsRuleForm.ruleForm.ruleDetailsTitle": "Détails de la règle", + "responseOpsRuleForm.ruleForm.ruleFormCancelModalCancel": "Annuler", + "responseOpsRuleForm.ruleForm.ruleFormCancelModalConfirm": "Abandonner les modifications", + "responseOpsRuleForm.ruleForm.ruleFormCancelModalDescription": "Vous ne pouvez pas récupérer de modifications non enregistrées.", + "responseOpsRuleForm.ruleForm.ruleFormCancelModalTitle": "Abandonner les modifications non enregistrées apportées à la règle ?", + "responseOpsRuleForm.ruleForm.ruleFormConsumerSelection.apm": "APM et expérience utilisateur", + "responseOpsRuleForm.ruleForm.ruleFormConsumerSelection.consumerSelectComboBoxTitle": "Sélectionner une portée", + "responseOpsRuleForm.ruleForm.ruleFormConsumerSelection.consumerSelectTitle": "Visibilité du rôle", + "responseOpsRuleForm.ruleForm.ruleFormConsumerSelection.infrastructure": "Indicateurs", + "responseOpsRuleForm.ruleForm.ruleFormConsumerSelection.logs": "Logs", + "responseOpsRuleForm.ruleForm.ruleFormConsumerSelection.slo": "SLO", + "responseOpsRuleForm.ruleForm.ruleFormConsumerSelection.stackAlerts": "Règles de la Suite Elastic", + "responseOpsRuleForm.ruleForm.ruleFormConsumerSelection.uptime": "Synthetics et Uptime", + "responseOpsRuleForm.ruleForm.ruleNotFoundErrorText": "Une erreur s'est produite lors du chargement de la règle. Veuillez vous assurer que la règle existe et que vous y avez accès.", + "responseOpsRuleForm.ruleForm.ruleNotFoundErrorTitle": "Impossible de charger la règle", + "responseOpsRuleForm.ruleForm.rulePage.ruleNameAriaLabelText": "Modifier le nom de la règle", + "responseOpsRuleForm.ruleForm.rulePageFooter.cancelText": "Annuler", + "responseOpsRuleForm.ruleForm.rulePageFooter.createText": "Créer une règle", + "responseOpsRuleForm.ruleForm.rulePageFooter.saveText": "Enregistrer la règle", + "responseOpsRuleForm.ruleForm.rulePageFooter.showRequestText": "Afficher la requête", + "responseOpsRuleForm.ruleForm.ruleSchedule.scheduleTitlePrefix": "Chaque", + "responseOpsRuleForm.ruleForm.ruleTypeNotFoundErrorText": "Une erreur s'est produite lors du chargement du type de règle. Veuillez vous assurer que vous avez accès au type de règle sélectionné.", + "responseOpsRuleForm.ruleForm.ruleTypeNotFoundErrorTitle": "Impossible de charger le type de règle", + "responseOpsRuleForm.ruleForm.showRequestModal.headerTitle": "{requestType} requête de règle d'alerte", + "responseOpsRuleForm.ruleForm.showRequestModal.headerTitleCreate": "Créer", + "responseOpsRuleForm.ruleForm.showRequestModal.headerTitleEdit": "Modifier", + "responseOpsRuleForm.ruleForm.showRequestModal.somethingWentWrongDescription": "Désolé, un problème est survenu.", + "responseOpsRuleForm.ruleForm.showRequestModal.subheadingTitle": "La requête Kibana va {requestType} cette règle.", + "responseOpsRuleForm.ruleForm.showRequestModal.subheadingTitleCreate": "créer", + "responseOpsRuleForm.ruleForm.showRequestModal.subheadingTitleEdit": "modifier", + "responseOpsRuleForm.technicalPreviewBadgeDescription": "Cette fonctionnalité est en version d'évaluation technique et pourra être modifiée ou retirée complètement dans une future version. Elastic s'efforcera de corriger tout problème, mais les fonctionnalités des versions d'évaluation technique ne sont pas soumises aux SLA de support des fonctionnalités officielles en disponibilité générale.", + "responseOpsRuleForm.technicalPreviewBadgeLabel": "Version d'évaluation technique", "savedObjects.overwriteRejectedDescription": "La confirmation d'écrasement a été rejetée.", "savedObjects.saveDuplicateRejectedDescription": "La confirmation d'enregistrement avec un doublon de titre a été rejetée.", "savedObjects.saveModal.cancelButtonLabel": "Annuler", @@ -17163,7 +17071,6 @@ "xpack.enterpriseSearch.appSearch.metaEngines.title": "Métamoteurs", "xpack.enterpriseSearch.appSearch.multiInputRows.addValueButtonLabel": "Ajouter une valeur", "xpack.enterpriseSearch.appSearch.multiInputRows.inputRowPlaceholder": "Entrer une valeur", - "xpack.enterpriseSearch.appSearch.multiInputRows.removeValueButtonLabel": "Retirer une valeur", "xpack.enterpriseSearch.appSearch.ownerRoleTypeDescription": "Les propriétaires peuvent tout faire. Le compte peut avoir plusieurs propriétaires, mais il doit toujours y avoir au moins un propriétaire.", "xpack.enterpriseSearch.appSearch.productCardDescription": "Une solution sur mesure pour les applications et les sites web, qui fournit les outils dont vous avez besoin pour concevoir, implémenter et gérer efficacement ces expériences de recherche orientées clients.", "xpack.enterpriseSearch.appSearch.productDescription": "Tirez parti des tableaux de bord, des analyses et des API pour simplifier la recherche d'applications avancée.", @@ -31619,7 +31526,6 @@ "xpack.ml.trainedModels.modelsList.expandRow": "Développer", "xpack.ml.trainedModels.modelsList.fetchDeletionErrorMessage": "La suppression {modelsCount, plural, one {du modèle} other {des modèles}} a échoué", "xpack.ml.trainedModels.modelsList.fetchFailedErrorMessage": "Erreur lors du chargement des modèles entraînés", - "xpack.ml.trainedModels.modelsList.fetchModelStatsErrorMessage": "Erreur lors du chargement des statistiques des modèles entraînés", "xpack.ml.trainedModels.modelsList.forceStopDialog.cancelText": "Annuler", "xpack.ml.trainedModels.modelsList.forceStopDialog.confirmText": "Arrêt", "xpack.ml.trainedModels.modelsList.forceStopDialog.hasInferenceServicesWarning": "Ce modèle est utilisé par l'API _inference", @@ -35345,26 +35251,6 @@ "xpack.reporting.deprecations.reportingRole.forbiddenErrorMessage": "Vous n’avez pas les autorisations requises pour remédier à ce déclassement.", "xpack.reporting.deprecations.reportingRole.unknownErrorCorrectiveAction": "Pour plus d'informations, veuillez consulter les logs Kibana.", "xpack.reporting.deprecations.reportingRole.unknownErrorMessage": "Impossible d'exécuter la vérification de déclassement. Pour plus d'informations, veuillez consulter les logs Kibana.", - "xpack.reporting.deprecations.reportingRoleMappings.description": "Le mécanisme par défaut pour les privilèges de Reporting fonctionnera différemment dans les versions futures, et ce cluster a des mappings de rôle associés à un rôle déclassé pour ces privilèges. Définissez \"xpack.reporting.roles.enabled\" sur \"false\" pour adopter le comportement futur avant la mise à niveau.", - "xpack.reporting.deprecations.reportingRoleMappings.manualStepFive": "Supprimez le rôle \"reporting_user\" pour tous les mappings de rôle et ajoutez le rôle personnalisé. Les mappings de rôle concernés sont les suivants : {roleMappings}.", - "xpack.reporting.deprecations.reportingRoleMappings.manualStepFour": "Accordez les privilèges de Reporting aux utilisateurs en leur affectant l’un des nouveaux rôles.", - "xpack.reporting.deprecations.reportingRoleMappings.manualStepOne": "Définissez \"xpack.reporting.roles.enabled\" sur \"false\" dans le fichier kibana.yml.", - "xpack.reporting.deprecations.reportingRoleMappings.manualStepThree": "Sous Gestion > Sécurité > Rôles, créez un ou plusieurs rôles permettant d'accorder le privilège de l'application Kibana à Reporting.", - "xpack.reporting.deprecations.reportingRoleMappings.manualStepTwo": "Supprimez le paramètre \"xpack.reporting.roles.allow\" du fichier kibana.yml, le cas échéant.", - "xpack.reporting.deprecations.reportingRoleMappings.title": "Le rôle \"{reportingUserRoleName}\" est déclassé : vérifiez les mappings de rôle.", - "xpack.reporting.deprecations.reportingRoles.description": "Le mécanisme par défaut pour les privilèges de Reporting fonctionnera différemment dans les versions futures, ce qui affectera le comportement de ce cluster. Définissez \"xpack.reporting.roles.enabled\" sur \"false\" pour adopter le comportement futur avant la mise à niveau.", - "xpack.reporting.deprecations.reportingRoles.manualStepFour": "Accordez les privilèges de Reporting aux utilisateurs en leur affectant l’un des nouveaux rôles.", - "xpack.reporting.deprecations.reportingRoles.manualStepOne": "Définissez \"xpack.reporting.roles.enabled\" sur \"false\" dans le fichier kibana.yml.", - "xpack.reporting.deprecations.reportingRoles.manualStepThree": "Sous Gestion > Sécurité > Rôles, créez un ou plusieurs rôles permettant d'accorder le privilège de l'application Kibana à Reporting.", - "xpack.reporting.deprecations.reportingRoles.manualStepTwo": "Supprimez le paramètre \"xpack.reporting.roles.allow\" du fichier kibana.yml, le cas échéant.", - "xpack.reporting.deprecations.reportingRoles.title": "Le paramètre \"{fromPath}.roles\" est déclassé.", - "xpack.reporting.deprecations.reportingRoleUsers.description": "Le mécanisme par défaut pour les privilèges de Reporting fonctionnera différemment dans les versions futures, et ce cluster a des utilisateurs associés à un rôle déclassé pour ces privilèges. Définissez \"xpack.reporting.roles.enabled\" sur \"false\" pour adopter le comportement futur avant la mise à niveau.", - "xpack.reporting.deprecations.reportingRoleUsers.manualStepFive": "Supprimez le rôle \"reporting_user\" pour tous les utilisateurs et ajoutez le rôle personnalisé. Les utilisateurs concernés sont les suivants : {usersRoles}.", - "xpack.reporting.deprecations.reportingRoleUsers.manualStepFour": "Accordez les privilèges de Reporting aux utilisateurs en leur affectant l’un des nouveaux rôles.", - "xpack.reporting.deprecations.reportingRoleUsers.manualStepOne": "Définissez \"xpack.reporting.roles.enabled\" sur \"false\" dans le fichier kibana.yml.", - "xpack.reporting.deprecations.reportingRoleUsers.manualStepThree": "Sous Gestion > Sécurité > Rôles, créez un ou plusieurs rôles permettant d'accorder le privilège de l'application Kibana à Reporting.", - "xpack.reporting.deprecations.reportingRoleUsers.manualStepTwo": "Supprimez le paramètre \"xpack.reporting.roles.allow\" du fichier kibana.yml, le cas échéant.", - "xpack.reporting.deprecations.reportingRoleUsers.title": "Le rôle \"{reportingUserRoleName}\" est déclassé : vérifiez les rôles utilisateur.", "xpack.reporting.diagnostic.browserMissingDependency": "Le navigateur n'a pas pu démarrer correctement en raison de dépendances système manquantes. Veuillez consulter {url}", "xpack.reporting.diagnostic.browserMissingFonts": "Le navigateur n'a pas réussi à localiser de police par défaut. Consultez {url} pour corriger le problème.", "xpack.reporting.diagnostic.fontconfigError": "Le navigateur n'a pas pu démarrer correctement en raison de dépendances de polices système manquantes. Veuillez consulter {url}", @@ -35501,8 +35387,6 @@ "xpack.reporting.statusIndicator.unknownLabel": "Inconnu", "xpack.reporting.uiSettings.validate.customLogo.badFile": "Désolé, ce fichier ne convient pas. Veuillez essayer un autre fichier image.", "xpack.reporting.uiSettings.validate.customLogo.tooLarge": "Désolé, ce fichier est trop volumineux. Le fichier image doit être inférieur à 200 kilo-octets.", - "xpack.reporting.userAccessError.learnMoreLink": "En savoir plus", - "xpack.reporting.userAccessError.message": "Demandez à votre administrateur un accès aux fonctionnalités de reporting. {grantUserAccessDocs}.", "xpack.rollupJobs.appTitle": "Tâches de cumul", "xpack.rollupJobs.create.backButton.label": "Retour", "xpack.rollupJobs.create.dateTypeField": "date", @@ -37929,8 +37813,6 @@ "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.customThreatQueryFieldRequiredError": "Au moins une correspondance d'indicateur est requise.", "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.EqlQueryBarLabel": "Requête EQL", "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.eqlQueryFieldRequiredError": "Une requête EQL est requise.", - "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.eqlSequenceSuppressionDisableText": "La suppression n'est pas prise en charge pour les requêtes de séquence EQL.", - "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.eqlSequenceSuppressionValidationText": "{EQL_SEQUENCE_SUPPRESSION_DISABLE_TOOLTIP} Remplacez la requête EQL par une requête non séquentielle ou supprimez les champs de suppression.", "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.fieldAnomalyThresholdLabel": "Seuil de score d'anomalie", "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.fieldMachineLearningJobIdLabel": "Tâche de Machine Learning", "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.fieldQuerBarLabel": "Requête personnalisée", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 6d0ceeed9b77c..f8291d5aa5267 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -103,40 +103,6 @@ "aiAssistantManagementSelection.preferredAIAssistantTypeSettingValueObservability": "すべて", "alertingTypes.builtinActionGroups.recovered": "回復済み", "alertsGrouping.unit": "{totalCount, plural, other {アラート}}", - "alertsUIShared.actiActionsonNotifyWhen.forEachOption": "各アラート", - "alertsUIShared.actiActionsonNotifyWhen.summaryOption": "アラートの概要", - "alertsUIShared.actionForm.actionGroupRecoveredMessage": "回復済み", - "alertsUIShared.actionVariables.alertActionGroupLabel": "ルールのアクションをスケジュールしたアラートのアクショングループ。", - "alertsUIShared.actionVariables.alertActionGroupNameLabel": "ルールのアクションをスケジュールしたアラートのアクショングループの人間が読み取れる名前。", - "alertsUIShared.actionVariables.alertConsecutiveMatchesLabel": "ルール条件を満たす連続実行の数。", - "alertsUIShared.actionVariables.alertFlappingLabel": "アラートの状態が繰り返し変化しているかどうかを示すアラートのフラグ。", - "alertsUIShared.actionVariables.alertIdLabel": "ルールのアクションをスケジュールしたアラートのID。", - "alertsUIShared.actionVariables.alertUuidLabel": "ルールのアクションをスケジュールしたアラートのUUID。", - "alertsUIShared.actionVariables.allAlertsCountLabel": "すべてのアラートのカウント。", - "alertsUIShared.actionVariables.allAlertsDataLabel": "すべてのアラートのオブジェクトの配列。", - "alertsUIShared.actionVariables.dateLabel": "ルールがアクションをスケジュールした日付。", - "alertsUIShared.actionVariables.kibanaBaseUrlLabel": "構成したserver.publicBaseUrl値。構成していない場合は、空の文字列。", - "alertsUIShared.actionVariables.legacyAlertActionGroupLabel": "{variable}の導入により、これは廃止される予定です。", - "alertsUIShared.actionVariables.legacyAlertActionGroupNameLabel": "{variable}の導入により、これは廃止される予定です。", - "alertsUIShared.actionVariables.legacyAlertIdLabel": "{variable}の導入により、これは廃止される予定です。", - "alertsUIShared.actionVariables.legacyAlertInstanceIdLabel": "{variable}の導入により、これは廃止される予定です。", - "alertsUIShared.actionVariables.legacyAlertNameLabel": "{variable}の導入により、これは廃止される予定です。", - "alertsUIShared.actionVariables.legacyParamsLabel": "{variable}の導入により、これは廃止される予定です。", - "alertsUIShared.actionVariables.legacySpaceIdLabel": "{variable}の導入により、これは廃止される予定です。", - "alertsUIShared.actionVariables.legacyTagsLabel": "{variable}の導入により、これは廃止される予定です。", - "alertsUIShared.actionVariables.newAlertsCountLabel": "新しいアラートのカウント。", - "alertsUIShared.actionVariables.newAlertsDataLabel": "新しいアラートのオブジェクトの配列。", - "alertsUIShared.actionVariables.ongoingAlertsCountLabel": "実行中のアラートのカウント。", - "alertsUIShared.actionVariables.ongoingAlertsDataLabel": "実行中のアラートのオブジェクトの配列。", - "alertsUIShared.actionVariables.recoveredAlertsCountLabel": "回復済みのアラートのカウント。", - "alertsUIShared.actionVariables.recoveredAlertsDataLabel": "回復済みのアラートのオブジェクトの配列。", - "alertsUIShared.actionVariables.ruleIdLabel": "ルールの ID。", - "alertsUIShared.actionVariables.ruleNameLabel": "ルールの名前。", - "alertsUIShared.actionVariables.ruleParamsLabel": "ルールのパラメーター。", - "alertsUIShared.actionVariables.ruleSpaceIdLabel": "ルールのスペースID。", - "alertsUIShared.actionVariables.ruleTagsLabel": "ルールのタグ。", - "alertsUIShared.actionVariables.ruleTypeLabel": "ルールのタイプ。", - "alertsUIShared.actionVariables.ruleUrlLabel": "アラートを生成したルールのURL。server.publicBaseUrlが構成されていない場合は、空の文字列になります。", "alertsUIShared.alertFieldsTable.field": "フィールド", "alertsUIShared.alertFieldsTable.filter.placeholder": "フィールド、値、または説明でフィルター...", "alertsUIShared.alertFieldsTable.value": "値", @@ -160,13 +126,6 @@ "alertsUIShared.components.alertLifecycleStatusBadge.flappingLabel": "フラップ中", "alertsUIShared.components.alertLifecycleStatusBadge.recoveredLabel": "回復済み", "alertsUIShared.components.alertLifecycleStatusBadge.untrackedLabel": "未追跡", - "alertsUIShared.components.ruleTypeModal.allRuleTypes": "すべて", - "alertsUIShared.components.ruleTypeModal.loadingRuleTypes": "ルールタイプを読み込んでいます", - "alertsUIShared.components.ruleTypeModal.noRuleTypesErrorBody": "別の検索を試すか、フィルター設定を変更してください", - "alertsUIShared.components.ruleTypeModal.noRuleTypesErrorTitle": "ルールタイプが見つかりませんでした", - "alertsUIShared.components.ruleTypeModal.searchPlaceholder": "検索", - "alertsUIShared.components.ruleTypeModal.title": "ルールタイプを選択", - "alertsUIShared.disabledActionsWarningTitle": "このアラートには無効なアクションがあります", "alertsUIShared.filterGroup.contextMenu.reset": "コントロールをリセット", "alertsUIShared.filterGroup.contextMenu.resetTooltip": "コントロールを初期設定にリセット", "alertsUIShared.filterGroup.filtersChangedBanner": "フィルターコントロールが変更されました", @@ -181,15 +140,6 @@ "alertsUIShared.filtersGroup.discardChanges": "変更を破棄", "alertsUIShared.filtersGroup.pendingChanges": "保留中の変更を保存", "alertsUIShared.filtersGroup.urlParam.arrayError": "ページフィルターURLパラメーターは配列でなければなりません", - "alertsUIShared.healthCheck.actionText": "詳細情報", - "alertsUIShared.healthCheck.alertsErrorText": "ルールを作製するには、アラートおよびアクションプラグインを有効にする必要があります。", - "alertsUIShared.healthCheck.alertsErrorTitle": "アラートとアクションを有効にする必要があります", - "alertsUIShared.healthCheck.apiKeysAndEncryptionErrorText": "Alertingを使用するには、APIキーを有効にして、暗号化鍵を構成する必要があります。", - "alertsUIShared.healthCheck.apiKeysDisabledErrorText": "Alertingを使用するには、APIキーを有効にする必要があります。", - "alertsUIShared.healthCheck.apiKeysDisabledErrorTitle": "追加の設定が必要です", - "alertsUIShared.healthCheck.encryptionErrorText": "Alertingを使用するには、暗号化鍵を構成する必要があります。", - "alertsUIShared.healthCheck.encryptionErrorTitle": "追加の設定が必要です", - "alertsUIShared.healthCheck.healthCheck.apiKeysAndEncryptionErrorTitle": "追加の設定が必要です", "alertsUIShared.hooks.useAlertDataView.fetchErrorMessage": "アラートデータビューを読み込めません", "alertsUIShared.hooks.useFindAlertsQuery.unableToFindAlertsQueryMessage": "アラートが見つかりません", "alertsUIShared.hooks.useLoadRuleTypesQuery.unableToLoadRuleTypesMessage": "ルールタイプを読み込めません", @@ -201,163 +151,6 @@ "alertsUIShared.maintenanceWindowCallout.maintenanceWindowMultipleCategoryNames": "{commaSeparatedList}、および{last}", "alertsUIShared.maintenanceWindowCallout.maintenanceWindowTwoCategoryNames": "{first}および{second}", "alertsUIShared.maintenanceWindowCallout.managementCategoryLabel": "スタック", - "alertsUIShared.producerDisplayNames.apm": "APMおよびユーザーエクスペリエンス", - "alertsUIShared.producerDisplayNames.infrastructure": "インフラストラクチャー", - "alertsUIShared.producerDisplayNames.logs": "ログ", - "alertsUIShared.producerDisplayNames.metrics": "メトリック", - "alertsUIShared.producerDisplayNames.ml": "機械学習", - "alertsUIShared.producerDisplayNames.monitoring": "スタック監視", - "alertsUIShared.producerDisplayNames.observability": "Observability", - "alertsUIShared.producerDisplayNames.siem": "セキュリティ", - "alertsUIShared.producerDisplayNames.slo": "SLO", - "alertsUIShared.producerDisplayNames.stackAlerts": "スタックアラート", - "alertsUIShared.producerDisplayNames.uptime": "Syntheticsとアップタイム", - "alertsUIShared.ruleActionsAlertsFilter.ActionAlertsFilterQueryPlaceholder": "KQL構文を使用してアラートをフィルター", - "alertsUIShared.ruleActionsAlertsFilter.ActionAlertsFilterQueryToggleLabel": "アラートがクエリと一致する場合", - "alertsUIShared.ruleActionsItem.actionErrorToolTip": "アクションにはエラーがあります。", - "alertsUIShared.ruleActionsItem.actionUnableToLoadConnectorTitle": "コネクターを作成し、再試行してください。コネクターを作成できない場合は、システム管理者に連絡してください。", - "alertsUIShared.ruleActionsItem.actionUseAadTemplateFieldsLabel": "アラートインデックスのテンプレートフィールドを使用", - "alertsUIShared.ruleActionsItem.actionWarningsTitle": "1件の警告", - "alertsUIShared.ruleActionsItem.existingAlertActionTypeEditTitle": "{actionConnectorName}", - "alertsUIShared.ruleActionsItem.runWhenGroupTitle": "{groupName}のときに実行", - "alertsUIShared.ruleActionsItem.summaryGroupTitle": "アラートの概要", - "alertsUIShared.ruleActionsNotifyWhen.actionFrequencyLabel": "アクション頻度", - "alertsUIShared.ruleActionsNotifyWhen.frequencyNotifyWhen.label": "次の間隔で実行", - "alertsUIShared.ruleActionsNotifyWhen.notifyWhenThrottleWarning": "カスタムアクション間隔をルールのチェック間隔よりも短くすることはできません", - "alertsUIShared.ruleActionsNotifyWhen.onActionGroupChange.description": "アラートステータスが変更される場合にアクションを実行します。", - "alertsUIShared.ruleActionsNotifyWhen.onActionGroupChange.display": "ステータス変更時", - "alertsUIShared.ruleActionsNotifyWhen.onActionGroupChange.label": "ステータス変更時", - "alertsUIShared.ruleActionsNotifyWhen.onActiveAlert.description": "ルール条件が満たされた場合に、アクションが実行されます。", - "alertsUIShared.ruleActionsNotifyWhen.onActiveAlert.display": "チェック間隔", - "alertsUIShared.ruleActionsNotifyWhen.onActiveAlert.label": "チェック間隔", - "alertsUIShared.ruleActionsNotifyWhen.onThrottleInterval.description": "ルール条件が満たされた場合に、アクションが実行されます。", - "alertsUIShared.ruleActionsNotifyWhen.onThrottleInterval.display": "カスタムアクション間隔", - "alertsUIShared.ruleActionsNotifyWhen.onThrottleInterval.label": "カスタムアクション間隔", - "alertsUIShared.ruleActionsNotifyWhen.summaryOrRulePerSelectRoleDescription": "アクション頻度タイプ選択", - "alertsUIShared.ruleActionsSetting.actionGroupNotSupported": "{actionGroupName}(現在サポートされていません)", - "alertsUIShared.ruleActionsSetting.actionGroupRunWhen": "次のときに実行", - "alertsUIShared.ruleActionsSystemActionsItem.deleteActionAriaLabel": "削除アクション", - "alertsUIShared.ruleForm.actionsForm.publicBaseUrl": "server.publicBaseUrlが設定されていません。生成されたURLは相対URLか空になります。", - "alertsUIShared.ruleForm.actionsForm.requiredFilterQuery": "カスタムクエリが必要です。", - "alertsUIShared.ruleForm.actionTypeModalEmptyText": "別の検索を試すか、フィルター設定を変更してください。", - "alertsUIShared.ruleForm.actionTypeModalEmptyTitle": "コネクターが見つかりません", - "alertsUIShared.ruleForm.actionTypeModalFilterAll": "すべて", - "alertsUIShared.ruleForm.actionTypeModalTitle": "コネクターを選択", - "alertsUIShared.ruleForm.circuitBreakerHideFullErrorText": "完全なエラーを非表示", - "alertsUIShared.ruleForm.circuitBreakerSeeFullErrorText": "完全なエラーを表示", - "alertsUIShared.ruleForm.confirmRuleSaveCancelButtonText": "キャンセル", - "alertsUIShared.ruleForm.confirmRuleSaveConfirmButtonText": "ルールを保存", - "alertsUIShared.ruleForm.confirmRuleSaveMessageText": "いつでもアクションを追加できます。", - "alertsUIShared.ruleForm.confirmRuleSaveTitle": "アクションがないルールを保存しますか?", - "alertsUIShared.ruleForm.createErrorText": "ルールを作成できません。", - "alertsUIShared.ruleForm.createSuccessText": "ルール\"{ruleName}\"を作成しました", - "alertsUIShared.ruleForm.editErrorText": "ルールを更新できません", - "alertsUIShared.ruleForm.editSuccessText": "''{ruleName}''を更新しました", - "alertsUIShared.ruleForm.error.belowMinimumAlertDelayText": "アラート遅延は1以上の値でなければなりません。", - "alertsUIShared.ruleForm.error.belowMinimumText": "間隔は{minimum}以上でなければなりません。", - "alertsUIShared.ruleForm.error.requiredConsumerText": "範囲が必要です。", - "alertsUIShared.ruleForm.error.requiredIntervalText": "確認間隔が必要です。", - "alertsUIShared.ruleForm.error.requiredNameText": "名前が必要です。", - "alertsUIShared.ruleForm.error.requiredRuleTypeIdText": "ルールタイプは必須です。", - "alertsUIShared.ruleForm.intervalWarningText": "パフォーマンスの考慮から、{minimum}未満の間隔は推奨されません。", - "alertsUIShared.ruleForm.modalSearchClearFiltersText": "フィルターを消去", - "alertsUIShared.ruleForm.modalSearchPlaceholder": "検索", - "alertsUIShared.ruleForm.returnTitle": "戻る", - "alertsUIShared.ruleForm.routeParamsErrorText": "ルールフォームの読み込みエラーが発生しました。ルートが正しいことを確認してください。", - "alertsUIShared.ruleForm.routeParamsErrorTitle": "ルールフォームを読み込めません。", - "alertsUIShared.ruleForm.ruleActions.addActionText": "アクションの追加", - "alertsUIShared.ruleForm.ruleActionsAlertsFilterTimeframeTimezoneLabel": "タイムゾーン", - "alertsUIShared.ruleForm.ruleActionsAlertsFilterTimeframeToggleLabel": "アラートがタイムフレーム中に生成された場合", - "alertsUIShared.ruleForm.ruleActionsAlertsFilterTimeframeWeekdays": "曜日", - "alertsUIShared.ruleForm.ruleActionsNoPermissionDescription": "ルールを編集するには、アクションとコネクターへの読み取りアクセス権が必要です。", - "alertsUIShared.ruleForm.ruleActionsNoPermissionTitle": "アクションとコネクターの権限が不足しています", - "alertsUIShared.ruleForm.ruleActionsTitle": "アクション", - "alertsUIShared.ruleForm.ruleAlertDelay.alertDelayHelpText": "指定した数の連続実行がルール条件を満たしたときにのみ、アラートが発生します。", - "alertsUIShared.ruleForm.ruleAlertDelay.alertDelayTitlePrefix": "次の後にアラート", - "alertsUIShared.ruleForm.ruleAlertDelay.alertDelayTitleSuffix": "連続一致", - "alertsUIShared.ruleForm.ruleDefinition.advancedOptionsTitle": "高度なオプション", - "alertsUIShared.ruleForm.ruleDefinition.alertDelayDescription": "アラートが発生する前に、このルールがアラート条件を満たす必要がある連続実行の回数を設定します", - "alertsUIShared.ruleForm.ruleDefinition.alertDelayTitle": "アラート遅延", - "alertsUIShared.ruleForm.ruleDefinition.alertFlappingDetectionDescription": "アクティブと回復済みの状態がすばやく切り替わるアラートを検出し、これらのフラップアラートに対する不要なノイズを低減します", - "alertsUIShared.ruleForm.ruleDefinition.alertFlappingDetectionTitle": "アラートフラップ検出", - "alertsUIShared.ruleForm.ruleDefinition.docLinkTitle": "ドキュメンテーションを表示", - "alertsUIShared.ruleForm.ruleDefinition.loadingRuleTypeParamsTitle": "ルールタイプパラメーターを読み込んでいます", - "alertsUIShared.ruleForm.ruleDefinition.scheduleDescriptionText": "アラート条件を確認する頻度を設定します", - "alertsUIShared.ruleForm.ruleDefinition.scheduleTitle": "ルールスケジュール", - "alertsUIShared.ruleForm.ruleDefinition.scheduleTooltipText": "チェックはキューに登録されています。可能なかぎり定義された値に近づくように実行されます。", - "alertsUIShared.ruleForm.ruleDefinition.scopeDescriptionText": "対応するロール権限に関連付けるアプリケーションを選択", - "alertsUIShared.ruleForm.ruleDefinition.scopeTitle": "ルール範囲", - "alertsUIShared.ruleForm.ruleDefinitionTitle": "ルール検知", - "alertsUIShared.ruleForm.ruleDetails.description": "ルールの名前とタグを定義します。", - "alertsUIShared.ruleForm.ruleDetails.ruleNameInputButtonAriaLabel": "ルール名を保存", - "alertsUIShared.ruleForm.ruleDetails.ruleNameInputTitle": "ルール名", - "alertsUIShared.ruleForm.ruleDetails.ruleTagsInputTitle": "タグ", - "alertsUIShared.ruleForm.ruleDetails.ruleTagsPlaceholder": "タグを追加", - "alertsUIShared.ruleForm.ruleDetails.title": "ルールの名前とタグ", - "alertsUIShared.ruleForm.ruleDetailsTitle": "ルール詳細", - "alertsUIShared.ruleForm.ruleFormCancelModalCancel": "キャンセル", - "alertsUIShared.ruleForm.ruleFormCancelModalConfirm": "変更を破棄", - "alertsUIShared.ruleForm.ruleFormCancelModalDescription": "保存されていない変更は回復できません。", - "alertsUIShared.ruleForm.ruleFormCancelModalTitle": "ルールの保存されていない変更を破棄しますか?", - "alertsUIShared.ruleForm.ruleFormConsumerSelection.apm": "APMおよびユーザーエクスペリエンス", - "alertsUIShared.ruleForm.ruleFormConsumerSelection.consumerSelectComboBoxTitle": "範囲を選択", - "alertsUIShared.ruleForm.ruleFormConsumerSelection.consumerSelectTitle": "ロールの表示", - "alertsUIShared.ruleForm.ruleFormConsumerSelection.infrastructure": "メトリック", - "alertsUIShared.ruleForm.ruleFormConsumerSelection.logs": "ログ", - "alertsUIShared.ruleForm.ruleFormConsumerSelection.slo": "SLO", - "alertsUIShared.ruleForm.ruleFormConsumerSelection.stackAlerts": "スタックルール", - "alertsUIShared.ruleForm.ruleFormConsumerSelection.uptime": "Syntheticsとアップタイム", - "alertsUIShared.ruleForm.ruleNotFoundErrorText": "ルールの読み込みエラーが発生しました。ルールが存在し、選択したルールにアクセスできることを確認してください。", - "alertsUIShared.ruleForm.ruleNotFoundErrorTitle": "ルールを読み込めません", - "alertsUIShared.ruleForm.rulePage.ruleNameAriaLabelText": "ルール名を編集", - "alertsUIShared.ruleForm.rulePageFooter.cancelText": "キャンセル", - "alertsUIShared.ruleForm.rulePageFooter.createText": "ルールを作成", - "alertsUIShared.ruleForm.rulePageFooter.saveText": "ルールを保存", - "alertsUIShared.ruleForm.rulePageFooter.showRequestText": "リクエストを表示", - "alertsUIShared.ruleForm.ruleSchedule.scheduleTitlePrefix": "毎", - "alertsUIShared.ruleForm.ruleTypeNotFoundErrorText": "ルールタイプの読み込みエラーが発生しました。選択したルールタイプにアクセスできることを確認してください。", - "alertsUIShared.ruleForm.ruleTypeNotFoundErrorTitle": "ルールタイプを読み込めません", - "alertsUIShared.ruleForm.showRequestModal.headerTitle": "{requestType}アラートルールリクエスト", - "alertsUIShared.ruleForm.showRequestModal.headerTitleCreate": "作成", - "alertsUIShared.ruleForm.showRequestModal.headerTitleEdit": "編集", - "alertsUIShared.ruleForm.showRequestModal.somethingWentWrongDescription": "申し訳ございませんが、何か問題が発生しました。", - "alertsUIShared.ruleForm.showRequestModal.subheadingTitle": "このKibanaリクエストはこのルールを{requestType}します。", - "alertsUIShared.ruleForm.showRequestModal.subheadingTitleCreate": "作成", - "alertsUIShared.ruleForm.showRequestModal.subheadingTitleEdit": "編集", - "alertsUIShared.ruleSettingsFlappingForm.flappingExternalLinkLabel": "概要", - "alertsUIShared.ruleSettingsFlappingForm.flappingLabel": "フラップ検出", - "alertsUIShared.ruleSettingsFlappingForm.flappingOffContentRules": "ルール", - "alertsUIShared.ruleSettingsFlappingForm.flappingOffContentSettings": "設定", - "alertsUIShared.ruleSettingsFlappingForm.flappingOffPopoverContent": "スペース内のすべてのルールでフラッピング検出を有効にするには、{rules} > {settings}に移動します。その後、各ルールで履歴表示期間としきい値をカスタマイズできます。", - "alertsUIShared.ruleSettingsFlappingForm.flappingOverrideConfiguration": "構成をカスタマイズ", - "alertsUIShared.ruleSettingsFlappingForm.offLabel": "オフ", - "alertsUIShared.ruleSettingsFlappingForm.onLabel": "オン", - "alertsUIShared.ruleSettingsFlappingForm.overrideLabel": "カスタム", - "alertsUIShared.ruleSettingsFlappingInputsProps.lookBackWindowHelp": "しきい値を満たす必要がある最小実行回数。", - "alertsUIShared.ruleSettingsFlappingInputsProps.lookBackWindowLabel": "ルール実行ルックバック期間", - "alertsUIShared.ruleSettingsFlappingInputsProps.statusChangeThresholdHelp": "ルックバック期間でアラートの状態が切り替わる必要がある最小回数。", - "alertsUIShared.ruleSettingsFlappingInputsProps.statusChangeThresholdLabel": "アラートステータス変更しきい値", - "alertsUIShared.ruleSettingsFlappingMessage.flappingOffMessage": "アラートフラップ検出がオフです。アラートはルール間隔に基づいて生成されるため、アラート量が多くなる可能性があります。", - "alertsUIShared.ruleSettingsFlappingMessage.flappingSettingsDescription": "このルールは、過去{lookBackWindow}に少なくとも{statusChangeThreshold}ステータスが変更された場合、アラートが作動していることを検出します。", - "alertsUIShared.ruleSettingsFlappingMessage.lookBackWindowLabelRuleRuns": "{amount, number}個のルール{amount, plural, other {が実行されます}}", - "alertsUIShared.ruleSettingsFlappingMessage.spaceFlappingSettingsDescription": "(このスペースの)すべてのルールは、過去{lookBackWindow}に少なくとも{statusChangeThreshold}ステータスが変更された場合、アラートが作動していることを検出します。", - "alertsUIShared.ruleSettingsFlappingMessage.statusChangeThresholdTimes": "{amount, number} {amount, plural, other {回}}", - "alertsUIShared.ruleSettingsFlappingTitleTooltip.flappingOffContentRules": "ルール", - "alertsUIShared.ruleSettingsFlappingTitleTooltip.flappingOffContentSettings": "設定", - "alertsUIShared.ruleSettingsFlappingTitleTooltip.flappingTitlePopover1": "{flappingDetection}がオンになっている場合、アクティブ状態と回復状態が高速で切り替わるアラートは「作動中」として識別され、通知が削減されます。", - "alertsUIShared.ruleSettingsFlappingTitleTooltip.flappingTitlePopover2": "{alertStatus}は、検出アルゴリズムで使用される期間(最低実行回数)を定義します。", - "alertsUIShared.ruleSettingsFlappingTitleTooltip.flappingTitlePopover3": "{lookBack}は、作動中アラートとして認定されるために、アラートがしきい値期間内に状態を切り替える必要がある最小回数を示します。", - "alertsUIShared.ruleSettingsFlappingTitleTooltip.flappingTitlePopover4": "スペース内のすべてのルールでフラッピング検出を有効にするには、{rules} > {settings}に移動します。その後、各ルールで履歴表示期間としきい値をカスタマイズできます。", - "alertsUIShared.ruleSettingsFlappingTitleTooltip.flappingTitlePopoverAlertStatus": "アラートステータス変更しきい値", - "alertsUIShared.ruleSettingsFlappingTitleTooltip.flappingTitlePopoverFlappingDetection": "フラップ検出", - "alertsUIShared.ruleSettingsFlappingTitleTooltip.flappingTitlePopoverLookBack": "ルール実行ルックバック期間", - "alertsUIShared.ruleSettingsFlappingTitleTooltip.tooltipTitle": "アラートフラップ検出", - "alertsUIShared.technicalPreviewBadgeDescription": "この機能はテクニカルプレビュー中であり、将来のリリースでは変更されたり完全に削除されたりする場合があります。Elasticはすべての問題の修正に努めますが、テクニカルプレビュー中の機能には正式なGA機能のサポートSLAが適用されません。", - "alertsUIShared.technicalPreviewBadgeLabel": "テクニカルプレビュー", - "alertsUIShared.timeUnits.dayLabel": "{timeValue, plural, other {#日}}", - "alertsUIShared.timeUnits.hourLabel": "{timeValue, plural, other {時間}}", - "alertsUIShared.timeUnits.minuteLabel": "{timeValue, plural, other {分}}", - "alertsUIShared.timeUnits.secondLabel": "{timeValue, plural, other {秒}}", "alertsUIShared.typeRegistry.get.missingActionTypeErrorMessage": "オブジェクトタイプ「{id}」は登録されていません。", "alertsUIShared.typeRegistry.register.duplicateObjectTypeErrorMessage": "オブジェクトタイプ「{id}」はすでに登録されています。", "autocomplete.conflictIndicesWarning.description": "このフィールドは、次のインデックスで別の型として定義されているか、マッピングされていません。これにより、予期しないクエリー結果になる場合があります。", @@ -17141,7 +16934,6 @@ "xpack.enterpriseSearch.appSearch.metaEngines.title": "メタエンジン", "xpack.enterpriseSearch.appSearch.multiInputRows.addValueButtonLabel": "値を追加", "xpack.enterpriseSearch.appSearch.multiInputRows.inputRowPlaceholder": "値を入力", - "xpack.enterpriseSearch.appSearch.multiInputRows.removeValueButtonLabel": "値を削除", "xpack.enterpriseSearch.appSearch.ownerRoleTypeDescription": "所有者はすべての操作を実行できます。アカウントには複数の所有者がいる場合がありますが、一度に少なくとも1人以上の所有者が必要です。", "xpack.enterpriseSearch.appSearch.productCardDescription": "アプリやWebサイト向けのカスタムソリューション。ユーザー向けの検索エクスペリエンスを設計、実装、効果的に管理するために必要なツールを提供します。", "xpack.enterpriseSearch.appSearch.productDescription": "ダッシュボード、分析、APIを活用し、高度なアプリケーション検索をシンプルにします。", @@ -31595,7 +31387,6 @@ "xpack.ml.trainedModels.modelsList.expandRow": "拡張", "xpack.ml.trainedModels.modelsList.fetchDeletionErrorMessage": "{modelsCount, plural, other {モデル}}を削除できませんでした", "xpack.ml.trainedModels.modelsList.fetchFailedErrorMessage": "学習済みモデルの読み込みエラー", - "xpack.ml.trainedModels.modelsList.fetchModelStatsErrorMessage": "学習済みモデル統計情報の読み込みエラー", "xpack.ml.trainedModels.modelsList.forceStopDialog.cancelText": "キャンセル", "xpack.ml.trainedModels.modelsList.forceStopDialog.confirmText": "終了", "xpack.ml.trainedModels.modelsList.forceStopDialog.hasInferenceServicesWarning": "モデルは_inference APIによって使用されます。", @@ -35319,26 +35110,6 @@ "xpack.reporting.deprecations.reportingRole.forbiddenErrorMessage": "この廃止予定を修正する十分な権限がありません。", "xpack.reporting.deprecations.reportingRole.unknownErrorCorrectiveAction": "詳細については、Kibanaログを確認してください。", "xpack.reporting.deprecations.reportingRole.unknownErrorMessage": "廃止予定チェックを実行できませんでした。詳細については、Kibanaログを確認してください。", - "xpack.reporting.deprecations.reportingRoleMappings.description": "将来のバージョンでは、レポート権限のデフォルトメカニズムの動作が変更されます。また、このクラスターには、この権限の廃止予定のロールにマッピングされたロールマッピングが存在します。「xpack.reporting.roles.enabled」を「false」に設定すると、アップグレード前に将来の動作を導入できます。", - "xpack.reporting.deprecations.reportingRoleMappings.manualStepFive": "すべてのロールマッピングから\"reporting_user\"ロールを削除し、カスタムロールを追加します。影響を受けるロールマッピング:{roleMappings}。", - "xpack.reporting.deprecations.reportingRoleMappings.manualStepFour": "新しいロールのいずれかを割り当てて、レポート権限をユーザーに付与します。", - "xpack.reporting.deprecations.reportingRoleMappings.manualStepOne": "kibana.ymlで「xpack.reporting.roles.enabled」をfalseに設定します。", - "xpack.reporting.deprecations.reportingRoleMappings.manualStepThree": "[管理]>[セキュリティ]>[ロール]から、レポートのKibanaアプリケーション権限を付与する1つ以上のロールを作成します。", - "xpack.reporting.deprecations.reportingRoleMappings.manualStepTwo": "存在する場合は、kibana.ymlで「xpack.reporting.roles.allow」を削除します。", - "xpack.reporting.deprecations.reportingRoleMappings.title": "\"{reportingUserRoleName}\"ロールは廃止予定です。ロールマッピングを確認してください", - "xpack.reporting.deprecations.reportingRoles.description": "将来のバージョンでは、レポート権限のデフォルトメカニズムが変更されます。これはこのクラスターの動作に影響します。「xpack.reporting.roles.enabled」を「false」に設定すると、アップグレード前に将来の動作を導入できます。", - "xpack.reporting.deprecations.reportingRoles.manualStepFour": "新しいロールのいずれかを割り当てて、レポート権限をユーザーに付与します。", - "xpack.reporting.deprecations.reportingRoles.manualStepOne": "kibana.ymlで「xpack.reporting.roles.enabled」をfalseに設定します。", - "xpack.reporting.deprecations.reportingRoles.manualStepThree": "[管理]>[セキュリティ]>[ロール]から、レポートのKibanaアプリケーション権限を付与する1つ以上のロールを作成します。", - "xpack.reporting.deprecations.reportingRoles.manualStepTwo": "存在する場合は、kibana.ymlで「xpack.reporting.roles.allow」を削除します。", - "xpack.reporting.deprecations.reportingRoles.title": "\"{fromPath}.roles\"設定は廃止予定です", - "xpack.reporting.deprecations.reportingRoleUsers.description": "将来のバージョンでは、レポート権限のデフォルトメカニズムの動作が変更されます。また、このクラスターには、この権限の廃止予定のロールが割り当てられたユーザーが存在します。「xpack.reporting.roles.enabled」を「false」に設定すると、アップグレード前に将来の動作を導入できます。", - "xpack.reporting.deprecations.reportingRoleUsers.manualStepFive": "すべてのユーザーから「reporting_user」ロールを削除し、カスタムロールを追加します。影響を受けるユーザー:{usersRoles}。", - "xpack.reporting.deprecations.reportingRoleUsers.manualStepFour": "新しいロールのいずれかを割り当てて、レポート権限をユーザーに付与します。", - "xpack.reporting.deprecations.reportingRoleUsers.manualStepOne": "kibana.ymlで「xpack.reporting.roles.enabled」をfalseに設定します。", - "xpack.reporting.deprecations.reportingRoleUsers.manualStepThree": "[管理]>[セキュリティ]>[ロール]から、レポートのKibanaアプリケーション権限を付与する1つ以上のロールを作成します。", - "xpack.reporting.deprecations.reportingRoleUsers.manualStepTwo": "存在する場合は、kibana.ymlで「xpack.reporting.roles.allow」を削除します。", - "xpack.reporting.deprecations.reportingRoleUsers.title": "\"{reportingUserRoleName}\"ロールは廃止予定です。ユーザーロールを確認してください", "xpack.reporting.diagnostic.browserMissingDependency": "システム依存関係が不足しているため、ブラウザーを正常に起動できませんでした。{url}を参照してください", "xpack.reporting.diagnostic.browserMissingFonts": "ブラウザーはデフォルトフォントを検索できませんでした。この問題を修正するには、{url}を参照してください。", "xpack.reporting.diagnostic.fontconfigError": "システムフォント依存関係が不足しているため、ブラウザーを正常に起動できませんでした。{url}を参照してください", @@ -35475,8 +35246,6 @@ "xpack.reporting.statusIndicator.unknownLabel": "不明", "xpack.reporting.uiSettings.validate.customLogo.badFile": "このファイルは動作しません。別の画像ファイルを試してください。", "xpack.reporting.uiSettings.validate.customLogo.tooLarge": "このファイルは大きすぎます。画像ファイルは200キロバイト未満でなければなりません。", - "xpack.reporting.userAccessError.learnMoreLink": "詳細", - "xpack.reporting.userAccessError.message": "レポート機能にアクセスするには、管理者に問い合わせてください。{grantUserAccessDocs}。", "xpack.rollupJobs.appTitle": "ロールアップジョブ", "xpack.rollupJobs.create.backButton.label": "戻る", "xpack.rollupJobs.create.dateTypeField": "日付", @@ -37901,8 +37670,6 @@ "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.customThreatQueryFieldRequiredError": "1 つ以上のインジケーター一致が必要です。", "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.EqlQueryBarLabel": "EQL クエリ", "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.eqlQueryFieldRequiredError": "EQLクエリは必須です。", - "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.eqlSequenceSuppressionDisableText": "EQLシーケンスクエリでは抑制はサポートされていません。", - "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.eqlSequenceSuppressionValidationText": "{EQL_SEQUENCE_SUPPRESSION_DISABLE_TOOLTIP} EQLクエリを非シーケンスクエリに変更するか、抑制フィールドを削除してください。", "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.fieldAnomalyThresholdLabel": "異常スコアしきい値", "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.fieldMachineLearningJobIdLabel": "機械学習ジョブ", "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.fieldQuerBarLabel": "カスタムクエリー", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 9c52ac8a5101a..0d204aad72949 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -103,40 +103,6 @@ "aiAssistantManagementSelection.preferredAIAssistantTypeSettingValueObservability": "随处显示", "alertingTypes.builtinActionGroups.recovered": "已恢复", "alertsGrouping.unit": "{totalCount, plural, other {告警}}", - "alertsUIShared.actiActionsonNotifyWhen.forEachOption": "对于每个告警", - "alertsUIShared.actiActionsonNotifyWhen.summaryOption": "告警的摘要", - "alertsUIShared.actionForm.actionGroupRecoveredMessage": "已恢复", - "alertsUIShared.actionVariables.alertActionGroupLabel": "已为规则计划操作的告警的操作组。", - "alertsUIShared.actionVariables.alertActionGroupNameLabel": "已为规则计划操作的告警的操作组的可人工读取名称。", - "alertsUIShared.actionVariables.alertConsecutiveMatchesLabel": "满足规则条件的连续运行次数。", - "alertsUIShared.actionVariables.alertFlappingLabel": "告警上指示告警状态是否重复更改的标志。", - "alertsUIShared.actionVariables.alertIdLabel": "已为规则计划操作的告警的 ID。", - "alertsUIShared.actionVariables.alertUuidLabel": "已为规则计划操作的告警的 UUID。", - "alertsUIShared.actionVariables.allAlertsCountLabel": "所有告警的计数。", - "alertsUIShared.actionVariables.allAlertsDataLabel": "所有告警的对象数组。", - "alertsUIShared.actionVariables.dateLabel": "规则计划操作的日期。", - "alertsUIShared.actionVariables.kibanaBaseUrlLabel": "配置的 server.publicBaseUrl 值,如果未配置,则为空字符串。", - "alertsUIShared.actionVariables.legacyAlertActionGroupLabel": "其已弃用,将由 {variable} 替代。", - "alertsUIShared.actionVariables.legacyAlertActionGroupNameLabel": "其已弃用,将由 {variable} 替代。", - "alertsUIShared.actionVariables.legacyAlertIdLabel": "其已弃用,将由 {variable} 替代。", - "alertsUIShared.actionVariables.legacyAlertInstanceIdLabel": "其已弃用,将由 {variable} 替代。", - "alertsUIShared.actionVariables.legacyAlertNameLabel": "其已弃用,将由 {variable} 替代。", - "alertsUIShared.actionVariables.legacyParamsLabel": "其已弃用,将由 {variable} 替代。", - "alertsUIShared.actionVariables.legacySpaceIdLabel": "其已弃用,将由 {variable} 替代。", - "alertsUIShared.actionVariables.legacyTagsLabel": "其已弃用,将由 {variable} 替代。", - "alertsUIShared.actionVariables.newAlertsCountLabel": "新告警的计数。", - "alertsUIShared.actionVariables.newAlertsDataLabel": "新告警的对象数组。", - "alertsUIShared.actionVariables.ongoingAlertsCountLabel": "进行中的告警的计数。", - "alertsUIShared.actionVariables.ongoingAlertsDataLabel": "进行中的告警的对象数组。", - "alertsUIShared.actionVariables.recoveredAlertsCountLabel": "已恢复告警的计数。", - "alertsUIShared.actionVariables.recoveredAlertsDataLabel": "已恢复告警的对象数组。", - "alertsUIShared.actionVariables.ruleIdLabel": "规则的 ID。", - "alertsUIShared.actionVariables.ruleNameLabel": "规则的名称。", - "alertsUIShared.actionVariables.ruleParamsLabel": "规则的参数。", - "alertsUIShared.actionVariables.ruleSpaceIdLabel": "规则的工作区 ID。", - "alertsUIShared.actionVariables.ruleTagsLabel": "规则的标签。", - "alertsUIShared.actionVariables.ruleTypeLabel": "规则的类型。", - "alertsUIShared.actionVariables.ruleUrlLabel": "生成告警的规则的 URL。如果未配置 server.publicBaseUrl,这将为空字符串。", "alertsUIShared.alertFieldsTable.field": "字段", "alertsUIShared.alertFieldsTable.filter.placeholder": "按字段、值或描述筛选......", "alertsUIShared.alertFieldsTable.value": "值", @@ -160,13 +126,6 @@ "alertsUIShared.components.alertLifecycleStatusBadge.flappingLabel": "摆动", "alertsUIShared.components.alertLifecycleStatusBadge.recoveredLabel": "已恢复", "alertsUIShared.components.alertLifecycleStatusBadge.untrackedLabel": "已取消跟踪", - "alertsUIShared.components.ruleTypeModal.allRuleTypes": "全部", - "alertsUIShared.components.ruleTypeModal.loadingRuleTypes": "正在加载规则类型", - "alertsUIShared.components.ruleTypeModal.noRuleTypesErrorBody": "请尝试不同搜索或更改筛选设置", - "alertsUIShared.components.ruleTypeModal.noRuleTypesErrorTitle": "找不到规则类型", - "alertsUIShared.components.ruleTypeModal.searchPlaceholder": "搜索", - "alertsUIShared.components.ruleTypeModal.title": "选择规则类型", - "alertsUIShared.disabledActionsWarningTitle": "此规则具有已禁用的操作", "alertsUIShared.filterGroup.contextMenu.reset": "重置控件", "alertsUIShared.filterGroup.contextMenu.resetTooltip": "将控件重置到出厂设置", "alertsUIShared.filterGroup.filtersChangedBanner": "筛选控件已更改", @@ -181,15 +140,6 @@ "alertsUIShared.filtersGroup.discardChanges": "放弃更改", "alertsUIShared.filtersGroup.pendingChanges": "保存未决更改", "alertsUIShared.filtersGroup.urlParam.arrayError": "页面筛选 URL 参数必须为数组", - "alertsUIShared.healthCheck.actionText": "了解详情。", - "alertsUIShared.healthCheck.alertsErrorText": "要创建规则,必须启用告警和操作插件。", - "alertsUIShared.healthCheck.alertsErrorTitle": "必须启用'告警和操作'", - "alertsUIShared.healthCheck.apiKeysAndEncryptionErrorText": "必须启用 API 密钥并配置加密密钥才能使用 Alerting。", - "alertsUIShared.healthCheck.apiKeysDisabledErrorText": "必须启用 API 密钥才能使用 Alerting。", - "alertsUIShared.healthCheck.apiKeysDisabledErrorTitle": "需要其他设置", - "alertsUIShared.healthCheck.encryptionErrorText": "必须配置加密密钥才能使用 Alerting。", - "alertsUIShared.healthCheck.encryptionErrorTitle": "需要其他设置", - "alertsUIShared.healthCheck.healthCheck.apiKeysAndEncryptionErrorTitle": "需要其他设置", "alertsUIShared.hooks.useAlertDataView.fetchErrorMessage": "无法加载告警数据视图", "alertsUIShared.hooks.useFindAlertsQuery.unableToFindAlertsQueryMessage": "无法找到告警", "alertsUIShared.hooks.useLoadRuleTypesQuery.unableToLoadRuleTypesMessage": "无法加载规则类型", @@ -201,127 +151,6 @@ "alertsUIShared.maintenanceWindowCallout.maintenanceWindowMultipleCategoryNames": "{commaSeparatedList} 和 {last}", "alertsUIShared.maintenanceWindowCallout.maintenanceWindowTwoCategoryNames": "{first} 和 {second}", "alertsUIShared.maintenanceWindowCallout.managementCategoryLabel": "堆叠", - "alertsUIShared.producerDisplayNames.apm": "APM 和用户体验", - "alertsUIShared.producerDisplayNames.infrastructure": "基础设施", - "alertsUIShared.producerDisplayNames.logs": "日志", - "alertsUIShared.producerDisplayNames.metrics": "指标", - "alertsUIShared.producerDisplayNames.ml": "Machine Learning", - "alertsUIShared.producerDisplayNames.monitoring": "堆栈监测", - "alertsUIShared.producerDisplayNames.observability": "Observability", - "alertsUIShared.producerDisplayNames.siem": "安全", - "alertsUIShared.producerDisplayNames.slo": "SLO", - "alertsUIShared.producerDisplayNames.stackAlerts": "堆栈告警", - "alertsUIShared.producerDisplayNames.uptime": "Synthetics 和 Uptime", - "alertsUIShared.ruleActionsAlertsFilter.ActionAlertsFilterQueryPlaceholder": "使用 KQL 语法筛选告警", - "alertsUIShared.ruleActionsAlertsFilter.ActionAlertsFilterQueryToggleLabel": "如果告警与查询匹配", - "alertsUIShared.ruleActionsItem.actionErrorToolTip": "操作包含错误。", - "alertsUIShared.ruleActionsItem.actionUnableToLoadConnectorTitle": "创建连接器然后重试。如果无法创建连接器,请联系您的系统管理员。", - "alertsUIShared.ruleActionsItem.actionUseAadTemplateFieldsLabel": "使用告警索引中的模板字段", - "alertsUIShared.ruleActionsItem.actionWarningsTitle": "1 个警告", - "alertsUIShared.ruleActionsItem.existingAlertActionTypeEditTitle": "{actionConnectorName}", - "alertsUIShared.ruleActionsItem.runWhenGroupTitle": "当 {groupName} 时运行", - "alertsUIShared.ruleActionsItem.summaryGroupTitle": "告警的摘要", - "alertsUIShared.ruleActionsNotifyWhen.actionFrequencyLabel": "操作频率", - "alertsUIShared.ruleActionsNotifyWhen.frequencyNotifyWhen.label": "运行间隔", - "alertsUIShared.ruleActionsNotifyWhen.notifyWhenThrottleWarning": "定制操作时间间隔不能短于规则的检查时间间隔", - "alertsUIShared.ruleActionsNotifyWhen.onActionGroupChange.description": "操作在告警状态更改时运行。", - "alertsUIShared.ruleActionsNotifyWhen.onActionGroupChange.display": "在状态更改时", - "alertsUIShared.ruleActionsNotifyWhen.onActionGroupChange.label": "在状态更改时", - "alertsUIShared.ruleActionsNotifyWhen.onActiveAlert.description": "操作在符合规则条件时运行。", - "alertsUIShared.ruleActionsNotifyWhen.onActiveAlert.display": "按检查时间间隔", - "alertsUIShared.ruleActionsNotifyWhen.onActiveAlert.label": "按检查时间间隔", - "alertsUIShared.ruleActionsNotifyWhen.onThrottleInterval.description": "操作在符合规则条件时运行。", - "alertsUIShared.ruleActionsNotifyWhen.onThrottleInterval.display": "按定制操作时间间隔", - "alertsUIShared.ruleActionsNotifyWhen.onThrottleInterval.label": "按定制操作时间间隔", - "alertsUIShared.ruleActionsNotifyWhen.summaryOrRulePerSelectRoleDescription": "操作频率类型选择", - "alertsUIShared.ruleActionsSetting.actionGroupNotSupported": "{actionGroupName}(当前不支持)", - "alertsUIShared.ruleActionsSetting.actionGroupRunWhen": "运行条件", - "alertsUIShared.ruleActionsSystemActionsItem.deleteActionAriaLabel": "删除操作", - "alertsUIShared.ruleForm.actionsForm.publicBaseUrl": "未设置 server.publicBaseUrl。生成的 URL 将为相对 URL 或为空。", - "alertsUIShared.ruleForm.actionsForm.requiredFilterQuery": "需要定制查询。", - "alertsUIShared.ruleForm.actionTypeModalEmptyText": "请尝试不同搜索或更改筛选设置。", - "alertsUIShared.ruleForm.actionTypeModalEmptyTitle": "找不到连接器", - "alertsUIShared.ruleForm.actionTypeModalFilterAll": "全部", - "alertsUIShared.ruleForm.actionTypeModalTitle": "选择连接器", - "alertsUIShared.ruleForm.circuitBreakerHideFullErrorText": "隐藏完整错误", - "alertsUIShared.ruleForm.circuitBreakerSeeFullErrorText": "查看完整错误", - "alertsUIShared.ruleForm.confirmRuleSaveCancelButtonText": "取消", - "alertsUIShared.ruleForm.confirmRuleSaveConfirmButtonText": "保存规则", - "alertsUIShared.ruleForm.confirmRuleSaveMessageText": "您可以随时添加操作。", - "alertsUIShared.ruleForm.confirmRuleSaveTitle": "保存规则,而不执行任何操作?", - "alertsUIShared.ruleForm.createErrorText": "无法创建规则。", - "alertsUIShared.ruleForm.editErrorText": "无法更新规则。", - "alertsUIShared.ruleForm.error.belowMinimumAlertDelayText": "告警延迟必须等于或大于 1。", - "alertsUIShared.ruleForm.error.belowMinimumText": "时间间隔必须至少为 {minimum}。", - "alertsUIShared.ruleForm.error.requiredConsumerText": "'范围'必填。", - "alertsUIShared.ruleForm.error.requiredIntervalText": "'检查时间间隔'必填。", - "alertsUIShared.ruleForm.error.requiredNameText": "'名称'必填。", - "alertsUIShared.ruleForm.error.requiredRuleTypeIdText": "'规则类型'必填。", - "alertsUIShared.ruleForm.intervalWarningText": "出于性能考虑,不建议时间间隔小于 {minimum}。", - "alertsUIShared.ruleForm.modalSearchClearFiltersText": "清除筛选", - "alertsUIShared.ruleForm.modalSearchPlaceholder": "搜索", - "alertsUIShared.ruleForm.returnTitle": "返回", - "alertsUIShared.ruleForm.routeParamsErrorText": "加载规则表单时出现错误。请确保路由正确。", - "alertsUIShared.ruleForm.routeParamsErrorTitle": "无法加载规则表单", - "alertsUIShared.ruleForm.ruleActions.addActionText": "添加操作", - "alertsUIShared.ruleForm.ruleActionsAlertsFilterTimeframeTimezoneLabel": "时区", - "alertsUIShared.ruleForm.ruleActionsAlertsFilterTimeframeToggleLabel": "如果在时间范围内生成了告警", - "alertsUIShared.ruleForm.ruleActionsAlertsFilterTimeframeWeekdays": "星期几", - "alertsUIShared.ruleForm.ruleActionsNoPermissionDescription": "您必须对操作和连接器具有读取访问权限才能编辑规则。", - "alertsUIShared.ruleForm.ruleActionsNoPermissionTitle": "缺少操作和连接器权限", - "alertsUIShared.ruleForm.ruleActionsTitle": "操作", - "alertsUIShared.ruleForm.ruleAlertDelay.alertDelayHelpText": "仅当指定数目的连续运行满足规则条件时,才会发生告警。", - "alertsUIShared.ruleForm.ruleAlertDelay.alertDelayTitlePrefix": "此后告警", - "alertsUIShared.ruleForm.ruleAlertDelay.alertDelayTitleSuffix": "连续匹配", - "alertsUIShared.ruleForm.ruleDefinition.advancedOptionsTitle": "高级选项", - "alertsUIShared.ruleForm.ruleDefinition.alertDelayDescription": "设置连续运行次数,此规则的该次数必须满足告警条件,才会发生告警", - "alertsUIShared.ruleForm.ruleDefinition.alertDelayTitle": "告警延迟", - "alertsUIShared.ruleForm.ruleDefinition.alertFlappingDetectionDescription": "检测在'活动'和'已恢复'状态之间快速切换的告警,并为这些摆动告警减少不必要噪音", - "alertsUIShared.ruleForm.ruleDefinition.alertFlappingDetectionTitle": "告警摆动检测", - "alertsUIShared.ruleForm.ruleDefinition.docLinkTitle": "查看文档", - "alertsUIShared.ruleForm.ruleDefinition.loadingRuleTypeParamsTitle": "正在加载规则类型参数", - "alertsUIShared.ruleForm.ruleDefinition.scheduleDescriptionText": "设置检查告警条件的频率", - "alertsUIShared.ruleForm.ruleDefinition.scheduleTitle": "规则计划", - "alertsUIShared.ruleForm.ruleDefinition.scheduleTooltipText": "检查已排队;它们的运行接近于容量允许的定义值。", - "alertsUIShared.ruleForm.ruleDefinition.scopeDescriptionText": "选择应用程序以关联对应角色权限", - "alertsUIShared.ruleForm.ruleDefinition.scopeTitle": "规则范围", - "alertsUIShared.ruleForm.ruleDefinitionTitle": "规则定义", - "alertsUIShared.ruleForm.ruleDetails.description": "为您的规则定义名称和标签。", - "alertsUIShared.ruleForm.ruleDetails.ruleNameInputButtonAriaLabel": "保存规则名称", - "alertsUIShared.ruleForm.ruleDetails.ruleNameInputTitle": "规则名称", - "alertsUIShared.ruleForm.ruleDetails.ruleTagsInputTitle": "标签", - "alertsUIShared.ruleForm.ruleDetails.ruleTagsPlaceholder": "添加标签", - "alertsUIShared.ruleForm.ruleDetails.title": "规则名称和标签", - "alertsUIShared.ruleForm.ruleDetailsTitle": "规则详情", - "alertsUIShared.ruleForm.ruleFormCancelModalCancel": "取消", - "alertsUIShared.ruleForm.ruleFormCancelModalConfirm": "放弃更改", - "alertsUIShared.ruleForm.ruleFormCancelModalDescription": "您无法恢复未保存更改。", - "alertsUIShared.ruleForm.ruleFormCancelModalTitle": "丢弃规则的未保存更改?", - "alertsUIShared.ruleForm.ruleFormConsumerSelection.apm": "APM 和用户体验", - "alertsUIShared.ruleForm.ruleFormConsumerSelection.consumerSelectComboBoxTitle": "选择范围", - "alertsUIShared.ruleForm.ruleFormConsumerSelection.consumerSelectTitle": "角色可见性", - "alertsUIShared.ruleForm.ruleFormConsumerSelection.infrastructure": "指标", - "alertsUIShared.ruleForm.ruleFormConsumerSelection.logs": "日志", - "alertsUIShared.ruleForm.ruleFormConsumerSelection.slo": "SLO", - "alertsUIShared.ruleForm.ruleFormConsumerSelection.stackAlerts": "Stack 规则", - "alertsUIShared.ruleForm.ruleFormConsumerSelection.uptime": "Synthetics 和 Uptime", - "alertsUIShared.ruleForm.ruleNotFoundErrorText": "加载规则时出错。请确保规则存在,并且您有权访问选定规则。", - "alertsUIShared.ruleForm.ruleNotFoundErrorTitle": "无法加载规则", - "alertsUIShared.ruleForm.rulePage.ruleNameAriaLabelText": "编辑规则名称", - "alertsUIShared.ruleForm.rulePageFooter.cancelText": "取消", - "alertsUIShared.ruleForm.rulePageFooter.createText": "创建规则", - "alertsUIShared.ruleForm.rulePageFooter.saveText": "保存规则", - "alertsUIShared.ruleForm.rulePageFooter.showRequestText": "显示请求", - "alertsUIShared.ruleForm.ruleSchedule.scheduleTitlePrefix": "每", - "alertsUIShared.ruleForm.ruleTypeNotFoundErrorText": "加载规则类型时出现错误。请确保您有权访问选定规则类型。", - "alertsUIShared.ruleForm.ruleTypeNotFoundErrorTitle": "无法加载规则类型", - "alertsUIShared.ruleForm.showRequestModal.headerTitle": "{requestType} 告警规则请求", - "alertsUIShared.ruleForm.showRequestModal.headerTitleCreate": "创建", - "alertsUIShared.ruleForm.showRequestModal.headerTitleEdit": "编辑", - "alertsUIShared.ruleForm.showRequestModal.somethingWentWrongDescription": "抱歉,出现问题。", - "alertsUIShared.ruleForm.showRequestModal.subheadingTitle": "此 Kibana 请求将 {requestType} 该规则。", - "alertsUIShared.ruleForm.showRequestModal.subheadingTitleCreate": "创建", - "alertsUIShared.ruleForm.showRequestModal.subheadingTitleEdit": "编辑", "alertsUIShared.ruleSettingsFlappingForm.flappingExternalLinkLabel": "这是什么?", "alertsUIShared.ruleSettingsFlappingForm.flappingLabel": "摆动检测", "alertsUIShared.ruleSettingsFlappingForm.flappingOffContentRules": "规则", @@ -350,12 +179,6 @@ "alertsUIShared.ruleSettingsFlappingTitleTooltip.flappingTitlePopoverFlappingDetection": "摆动检测", "alertsUIShared.ruleSettingsFlappingTitleTooltip.flappingTitlePopoverLookBack": "规则运行回顾窗口", "alertsUIShared.ruleSettingsFlappingTitleTooltip.tooltipTitle": "告警摆动检测", - "alertsUIShared.technicalPreviewBadgeDescription": "此功能处于技术预览状态,在未来版本中可能会更改或完全移除。Elastic 将努力修复任何问题,但处于技术预览状态的功能不受正式 GA 功能支持 SLA 的约束。", - "alertsUIShared.technicalPreviewBadgeLabel": "技术预览", - "alertsUIShared.timeUnits.dayLabel": "{timeValue, plural, other {天}}", - "alertsUIShared.timeUnits.hourLabel": "{timeValue, plural, other {小时}}", - "alertsUIShared.timeUnits.minuteLabel": "{timeValue, plural, other {分钟}}", - "alertsUIShared.timeUnits.secondLabel": "{timeValue, plural, other {秒}}", "autocomplete.conflictIndicesWarning.description": "此字段在以下索引中定义为不同类型或未映射。这可能导致意外的查询结果。", "autocomplete.conflictIndicesWarning.index.description": "{name}({count} 个索引)", "autocomplete.conflictIndicesWarning.title": "映射冲突", @@ -16816,7 +16639,6 @@ "xpack.enterpriseSearch.appSearch.metaEngines.title": "元引擎", "xpack.enterpriseSearch.appSearch.multiInputRows.addValueButtonLabel": "添加值", "xpack.enterpriseSearch.appSearch.multiInputRows.inputRowPlaceholder": "输入值", - "xpack.enterpriseSearch.appSearch.multiInputRows.removeValueButtonLabel": "删除值", "xpack.enterpriseSearch.appSearch.ownerRoleTypeDescription": "所有者可以执行任何操作。该帐户可以有很多所有者,但任何时候必须至少有一个所有者。", "xpack.enterpriseSearch.appSearch.productCardDescription": "为应用和网站专门定制的解决方案,提供设计、实施和高效管理那些面向用户的搜索体验所需的工具。", "xpack.enterpriseSearch.appSearch.productDescription": "利用仪表板、分析和 API 执行高级应用程序搜索简单易行。", @@ -31085,7 +30907,6 @@ "xpack.ml.trainedModels.modelsList.expandRow": "展开", "xpack.ml.trainedModels.modelsList.fetchDeletionErrorMessage": "{modelsCount, plural, other {# 个模型}}删除失败", "xpack.ml.trainedModels.modelsList.fetchFailedErrorMessage": "加载已训练模型时出错", - "xpack.ml.trainedModels.modelsList.fetchModelStatsErrorMessage": "加载已训练模型统计信息时出错", "xpack.ml.trainedModels.modelsList.forceStopDialog.cancelText": "取消", "xpack.ml.trainedModels.modelsList.forceStopDialog.confirmText": "停止点", "xpack.ml.trainedModels.modelsList.forceStopDialog.hasInferenceServicesWarning": "此模型由 _inference API 使用", @@ -34782,23 +34603,6 @@ "xpack.reporting.deprecations.reportingRole.forbiddenErrorMessage": "您没有足够的权限来修复此弃用。", "xpack.reporting.deprecations.reportingRole.unknownErrorCorrectiveAction": "请检查 Kibana 日志了解更多详情。", "xpack.reporting.deprecations.reportingRole.unknownErrorMessage": "无法执行弃用检查。请检查 Kibana 日志了解更多详情。", - "xpack.reporting.deprecations.reportingRoleMappings.description": "在未来版本中,报告权限的默认工作机制会有所不同,并且此集群具有映射到该权限的过时角色的角色映射。在升级之前,请将'xpack.reporting.roles.enabled'设置为'false'以采用未来的行为。", - "xpack.reporting.deprecations.reportingRoleMappings.manualStepFive": "从所有角色映射中移除'reporting_user'角色,然后添加定制角色。受影响的角色映射为:{roleMappings}。", - "xpack.reporting.deprecations.reportingRoleMappings.manualStepFour": "通过分配新角色之一向用户授予报告权限。", - "xpack.reporting.deprecations.reportingRoleMappings.manualStepOne": "在 kibana.yml 中将'xpack.reporting.roles.enabled'设置为'false'。", - "xpack.reporting.deprecations.reportingRoleMappings.manualStepThree": "前往'管理'>'安全性'>'角色'以创建一个或多个针对 Reporting 授予 Kibana 应用程序权限的角色。", - "xpack.reporting.deprecations.reportingRoleMappings.manualStepTwo": "移除 kibana.yml 中的'xpack.reporting.roles.allow'(如果存在)。", - "xpack.reporting.deprecations.reportingRoles.description": "在未来版本中,报告权限的默认工作机制会有所不同,这将影响此集群的行为。在升级之前,请将'xpack.reporting.roles.enabled'设置为'false'以采用未来的行为。", - "xpack.reporting.deprecations.reportingRoles.manualStepFour": "通过分配新角色之一向用户授予报告权限。", - "xpack.reporting.deprecations.reportingRoles.manualStepOne": "在 kibana.yml 中将'xpack.reporting.roles.enabled'设置为'false'。", - "xpack.reporting.deprecations.reportingRoles.manualStepThree": "前往'管理'>'安全性'>'角色'以创建一个或多个针对 Reporting 授予 Kibana 应用程序权限的角色。", - "xpack.reporting.deprecations.reportingRoles.manualStepTwo": "移除 kibana.yml 中的'xpack.reporting.roles.allow'(如果存在)。", - "xpack.reporting.deprecations.reportingRoleUsers.description": "在未来版本中,报告权限的默认工作机制会有所不同,并且此集群的用户具有用于该权限的过时角色。在升级之前,请将'xpack.reporting.roles.enabled'设置为'false'以采用未来的行为。", - "xpack.reporting.deprecations.reportingRoleUsers.manualStepFive": "从所有用户中移除'reporting_user'角色,然后添加定制角色。受影响的用户为:{usersRoles}。", - "xpack.reporting.deprecations.reportingRoleUsers.manualStepFour": "通过分配新角色之一向用户授予报告权限。", - "xpack.reporting.deprecations.reportingRoleUsers.manualStepOne": "在 kibana.yml 中将'xpack.reporting.roles.enabled'设置为'false'。", - "xpack.reporting.deprecations.reportingRoleUsers.manualStepThree": "前往'管理'>'安全性'>'角色'以创建一个或多个针对 Reporting 授予 Kibana 应用程序权限的角色。", - "xpack.reporting.deprecations.reportingRoleUsers.manualStepTwo": "移除 kibana.yml 中的'xpack.reporting.roles.allow'(如果存在)。", "xpack.reporting.diagnostic.browserMissingDependency": "由于缺少系统依赖项,浏览器无法正常启动。请参见 {url}", "xpack.reporting.diagnostic.browserMissingFonts": "浏览器找不到默认字体。请参见 {url} 以解决此问题。", "xpack.reporting.diagnostic.fontconfigError": "由于缺少系统字体依赖项,浏览器无法正常启动。请参见 {url}", @@ -34930,8 +34734,6 @@ "xpack.reporting.statusIndicator.unknownLabel": "未知", "xpack.reporting.uiSettings.validate.customLogo.badFile": "抱歉,该文件无效。请尝试其他图像文件。", "xpack.reporting.uiSettings.validate.customLogo.tooLarge": "抱歉,该文件过大。图像文件必须小于 200 千字节。", - "xpack.reporting.userAccessError.learnMoreLink": "了解详情", - "xpack.reporting.userAccessError.message": "请联系管理员以访问报告功能。{grantUserAccessDocs}。", "xpack.rollupJobs.appTitle": "汇总/打包作业", "xpack.rollupJobs.create.backButton.label": "返回", "xpack.rollupJobs.create.dateTypeField": "日期", @@ -37298,8 +37100,6 @@ "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.customThreatQueryFieldRequiredError": "至少需要一个指标匹配。", "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.EqlQueryBarLabel": "EQL 查询", "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.eqlQueryFieldRequiredError": "EQL 查询必填。", - "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.eqlSequenceSuppressionDisableText": "EQL 序列查询不支持阻止。", - "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.eqlSequenceSuppressionValidationText": "{EQL_SEQUENCE_SUPPRESSION_DISABLE_TOOLTIP} 将 EQL 查询更改为非序列查询,或移除阻止字段。", "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.fieldAnomalyThresholdLabel": "异常分数阈值", "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.fieldMachineLearningJobIdLabel": "Machine Learning 作业", "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.fieldQuerBarLabel": "定制查询", diff --git a/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_load_config_query.ts b/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_load_config_query.ts index bc3420ecf346c..1d8dc1b66af25 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_load_config_query.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_load_config_query.ts @@ -5,7 +5,7 @@ * 2.0. */ import { useQuery } from '@tanstack/react-query'; -import { fetchUiConfig as triggersActionsUiConfig } from '@kbn/alerts-ui-shared/src/common/apis/fetch_ui_config'; +import { fetchUiConfig as triggersActionsUiConfig } from '@kbn/response-ops-rule-form'; import { useKibana } from '../../common/lib/kibana'; export const useLoadConfigQuery = () => { diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/index.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/index.ts index aba75da477557..324a5a6df6db8 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/index.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/index.ts @@ -7,6 +7,5 @@ export { templateActionVariable } from './template_action_variable'; export { hasMustacheTokens } from './has_mustache_tokens'; -export type { AlertProvidedActionVariables } from '@kbn/alerts-ui-shared/src/action_variables/action_variables'; export { updateActionConnector, executeAction } from './action_connector_api'; export { isRuleSnoozed } from './is_rule_snoozed'; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.tsx index 940583ea5bced..07011887fa72d 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.tsx @@ -29,7 +29,7 @@ import { } from '@kbn/alerting-plugin/common'; import { v4 as uuidv4 } from 'uuid'; import { ActionGroupWithMessageVariables } from '@kbn/triggers-actions-ui-types'; -import { checkActionFormActionTypeEnabled } from '@kbn/alerts-ui-shared/src/rule_form/utils/check_action_type_enabled'; +import { checkActionFormActionTypeEnabled } from '@kbn/alerts-ui-shared/src/check_action_type_enabled'; import { TECH_PREVIEW_DESCRIPTION, TECH_PREVIEW_LABEL } from '../translations'; import { loadActionTypes, loadAllActions as loadConnectors } from '../../lib/action_connector_api'; import { diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_form.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_form.tsx index 8e95473ceca4c..8baec5912f793 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_form.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_form.tsx @@ -44,11 +44,12 @@ import { parseDuration, } from '@kbn/alerting-plugin/common/parse_duration'; import type { SavedObjectAttribute } from '@kbn/core-saved-objects-api-server'; -import { transformActionVariables } from '@kbn/alerts-ui-shared/src/action_variables/transforms'; -import { RuleActionsNotifyWhen } from '@kbn/alerts-ui-shared/src/rule_form/rule_actions/rule_actions_notify_when'; -import { RuleActionsAlertsFilter } from '@kbn/alerts-ui-shared/src/rule_form/rule_actions/rule_actions_alerts_filter'; -import { checkActionFormActionTypeEnabled } from '@kbn/alerts-ui-shared/src/rule_form/utils/check_action_type_enabled'; -import { RuleActionsAlertsFilterTimeframe } from '@kbn/alerts-ui-shared/src/rule_form/rule_actions/rule_actions_alerts_filter_timeframe'; +import { + RuleActionsNotifyWhen, + RuleActionsAlertsFilter, + RuleActionsAlertsFilterTimeframe, +} from '@kbn/response-ops-rule-form'; +import { checkActionFormActionTypeEnabled, transformActionVariables } from '@kbn/alerts-ui-shared'; import { ActionGroupWithMessageVariables } from '@kbn/triggers-actions-ui-types'; import { TECH_PREVIEW_DESCRIPTION, TECH_PREVIEW_LABEL } from '../translations'; import { getIsExperimentalFeatureEnabled } from '../../../common/get_experimental_features'; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_menu.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_menu.tsx index c9cab9defaffc..967fdd1c88acf 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_menu.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_menu.tsx @@ -10,7 +10,7 @@ import { EuiFlexItem, EuiCard, EuiIcon, EuiFlexGrid, EuiSpacer } from '@elastic/ import { i18n } from '@kbn/i18n'; import { EuiToolTip } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; -import { checkActionTypeEnabled } from '@kbn/alerts-ui-shared/src/rule_form/utils/check_action_type_enabled'; +import { checkActionTypeEnabled } from '@kbn/alerts-ui-shared/src/check_action_type_enabled'; import { TECH_PREVIEW_DESCRIPTION, TECH_PREVIEW_LABEL } from '../translations'; import { ActionType, ActionTypeIndex, ActionTypeRegistryContract } from '../../../types'; import { loadActionTypes } from '../../lib/action_connector_api'; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/system_action_type_form.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/system_action_type_form.tsx index 36da1b594433d..a8d4dbe807148 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/system_action_type_form.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/system_action_type_form.tsx @@ -27,8 +27,7 @@ import { import { isEmpty, partition, some } from 'lodash'; import { ActionVariable, RuleActionParam } from '@kbn/alerting-plugin/common'; import { ActionGroupWithMessageVariables } from '@kbn/triggers-actions-ui-types'; -import { transformActionVariables } from '@kbn/alerts-ui-shared/src/action_variables/transforms'; -import { checkActionFormActionTypeEnabled } from '@kbn/alerts-ui-shared/src/rule_form/utils/check_action_type_enabled'; +import { checkActionFormActionTypeEnabled, transformActionVariables } from '@kbn/alerts-ui-shared'; import { TECH_PREVIEW_DESCRIPTION, TECH_PREVIEW_LABEL } from '../translations'; import { IErrorObject, diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.tsx index 17e6531a65c20..19fe53e4ee88c 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.tsx @@ -26,7 +26,7 @@ import { i18n } from '@kbn/i18n'; import { useHistory, useLocation, useParams } from 'react-router-dom'; import { getConnectorCompatibility } from '@kbn/actions-plugin/common'; import { FormattedMessage } from '@kbn/i18n-react'; -import { checkActionTypeEnabled } from '@kbn/alerts-ui-shared/src/rule_form/utils/check_action_type_enabled'; +import { checkActionTypeEnabled } from '@kbn/alerts-ui-shared/src/check_action_type_enabled'; import { loadActionTypes, deleteActions } from '../../../lib/action_connector_api'; import { hasDeleteActionsCapability, diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/common/components/with_bulk_rule_api_operations.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/common/components/with_bulk_rule_api_operations.test.tsx index 17f9fe336609e..d1ef176d111a5 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/common/components/with_bulk_rule_api_operations.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/common/components/with_bulk_rule_api_operations.test.tsx @@ -40,7 +40,7 @@ jest.mock('../../../lib/rule_api/bulk_disable', () => ({ jest.mock('../../../lib/rule_api/get_rule', () => ({ loadRule: jest.fn(), })); -jest.mock('@kbn/alerts-ui-shared/src/common/apis/resolve_rule', () => ({ +jest.mock('@kbn/response-ops-rule-form/src/common/apis/resolve_rule', () => ({ resolveRule: jest.fn(), })); jest.mock('../../../lib/rule_api/rule_types', () => ({ @@ -59,7 +59,9 @@ const { bulkDeleteRules } = jest.requireMock('../../../lib/rule_api/bulk_delete' const { bulkEnableRules } = jest.requireMock('../../../lib/rule_api/bulk_enable'); const { bulkDisableRules } = jest.requireMock('../../../lib/rule_api/bulk_disable'); const { loadRule } = jest.requireMock('../../../lib/rule_api/get_rule'); -const { resolveRule } = jest.requireMock('@kbn/alerts-ui-shared/src/common/apis/resolve_rule'); +const { resolveRule } = jest.requireMock( + '@kbn/response-ops-rule-form/src/common/apis/resolve_rule' +); const { loadRuleTypes } = jest.requireMock('../../../lib/rule_api/rule_types'); const { loadActionErrorLog } = jest.requireMock('../../../lib/rule_api/load_action_error_log'); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/common/components/with_bulk_rule_api_operations.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/common/components/with_bulk_rule_api_operations.tsx index 60ceeaf24d516..a2c21c1222815 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/common/components/with_bulk_rule_api_operations.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/common/components/with_bulk_rule_api_operations.tsx @@ -14,7 +14,7 @@ import { } from '@kbn/alerting-plugin/common'; import { AlertingFrameworkHealth } from '@kbn/alerting-types'; import { fetchAlertingFrameworkHealth as alertingFrameworkHealth } from '@kbn/alerts-ui-shared/src/common/apis/fetch_alerting_framework_health'; -import { resolveRule } from '@kbn/alerts-ui-shared/src/common/apis/resolve_rule'; +import { resolveRule } from '@kbn/response-ops-rule-form'; import { Rule, RuleType, diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_details.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_details.test.tsx index 23c19642a8701..0f3c17ca28f81 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_details.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_details.test.tsx @@ -27,7 +27,7 @@ jest.mock('../../../../common/get_experimental_features', () => ({ getIsExperimentalFeatureEnabled: jest.fn().mockReturnValue(true), })); -jest.mock('@kbn/alerts-ui-shared/src/common/apis/fetch_ui_config', () => ({ +jest.mock('@kbn/response-ops-rule-form/src/common/apis/fetch_ui_config', () => ({ fetchUiConfig: jest .fn() .mockResolvedValue({ minimumScheduleInterval: { value: '1m', enforce: false } }), diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_details.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_details.tsx index 9422abdba3ec0..da1bd753af9b2 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_details.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_details.tsx @@ -27,7 +27,7 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { toMountPoint } from '@kbn/react-kibana-mount'; import { RuleExecutionStatusErrorReasons, parseDuration } from '@kbn/alerting-plugin/common'; import { getEditRuleRoute, getRuleDetailsRoute } from '@kbn/rule-data-utils'; -import { fetchUiConfig as triggersActionsUiConfig } from '@kbn/alerts-ui-shared/src/common/apis/fetch_ui_config'; +import { fetchUiConfig as triggersActionsUiConfig } from '@kbn/response-ops-rule-form'; import { UpdateApiKeyModalConfirmation } from '../../../components/update_api_key_modal_confirmation'; import { bulkUpdateAPIKey } from '../../../lib/rule_api/update_api_key'; import { RulesDeleteModalConfirmation } from '../../../components/rules_delete_modal_confirmation'; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_details_route.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_details_route.test.tsx index 813456b793ab3..eeee910c3b631 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_details_route.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/rule_details_route.test.tsx @@ -19,7 +19,7 @@ import { spacesPluginMock } from '@kbn/spaces-plugin/public/mocks'; import { useKibana } from '../../../../common/lib/kibana'; jest.mock('../../../../common/lib/kibana'); -jest.mock('@kbn/alerts-ui-shared/src/common/apis/fetch_ui_config', () => ({ +jest.mock('@kbn/response-ops-rule-form/src/common/apis/fetch_ui_config', () => ({ fetchUiConfig: jest .fn() .mockResolvedValue({ minimumScheduleInterval: { value: '1m', enforce: false } }), diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.test.tsx index 0b9109c18831c..a8e8e9df322d5 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.test.tsx @@ -13,7 +13,7 @@ import { render, screen, within } from '@testing-library/react'; import { EuiFormLabel } from '@elastic/eui'; import { coreMock } from '@kbn/core/public/mocks'; import RuleAdd from './rule_add'; -import { createRule } from '@kbn/alerts-ui-shared/src/common/apis/create_rule'; +import { createRule } from '@kbn/response-ops-rule-form/src/common/apis/create_rule'; import { fetchAlertingFrameworkHealth as fetchAlertingFrameworkHealth } from '@kbn/alerts-ui-shared/src/common/apis/fetch_alerting_framework_health'; import { actionTypeRegistryMock } from '../../action_type_registry.mock'; @@ -32,7 +32,7 @@ import { ruleTypeRegistryMock } from '../../rule_type_registry.mock'; import { ALERTING_FEATURE_ID } from '@kbn/alerting-plugin/common'; import { useKibana } from '../../../common/lib/kibana'; -import { fetchUiConfig } from '@kbn/alerts-ui-shared/src/common/apis/fetch_ui_config'; +import { fetchUiConfig } from '@kbn/response-ops-rule-form/src/common/apis/fetch_ui_config'; import { fetchUiHealthStatus } from '@kbn/alerts-ui-shared/src/common/apis/fetch_ui_health_status'; import { loadActionTypes, loadAllActions } from '../../lib/action_connector_api'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; @@ -44,7 +44,7 @@ jest.mock('../../../common/lib/kibana'); jest.mock('../../lib/rule_api/rule_types', () => ({ loadRuleTypes: jest.fn(), })); -jest.mock('@kbn/alerts-ui-shared/src/common/apis/create_rule', () => ({ +jest.mock('@kbn/response-ops-rule-form/src/common/apis/create_rule', () => ({ createRule: jest.fn(), })); jest.mock('@kbn/alerts-ui-shared/src/common/apis/fetch_alerting_framework_health', () => ({ @@ -54,7 +54,7 @@ jest.mock('@kbn/alerts-ui-shared/src/common/apis/fetch_alerting_framework_health })), })); -jest.mock('@kbn/alerts-ui-shared/src/common/apis/fetch_ui_config', () => ({ +jest.mock('@kbn/response-ops-rule-form/src/common/apis/fetch_ui_config', () => ({ fetchUiConfig: jest.fn(), })); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.tsx index ccdca1bd1250d..99a9e0761eb9e 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.tsx @@ -5,44 +5,47 @@ * 2.0. */ -import React, { useReducer, useMemo, useState, useEffect, useCallback } from 'react'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { EuiTitle, EuiFlyoutHeader, EuiFlyout, EuiFlyoutBody, EuiPortal } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; -import { isEmpty } from 'lodash'; -import { toMountPoint } from '@kbn/react-kibana-mount'; +import { EuiFlyout, EuiFlyoutBody, EuiFlyoutHeader, EuiPortal, EuiTitle } from '@elastic/eui'; import { parseRuleCircuitBreakerErrorMessage } from '@kbn/alerting-plugin/common'; -import { createRule, CreateRuleBody } from '@kbn/alerts-ui-shared/src/common/apis/create_rule'; -import { fetchUiConfig as triggersActionsUiConfig } from '@kbn/alerts-ui-shared/src/common/apis/fetch_ui_config'; import { IS_RULE_SPECIFIC_FLAPPING_ENABLED } from '@kbn/alerts-ui-shared/src/common/constants/rule_flapping'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { toMountPoint } from '@kbn/react-kibana-mount'; +import { + CreateRuleBody, + createRule, + fetchUiConfig as triggersActionsUiConfig, +} from '@kbn/response-ops-rule-form'; +import { isEmpty } from 'lodash'; +import React, { useCallback, useEffect, useMemo, useReducer, useState } from 'react'; +import { useKibana } from '../../../common/lib/kibana'; import { - Rule, - RuleTypeParams, - RuleTypeMetaData, - RuleUpdates, - RuleFlyoutCloseReason, IErrorObject, + Rule, RuleAddProps, + RuleCreationValidConsumer, + RuleFlyoutCloseReason, RuleTypeIndex, + RuleTypeMetaData, + RuleTypeParams, + RuleUpdates, TriggersActionsUiConfig, - RuleCreationValidConsumer, } from '../../../types'; -import { RuleForm } from './rule_form'; -import { getRuleActionErrors, getRuleErrors, isValidRule } from './rule_errors'; -import { InitialRule, getRuleReducer } from './rule_reducer'; -import { loadRuleTypes } from '../../lib/rule_api/rule_types'; import { HealthCheck } from '../../components/health_check'; -import { ConfirmRuleSave } from './confirm_rule_save'; -import { ConfirmRuleClose } from './confirm_rule_close'; -import { hasShowActionsCapability } from '../../lib/capabilities'; -import RuleAddFooter from './rule_add_footer'; +import { ToastWithCircuitBreakerContent } from '../../components/toast_with_circuit_breaker_content'; +import { DEFAULT_RULE_INTERVAL, MULTI_CONSUMER_RULE_TYPE_IDS } from '../../constants'; import { HealthContextProvider } from '../../context/health_context'; -import { useKibana } from '../../../common/lib/kibana'; -import { hasRuleChanged, haveRuleParamsChanged } from './has_rule_changed'; +import { hasShowActionsCapability } from '../../lib/capabilities'; +import { loadRuleTypes } from '../../lib/rule_api/rule_types'; import { getRuleWithInvalidatedFields } from '../../lib/value_validators'; -import { DEFAULT_RULE_INTERVAL, MULTI_CONSUMER_RULE_TYPE_IDS } from '../../constants'; +import { ConfirmRuleClose } from './confirm_rule_close'; +import { ConfirmRuleSave } from './confirm_rule_save'; import { getInitialInterval } from './get_initial_interval'; -import { ToastWithCircuitBreakerContent } from '../../components/toast_with_circuit_breaker_content'; +import { hasRuleChanged, haveRuleParamsChanged } from './has_rule_changed'; +import RuleAddFooter from './rule_add_footer'; +import { getRuleActionErrors, getRuleErrors, isValidRule } from './rule_errors'; +import { RuleForm } from './rule_form'; +import { InitialRule, getRuleReducer } from './rule_reducer'; import { ShowRequestModal } from './show_request_modal'; const defaultCreateRuleErrorMessage = i18n.translate( diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.test.tsx index 243236d7f6b93..925c2bb2edeb4 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.test.tsx @@ -25,7 +25,7 @@ const useKibanaMock = useKibana as jest.Mocked; jest.mock('../../lib/rule_api/rule_types', () => ({ loadRuleTypes: jest.fn(), })); -jest.mock('@kbn/alerts-ui-shared/src/common/apis/update_rule', () => ({ +jest.mock('@kbn/response-ops-rule-form/src/common/apis/update_rule', () => ({ updateRule: jest.fn().mockRejectedValue({ body: { message: 'Fail message' } }), })); jest.mock('@kbn/alerts-ui-shared/src/common/apis/fetch_alerting_framework_health', () => ({ @@ -35,7 +35,7 @@ jest.mock('@kbn/alerts-ui-shared/src/common/apis/fetch_alerting_framework_health })), })); -jest.mock('@kbn/alerts-ui-shared/src/common/apis/fetch_ui_config', () => ({ +jest.mock('@kbn/response-ops-rule-form/src/common/apis/fetch_ui_config', () => ({ fetchUiConfig: jest.fn().mockResolvedValue({ isUsingSecurity: true, minimumScheduleInterval: { value: '1m', enforce: false }, diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.tsx index a24fd0eec2eb1..3400f8c5270f6 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_edit.tsx @@ -5,56 +5,54 @@ * 2.0. */ -import React, { useReducer, useState, useEffect, useCallback, useMemo } from 'react'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { RuleNotifyWhen } from '@kbn/alerting-plugin/common'; import { - EuiTitle, - EuiFlyoutHeader, - EuiFlyout, - EuiFlyoutFooter, + EuiButton, + EuiButtonEmpty, + EuiCallOut, EuiFlexGroup, EuiFlexItem, - EuiButtonEmpty, - EuiButton, + EuiFlyout, EuiFlyoutBody, + EuiFlyoutFooter, + EuiFlyoutHeader, + EuiIconTip, + EuiLoadingSpinner, EuiPortal, - EuiCallOut, EuiSpacer, - EuiLoadingSpinner, - EuiIconTip, + EuiTitle, } from '@elastic/eui'; -import { cloneDeep, omit } from 'lodash'; +import { RuleNotifyWhen, parseRuleCircuitBreakerErrorMessage } from '@kbn/alerting-plugin/common'; +import { IS_RULE_SPECIFIC_FLAPPING_ENABLED } from '@kbn/alerts-ui-shared/src/common/constants/rule_flapping'; import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; import { toMountPoint } from '@kbn/react-kibana-mount'; -import { parseRuleCircuitBreakerErrorMessage } from '@kbn/alerting-plugin/common'; -import { updateRule } from '@kbn/alerts-ui-shared/src/common/apis/update_rule'; -import { fetchUiConfig as triggersActionsUiConfig } from '@kbn/alerts-ui-shared/src/common/apis/fetch_ui_config'; -import { IS_RULE_SPECIFIC_FLAPPING_ENABLED } from '@kbn/alerts-ui-shared/src/common/constants/rule_flapping'; +import { fetchUiConfig as triggersActionsUiConfig, updateRule } from '@kbn/response-ops-rule-form'; +import { cloneDeep, omit } from 'lodash'; +import React, { useCallback, useEffect, useMemo, useReducer, useState } from 'react'; +import { useKibana } from '../../../common/lib/kibana'; import { + IErrorObject, Rule, - RuleFlyoutCloseReason, + RuleAction, RuleEditProps, - IErrorObject, + RuleFlyoutCloseReason, + RuleNotifyWhenType, RuleType, - RuleTypeParams, RuleTypeMetaData, - TriggersActionsUiConfig, - RuleNotifyWhenType, + RuleTypeParams, RuleUiAction, - RuleAction, + TriggersActionsUiConfig, } from '../../../types'; -import { RuleForm } from './rule_form'; -import { getRuleActionErrors, getRuleErrors, isValidRule } from './rule_errors'; -import { getRuleReducer } from './rule_reducer'; -import { loadRuleTypes } from '../../lib/rule_api/rule_types'; import { HealthCheck } from '../../components/health_check'; +import { ToastWithCircuitBreakerContent } from '../../components/toast_with_circuit_breaker_content'; import { HealthContextProvider } from '../../context/health_context'; -import { useKibana } from '../../../common/lib/kibana'; +import { loadRuleTypes } from '../../lib/rule_api/rule_types'; +import { getRuleWithInvalidatedFields } from '../../lib/value_validators'; import { ConfirmRuleClose } from './confirm_rule_close'; import { hasRuleChanged } from './has_rule_changed'; -import { getRuleWithInvalidatedFields } from '../../lib/value_validators'; -import { ToastWithCircuitBreakerContent } from '../../components/toast_with_circuit_breaker_content'; +import { getRuleActionErrors, getRuleErrors, isValidRule } from './rule_errors'; +import { RuleForm } from './rule_form'; +import { getRuleReducer } from './rule_reducer'; import { ShowRequestModal } from './show_request_modal'; const defaultUpdateRuleErrorMessage = i18n.translate( diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form_route.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form_route.tsx index 496b4d30873e6..f0ecb56d0bc87 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form_route.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form_route.tsx @@ -7,7 +7,7 @@ import React, { useEffect } from 'react'; import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; -import { RuleForm } from '@kbn/alerts-ui-shared/src/rule_form/rule_form'; +import { RuleForm } from '@kbn/response-ops-rule-form'; import { getRuleDetailsRoute } from '@kbn/rule-data-utils'; import { useLocation, useParams } from 'react-router-dom'; import { useKibana } from '../../../common/lib/kibana'; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/show_request_modal.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/show_request_modal.tsx index ab21a5a1b7a1f..fbe8bebc18687 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/show_request_modal.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/show_request_modal.tsx @@ -5,27 +5,27 @@ * 2.0. */ -import React from 'react'; -import { pick } from 'lodash'; import { + EuiCodeBlock, + EuiFlexGroup, + EuiFlexItem, EuiModal, + EuiModalBody, EuiModalHeader, EuiModalHeaderTitle, - EuiModalBody, - EuiCodeBlock, EuiText, EuiTextColor, - EuiFlexGroup, - EuiFlexItem, } from '@elastic/eui'; import { - transformUpdateRuleBody as rewriteUpdateBodyRequest, UPDATE_FIELDS_WITH_ACTIONS, -} from '@kbn/alerts-ui-shared/src/common/apis/update_rule'; -import { transformCreateRuleBody as rewriteCreateBodyRequest } from '@kbn/alerts-ui-shared/src/common/apis/create_rule'; -import * as i18n from '../translations'; + transformCreateRuleBody as rewriteCreateBodyRequest, + transformUpdateRuleBody as rewriteUpdateBodyRequest, +} from '@kbn/response-ops-rule-form'; +import { pick } from 'lodash'; +import React from 'react'; import { RuleUpdates } from '../../../types'; import { BASE_ALERTING_API_PATH } from '../../constants'; +import * as i18n from '../translations'; const stringify = (rule: RuleUpdates, edit: boolean): string => { try { diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.test.tsx index 35249777dedba..f8a01e6f47f25 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.test.tsx @@ -94,7 +94,7 @@ jest.mock('../../../lib/rule_api/rules_kuery_filter'); jest.mock('@kbn/alerts-ui-shared/src/common/apis/fetch_ui_health_status', () => ({ fetchUiHealthStatus: jest.fn(() => ({ isRulesAvailable: true })), })); -jest.mock('@kbn/alerts-ui-shared/src/common/apis/fetch_ui_config', () => ({ +jest.mock('@kbn/response-ops-rule-form/src/common/apis/fetch_ui_config', () => ({ fetchUiConfig: jest .fn() .mockResolvedValue({ minimumScheduleInterval: { value: '1m', enforce: false } }), diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx index c0b56fa224519..d1d1ce4fe6a3b 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx @@ -13,7 +13,7 @@ import { KueryNode } from '@kbn/es-query'; import { FormattedMessage } from '@kbn/i18n-react'; import { toMountPoint } from '@kbn/react-kibana-mount'; import { parseRuleCircuitBreakerErrorMessage } from '@kbn/alerting-plugin/common'; -import { RuleTypeModal } from '@kbn/alerts-ui-shared/src/rule_type_modal'; +import { RuleTypeModal } from '@kbn/response-ops-rule-form'; import React, { lazy, useEffect, diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_bulk_delete.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_bulk_delete.test.tsx index 8dc84a6ffc5dd..bffc275623dae 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_bulk_delete.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_bulk_delete.test.tsx @@ -69,7 +69,7 @@ jest.mock('../../../lib/rule_api/rules_kuery_filter'); jest.mock('@kbn/alerts-ui-shared/src/common/apis/fetch_ui_health_status', () => ({ fetchUiHealthStatus: jest.fn(() => ({ isRulesAvailable: true })), })); -jest.mock('@kbn/alerts-ui-shared/src/common/apis/fetch_ui_config', () => ({ +jest.mock('@kbn/response-ops-rule-form/src/common/apis/fetch_ui_config', () => ({ fetchUiConfig: jest .fn() .mockResolvedValue({ minimumScheduleInterval: { value: '1m', enforce: false } }), diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_bulk_disable.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_bulk_disable.test.tsx index de5cfa4f74bd8..ea0bb14c0852f 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_bulk_disable.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_bulk_disable.test.tsx @@ -66,7 +66,7 @@ jest.mock('../../../lib/rule_api/rules_kuery_filter'); jest.mock('@kbn/alerts-ui-shared/src/common/apis/fetch_ui_health_status', () => ({ fetchUiHealthStatus: jest.fn(() => ({ isRulesAvailable: true })), })); -jest.mock('@kbn/alerts-ui-shared/src/common/apis/fetch_ui_config', () => ({ +jest.mock('@kbn/response-ops-rule-form/src/common/apis/fetch_ui_config', () => ({ fetchUiConfig: jest .fn() .mockResolvedValue({ minimumScheduleInterval: { value: '1m', enforce: false } }), diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_bulk_edit.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_bulk_edit.test.tsx index 48e16c053f51f..d82e412fed8d6 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_bulk_edit.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_bulk_edit.test.tsx @@ -65,7 +65,7 @@ jest.mock('../../../lib/rule_api/rules_kuery_filter'); jest.mock('@kbn/alerts-ui-shared/src/common/apis/fetch_ui_health_status', () => ({ fetchUiHealthStatus: jest.fn(() => ({ isRulesAvailable: true })), })); -jest.mock('@kbn/alerts-ui-shared/src/common/apis/fetch_ui_config', () => ({ +jest.mock('@kbn/response-ops-rule-form/src/common/apis/fetch_ui_config', () => ({ fetchUiConfig: jest .fn() .mockResolvedValue({ minimumScheduleInterval: { value: '1m', enforce: false } }), diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_bulk_enable.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_bulk_enable.test.tsx index 09ac26cf9d98b..634a7491e40ab 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_bulk_enable.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_bulk_enable.test.tsx @@ -66,7 +66,7 @@ jest.mock('../../../lib/rule_api/rules_kuery_filter'); jest.mock('@kbn/alerts-ui-shared/src/common/apis/fetch_ui_health_status', () => ({ fetchUiHealthStatus: jest.fn(() => ({ isRulesAvailable: true })), })); -jest.mock('@kbn/alerts-ui-shared/src/common/apis/fetch_ui_config', () => ({ +jest.mock('@kbn/response-ops-rule-form/src/common/apis/fetch_ui_config', () => ({ fetchUiConfig: jest .fn() .mockResolvedValue({ minimumScheduleInterval: { value: '1m', enforce: false } }), diff --git a/x-pack/plugins/triggers_actions_ui/public/index.ts b/x-pack/plugins/triggers_actions_ui/public/index.ts index 5fae33e1d2206..4acc1e1ca7894 100644 --- a/x-pack/plugins/triggers_actions_ui/public/index.ts +++ b/x-pack/plugins/triggers_actions_ui/public/index.ts @@ -92,7 +92,7 @@ export { executeAction, } from './application/lib'; -export { AlertProvidedActionVariables } from '@kbn/alerts-ui-shared/src/action_variables/action_variables'; +export { AlertProvidedActionVariables } from '@kbn/alerts-ui-shared'; export type { ActionGroupWithCondition } from './application/sections'; diff --git a/x-pack/plugins/triggers_actions_ui/public/types.ts b/x-pack/plugins/triggers_actions_ui/public/types.ts index d6ea582058c1e..0d7f3fea23477 100644 --- a/x-pack/plugins/triggers_actions_ui/public/types.ts +++ b/x-pack/plugins/triggers_actions_ui/public/types.ts @@ -5,132 +5,128 @@ * 2.0. */ -import type { Moment } from 'moment'; -import type { ComponentType, ReactNode, RefObject } from 'react'; -import type { PublicMethodsOf } from '@kbn/utility-types'; -import type { DocLinksStart } from '@kbn/core/public'; -import type { ChartsPluginSetup } from '@kbn/charts-plugin/public'; -import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; -import type { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; -import type { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/public'; +import { + QueryDslQueryContainer, + SortCombinations, +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { + EuiDataGridCellPopoverElementProps, + EuiDataGridCellProps, EuiDataGridCellValueElementProps, - EuiDataGridToolBarAdditionalControlsOptions, + EuiDataGridColumnCellAction, + EuiDataGridOnColumnResizeHandler, EuiDataGridProps, EuiDataGridRefProps, - EuiDataGridColumnCellAction, + EuiDataGridToolBarAdditionalControlsOptions, EuiDataGridToolBarVisibilityOptions, EuiSuperSelectOption, - EuiDataGridOnColumnResizeHandler, - EuiDataGridCellProps, RenderCellValue, - EuiDataGridCellPopoverElementProps, } from '@elastic/eui'; -import type { RuleCreationValidConsumer } from '@kbn/rule-data-utils'; import { EuiDataGridColumn, EuiDataGridControlColumn, EuiDataGridSorting } from '@elastic/eui'; -import { HttpSetup } from '@kbn/core/public'; -import { KueryNode } from '@kbn/es-query'; import { - ActionType, - AlertHistoryEsIndexConnectorId, - AlertHistoryDocumentTemplate, ALERT_HISTORY_PREFIX, + ActionType, AlertHistoryDefaultIndexName, + AlertHistoryDocumentTemplate, + AlertHistoryEsIndexConnectorId, AsApiContract, } from '@kbn/actions-plugin/common'; +import { ActionsPublicPluginSetup } from '@kbn/actions-plugin/public'; import { ActionGroup, + AlertStatus, SanitizedRule as AlertingSanitizedRule, - ResolvedSanitizedRule, - RuleSystemAction, - RuleTaskState, - AlertSummary as RuleSummary, ExecutionDuration, - AlertStatus, + MaintenanceWindow, RawAlertInstance, + ResolvedSanitizedRule, + SanitizedRuleAction as RuleAction, + RuleLastRun, RuleNotifyWhenType, - RuleTypeParams, + AlertSummary as RuleSummary, + RuleSystemAction, + RuleTaskState, RuleTypeMetaData, - RuleLastRun, - MaintenanceWindow, - SanitizedRuleAction as RuleAction, + RuleTypeParams, } from '@kbn/alerting-plugin/common'; import type { BulkOperationError } from '@kbn/alerting-plugin/server'; -import type { - RuleRegistrySearchRequestPagination, - EcsFieldsResponse, -} from '@kbn/rule-registry-plugin/common'; -import { - QueryDslQueryContainer, - SortCombinations, -} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import React from 'react'; -import { ActionsPublicPluginSetup } from '@kbn/actions-plugin/public'; -import type { RuleType, RuleTypeIndex } from '@kbn/triggers-actions-ui-types'; +import { TypeRegistry } from '@kbn/alerts-ui-shared/src/common/type_registry'; import { - ValidationResult, - UserConfiguredActionConnector, ActionConnector, ActionTypeRegistryContract, EsQuerySnapshot, + UserConfiguredActionConnector, } from '@kbn/alerts-ui-shared/src/common/types'; -import { TypeRegistry } from '@kbn/alerts-ui-shared/src/common/type_registry'; +import type { ChartsPluginSetup } from '@kbn/charts-plugin/public'; +import type { DocLinksStart } from '@kbn/core/public'; +import { HttpSetup } from '@kbn/core/public'; +import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; +import type { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; +import { KueryNode } from '@kbn/es-query'; import { FieldFormatsStart } from '@kbn/field-formats-plugin/public'; -import type { ComponentOpts as RuleStatusDropdownProps } from './application/sections/rules_list/components/rule_status_dropdown'; -import type { RuleTagFilterProps } from './application/sections/rules_list/components/rule_tag_filter'; -import type { RuleStatusFilterProps } from './application/sections/rules_list/components/rule_status_filter'; -import type { RulesListProps } from './application/sections/rules_list/components/rules_list'; -import type { - RuleTagBadgeProps, - RuleTagBadgeOptions, -} from './application/sections/rules_list/components/rule_tag_badge'; +import type { ValidationResult } from '@kbn/response-ops-rule-form'; +import type { RuleCreationValidConsumer } from '@kbn/rule-data-utils'; import type { - RuleEventLogListProps, - RuleEventLogListOptions, -} from './application/sections/rule_details/components/rule_event_log_list'; -import type { GlobalRuleEventLogListProps } from './application/sections/rule_details/components/global_rule_event_log_list'; -import type { AlertSummaryTimeRange } from './application/sections/alert_summary_widget/types'; + EcsFieldsResponse, + RuleRegistrySearchRequestPagination, +} from '@kbn/rule-registry-plugin/common'; +import type { RuleType, RuleTypeIndex } from '@kbn/triggers-actions-ui-types'; +import type { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/public'; +import type { PublicMethodsOf } from '@kbn/utility-types'; +import type { Moment } from 'moment'; +import type { ComponentType, ReactNode, RefObject } from 'react'; +import React from 'react'; +import { AlertTableConfigRegistry } from './application/alert_table_config_registry'; import type { CreateConnectorFlyoutProps } from './application/sections/action_connector_form/create_connector_flyout'; import type { EditConnectorFlyoutProps } from './application/sections/action_connector_form/edit_connector_flyout'; +import type { AlertSummaryTimeRange } from './application/sections/alert_summary_widget/types'; +import { TimelineItem } from './application/sections/alerts_table/bulk_actions/components/toolbar'; +import { Case } from './application/sections/alerts_table/hooks/apis/bulk_get_cases'; import type { - FieldBrowserOptions, + BrowserFieldItem, CreateFieldComponent, - GetFieldTableColumns, + FieldBrowserOptions, FieldBrowserProps, - BrowserFieldItem, + GetFieldTableColumns, } from './application/sections/field_browser/types'; -import { RulesListVisibleColumns } from './application/sections/rules_list/components/rules_list_column_selector'; -import { TimelineItem } from './application/sections/alerts_table/bulk_actions/components/toolbar'; +import type { GlobalRuleEventLogListProps } from './application/sections/rule_details/components/global_rule_event_log_list'; +import type { + RuleEventLogListOptions, + RuleEventLogListProps, +} from './application/sections/rule_details/components/rule_event_log_list'; import type { RulesListNotifyBadgePropsWithApi } from './application/sections/rules_list/components/notify_badge'; -import { Case } from './application/sections/alerts_table/hooks/apis/bulk_get_cases'; -import { AlertTableConfigRegistry } from './application/alert_table_config_registry'; +import type { ComponentOpts as RuleStatusDropdownProps } from './application/sections/rules_list/components/rule_status_dropdown'; +import type { RuleStatusFilterProps } from './application/sections/rules_list/components/rule_status_filter'; +import type { + RuleTagBadgeOptions, + RuleTagBadgeProps, +} from './application/sections/rules_list/components/rule_tag_badge'; +import type { RuleTagFilterProps } from './application/sections/rules_list/components/rule_tag_filter'; +import type { RulesListProps } from './application/sections/rules_list/components/rules_list'; +import { RulesListVisibleColumns } from './application/sections/rules_list/components/rules_list_column_selector'; export type { - GenericValidationResult, - ValidationResult, - ConnectorValidationError, - ConnectorValidationFunc, ActionConnectorFieldsProps, ActionConnectorProps, - SystemAction, - PreConfiguredActionConnector, - UserConfiguredActionConnector, - ActionConnector, ActionParamsProps, ActionReadOnlyElementProps, - CustomConnectorSelectionItem, ActionTypeModel, - ActionTypeRegistryContract, + ConnectorValidationError, + ConnectorValidationFunc, + CustomConnectorSelectionItem, + GenericValidationResult, + PreConfiguredActionConnector, + SystemAction, } from '@kbn/alerts-ui-shared/src/common/types'; export { ActionConnectorMode } from '@kbn/alerts-ui-shared/src/common/types'; -export type { ActionVariables, RuleType, RuleTypeIndex } from '@kbn/triggers-actions-ui-types'; +export type { ActionVariables } from '@kbn/triggers-actions-ui-types'; export { - REQUIRED_ACTION_VARIABLES, CONTEXT_ACTION_VARIABLES, OPTIONAL_ACTION_VARIABLES, + REQUIRED_ACTION_VARIABLES, } from '@kbn/triggers-actions-ui-types'; type RuleUiAction = RuleAction | RuleSystemAction; @@ -153,48 +149,55 @@ type ResolvedRule = Omit< actions: RuleUiAction[]; }; +export { + ALERT_HISTORY_PREFIX, + AlertHistoryDefaultIndexName, + AlertHistoryDocumentTemplate, + AlertHistoryEsIndexConnectorId, +}; export type { - Rule, - RuleAction, - RuleSystemAction, - RuleUiAction, - RuleTaskState, - RuleSummary, - ExecutionDuration, + ActionConnector, + ActionType, + ActionTypeRegistryContract, AlertStatus, + AlertSummaryTimeRange, + AsApiContract, + BrowserFieldItem, + CreateConnectorFlyoutProps, + CreateFieldComponent, + EditConnectorFlyoutProps, + ExecutionDuration, + FieldBrowserOptions, + FieldBrowserProps, + GetFieldTableColumns, + GlobalRuleEventLogListProps, RawAlertInstance, - RuleNotifyWhenType, - RuleTypeParams, - RuleTypeMetaData, ResolvedRule, - SanitizedRule, + Rule, + RuleAction, + RuleEventLogListOptions, + RuleEventLogListProps, + RuleLastRun, + RuleNotifyWhenType, RuleStatusDropdownProps, - RuleTagFilterProps, RuleStatusFilterProps, - RuleLastRun, - RuleTagBadgeProps, + RuleSummary, + RuleSystemAction, RuleTagBadgeOptions, - RuleEventLogListProps, - RuleEventLogListOptions, - GlobalRuleEventLogListProps, - RulesListProps, - CreateConnectorFlyoutProps, - EditConnectorFlyoutProps, + RuleTagBadgeProps, + RuleTagFilterProps, + RuleTaskState, + RuleType, + RuleTypeIndex, + RuleTypeMetaData, + RuleTypeParams, + RuleUiAction, RulesListNotifyBadgePropsWithApi, - FieldBrowserProps, - FieldBrowserOptions, - CreateFieldComponent, - GetFieldTableColumns, - BrowserFieldItem, + RulesListProps, RulesListVisibleColumns, - AlertSummaryTimeRange, -}; -export type { ActionType, AsApiContract }; -export { - AlertHistoryEsIndexConnectorId, - AlertHistoryDocumentTemplate, - AlertHistoryDefaultIndexName, - ALERT_HISTORY_PREFIX, + SanitizedRule, + UserConfiguredActionConnector, + ValidationResult, }; export type ActionTypeIndex = Record; diff --git a/x-pack/plugins/triggers_actions_ui/tsconfig.json b/x-pack/plugins/triggers_actions_ui/tsconfig.json index f4b718bff4672..7b947f560db85 100644 --- a/x-pack/plugins/triggers_actions_ui/tsconfig.json +++ b/x-pack/plugins/triggers_actions_ui/tsconfig.json @@ -72,7 +72,8 @@ "@kbn/core-ui-settings-browser", "@kbn/observability-alerting-rule-utils", "@kbn/core-application-browser", - "@kbn/cloud-plugin" + "@kbn/cloud-plugin", + "@kbn/response-ops-rule-form" ], "exclude": ["target/**/*"] } diff --git a/x-pack/test/accessibility/apps/group3/reporting.ts b/x-pack/test/accessibility/apps/group3/reporting.ts index 45959e42b383a..edd5bbeb0a0a6 100644 --- a/x-pack/test/accessibility/apps/group3/reporting.ts +++ b/x-pack/test/accessibility/apps/group3/reporting.ts @@ -20,7 +20,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const createReportingUser = async () => { await security.user.create(reporting.REPORTING_USER_USERNAME, { password: reporting.REPORTING_USER_PASSWORD, - roles: ['reporting_user', 'data_analyst', 'kibana_user'], // Deprecated: using built-in `reporting_user` role grants all Reporting privileges + roles: ['data_analyst', 'kibana_user'], full_name: 'a reporting user', }); }; diff --git a/x-pack/test/alerting_api_integration/observability/synthetics/custom_status_rule.ts b/x-pack/test/alerting_api_integration/observability/synthetics/custom_status_rule.ts index 6600054e03ab9..218b40c6be845 100644 --- a/x-pack/test/alerting_api_integration/observability/synthetics/custom_status_rule.ts +++ b/x-pack/test/alerting_api_integration/observability/synthetics/custom_status_rule.ts @@ -22,7 +22,9 @@ export default function ({ getService }: FtrProviderContext) { const esDeleteAllIndices = getService('esDeleteAllIndices'); const supertest = getService('supertest'); - describe('SyntheticsCustomStatusRule', () => { + // Failing: See https://github.com/elastic/kibana/issues/202337 + // Failing: See https://github.com/elastic/kibana/issues/196257 + describe.skip('SyntheticsCustomStatusRule', () => { const SYNTHETICS_RULE_ALERT_INDEX = '.alerts-observability.uptime.alerts-default'; before(async () => { 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 4ded1782c9086..7541b2171b2cb 100644 --- a/x-pack/test/api_integration/apis/features/features/features.ts +++ b/x-pack/test/api_integration/apis/features/features/features.ts @@ -136,6 +136,7 @@ export default function ({ getService }: FtrProviderContext) { 'securitySolutionCasesV2', 'fleet', 'fleetv2', + 'entityManager', ].sort() ); }); @@ -186,6 +187,7 @@ export default function ({ getService }: FtrProviderContext) { 'securitySolutionCasesV2', 'fleet', 'fleetv2', + 'entityManager', ]; const features = body.filter( diff --git a/x-pack/test/api_integration/apis/management/index_management/index.ts b/x-pack/test/api_integration/apis/management/index_management/index.ts index 63ab1f3371941..e17da6cae3b6f 100644 --- a/x-pack/test/api_integration/apis/management/index_management/index.ts +++ b/x-pack/test/api_integration/apis/management/index_management/index.ts @@ -22,5 +22,6 @@ export default function ({ loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./enrich_policies')); loadTestFile(require.resolve('./create_enrich_policy')); loadTestFile(require.resolve('./data_enrichers')); + loadTestFile(require.resolve('./searchprofiler')); }); } diff --git a/x-pack/test/api_integration/apis/management/index_management/searchprofiler.ts b/x-pack/test/api_integration/apis/management/index_management/searchprofiler.ts new file mode 100644 index 0000000000000..01c4347945118 --- /dev/null +++ b/x-pack/test/api_integration/apis/management/index_management/searchprofiler.ts @@ -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 expect from 'expect'; +import { FtrProviderContext } from '../../../ftr_provider_context'; + +const API_BASE_PATH = '/api/searchprofiler'; + +export default function ({ getService }: FtrProviderContext) { + const supertest = getService('supertest'); + + describe('Searchprofiler', function () { + it('Can retrive has indices', async () => { + const { body } = await supertest.get(`${API_BASE_PATH}/has_indices`).expect(200); + expect(body).toStrictEqual({ hasIndices: true }); + }); + }); +} diff --git a/x-pack/test/api_integration/apis/ml/trained_models/get_models.ts b/x-pack/test/api_integration/apis/ml/trained_models/get_models.ts index a3953a87b82b2..654f55c7e1254 100644 --- a/x-pack/test/api_integration/apis/ml/trained_models/get_models.ts +++ b/x-pack/test/api_integration/apis/ml/trained_models/get_models.ts @@ -16,61 +16,27 @@ export default ({ getService }: FtrProviderContext) => { const esDeleteAllIndices = getService('esDeleteAllIndices'); describe('GET trained_models', () => { - let testModelIds: string[] = []; - before(async () => { await ml.api.initSavedObjects(); await ml.testResources.setKibanaTimeZoneToUTC(); - testModelIds = await ml.api.createTestTrainedModels('regression', 5, true); - await ml.api.createModelAlias('dfa_regression_model_n_0', 'dfa_regression_model_alias'); - await ml.api.createIngestPipeline('dfa_regression_model_alias'); - - // Creating an indices that are tied to modelId: dfa_regression_model_n_1 - await ml.api.createIndex(`user-index_dfa_regression_model_n_1`, undefined, { - index: { default_pipeline: `pipeline_dfa_regression_model_n_1` }, - }); + await ml.api.createTestTrainedModels('regression', 5, true); }); after(async () => { await esDeleteAllIndices('user-index_dfa*'); - - // delete created ingest pipelines - await Promise.all( - ['dfa_regression_model_alias', ...testModelIds].map((modelId) => - ml.api.deleteIngestPipeline(modelId) - ) - ); await ml.testResources.cleanMLSavedObjects(); await ml.api.cleanMlIndices(); }); - it('returns all trained models with associated pipelines including aliases', async () => { + it('returns all trained models', async () => { const { body, status } = await supertest - .get(`/internal/ml/trained_models?with_pipelines=true`) + .get(`/internal/ml/trained_models`) .auth(USER.ML_POWERUSER, ml.securityCommon.getPasswordForUser(USER.ML_POWERUSER)) .set(getCommonRequestHeader('1')); ml.api.assertResponseStatusCode(200, status, body); // Created models + system model expect(body.length).to.eql(6); - - const sampleModel = body.find((v: any) => v.model_id === 'dfa_regression_model_n_0'); - - expect(Object.keys(sampleModel.pipelines).length).to.eql(2); - }); - - it('returns models without pipeline in case user does not have required permission', async () => { - const { body, status } = await supertest - .get(`/internal/ml/trained_models?with_pipelines=true&with_indices=true`) - .auth(USER.ML_VIEWER, ml.securityCommon.getPasswordForUser(USER.ML_VIEWER)) - .set(getCommonRequestHeader('1')); - ml.api.assertResponseStatusCode(200, status, body); - - // Created models + system model - expect(body.length).to.eql(6); - const sampleModel = body.find((v: any) => v.model_id === 'dfa_regression_model_n_0'); - - expect(sampleModel.pipelines).to.eql(undefined); }); it('returns trained model by id', async () => { @@ -84,58 +50,6 @@ export default ({ getService }: FtrProviderContext) => { const sampleModel = body[0]; expect(sampleModel.model_id).to.eql('dfa_regression_model_n_1'); - expect(sampleModel.pipelines).to.eql(undefined); - expect(sampleModel.indices).to.eql(undefined); - }); - - it('returns trained model by id with_pipelines=true,with_indices=false', async () => { - const { body, status } = await supertest - .get( - `/internal/ml/trained_models/dfa_regression_model_n_1?with_pipelines=true&with_indices=false` - ) - .auth(USER.ML_POWERUSER, ml.securityCommon.getPasswordForUser(USER.ML_POWERUSER)) - .set(getCommonRequestHeader('1')); - ml.api.assertResponseStatusCode(200, status, body); - - expect(body.length).to.eql(1); - const sampleModel = body[0]; - - expect(sampleModel.model_id).to.eql('dfa_regression_model_n_1'); - expect(Object.keys(sampleModel.pipelines).length).to.eql( - 1, - `Expected number of pipelines for dfa_regression_model_n_1 to be ${1} (got ${ - Object.keys(sampleModel.pipelines).length - })` - ); - expect(sampleModel.indices).to.eql( - undefined, - `Expected indices for dfa_regression_model_n_1 to be undefined (got ${sampleModel.indices})` - ); - }); - - it('returns trained model by id with_pipelines=true,with_indices=true', async () => { - const { body, status } = await supertest - .get( - `/internal/ml/trained_models/dfa_regression_model_n_1?with_pipelines=true&with_indices=true` - ) - .auth(USER.ML_POWERUSER, ml.securityCommon.getPasswordForUser(USER.ML_POWERUSER)) - .set(getCommonRequestHeader('1')); - ml.api.assertResponseStatusCode(200, status, body); - - const sampleModel = body[0]; - expect(sampleModel.model_id).to.eql('dfa_regression_model_n_1'); - expect(Object.keys(sampleModel.pipelines).length).to.eql( - 1, - `Expected number of pipelines for dfa_regression_model_n_1 to be ${1} (got ${ - Object.keys(sampleModel.pipelines).length - })` - ); - expect(sampleModel.indices.length).to.eql( - 1, - `Expected number of indices for dfa_regression_model_n_1 to be ${1} (got ${ - sampleModel.indices.length - })` - ); }); it('returns 404 if requested trained model does not exist', async () => { diff --git a/x-pack/test/api_integration/apis/ml/trained_models/index.ts b/x-pack/test/api_integration/apis/ml/trained_models/index.ts index c9bf98545e2b4..319899ec9a693 100644 --- a/x-pack/test/api_integration/apis/ml/trained_models/index.ts +++ b/x-pack/test/api_integration/apis/ml/trained_models/index.ts @@ -9,6 +9,7 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { describe('trained models', function () { + loadTestFile(require.resolve('./trained_models_list')); loadTestFile(require.resolve('./get_models')); loadTestFile(require.resolve('./get_model_stats')); loadTestFile(require.resolve('./get_model_pipelines')); diff --git a/x-pack/test/api_integration/apis/ml/trained_models/trained_models_list.ts b/x-pack/test/api_integration/apis/ml/trained_models/trained_models_list.ts new file mode 100644 index 0000000000000..1feac44b13ca8 --- /dev/null +++ b/x-pack/test/api_integration/apis/ml/trained_models/trained_models_list.ts @@ -0,0 +1,96 @@ +/* + * 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 supertest = getService('supertestWithoutAuth'); + const ml = getService('ml'); + const esDeleteAllIndices = getService('esDeleteAllIndices'); + + describe('GET trained_models_list', () => { + let testModelIds: string[] = []; + + before(async () => { + await ml.api.initSavedObjects(); + await ml.testResources.setKibanaTimeZoneToUTC(); + testModelIds = await ml.api.createTestTrainedModels('regression', 5, true); + await ml.api.createModelAlias('dfa_regression_model_n_0', 'dfa_regression_model_alias'); + await ml.api.createIngestPipeline('dfa_regression_model_alias'); + + // Creating an index that is tied to modelId: dfa_regression_model_n_1 + await ml.api.createIndex(`user-index_dfa_regression_model_n_1`, undefined, { + index: { default_pipeline: `pipeline_dfa_regression_model_n_1` }, + }); + }); + + after(async () => { + await esDeleteAllIndices('user-index_dfa*'); + + // delete created ingest pipelines + await Promise.all( + ['dfa_regression_model_alias', ...testModelIds].map((modelId) => + ml.api.deleteIngestPipeline(modelId) + ) + ); + await ml.testResources.cleanMLSavedObjects(); + await ml.api.cleanMlIndices(); + }); + + it('returns a formatted list of trained model with stats, associated pipelines and indices', async () => { + const { body, status } = await supertest + .get(`/internal/ml/trained_models_list`) + .auth(USER.ML_POWERUSER, ml.securityCommon.getPasswordForUser(USER.ML_POWERUSER)) + .set(getCommonRequestHeader('1')); + ml.api.assertResponseStatusCode(200, status, body); + + // Created models + system model + model downloads + expect(body.length).to.eql(10); + + const dfaRegressionN0 = body.find((v: any) => v.model_id === 'dfa_regression_model_n_0'); + + expect(Object.keys(dfaRegressionN0.pipelines).length).to.eql(2); + + const dfaRegressionN1 = body.find((v: any) => v.model_id === 'dfa_regression_model_n_1'); + expect(Object.keys(dfaRegressionN1.pipelines).length).to.eql( + 1, + `Expected number of pipelines for dfa_regression_model_n_1 to be ${1} (got ${ + Object.keys(dfaRegressionN1.pipelines).length + })` + ); + expect(dfaRegressionN1.indices.length).to.eql( + 1, + `Expected number of indices for dfa_regression_model_n_1 to be ${1} (got ${ + dfaRegressionN1.indices.length + })` + ); + }); + + it('returns models without pipeline in case user does not have required permission', async () => { + const { body, status } = await supertest + .get(`/internal/ml/trained_models_list`) + .auth(USER.ML_VIEWER, ml.securityCommon.getPasswordForUser(USER.ML_VIEWER)) + .set(getCommonRequestHeader('1')); + ml.api.assertResponseStatusCode(200, status, body); + + expect(body.length).to.eql(10); + const sampleModel = body.find((v: any) => v.model_id === 'dfa_regression_model_n_0'); + expect(sampleModel.pipelines).to.eql(undefined); + }); + + it('returns an error for unauthorized user', async () => { + const { body, status } = await supertest + .get(`/internal/ml/trained_models_list`) + .auth(USER.ML_UNAUTHORIZED, ml.securityCommon.getPasswordForUser(USER.ML_UNAUTHORIZED)) + .set(getCommonRequestHeader('1')); + ml.api.assertResponseStatusCode(403, status, body); + }); + }); +}; diff --git a/x-pack/test/api_integration/apis/security/license_downgrade.ts b/x-pack/test/api_integration/apis/security/license_downgrade.ts index ad7fba3ac3d64..812a6385af970 100644 --- a/x-pack/test/api_integration/apis/security/license_downgrade.ts +++ b/x-pack/test/api_integration/apis/security/license_downgrade.ts @@ -26,6 +26,7 @@ export default function ({ getService }: FtrProviderContext) { 'minimal_read', 'url_create', 'store_search_session', + 'generate_report', ]; const trialPrivileges = await supertest .get('/api/security/privileges') diff --git a/x-pack/test/api_integration/apis/security/privileges.ts b/x-pack/test/api_integration/apis/security/privileges.ts index dc84f6c33d200..4cf8cc46a9338 100644 --- a/x-pack/test/api_integration/apis/security/privileges.ts +++ b/x-pack/test/api_integration/apis/security/privileges.ts @@ -20,7 +20,7 @@ export default function ({ getService }: FtrProviderContext) { features: { graph: ['all', 'read', 'minimal_all', 'minimal_read'], savedObjectsTagging: ['all', 'read', 'minimal_all', 'minimal_read'], - canvas: ['all', 'read', 'minimal_all', 'minimal_read'], + canvas: ['all', 'read', 'minimal_all', 'minimal_read', 'generate_report'], maps: ['all', 'read', 'minimal_all', 'minimal_read'], generalCases: [ 'all', @@ -137,8 +137,9 @@ export default function ({ getService }: FtrProviderContext) { 'minimal_read', 'url_create', 'store_search_session', + 'generate_report', ], - visualize: ['all', 'read', 'minimal_all', 'minimal_read', 'url_create'], + visualize: ['all', 'read', 'minimal_all', 'minimal_read', 'url_create', 'generate_report'], dashboard: [ 'all', 'read', @@ -146,6 +147,8 @@ export default function ({ getService }: FtrProviderContext) { 'minimal_read', 'url_create', 'store_search_session', + 'generate_report', + 'download_csv_report', ], dev_tools: ['all', 'read', 'minimal_all', 'minimal_read'], advancedSettings: ['all', 'read', 'minimal_all', 'minimal_read'], @@ -180,6 +183,7 @@ export default function ({ getService }: FtrProviderContext) { guidedOnboardingFeature: ['all', 'read', 'minimal_all', 'minimal_read'], aiAssistantManagementSelection: ['all', 'read', 'minimal_all', 'minimal_read'], inventory: ['all', 'read', 'minimal_all', 'minimal_read'], + entityManager: ['all', 'read', 'minimal_all', 'minimal_read'], }, reserved: ['fleet-setup', 'ml_user', 'ml_admin', 'ml_apm_user', 'monitoring'], }; 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 2bbd70fcf730d..3911d95ea9bed 100644 --- a/x-pack/test/api_integration/apis/security/privileges_basic.ts +++ b/x-pack/test/api_integration/apis/security/privileges_basic.ts @@ -63,6 +63,7 @@ export default function ({ getService }: FtrProviderContext) { aiAssistantManagementSelection: ['all', 'read', 'minimal_all', 'minimal_read'], inventory: ['all', 'read', 'minimal_all', 'minimal_read'], dataQuality: ['all', 'read', 'minimal_all', 'minimal_read'], + entityManager: ['all', 'read', 'minimal_all', 'minimal_read'], }, global: ['all', 'read'], space: ['all', 'read'], @@ -222,6 +223,7 @@ export default function ({ getService }: FtrProviderContext) { 'minimal_read', 'url_create', 'store_search_session', + 'generate_report', ], visualize: ['all', 'read', 'minimal_all', 'minimal_read', 'url_create'], dashboard: [ @@ -231,6 +233,7 @@ export default function ({ getService }: FtrProviderContext) { 'minimal_read', 'url_create', 'store_search_session', + 'download_csv_report', ], dev_tools: ['all', 'read', 'minimal_all', 'minimal_read'], advancedSettings: ['all', 'read', 'minimal_all', 'minimal_read'], @@ -265,6 +268,7 @@ export default function ({ getService }: FtrProviderContext) { guidedOnboardingFeature: ['all', 'read', 'minimal_all', 'minimal_read'], aiAssistantManagementSelection: ['all', 'read', 'minimal_all', 'minimal_read'], inventory: ['all', 'read', 'minimal_all', 'minimal_read'], + entityManager: ['all', 'read', 'minimal_all', 'minimal_read'], }, reserved: ['fleet-setup', 'ml_user', 'ml_admin', 'ml_apm_user', 'monitoring'], }; diff --git a/x-pack/test/api_integration/deployment_agnostic/README.md b/x-pack/test/api_integration/deployment_agnostic/README.md index 3bc1c70dda1ab..6064d52cdcf6b 100644 --- a/x-pack/test/api_integration/deployment_agnostic/README.md +++ b/x-pack/test/api_integration/deployment_agnostic/README.md @@ -9,6 +9,12 @@ A deployment-agnostic API integration test is a test suite that fulfills the fol A deployment-agnostic test should be loaded in stateful and at least 1 serverless FTR config files. +## Tests, that are not deployment-agnostic: +- tests verifying Kibana behavior under a basic license. +- tests dependent on ES/Kibana server arguments, that are not set in Elastic Cloud +- tests requiring a custom plugin to be loaded specifically for testing purposes. +- tests dependent on varying user privileges between serverless and stateful environments. + ## Tests Design Requirements A deployment-agnostic test is contained within a single test file and always utilizes the [DeploymentAgnosticFtrProviderContext](https://github.com/elastic/kibana/blob/main/x-pack/test/api_integration/deployment_agnostic/ftr_provider_context.d.ts) to load compatible FTR services. A compatible FTR service must support: @@ -243,3 +249,15 @@ node scripts/functional_test_runner --config x-pack/test/api_integration/deploym Since deployment-agnostic tests are designed to run both locally and on MKI/Cloud, we believe no extra tagging is required. If a test is not working on MKI/Cloud or both, there is most likely an issue with the FTR service or the configuration file it uses. When a test fails on CI, automation will apply `.skip` to the top-level describe block. This means the test will be skipped in **both serverless and stateful environments**. If a test is unstable in a specific environment only, it is probably a sign that the test is not truly deployment-agnostic. + +## Migrating existing tests +If your tests align with the outlined criteria and requirements, you can migrate them to deployment-agnostic by following these steps: + +1. Move your tests to the `x-pack/test/api_integration/deployment_agnostic/apis/` directory. +2. Update each test file to use the `DeploymentAgnosticFtrProviderContext` context and load the required FTR services it provides. +3. Ensure the `roleScopedSupertest` or `samlAuth` service is used instead for `supertest` for authentication and test API calls. +4. Remove all usage of the `supertest` service. It is authenticated as system index superuser and often causes test failures on Cloud, where priveleges are more strict. +5. Avoid modifying `config` files, as this could disrupt test runs in Cloud environments. +6. Include your tests in both the platform and at least one solution index file. +7. Execute your tests locally against a local environment. +8. Verify your tests by running them locally against a real MKI project and an ESS deployment to ensure full compatibility. diff --git a/x-pack/test/api_integration/services/security_solution_api.gen.ts b/x-pack/test/api_integration/services/security_solution_api.gen.ts index a0b1bf74926b4..3561ff6fac35a 100644 --- a/x-pack/test/api_integration/services/security_solution_api.gen.ts +++ b/x-pack/test/api_integration/services/security_solution_api.gen.ts @@ -92,14 +92,19 @@ import { GetRuleExecutionResultsRequestQueryInput, GetRuleExecutionResultsRequestParamsInput, } from '@kbn/security-solution-plugin/common/api/detection_engine/rule_monitoring/rule_execution_logs/get_rule_execution_results/get_rule_execution_results_route.gen'; -import { GetRuleMigrationRequestParamsInput } from '@kbn/security-solution-plugin/common/siem_migrations/model/api/rules/rule_migration.gen'; +import { + GetRuleMigrationRequestQueryInput, + GetRuleMigrationRequestParamsInput, +} from '@kbn/security-solution-plugin/common/siem_migrations/model/api/rules/rule_migration.gen'; import { GetRuleMigrationResourcesRequestQueryInput, GetRuleMigrationResourcesRequestParamsInput, } from '@kbn/security-solution-plugin/common/siem_migrations/model/api/rules/rule_migration.gen'; import { GetRuleMigrationStatsRequestParamsInput } from '@kbn/security-solution-plugin/common/siem_migrations/model/api/rules/rule_migration.gen'; +import { GetRuleMigrationTranslationStatsRequestParamsInput } from '@kbn/security-solution-plugin/common/siem_migrations/model/api/rules/rule_migration.gen'; import { GetTimelineRequestQueryInput } from '@kbn/security-solution-plugin/common/api/timeline/get_timeline/get_timeline_route.gen'; import { GetTimelinesRequestQueryInput } from '@kbn/security-solution-plugin/common/api/timeline/get_timelines/get_timelines_route.gen'; +import { GetWorkflowInsightsRequestQueryInput } from '@kbn/security-solution-plugin/common/api/endpoint/workflow_insights/workflow_insights.gen'; import { ImportRulesRequestQueryInput } from '@kbn/security-solution-plugin/common/api/detection_engine/rule_management/import_rules/import_rules_route.gen'; import { ImportTimelinesRequestBodyInput } from '@kbn/security-solution-plugin/common/api/timeline/import_timelines/import_timelines_route.gen'; import { @@ -146,6 +151,10 @@ import { SuggestUserProfilesRequestQueryInput } from '@kbn/security-solution-plu import { TriggerRiskScoreCalculationRequestBodyInput } from '@kbn/security-solution-plugin/common/api/entity_analytics/risk_engine/entity_calculation_route.gen'; import { UpdateRuleRequestBodyInput } from '@kbn/security-solution-plugin/common/api/detection_engine/rule_management/crud/update_rule/update_rule_route.gen'; import { UpdateRuleMigrationRequestBodyInput } from '@kbn/security-solution-plugin/common/siem_migrations/model/api/rules/rule_migration.gen'; +import { + UpdateWorkflowInsightRequestParamsInput, + UpdateWorkflowInsightRequestBodyInput, +} from '@kbn/security-solution-plugin/common/api/endpoint/workflow_insights/workflow_insights.gen'; import { UpsertRuleMigrationResourcesRequestParamsInput, UpsertRuleMigrationResourcesRequestBodyInput, @@ -937,7 +946,8 @@ finalize it. ) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '1') - .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .query(props.query); }, /** * Retrieves resources for an existing SIEM rules migration @@ -973,6 +983,27 @@ finalize it. .set(ELASTIC_HTTP_VERSION_HEADER, '1') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); }, + /** + * Retrieves the translation stats of a SIEM rules migration using the migration id provided + */ + getRuleMigrationTranslationStats( + props: GetRuleMigrationTranslationStatsProps, + kibanaSpace: string = 'default' + ) { + return supertest + .get( + routeWithNamespace( + replaceParams( + '/internal/siem_migrations/rules/{migration_id}/translation_stats', + props.params + ), + kibanaSpace + ) + ) + .set('kbn-xsrf', 'true') + .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); + }, /** * Get the details of an existing saved Timeline or Timeline template. */ @@ -995,6 +1026,14 @@ finalize it. .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query(props.query); }, + getWorkflowInsights(props: GetWorkflowInsightsProps, kibanaSpace: string = 'default') { + return supertest + .get(routeWithNamespace('/internal/api/endpoint/workflow_insights', kibanaSpace)) + .set('kbn-xsrf', 'true') + .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .query(props.query); + }, /** * Import detection rules from an `.ndjson` file, including actions and exception lists. The request must include: - The `Content-Type: multipart/form-data` HTTP header. @@ -1477,6 +1516,19 @@ detection engine rules. .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(props.body as object); }, + updateWorkflowInsight(props: UpdateWorkflowInsightProps, kibanaSpace: string = 'default') { + return supertest + .put( + routeWithNamespace( + replaceParams('/internal/api/endpoint/workflow_insights/{insightId}', props.params), + kibanaSpace + ) + ) + .set('kbn-xsrf', 'true') + .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .send(props.body as object); + }, uploadAssetCriticalityRecords(kibanaSpace: string = 'default') { return supertest .post(routeWithNamespace('/api/asset_criticality/upload_csv', kibanaSpace)) @@ -1667,6 +1719,7 @@ export interface GetRuleExecutionResultsProps { params: GetRuleExecutionResultsRequestParamsInput; } export interface GetRuleMigrationProps { + query: GetRuleMigrationRequestQueryInput; params: GetRuleMigrationRequestParamsInput; } export interface GetRuleMigrationResourcesProps { @@ -1676,12 +1729,18 @@ export interface GetRuleMigrationResourcesProps { export interface GetRuleMigrationStatsProps { params: GetRuleMigrationStatsRequestParamsInput; } +export interface GetRuleMigrationTranslationStatsProps { + params: GetRuleMigrationTranslationStatsRequestParamsInput; +} export interface GetTimelineProps { query: GetTimelineRequestQueryInput; } export interface GetTimelinesProps { query: GetTimelinesRequestQueryInput; } +export interface GetWorkflowInsightsProps { + query: GetWorkflowInsightsRequestQueryInput; +} export interface ImportRulesProps { query: ImportRulesRequestQueryInput; } @@ -1780,6 +1839,10 @@ export interface UpdateRuleProps { export interface UpdateRuleMigrationProps { body: UpdateRuleMigrationRequestBodyInput; } +export interface UpdateWorkflowInsightProps { + params: UpdateWorkflowInsightRequestParamsInput; + body: UpdateWorkflowInsightRequestBodyInput; +} export interface UpsertRuleMigrationResourcesProps { params: UpsertRuleMigrationResourcesRequestParamsInput; body: UpsertRuleMigrationResourcesRequestBodyInput; diff --git a/x-pack/test/automatic_import_api_integration/common/config.ts b/x-pack/test/automatic_import_api_integration/common/config.ts new file mode 100644 index 0000000000000..aa83401a5e8b6 --- /dev/null +++ b/x-pack/test/automatic_import_api_integration/common/config.ts @@ -0,0 +1,89 @@ +/* + * 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 { CA_CERT_PATH } from '@kbn/dev-utils'; +import { FtrConfigProviderContext } from '@kbn/test'; +import { services } from './services'; + +interface CreateTestConfigOptions { + license: string; + disabledPlugins?: string[]; + ssl?: boolean; + testFiles?: string[]; + publicBaseUrl?: boolean; +} + +const enabledActionTypes = ['.bedrock', '.gemini', '.gen-ai']; + +export function createTestConfig(name: string, options: CreateTestConfigOptions) { + const { license = 'trial', disabledPlugins = [], ssl = false, testFiles = [] } = options; + + return async ({ readConfigFile }: FtrConfigProviderContext) => { + const xPackApiIntegrationTestsConfig = await readConfigFile( + require.resolve('../../api_integration/config.ts') + ); + + const servers = { + ...xPackApiIntegrationTestsConfig.get('servers'), + elasticsearch: { + ...xPackApiIntegrationTestsConfig.get('servers.elasticsearch'), + protocol: ssl ? 'https' : 'http', + }, + }; + + return { + testFiles, + servers, + services, + junit: { + reportName: 'X-Pack Automatic Import API Integration Tests', + }, + esTestCluster: { + ...xPackApiIntegrationTestsConfig.get('esTestCluster'), + license, + ssl, + serverArgs: [ + `xpack.license.self_generated.type=${license}`, + `xpack.security.enabled=${ + !disabledPlugins.includes('security') && ['trial', 'basic'].includes(license) + }`, + ], + }, + kbnTestServer: { + ...xPackApiIntegrationTestsConfig.get('kbnTestServer'), + serverArgs: [ + ...xPackApiIntegrationTestsConfig.get('kbnTestServer.serverArgs'), + ...(options.publicBaseUrl ? ['--server.publicBaseUrl=https://localhost:5601'] : []), + `--xpack.actions.allowedHosts=${JSON.stringify(['localhost', 'some.non.existent.com'])}`, + `--xpack.actions.enabledActionTypes=${JSON.stringify(enabledActionTypes)}`, + '--xpack.eventLog.logEntries=true', + // Configure a bedrock connector as a default + `--xpack.actions.preconfigured=${JSON.stringify({ + 'preconfigured-bedrock': { + name: 'preconfigured-bedrock', + actionTypeId: '.bedrock', + config: { + apiUrl: 'https://example.com', + }, + secrets: { + username: 'elastic', + password: 'elastic', + }, + }, + })}`, + ...(ssl + ? [ + `--elasticsearch.hosts=${servers.elasticsearch.protocol}://${servers.elasticsearch.hostname}:${servers.elasticsearch.port}`, + `--elasticsearch.ssl.certificateAuthorities=${CA_CERT_PATH}`, + ] + : []), + '--xpack.integration_assistant.enabled=true', + ], + }, + }; + }; +} diff --git a/x-pack/test/automatic_import_api_integration/common/ftr_provider_context.d.ts b/x-pack/test/automatic_import_api_integration/common/ftr_provider_context.d.ts new file mode 100644 index 0000000000000..aa56557c09df8 --- /dev/null +++ b/x-pack/test/automatic_import_api_integration/common/ftr_provider_context.d.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. + */ + +import { GenericFtrProviderContext } from '@kbn/test'; + +import { services } from './services'; + +export type FtrProviderContext = GenericFtrProviderContext; diff --git a/x-pack/test/automatic_import_api_integration/common/lib/api/analyze_logs.ts b/x-pack/test/automatic_import_api_integration/common/lib/api/analyze_logs.ts new file mode 100644 index 0000000000000..4ad3034a0f55b --- /dev/null +++ b/x-pack/test/automatic_import_api_integration/common/lib/api/analyze_logs.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 type SuperTest from 'supertest'; +import { + AnalyzeLogsRequestBody, + ANALYZE_LOGS_PATH, + AnalyzeLogsResponse, +} from '@kbn/integration-assistant-plugin/common'; +import { superUser } from '../authentication/users'; +import { User } from '../authentication/types'; + +export const postAnalyzeLogs = async ({ + supertest, + req, + expectedHttpCode = 404, + auth = { user: superUser }, +}: { + supertest: SuperTest.Agent; + req: AnalyzeLogsRequestBody; + expectedHttpCode?: number; + auth: { user: User }; +}): Promise => { + const { body: response } = await supertest + .post(`${ANALYZE_LOGS_PATH}`) + .send(req) + .set('kbn-xsrf', 'abc') + .set('elastic-api-version', '1') + .auth(auth.user.username, auth.user.password) + .expect(expectedHttpCode); + + return response; +}; diff --git a/x-pack/test/automatic_import_api_integration/common/lib/api/categorization.ts b/x-pack/test/automatic_import_api_integration/common/lib/api/categorization.ts new file mode 100644 index 0000000000000..f14efc63ee8a0 --- /dev/null +++ b/x-pack/test/automatic_import_api_integration/common/lib/api/categorization.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 type SuperTest from 'supertest'; +import { + CategorizationRequestBody, + CATEGORIZATION_GRAPH_PATH, + CategorizationResponse, +} from '@kbn/integration-assistant-plugin/common'; +import { superUser } from '../authentication/users'; +import { User } from '../authentication/types'; + +export const postCategorization = async ({ + supertest, + req, + expectedHttpCode = 404, + auth = { user: superUser }, +}: { + supertest: SuperTest.Agent; + req: CategorizationRequestBody; + expectedHttpCode?: number; + auth: { user: User }; +}): Promise => { + const { body: response } = await supertest + .post(`${CATEGORIZATION_GRAPH_PATH}`) + .send(req) + .set('kbn-xsrf', 'abc') + .set('elastic-api-version', '1') + .auth(auth.user.username, auth.user.password) + .expect(expectedHttpCode); + + return response; +}; diff --git a/x-pack/test/automatic_import_api_integration/common/lib/api/ecs.ts b/x-pack/test/automatic_import_api_integration/common/lib/api/ecs.ts new file mode 100644 index 0000000000000..3169659d7e2f3 --- /dev/null +++ b/x-pack/test/automatic_import_api_integration/common/lib/api/ecs.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 type SuperTest from 'supertest'; +import { + EcsMappingRequestBody, + ECS_GRAPH_PATH, + EcsMappingResponse, +} from '@kbn/integration-assistant-plugin/common'; +import { superUser } from '../authentication/users'; +import { User } from '../authentication/types'; + +export const postEcsMapping = async ({ + supertest, + req, + expectedHttpCode = 404, + auth = { user: superUser }, +}: { + supertest: SuperTest.Agent; + req: EcsMappingRequestBody; + expectedHttpCode?: number; + auth: { user: User }; +}): Promise => { + const { body: response } = await supertest + .post(`${ECS_GRAPH_PATH}`) + .send(req) + .set('kbn-xsrf', 'abc') + .set('elastic-api-version', '1') + .auth(auth.user.username, auth.user.password) + .expect(expectedHttpCode); + + return response; +}; diff --git a/x-pack/test/automatic_import_api_integration/common/lib/api/index.ts b/x-pack/test/automatic_import_api_integration/common/lib/api/index.ts new file mode 100644 index 0000000000000..d07ba14d384fd --- /dev/null +++ b/x-pack/test/automatic_import_api_integration/common/lib/api/index.ts @@ -0,0 +1,7 @@ +/* + * 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 './user_profiles'; diff --git a/x-pack/test/automatic_import_api_integration/common/lib/api/related.ts b/x-pack/test/automatic_import_api_integration/common/lib/api/related.ts new file mode 100644 index 0000000000000..7ebe3d3bf89c2 --- /dev/null +++ b/x-pack/test/automatic_import_api_integration/common/lib/api/related.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 type SuperTest from 'supertest'; +import { + RelatedRequestBody, + RELATED_GRAPH_PATH, + RelatedResponse, +} from '@kbn/integration-assistant-plugin/common'; +import { superUser } from '../authentication/users'; +import { User } from '../authentication/types'; + +export const postRelated = async ({ + supertest, + req, + expectedHttpCode = 404, + auth = { user: superUser }, +}: { + supertest: SuperTest.Agent; + req: RelatedRequestBody; + expectedHttpCode?: number; + auth: { user: User }; +}): Promise => { + const { body: response } = await supertest + .post(`${RELATED_GRAPH_PATH}`) + .send(req) + .set('kbn-xsrf', 'abc') + .set('elastic-api-version', '1') + .auth(auth.user.username, auth.user.password) + .expect(expectedHttpCode); + + return response; +}; diff --git a/x-pack/test/automatic_import_api_integration/common/lib/api/user_profiles.ts b/x-pack/test/automatic_import_api_integration/common/lib/api/user_profiles.ts new file mode 100644 index 0000000000000..4a5c083e00fd6 --- /dev/null +++ b/x-pack/test/automatic_import_api_integration/common/lib/api/user_profiles.ts @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type SuperTest from 'supertest'; +import { parse as parseCookie, Cookie } from 'tough-cookie'; +import { superUser } from '../authentication/users'; +import { User } from '../authentication/types'; + +export const loginUsers = async ({ + supertest, + users = [superUser], +}: { + supertest: SuperTest.Agent; + users?: User[]; +}) => { + const cookies: Cookie[] = []; + + for (const user of users) { + const response = await supertest + .post('/internal/security/login') + .set('kbn-xsrf', 'xxx') + .send({ + providerType: 'basic', + providerName: 'basic', + currentURL: '/', + params: { username: user.username, password: user.password }, + }) + .expect(200); + + cookies.push(parseCookie(response.header['set-cookie'][0])!); + } + + return cookies; +}; diff --git a/x-pack/test/automatic_import_api_integration/common/lib/authentication/index.ts b/x-pack/test/automatic_import_api_integration/common/lib/authentication/index.ts new file mode 100644 index 0000000000000..a886cf111d3f3 --- /dev/null +++ b/x-pack/test/automatic_import_api_integration/common/lib/authentication/index.ts @@ -0,0 +1,85 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrProviderContext as CommonFtrProviderContext } from '../../ftr_provider_context'; +import { Role, User, UserInfo } from './types'; +import { noIntegrationsUser, users } from './users'; +import { roles } from './roles'; +import { loginUsers } from '../api'; + +export const getUserInfo = (user: User): UserInfo => ({ + username: user.username, + full_name: user.username.replace('_', ' '), + email: `${user.username}@elastic.co`, +}); + +/** + * Creates the users and roles for use in the tests. Defaults to specific users and roles used by the security + * scenarios but can be passed specific ones as well. + */ +export const createUsersAndRoles = async ( + getService: CommonFtrProviderContext['getService'], + usersToCreate: User[] = users, + rolesToCreate: Role[] = roles +) => { + const security = getService('security'); + + const createRole = async ({ name, privileges }: Role) => { + return await security.role.create(name, privileges); + }; + + const createUser = async (user: User) => { + const userInfo = getUserInfo(user); + + return await security.user.create(user.username, { + password: user.password, + roles: user.roles, + full_name: userInfo.full_name, + email: userInfo.email, + }); + }; + + await Promise.all(rolesToCreate.map((role) => createRole(role))); + await Promise.all(usersToCreate.map((user) => createUser(user))); +}; + +export const deleteUsersAndRoles = async ( + getService: CommonFtrProviderContext['getService'], + usersToDelete: User[] = users, + rolesToDelete: Role[] = roles +) => { + const security = getService('security'); + + try { + await Promise.allSettled(usersToDelete.map((user) => security.user.delete(user.username))); + } catch (error) { + // ignore errors because if a migration is run it will delete the .kibana index which remove the spaces and users + } + + try { + await Promise.allSettled(rolesToDelete.map((role) => security.role.delete(role.name))); + } catch (error) { + // ignore errors because if a migration is run it will delete the .kibana index which remove the spaces and users + } +}; + +export const createUsers = async (getService: CommonFtrProviderContext['getService']) => { + await createUsersAndRoles(getService); +}; + +export const deleteUsers = async (getService: CommonFtrProviderContext['getService']) => { + await deleteUsersAndRoles(getService); +}; + +export const activateUserProfiles = async (getService: CommonFtrProviderContext['getService']) => { + const supertestWithoutAuth = getService('supertestWithoutAuth'); + + await loginUsers({ + supertest: supertestWithoutAuth, + users: [noIntegrationsUser], + }); +}; diff --git a/x-pack/test/automatic_import_api_integration/common/lib/authentication/roles.ts b/x-pack/test/automatic_import_api_integration/common/lib/authentication/roles.ts new file mode 100644 index 0000000000000..dbd561aba4a58 --- /dev/null +++ b/x-pack/test/automatic_import_api_integration/common/lib/authentication/roles.ts @@ -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 { Role } from './types'; + +export const noIntegrationsPrivileges: Role = { + name: 'no_integrations_kibana_privileges', + privileges: { + elasticsearch: { + indices: [ + { + names: ['*'], + privileges: ['all'], + }, + ], + }, + kibana: [ + { + feature: { + fleetv2: ['read'], + fleet: ['all'], + }, + spaces: ['*'], + }, + ], + }, +}; + +export const onlyActions: Role = { + name: 'only_actions', + privileges: { + elasticsearch: { + indices: [ + { + names: ['*'], + privileges: ['all'], + }, + ], + }, + kibana: [ + { + feature: { + actions: ['all'], + actionsSimulators: ['all'], + }, + spaces: ['*'], + }, + ], + }, +}; + +export const roles = [noIntegrationsPrivileges, onlyActions]; diff --git a/x-pack/test/automatic_import_api_integration/common/lib/authentication/types.ts b/x-pack/test/automatic_import_api_integration/common/lib/authentication/types.ts new file mode 100644 index 0000000000000..3bf3629441f93 --- /dev/null +++ b/x-pack/test/automatic_import_api_integration/common/lib/authentication/types.ts @@ -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. + */ + +export interface Space { + id: string; + namespace?: string; + name: string; + disabledFeatures: string[]; +} + +export interface User { + username: string; + password: string; + description?: string; + roles: string[]; +} + +export interface UserInfo { + username: string; + full_name: string; + email: string; +} + +interface FeaturesPrivileges { + [featureId: string]: string[]; +} + +interface ElasticsearchIndices { + names: string[]; + privileges: string[]; +} + +export interface ElasticSearchPrivilege { + cluster?: string[]; + indices?: ElasticsearchIndices[]; +} + +export interface KibanaPrivilege { + spaces: string[]; + base?: string[]; + feature?: FeaturesPrivileges; +} + +export interface Role { + name: string; + privileges: { + elasticsearch?: ElasticSearchPrivilege; + kibana?: KibanaPrivilege[]; + }; +} diff --git a/x-pack/test/automatic_import_api_integration/common/lib/authentication/users.ts b/x-pack/test/automatic_import_api_integration/common/lib/authentication/users.ts new file mode 100644 index 0000000000000..6fea381d1e145 --- /dev/null +++ b/x-pack/test/automatic_import_api_integration/common/lib/authentication/users.ts @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { noIntegrationsPrivileges, onlyActions as onlyActionsRole } from './roles'; +import { User } from './types'; + +export const superUser: User = { + username: 'superuser', + password: 'superuser', + roles: ['superuser'], +}; + +export const noIntegrationsUser: User = { + username: 'no_integrations_user', + password: 'no_integrations_user', + roles: [noIntegrationsPrivileges.name], +}; + +export const onlyActions: User = { + username: 'only_actions', + password: 'only_actions', + roles: [onlyActionsRole.name], +}; + +export const users = [superUser, noIntegrationsUser, onlyActions]; diff --git a/x-pack/test/automatic_import_api_integration/common/services.ts b/x-pack/test/automatic_import_api_integration/common/services.ts new file mode 100644 index 0000000000000..7e415338c405f --- /dev/null +++ b/x-pack/test/automatic_import_api_integration/common/services.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 { services } from '../../api_integration/services'; diff --git a/x-pack/test/automatic_import_api_integration/security/config_basic.ts b/x-pack/test/automatic_import_api_integration/security/config_basic.ts new file mode 100644 index 0000000000000..ebda3390790e3 --- /dev/null +++ b/x-pack/test/automatic_import_api_integration/security/config_basic.ts @@ -0,0 +1,16 @@ +/* + * 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 { createTestConfig } from '../common/config'; + +// eslint-disable-next-line import/no-default-export +export default createTestConfig('security', { + license: 'basic', + ssl: true, + testFiles: [require.resolve('./tests/basic')], + publicBaseUrl: true, +}); diff --git a/x-pack/test/automatic_import_api_integration/security/tests/basic/graphs/analyze_logs.ts b/x-pack/test/automatic_import_api_integration/security/tests/basic/graphs/analyze_logs.ts new file mode 100644 index 0000000000000..6fb3abf127747 --- /dev/null +++ b/x-pack/test/automatic_import_api_integration/security/tests/basic/graphs/analyze_logs.ts @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { postAnalyzeLogs } from '../../../../common/lib/api/analyze_logs'; +import { FtrProviderContext } from '../../../../../common/ftr_provider_context'; +import { User } from '../../../../common/lib/authentication/types'; + +// eslint-disable-next-line import/no-default-export +export default ({ getService }: FtrProviderContext): void => { + const supertest = getService('supertest'); + + describe('Run analyze logs', () => { + it('should get 404 when trying to run analyze_logs with basic license', async () => { + return await postAnalyzeLogs({ + supertest, + req: { + packageName: 'some-package', + dataStreamName: 'some-data-stream', + connectorId: 'bedrock-connector', + packageTitle: 'packageTitle', + dataStreamTitle: 'dataStreamTitle', + logSamples: ['sample1', 'sample2'], + }, + auth: { + user: { username: 'elastic', password: 'elastic' } as User, + }, + }); + }); + }); +}; diff --git a/x-pack/test/automatic_import_api_integration/security/tests/basic/graphs/categorization.ts b/x-pack/test/automatic_import_api_integration/security/tests/basic/graphs/categorization.ts new file mode 100644 index 0000000000000..4d9a3a0853109 --- /dev/null +++ b/x-pack/test/automatic_import_api_integration/security/tests/basic/graphs/categorization.ts @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { postCategorization } from '../../../../common/lib/api/categorization'; +import { FtrProviderContext } from '../../../../../common/ftr_provider_context'; +import { User } from '../../../../common/lib/authentication/types'; + +// eslint-disable-next-line import/no-default-export +export default ({ getService }: FtrProviderContext): void => { + const supertest = getService('supertest'); + + describe('Run categorization', () => { + it('should get 404 when trying to run categorization with basic license', async () => { + return await postCategorization({ + supertest, + req: { + packageName: 'some-package', + dataStreamName: 'some-data-stream', + rawSamples: ['sample1', 'sample2'], + samplesFormat: { + name: 'json', + }, + connectorId: 'bedrock-connector', + currentPipeline: { + processors: [], + }, + }, + auth: { + user: { username: 'elastic', password: 'elastic' } as User, + }, + }); + }); + }); +}; diff --git a/x-pack/test/automatic_import_api_integration/security/tests/basic/graphs/ecs.ts b/x-pack/test/automatic_import_api_integration/security/tests/basic/graphs/ecs.ts new file mode 100644 index 0000000000000..d24a72f796d44 --- /dev/null +++ b/x-pack/test/automatic_import_api_integration/security/tests/basic/graphs/ecs.ts @@ -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 { postEcsMapping } from '../../../../common/lib/api/ecs'; +import { FtrProviderContext } from '../../../../../common/ftr_provider_context'; +import { User } from '../../../../common/lib/authentication/types'; + +// eslint-disable-next-line import/no-default-export +export default ({ getService }: FtrProviderContext): void => { + const supertest = getService('supertest'); + + describe('Run ecs_mapping', () => { + it('should get 404 when trying to run ecs_mapping with basic license', async () => { + return await postEcsMapping({ + supertest, + req: { + packageName: 'some-package', + dataStreamName: 'some-data-stream', + rawSamples: ['sample1', 'sample2'], + samplesFormat: { + name: 'json', + }, + connectorId: 'bedrock-connector', + }, + auth: { + user: { username: 'elastic', password: 'elastic' } as User, + }, + }); + }); + }); +}; diff --git a/x-pack/test/automatic_import_api_integration/security/tests/basic/graphs/related.ts b/x-pack/test/automatic_import_api_integration/security/tests/basic/graphs/related.ts new file mode 100644 index 0000000000000..6091b64f7c224 --- /dev/null +++ b/x-pack/test/automatic_import_api_integration/security/tests/basic/graphs/related.ts @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { postRelated } from '../../../../common/lib/api/related'; +import { FtrProviderContext } from '../../../../../common/ftr_provider_context'; +import { User } from '../../../../common/lib/authentication/types'; + +// eslint-disable-next-line import/no-default-export +export default ({ getService }: FtrProviderContext): void => { + const supertest = getService('supertest'); + + describe('Run related', () => { + it('should get 404 when trying to run related graph with basic license', async () => { + return await postRelated({ + supertest, + req: { + packageName: 'some-package', + dataStreamName: 'some-data-stream', + rawSamples: ['sample1', 'sample2'], + samplesFormat: { + name: 'json', + }, + connectorId: 'bedrock-connector', + currentPipeline: { + processors: [], + }, + }, + auth: { + user: { username: 'elastic', password: 'elastic' } as User, + }, + }); + }); + }); +}; diff --git a/x-pack/test/automatic_import_api_integration/security/tests/basic/index.ts b/x-pack/test/automatic_import_api_integration/security/tests/basic/index.ts new file mode 100644 index 0000000000000..7391c1e3ae9ed --- /dev/null +++ b/x-pack/test/automatic_import_api_integration/security/tests/basic/index.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 { FtrProviderContext } from '../../../common/ftr_provider_context'; +import { + createUsersAndRoles, + deleteUsersAndRoles, + activateUserProfiles, +} from '../../../common/lib/authentication'; + +// eslint-disable-next-line import/no-default-export +export default ({ loadTestFile, getService }: FtrProviderContext): void => { + describe('Automatic Import enabled: basic', function () { + before(async () => { + await createUsersAndRoles(getService); + // once a user profile is created the only way to remove it is to delete the user and roles, so best to activate + // before all the tests + await activateUserProfiles(getService); + }); + + after(async () => { + await deleteUsersAndRoles(getService); + }); + + // Basic + loadTestFile(require.resolve('./graphs/ecs')); + }); +}; diff --git a/x-pack/test/custom_branding/tests/settings.ts b/x-pack/test/custom_branding/tests/settings.ts index df4ccc53e7893..4b26641e3e4f2 100644 --- a/x-pack/test/custom_branding/tests/settings.ts +++ b/x-pack/test/custom_branding/tests/settings.ts @@ -91,8 +91,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { require.resolve('./acme_text.png') ); await goToSettings(); - const logo = await testSubjects.find('logo'); - const img = await logo.findByCssSelector('.chrHeaderLogo__mark'); + const img = await testSubjects.find('logoMark'); const imgSrc = (await img.getAttribute('src')) ?? ''; expect(imgSrc.startsWith('data:image/png')).to.be(true); }); diff --git a/x-pack/test/functional/apps/canvas/feature_controls/canvas_security.ts b/x-pack/test/functional/apps/canvas/feature_controls/canvas_security.ts index afcee962374db..1790fdd914289 100644 --- a/x-pack/test/functional/apps/canvas/feature_controls/canvas_security.ts +++ b/x-pack/test/functional/apps/canvas/feature_controls/canvas_security.ts @@ -69,7 +69,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { it('shows canvas navlink', async () => { const navLinks = (await appsMenu.readLinks()).map((link) => link.text); - expect(navLinks).to.eql(['Canvas']); + expect(navLinks).to.eql(['Canvas', 'Stack Management']); // access to the Reporting feature grants access to Stack Management }); it(`landing page shows "Create new workpad" button`, async () => { diff --git a/x-pack/test/functional/apps/canvas/reports.ts b/x-pack/test/functional/apps/canvas/reports.ts index 147f9c2b4b91d..880a8573991d0 100644 --- a/x-pack/test/functional/apps/canvas/reports.ts +++ b/x-pack/test/functional/apps/canvas/reports.ts @@ -27,14 +27,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { { spaces: ['*'], base: [], - feature: { canvas: ['read'] }, + feature: { canvas: ['read', 'generate_report'] }, }, ], }); - await security.testUser.setRoles([ - 'test_canvas_user', - 'reporting_user', // NOTE: the built-in role granting full reporting access is deprecated. See xpack.reporting.roles.enabled - ]); + await security.testUser.setRoles(['test_canvas_user']); await kibanaServer.importExport.load(archive); await browser.setWindowSize(1600, 850); }); diff --git a/x-pack/test/functional/apps/dashboard/group3/reporting/screenshots.ts b/x-pack/test/functional/apps/dashboard/group3/reporting/screenshots.ts index 42c933f8792a8..30a715dc472a7 100644 --- a/x-pack/test/functional/apps/dashboard/group3/reporting/screenshots.ts +++ b/x-pack/test/functional/apps/dashboard/group3/reporting/screenshots.ts @@ -62,15 +62,12 @@ export default function ({ { spaces: ['*'], base: [], - feature: { dashboard: ['minimal_all'] }, + feature: { dashboard: ['minimal_all', 'generate_report'] }, }, ], }); - await security.testUser.setRoles([ - 'test_dashboard_user', - 'reporting_user', // NOTE: the built-in role granting full reporting access is deprecated. See the xpack.reporting.roles.enabled setting - ]); + await security.testUser.setRoles(['test_dashboard_user']); }); after('clean up archives', async () => { await share.closeShareModal(); diff --git a/x-pack/test/functional/apps/lens/group2/persistent_context.ts b/x-pack/test/functional/apps/lens/group2/persistent_context.ts index 6a6f56578882b..b1e78d0ccb34d 100644 --- a/x-pack/test/functional/apps/lens/group2/persistent_context.ts +++ b/x-pack/test/functional/apps/lens/group2/persistent_context.ts @@ -73,9 +73,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await visualize.gotoVisualizationLandingPage(); await listingTable.searchForItemWithName('lnsTableVis'); await lens.clickVisualizeListItemTitle('lnsTableVis'); - await navigationalSearch.focus(); - await navigationalSearch.searchFor('type:application lens'); - await navigationalSearch.clickOnOption(0); + await retry.try(async () => { + await navigationalSearch.focus(); + await navigationalSearch.searchFor('type:application lens'); + await navigationalSearch.clickOnOption(0); + }); await lens.waitForEmptyWorkspace(); await lens.switchToVisualization('lnsLegacyMetric'); await lens.dragFieldToWorkspace('@timestamp', 'legacyMtrVis'); diff --git a/x-pack/test/functional/apps/lens/group6/lens_reporting.ts b/x-pack/test/functional/apps/lens/group6/lens_reporting.ts index 26f68e73d10ef..f3bde620f21f9 100644 --- a/x-pack/test/functional/apps/lens/group6/lens_reporting.ts +++ b/x-pack/test/functional/apps/lens/group6/lens_reporting.ts @@ -30,12 +30,25 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'x-pack/test/functional/fixtures/kbn_archiver/lens/reporting' ); await timePicker.setDefaultAbsoluteRangeViaUiSettings(); + + // need reporting privileges in dashboard + await security.role.create('test_dashboard_user', { + elasticsearch: { cluster: [], indices: [], run_as: [] }, + kibana: [ + { + spaces: ['*'], + base: [], + feature: { dashboard: ['minimal_read', 'generate_report'] }, + }, + ], + }); + await security.testUser.setRoles( [ 'test_logstash_reader', 'global_dashboard_read', 'global_visualize_all', - 'reporting_user', // NOTE: the built-in role granting full reporting access is deprecated. See xpack.reporting.roles.enabled + 'test_dashboard_user', ], { skipBrowserRefresh: true } ); diff --git a/x-pack/test/functional/apps/management/feature_controls/management_security.ts b/x-pack/test/functional/apps/management/feature_controls/management_security.ts index 4e0b41270d231..286963b77d53b 100644 --- a/x-pack/test/functional/apps/management/feature_controls/management_security.ts +++ b/x-pack/test/functional/apps/management/feature_controls/management_security.ts @@ -72,6 +72,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { 'triggersActions', 'cases', 'triggersActionsConnectors', + 'reporting', 'jobsListLink', 'maintenanceWindows', ], diff --git a/x-pack/test/functional/apps/ml/short_tests/model_management/model_list.ts b/x-pack/test/functional/apps/ml/short_tests/model_management/model_list.ts index 7977f17bf5f65..c0d4af068832e 100644 --- a/x-pack/test/functional/apps/ml/short_tests/model_management/model_list.ts +++ b/x-pack/test/functional/apps/ml/short_tests/model_management/model_list.ts @@ -17,6 +17,8 @@ export default function ({ getService }: FtrProviderContext) { id: model.name, })); + const modelAllSpaces = SUPPORTED_TRAINED_MODELS.TINY_ELSER; + describe('trained models', function () { // 'Created at' will be different on each run, // so we will just assert that the value is in the expected timestamp format. @@ -91,6 +93,10 @@ export default function ({ getService }: FtrProviderContext) { await ml.api.importTrainedModel(model.id, model.name); } + // Assign model to all spaces + await ml.api.updateTrainedModelSpaces(modelAllSpaces.name, ['*'], ['default']); + await ml.api.assertTrainedModelSpaces(modelAllSpaces.name, ['*']); + await ml.api.createTestTrainedModels('classification', 15, true); await ml.api.createTestTrainedModels('regression', 15); @@ -173,9 +179,10 @@ export default function ({ getService }: FtrProviderContext) { await ml.securityUI.logout(); }); - it('should not be able to delete a model assigned to all spaces, and show a warning copy explaining the situation', async () => { - await ml.testExecution.logTestStep('should select the model named elser_model_2'); - await ml.trainedModels.selectModel('.elser_model_2'); + it.skip('should not be able to delete a model assigned to all spaces, and show a warning copy explaining the situation', async () => { + await ml.testExecution.logTestStep('should select a model'); + await ml.trainedModelsTable.filterWithSearchString(modelAllSpaces.name, 1); + await ml.trainedModels.selectModel(modelAllSpaces.name); await ml.testExecution.logTestStep('should attempt to delete the model'); await ml.trainedModels.clickBulkDelete(); @@ -493,6 +500,11 @@ export default function ({ getService }: FtrProviderContext) { await ml.trainedModelsTable.assertStatsTabContent(); await ml.trainedModelsTable.assertPipelinesTabContent(false); }); + } + + describe('supports actions for an imported model', function () { + // It's enough to test the actions for one model + const model = trainedModels[trainedModels.length - 1]; it(`starts deployment of the imported model ${model.id}`, async () => { await ml.trainedModelsTable.startDeploymentWithParams(model.id, { @@ -513,7 +525,7 @@ export default function ({ getService }: FtrProviderContext) { it(`deletes the imported model ${model.id}`, async () => { await ml.trainedModelsTable.deleteModel(model.id); }); - } + }); }); }); diff --git a/x-pack/test/functional/apps/reporting_management/report_listing.ts b/x-pack/test/functional/apps/reporting_management/report_listing.ts index cd2cdfba1ea31..7907121ae2e55 100644 --- a/x-pack/test/functional/apps/reporting_management/report_listing.ts +++ b/x-pack/test/functional/apps/reporting_management/report_listing.ts @@ -27,7 +27,6 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { before(async () => { await security.testUser.setRoles([ 'kibana_admin', // to access stack management - 'reporting_user', // NOTE: the built-in role granting full reporting access is deprecated. See xpack.reporting.roles.enabled ]); await kibanaServer.savedObjects.cleanStandardList(); await kibanaServer.importExport.load(kbnArchive); diff --git a/x-pack/test/functional/services/observability/alerts/common.ts b/x-pack/test/functional/services/observability/alerts/common.ts index 7f327664f1b71..b005add20ba55 100644 --- a/x-pack/test/functional/services/observability/alerts/common.ts +++ b/x-pack/test/functional/services/observability/alerts/common.ts @@ -155,6 +155,10 @@ export function ObservabilityAlertsCommonProvider({ return await (await getQueryBar()).type(query); }); + const clickOnQueryBar = retryOnStale.wrap(async () => { + return await (await getQueryBar()).click(); + }); + const submitQuery = async (query: string) => { await typeInQueryBar(query); await testSubjects.click('querySubmitButton'); @@ -382,6 +386,7 @@ export function ObservabilityAlertsCommonProvider({ return { getQueryBar, clearQueryBar, + clickOnQueryBar, closeAlertsFlyout, filterForValueButtonExists, getAlertsFlyout, diff --git a/x-pack/test/functional_gen_ai/inference/config.ts b/x-pack/test/functional_gen_ai/inference/config.ts new file mode 100644 index 0000000000000..b7f1429dc38a0 --- /dev/null +++ b/x-pack/test/functional_gen_ai/inference/config.ts @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { FtrConfigProviderContext } from '@kbn/test'; +import { getPreconfiguredConnectorConfig } from '@kbn/gen-ai-functional-testing'; +import { services } from './ftr_provider_context'; + +// eslint-disable-next-line import/no-default-export +export default async function ({ readConfigFile }: FtrConfigProviderContext) { + const xpackFunctionalConfig = await readConfigFile( + require.resolve('../../functional/config.base.js') + ); + + const preconfiguredConnectors = getPreconfiguredConnectorConfig(); + + return { + ...xpackFunctionalConfig.getAll(), + services, + testFiles: [require.resolve('./tests')], + kbnTestServer: { + ...xpackFunctionalConfig.get('kbnTestServer'), + serverArgs: [ + ...xpackFunctionalConfig.get('kbnTestServer.serverArgs'), + `--xpack.actions.preconfigured=${JSON.stringify(preconfiguredConnectors)}`, + ], + }, + }; +} diff --git a/x-pack/test/functional_gen_ai/inference/ftr_provider_context.ts b/x-pack/test/functional_gen_ai/inference/ftr_provider_context.ts new file mode 100644 index 0000000000000..de0b9d3f8118f --- /dev/null +++ b/x-pack/test/functional_gen_ai/inference/ftr_provider_context.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. + */ + +import type { GenericFtrProviderContext } from '@kbn/test'; +import { services } from '../../functional/services'; +import { pageObjects } from '../../functional/page_objects'; + +export type FtrProviderContext = GenericFtrProviderContext; + +export { services, pageObjects }; diff --git a/x-pack/test/functional_gen_ai/inference/tests/chat_complete.ts b/x-pack/test/functional_gen_ai/inference/tests/chat_complete.ts new file mode 100644 index 0000000000000..35bf7bf2b3e07 --- /dev/null +++ b/x-pack/test/functional_gen_ai/inference/tests/chat_complete.ts @@ -0,0 +1,263 @@ +/* + * 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 { lastValueFrom, toArray } from 'rxjs'; +import expect from '@kbn/expect'; +import { supertestToObservable } from '@kbn/sse-utils-server'; +import type { AvailableConnectorWithId } from '@kbn/gen-ai-functional-testing'; +import type { FtrProviderContext } from '../ftr_provider_context'; + +export const chatCompleteSuite = ( + { id: connectorId, actionTypeId: connectorType }: AvailableConnectorWithId, + { getService }: FtrProviderContext +) => { + const supertest = getService('supertest'); + + describe('chatComplete API', () => { + describe('streaming disabled', () => { + it('returns a chat completion message for a simple prompt', async () => { + const response = await supertest + .post(`/internal/inference/chat_complete`) + .set('kbn-xsrf', 'kibana') + .send({ + connectorId, + system: 'Please answer the user question', + messages: [{ role: 'user', content: '2+2 ?' }], + }) + .expect(200); + + const message = response.body; + + expect(message.toolCalls.length).to.eql(0); + expect(message.content).to.contain('4'); + }); + + it('executes a tool with native function calling', async () => { + const response = await supertest + .post(`/internal/inference/chat_complete`) + .set('kbn-xsrf', 'kibana') + .send({ + connectorId, + system: + 'Please answer the user question. You can use the available tools if you think it can help', + messages: [{ role: 'user', content: 'What is the result of 2*4*6*8*10*123 ?' }], + toolChoice: 'required', + tools: { + calculator: { + description: 'The calculator can be used to resolve mathematical calculations', + schema: { + type: 'object', + properties: { + formula: { + type: 'string', + description: `The input for the calculator, in plain text, e.g. "2+(4*8)"`, + }, + }, + }, + }, + }, + }) + .expect(200); + + const message = response.body; + + expect(message.toolCalls.length).to.eql(1); + expect(message.toolCalls[0].function.name).to.eql('calculator'); + expect(message.toolCalls[0].function.arguments.formula).to.contain('123'); + }); + + // simulated FC is only for openAI + if (connectorType === '.gen-ai') { + it('executes a tool with simulated function calling', async () => { + const response = await supertest + .post(`/internal/inference/chat_complete`) + .set('kbn-xsrf', 'kibana') + .send({ + connectorId, + system: + 'Please answer the user question. You can use the available tools if you think it can help', + messages: [{ role: 'user', content: 'What is the result of 2*4*6*8*10*123 ?' }], + functionCalling: 'simulated', + toolChoice: 'required', + tools: { + calculator: { + description: 'The calculator can be used to resolve mathematical calculations', + schema: { + type: 'object', + properties: { + formula: { + type: 'string', + description: `The input for the calculator, in plain text, e.g. "2+(4*8)"`, + }, + }, + }, + }, + }, + }) + .expect(200); + + const message = response.body; + + expect(message.toolCalls.length).to.eql(1); + expect(message.toolCalls[0].function.name).to.eql('calculator'); + expect(message.toolCalls[0].function.arguments.formula).to.contain('123'); + }); + } + + it('returns token counts', async () => { + const response = await supertest + .post(`/internal/inference/chat_complete`) + .set('kbn-xsrf', 'kibana') + .send({ + connectorId, + system: 'Please answer the user question', + messages: [{ role: 'user', content: '2+2 ?' }], + }) + .expect(200); + + const { tokens } = response.body; + + expect(tokens.prompt).to.be.greaterThan(0); + expect(tokens.completion).to.be.greaterThan(0); + expect(tokens.total).eql(tokens.prompt + tokens.completion); + }); + + it('returns an error with the expected shape in case of error', async () => { + const response = await supertest + .post(`/internal/inference/chat_complete`) + .set('kbn-xsrf', 'kibana') + .send({ + connectorId: 'do-not-exist', + system: 'Please answer the user question', + messages: [{ role: 'user', content: '2+2 ?' }], + }) + .expect(400); + + const message = response.body; + + expect(message).to.eql({ + type: 'error', + code: 'requestError', + message: "No connector found for id 'do-not-exist'", + }); + }); + }); + + describe('streaming enabled', () => { + it('returns a chat completion message for a simple prompt', async () => { + const response = supertest + .post(`/internal/inference/chat_complete/stream`) + .set('kbn-xsrf', 'kibana') + .send({ + connectorId, + system: 'Please answer the user question', + messages: [{ role: 'user', content: '2+2 ?' }], + }) + .expect(200); + + const observable = supertestToObservable(response); + + const message = await lastValueFrom(observable); + + expect({ + ...message, + content: '', + }).to.eql({ type: 'chatCompletionMessage', content: '', toolCalls: [] }); + expect(message.content).to.contain('4'); + }); + + it('executes a tool when explicitly requested', async () => { + const response = supertest + .post(`/internal/inference/chat_complete/stream`) + .set('kbn-xsrf', 'kibana') + .send({ + connectorId, + system: + 'Please answer the user question. You can use the available tools if you think it can help', + messages: [{ role: 'user', content: 'What is the result of 2*4*6*8*10*123 ?' }], + toolChoice: 'required', + tools: { + calculator: { + description: 'The calculator can be used to resolve mathematical calculations', + schema: { + type: 'object', + properties: { + formula: { + type: 'string', + description: `The input for the calculator, in plain text, e.g. "2+(4*8)"`, + }, + }, + }, + }, + }, + }) + .expect(200); + + const observable = supertestToObservable(response); + + const message = await lastValueFrom(observable); + + expect(message.toolCalls.length).to.eql(1); + expect(message.toolCalls[0].function.name).to.eql('calculator'); + expect(message.toolCalls[0].function.arguments.formula).to.contain('123'); + }); + + it('returns a token count event', async () => { + const response = supertest + .post(`/internal/inference/chat_complete/stream`) + .set('kbn-xsrf', 'kibana') + .send({ + connectorId, + system: 'Please answer the user question', + messages: [{ role: 'user', content: '2+2 ?' }], + }) + .expect(200); + + const observable = supertestToObservable(response); + + const events = await lastValueFrom(observable.pipe(toArray())); + const tokenEvent = events[events.length - 2]; + + expect(tokenEvent.type).to.eql('chatCompletionTokenCount'); + expect(tokenEvent.tokens.prompt).to.be.greaterThan(0); + expect(tokenEvent.tokens.completion).to.be.greaterThan(0); + expect(tokenEvent.tokens.total).to.be( + tokenEvent.tokens.prompt + tokenEvent.tokens.completion + ); + }); + + it('returns an error with the expected shape in case of error', async () => { + const response = supertest + .post(`/internal/inference/chat_complete/stream`) + .set('kbn-xsrf', 'kibana') + .send({ + connectorId: 'do-not-exist', + system: 'Please answer the user question', + messages: [{ role: 'user', content: '2+2 ?' }], + }) + .expect(200); + + const observable = supertestToObservable(response); + + const events = await lastValueFrom(observable.pipe(toArray())); + + expect(events).to.eql([ + { + type: 'error', + error: { + code: 'requestError', + message: "No connector found for id 'do-not-exist'", + meta: { + status: 400, + }, + }, + }, + ]); + }); + }); + }); +}; diff --git a/x-pack/test/functional_gen_ai/inference/tests/index.ts b/x-pack/test/functional_gen_ai/inference/tests/index.ts new file mode 100644 index 0000000000000..36cf2bbaffa14 --- /dev/null +++ b/x-pack/test/functional_gen_ai/inference/tests/index.ts @@ -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 { getAvailableConnectors } from '@kbn/gen-ai-functional-testing'; +import { FtrProviderContext } from '../ftr_provider_context'; +import { chatCompleteSuite } from './chat_complete'; + +// eslint-disable-next-line import/no-default-export +export default function (providerContext: FtrProviderContext) { + describe('Inference plugin - API integration tests', async () => { + getAvailableConnectors().forEach((connector) => { + describe(`Connector ${connector.id}`, () => { + chatCompleteSuite(connector, providerContext); + }); + }); + }); +} diff --git a/x-pack/test/functional_with_es_ssl/apps/cases/common/roles.ts b/x-pack/test/functional_with_es_ssl/apps/cases/common/roles.ts index 0e8cb455ad299..f10fc0394569f 100644 --- a/x-pack/test/functional_with_es_ssl/apps/cases/common/roles.ts +++ b/x-pack/test/functional_with_es_ssl/apps/cases/common/roles.ts @@ -59,6 +59,30 @@ export const casesNoDelete: Role = { }, }; +export const casesReadAndEditSettings: Role = { + name: 'cases_read_and_edit_settings', + privileges: { + elasticsearch: { + indices: [ + { + names: ['*'], + privileges: ['all'], + }, + ], + }, + kibana: [ + { + feature: { + generalCasesV2: ['minimal_read', 'cases_settings'], + actions: ['all'], + actionsSimulators: ['all'], + }, + spaces: ['*'], + }, + ], + }, +}; + export const casesAll: Role = { name: 'cases_all_role', privileges: { @@ -83,4 +107,4 @@ export const casesAll: Role = { }, }; -export const roles = [casesReadDelete, casesNoDelete, casesAll]; +export const roles = [casesReadDelete, casesNoDelete, casesAll, casesReadAndEditSettings]; diff --git a/x-pack/test/functional_with_es_ssl/apps/cases/common/users.ts b/x-pack/test/functional_with_es_ssl/apps/cases/common/users.ts index 8d213e5b78075..8964f414662fc 100644 --- a/x-pack/test/functional_with_es_ssl/apps/cases/common/users.ts +++ b/x-pack/test/functional_with_es_ssl/apps/cases/common/users.ts @@ -6,7 +6,7 @@ */ import { User } from '../../../../cases_api_integration/common/lib/authentication/types'; -import { casesAll, casesNoDelete, casesReadDelete } from './roles'; +import { casesAll, casesNoDelete, casesReadDelete, casesReadAndEditSettings } from './roles'; /** * Users for Cases in the Stack @@ -18,12 +18,6 @@ export const casesReadDeleteUser: User = { roles: [casesReadDelete.name], }; -export const casesNoDeleteUser: User = { - username: 'cases_no_delete_user', - password: 'password', - roles: [casesNoDelete.name], -}; - export const casesAllUser: User = { username: 'cases_all_user', password: 'password', @@ -36,4 +30,22 @@ export const casesAllUser2: User = { roles: [casesAll.name], }; -export const users = [casesReadDeleteUser, casesNoDeleteUser, casesAllUser, casesAllUser2]; +export const casesReadAndEditSettingsUser: User = { + username: 'cases_read_and_edit_settings_user', + password: 'password', + roles: [casesReadAndEditSettings.name], +}; + +export const casesNoDeleteUser: User = { + username: 'cases_no_delete_user', + password: 'password', + roles: [casesNoDelete.name], +}; + +export const users = [ + casesReadDeleteUser, + casesNoDeleteUser, + casesAllUser, + casesAllUser2, + casesReadAndEditSettingsUser, +]; diff --git a/x-pack/test/functional_with_es_ssl/apps/cases/group1/index.ts b/x-pack/test/functional_with_es_ssl/apps/cases/group1/index.ts index 330bd820aea85..c7a1405c562b4 100644 --- a/x-pack/test/functional_with_es_ssl/apps/cases/group1/index.ts +++ b/x-pack/test/functional_with_es_ssl/apps/cases/group1/index.ts @@ -11,6 +11,6 @@ export default ({ loadTestFile }: FtrProviderContext) => { describe('Cases - group 1', function () { loadTestFile(require.resolve('./create_case_form')); loadTestFile(require.resolve('./view_case')); - loadTestFile(require.resolve('./deletion')); + loadTestFile(require.resolve('./sub_privileges')); }); }; diff --git a/x-pack/test/functional_with_es_ssl/apps/cases/group1/deletion.ts b/x-pack/test/functional_with_es_ssl/apps/cases/group1/sub_privileges.ts similarity index 69% rename from x-pack/test/functional_with_es_ssl/apps/cases/group1/deletion.ts rename to x-pack/test/functional_with_es_ssl/apps/cases/group1/sub_privileges.ts index f23d0d01867cf..aecdb1623ff3d 100644 --- a/x-pack/test/functional_with_es_ssl/apps/cases/group1/deletion.ts +++ b/x-pack/test/functional_with_es_ssl/apps/cases/group1/sub_privileges.ts @@ -5,8 +5,16 @@ * 2.0. */ +import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; -import { users, roles, casesReadDeleteUser, casesAllUser, casesNoDeleteUser } from '../common'; +import { + users, + roles, + casesReadDeleteUser, + casesAllUser, + casesNoDeleteUser, + casesReadAndEditSettingsUser, +} from '../common'; import { createUsersAndRoles, deleteUsersAndRoles, @@ -16,8 +24,9 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { const PageObjects = getPageObjects(['security', 'header']); const testSubjects = getService('testSubjects'); const cases = getService('cases'); + const toasts = getService('toasts'); - describe('cases deletion sub privilege', () => { + describe('cases sub privilege', () => { before(async () => { await createUsersAndRoles(getService, users, roles); await PageObjects.security.forceLogout(); @@ -29,7 +38,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { await PageObjects.security.forceLogout(); }); - describe('create two cases', () => { + describe('cases_delete', () => { beforeEach(async () => { await cases.api.createNthRandomCases(2); }); @@ -119,6 +128,56 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { }); } }); + + describe('cases_settings', () => { + afterEach(async () => { + await cases.api.deleteAllCases(); + }); + + for (const user of [casesReadAndEditSettingsUser, casesAllUser]) { + describe(`logging in with user ${user.username}`, () => { + before(async () => { + await PageObjects.security.login(user.username, user.password); + }); + + after(async () => { + await PageObjects.security.forceLogout(); + }); + + it(`User ${user.username} can navigate to settings`, async () => { + await cases.navigation.navigateToConfigurationPage(); + }); + + it(`User ${user.username} can update settings`, async () => { + await cases.common.selectRadioGroupValue( + 'closure-options-radio-group', + 'close-by-pushing' + ); + const toast = await toasts.getElementByIndex(1); + expect(await toast.getVisibleText()).to.be('Settings successfully updated'); + await toasts.dismissAll(); + }); + }); + } + + // below users do not have access to settings + for (const user of [casesNoDeleteUser, casesReadDeleteUser]) { + describe(`cannot access settings page with user ${user.username}`, () => { + before(async () => { + await PageObjects.security.login(user.username, user.password); + }); + + after(async () => { + await PageObjects.security.forceLogout(); + }); + + it(`User ${user.username} cannot navigate to settings`, async () => { + await cases.navigation.navigateToApp(); + await testSubjects.missingOrFail('configure-case-button'); + }); + }); + } + }); }); }; diff --git a/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/alert_create_flyout.ts b/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/alert_create_flyout.ts index 8be74bd57db66..1c563ed9382f6 100644 --- a/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/alert_create_flyout.ts +++ b/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/alert_create_flyout.ts @@ -121,6 +121,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { // Failing: See https://github.com/elastic/kibana/issues/196153 // Failing: See https://github.com/elastic/kibana/issues/196153 + // Failing: See https://github.com/elastic/kibana/issues/202328 describe.skip('create alert', function () { let apmSynthtraceEsClient: ApmSynthtraceEsClient; const webhookConnectorName = 'webhook-test'; diff --git a/x-pack/test/observability_ai_assistant_api_integration/common/config.ts b/x-pack/test/observability_ai_assistant_api_integration/common/config.ts index 427258a6e2910..6505ad3e94d64 100644 --- a/x-pack/test/observability_ai_assistant_api_integration/common/config.ts +++ b/x-pack/test/observability_ai_assistant_api_integration/common/config.ts @@ -11,7 +11,7 @@ import { ObservabilityAIAssistantFtrConfigName } from '../configs'; import { getApmSynthtraceEsClient } from './create_synthtrace_client'; import { InheritedFtrProviderContext, InheritedServices } from './ftr_provider_context'; import { getScopedApiClient } from './observability_ai_assistant_api_client'; -import { editor, secondaryEditor, viewer } from './users/users'; +import { editor, secondaryEditor, unauthorizedUser, viewer } from './users/users'; export interface ObservabilityAIAssistantFtrConfig { name: ObservabilityAIAssistantFtrConfigName; @@ -33,6 +33,16 @@ export type ObservabilityAIAssistantAPIClient = Awaited< export type ObservabilityAIAssistantServices = Awaited>['services']; +export class ForbiddenApiError extends Error { + status: number; + + constructor(message: string = 'Forbidden') { + super(message); + this.name = 'ForbiddenApiError'; + this.status = 403; + } +} + export function createObservabilityAIAssistantAPIConfig({ config, license, @@ -67,6 +77,7 @@ export function createObservabilityAIAssistantAPIConfig({ viewer: getScopedApiClientForUsername(viewer.username), editor: getScopedApiClientForUsername(editor.username), secondaryEditor: getScopedApiClientForUsername(secondaryEditor.username), + unauthorizedUser: getScopedApiClientForUsername(unauthorizedUser.username), }; }, }, diff --git a/x-pack/test/observability_ai_assistant_api_integration/common/users/users.ts b/x-pack/test/observability_ai_assistant_api_integration/common/users/users.ts index 898954a9bfb97..2dc5a433517f3 100644 --- a/x-pack/test/observability_ai_assistant_api_integration/common/users/users.ts +++ b/x-pack/test/observability_ai_assistant_api_integration/common/users/users.ts @@ -6,10 +6,14 @@ */ import { kbnTestConfig } from '@kbn/test'; + const password = kbnTestConfig.getUrlParts().password!; +export const UNAUTHORIZED_USERNAME = 'unauthorized_user'; +export const UNAUTHORIZED_USER_PASSWORD = 'unauthorized_password'; + export interface User { - username: 'elastic' | 'editor' | 'viewer' | 'secondary_editor'; + username: 'elastic' | 'editor' | 'viewer' | 'secondary_editor' | 'unauthorized_user'; password: string; roles: string[]; } @@ -32,4 +36,10 @@ export const viewer: User = { roles: ['viewer'], }; -export const allUsers = [editor, secondaryEditor, viewer]; +export const unauthorizedUser: User = { + username: UNAUTHORIZED_USERNAME, + password: UNAUTHORIZED_USER_PASSWORD, + roles: [], +}; + +export const allUsers = [editor, secondaryEditor, viewer, unauthorizedUser]; diff --git a/x-pack/test/observability_ai_assistant_api_integration/tests/chat/chat.spec.ts b/x-pack/test/observability_ai_assistant_api_integration/tests/chat/chat.spec.ts index d514d6ddb7025..cedd4c286dc1a 100644 --- a/x-pack/test/observability_ai_assistant_api_integration/tests/chat/chat.spec.ts +++ b/x-pack/test/observability_ai_assistant_api_integration/tests/chat/chat.spec.ts @@ -11,10 +11,12 @@ import { PassThrough } from 'stream'; import { createLlmProxy, LlmProxy } from '../../common/create_llm_proxy'; import { FtrProviderContext } from '../../common/ftr_provider_context'; import { createProxyActionConnector, deleteActionConnector } from '../../common/action_connectors'; +import { ForbiddenApiError } from '../../common/config'; export default function ApiTest({ getService }: FtrProviderContext) { const supertest = getService('supertest'); const log = getService('log'); + const observabilityAIAssistantAPIClient = getService('observabilityAIAssistantAPIClient'); const CHAT_API_URL = `/internal/observability_ai_assistant/chat`; @@ -183,5 +185,27 @@ export default function ApiTest({ getService }: FtrProviderContext) { `Token limit reached. Token limit is 8192, but the current conversation has 11036 tokens.` ); }); + + describe('security roles and access privileges', () => { + it('should deny access for users without the ai_assistant privilege', async () => { + try { + await observabilityAIAssistantAPIClient.unauthorizedUser({ + endpoint: `POST ${CHAT_API_URL}`, + params: { + body: { + name: 'my_api_call', + messages, + connectorId, + functions: [], + scopes: ['all'], + }, + }, + }); + throw new ForbiddenApiError('Expected unauthorizedUser() to throw a 403 Forbidden error'); + } catch (e) { + expect(e.status).to.be(403); + } + }); + }); }); } diff --git a/x-pack/test/observability_ai_assistant_api_integration/tests/complete/complete.spec.ts b/x-pack/test/observability_ai_assistant_api_integration/tests/complete/complete.spec.ts index 2eb7c6f986cfd..86e357e2e7760 100644 --- a/x-pack/test/observability_ai_assistant_api_integration/tests/complete/complete.spec.ts +++ b/x-pack/test/observability_ai_assistant_api_integration/tests/complete/complete.spec.ts @@ -32,6 +32,7 @@ import { getConversationUpdatedEvent, } from '../conversations/helpers'; import { createProxyActionConnector, deleteActionConnector } from '../../common/action_connectors'; +import { ForbiddenApiError } from '../../common/config'; export default function ApiTest({ getService }: FtrProviderContext) { const supertest = getService('supertest'); @@ -39,7 +40,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { const observabilityAIAssistantAPIClient = getService('observabilityAIAssistantAPIClient'); - const COMPLETE_API_URL = `/internal/observability_ai_assistant/chat/complete`; + const COMPLETE_API_URL = '/internal/observability_ai_assistant/chat/complete'; const messages: Message[] = [ { @@ -486,5 +487,27 @@ export default function ApiTest({ getService }: FtrProviderContext) { // todo it.skip('executes a function', async () => {}); + + describe('security roles and access privileges', () => { + it('should deny access for users without the ai_assistant privilege', async () => { + try { + await observabilityAIAssistantAPIClient.unauthorizedUser({ + endpoint: 'POST /internal/observability_ai_assistant/chat/complete', + params: { + body: { + messages, + connectorId, + persist: false, + screenContexts: [], + scopes: ['all'], + }, + }, + }); + throw new ForbiddenApiError('Expected unauthorizedUser() to throw a 403 Forbidden error'); + } catch (e) { + expect(e.status).to.be(403); + } + }); + }); }); } diff --git a/x-pack/test/observability_ai_assistant_api_integration/tests/connectors/connectors.spec.ts b/x-pack/test/observability_ai_assistant_api_integration/tests/connectors/connectors.spec.ts index 41700b21555fa..42e1f8751719e 100644 --- a/x-pack/test/observability_ai_assistant_api_integration/tests/connectors/connectors.spec.ts +++ b/x-pack/test/observability_ai_assistant_api_integration/tests/connectors/connectors.spec.ts @@ -9,12 +9,15 @@ import expect from '@kbn/expect'; import type { Agent as SuperTestAgent } from 'supertest'; import { FtrProviderContext } from '../../common/ftr_provider_context'; import { createProxyActionConnector, deleteActionConnector } from '../../common/action_connectors'; +import { ForbiddenApiError } from '../../common/config'; export default function ApiTest({ getService }: FtrProviderContext) { const observabilityAIAssistantAPIClient = getService('observabilityAIAssistantAPIClient'); const supertest = getService('supertest'); const log = getService('log'); + const CONNECTOR_API_URL = '/internal/observability_ai_assistant/connectors'; + describe('List connectors', () => { before(async () => { await deleteAllActionConnectors(supertest); @@ -27,14 +30,14 @@ export default function ApiTest({ getService }: FtrProviderContext) { it('Returns a 2xx for enterprise license', async () => { await observabilityAIAssistantAPIClient .editor({ - endpoint: 'GET /internal/observability_ai_assistant/connectors', + endpoint: `GET ${CONNECTOR_API_URL}`, }) .expect(200); }); it('returns an empty list of connectors', async () => { const res = await observabilityAIAssistantAPIClient.editor({ - endpoint: 'GET /internal/observability_ai_assistant/connectors', + endpoint: `GET ${CONNECTOR_API_URL}`, }); expect(res.body.length).to.be(0); @@ -44,13 +47,26 @@ export default function ApiTest({ getService }: FtrProviderContext) { const connectorId = await createProxyActionConnector({ supertest, log, port: 1234 }); const res = await observabilityAIAssistantAPIClient.editor({ - endpoint: 'GET /internal/observability_ai_assistant/connectors', + endpoint: `GET ${CONNECTOR_API_URL}`, }); expect(res.body.length).to.be(1); await deleteActionConnector({ supertest, connectorId, log }); }); + + describe('security roles and access privileges', () => { + it('should deny access for users without the ai_assistant privilege', async () => { + try { + await observabilityAIAssistantAPIClient.unauthorizedUser({ + endpoint: `GET ${CONNECTOR_API_URL}`, + }); + throw new ForbiddenApiError('Expected unauthorizedUser() to throw a 403 Forbidden error'); + } catch (e) { + expect(e.status).to.be(403); + } + }); + }); }); } diff --git a/x-pack/test/observability_ai_assistant_api_integration/tests/conversations/conversations.spec.ts b/x-pack/test/observability_ai_assistant_api_integration/tests/conversations/conversations.spec.ts index 71eb37d357696..bb85e99b99500 100644 --- a/x-pack/test/observability_ai_assistant_api_integration/tests/conversations/conversations.spec.ts +++ b/x-pack/test/observability_ai_assistant_api_integration/tests/conversations/conversations.spec.ts @@ -14,6 +14,7 @@ import { } from '@kbn/observability-ai-assistant-plugin/common/types'; import type { FtrProviderContext } from '../../common/ftr_provider_context'; import type { SupertestReturnType } from '../../common/observability_ai_assistant_api_client'; +import { ForbiddenApiError } from '../../common/config'; export default function ApiTest({ getService }: FtrProviderContext) { const observabilityAIAssistantAPIClient = getService('observabilityAIAssistantAPIClient'); @@ -250,5 +251,128 @@ export default function ApiTest({ getService }: FtrProviderContext) { }); }); }); + + describe('security roles and access privileges', () => { + describe('should deny access for users without the ai_assistant privilege', () => { + let createResponse: Awaited< + SupertestReturnType<'POST /internal/observability_ai_assistant/conversation'> + >; + before(async () => { + createResponse = await observabilityAIAssistantAPIClient + .editor({ + endpoint: 'POST /internal/observability_ai_assistant/conversation', + params: { + body: { + conversation: conversationCreate, + }, + }, + }) + .expect(200); + }); + + after(async () => { + await observabilityAIAssistantAPIClient + .editor({ + endpoint: 'DELETE /internal/observability_ai_assistant/conversation/{conversationId}', + params: { + path: { + conversationId: createResponse.body.conversation.id, + }, + }, + }) + .expect(200); + }); + + it('POST /internal/observability_ai_assistant/conversation', async () => { + try { + await observabilityAIAssistantAPIClient.unauthorizedUser({ + endpoint: 'POST /internal/observability_ai_assistant/conversation', + params: { + body: { + conversation: conversationCreate, + }, + }, + }); + throw new ForbiddenApiError( + 'Expected unauthorizedUser() to throw a 403 Forbidden error' + ); + } catch (e) { + expect(e.status).to.be(403); + } + }); + + it('POST /internal/observability_ai_assistant/conversations', async () => { + try { + await observabilityAIAssistantAPIClient.unauthorizedUser({ + endpoint: 'POST /internal/observability_ai_assistant/conversations', + }); + throw new ForbiddenApiError( + 'Expected unauthorizedUser() to throw a 403 Forbidden error' + ); + } catch (e) { + expect(e.status).to.be(403); + } + }); + + it('PUT /internal/observability_ai_assistant/conversation/{conversationId}', async () => { + try { + await observabilityAIAssistantAPIClient.unauthorizedUser({ + endpoint: 'PUT /internal/observability_ai_assistant/conversation/{conversationId}', + params: { + path: { + conversationId: createResponse.body.conversation.id, + }, + body: { + conversation: merge(omit(conversationUpdate, 'conversation.id'), { + conversation: { id: createResponse.body.conversation.id }, + }), + }, + }, + }); + throw new ForbiddenApiError( + 'Expected unauthorizedUser() to throw a 403 Forbidden error' + ); + } catch (e) { + expect(e.status).to.be(403); + } + }); + + it('GET /internal/observability_ai_assistant/conversation/{conversationId}', async () => { + try { + await observabilityAIAssistantAPIClient.unauthorizedUser({ + endpoint: 'GET /internal/observability_ai_assistant/conversation/{conversationId}', + params: { + path: { + conversationId: createResponse.body.conversation.id, + }, + }, + }); + throw new ForbiddenApiError( + 'Expected unauthorizedUser() to throw a 403 Forbidden error' + ); + } catch (e) { + expect(e.status).to.be(403); + } + }); + + it('DELETE /internal/observability_ai_assistant/conversation/{conversationId}', async () => { + try { + await observabilityAIAssistantAPIClient.unauthorizedUser({ + endpoint: 'DELETE /internal/observability_ai_assistant/conversation/{conversationId}', + params: { + path: { + conversationId: createResponse.body.conversation.id, + }, + }, + }); + throw new ForbiddenApiError( + 'Expected unauthorizedUser() to throw a 403 Forbidden error' + ); + } catch (e) { + expect(e.status).to.be(403); + } + }); + }); + }); }); } diff --git a/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base.spec.ts b/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base.spec.ts index 8d8c2e2417686..9d80db3baeae6 100644 --- a/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base.spec.ts +++ b/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base.spec.ts @@ -15,6 +15,7 @@ import { deleteInferenceEndpoint, deleteKnowledgeBaseModel, } from './helpers'; +import { ForbiddenApiError } from '../../common/config'; export default function ApiTest({ getService }: FtrProviderContext) { const ml = getService('ml'); @@ -210,6 +211,62 @@ export default function ApiTest({ getService }: FtrProviderContext) { expect(entries[0].title).to.eql('My title b'); }); }); + + describe('security roles and access privileges', () => { + describe('should deny access for users without the ai_assistant privilege', () => { + it('POST /internal/observability_ai_assistant/kb/entries/save', async () => { + try { + await observabilityAIAssistantAPIClient.unauthorizedUser({ + endpoint: 'POST /internal/observability_ai_assistant/kb/entries/save', + params: { + body: { + id: 'my-doc-id-1', + title: 'My title', + text: 'My content', + }, + }, + }); + throw new ForbiddenApiError( + 'Expected unauthorizedUser() to throw a 403 Forbidden error' + ); + } catch (e) { + expect(e.status).to.be(403); + } + }); + + it('GET /internal/observability_ai_assistant/kb/entries', async () => { + try { + await observabilityAIAssistantAPIClient.unauthorizedUser({ + endpoint: 'GET /internal/observability_ai_assistant/kb/entries', + params: { + query: { query: '', sortBy: 'title', sortDirection: 'asc' }, + }, + }); + throw new ForbiddenApiError( + 'Expected unauthorizedUser() to throw a 403 Forbidden error' + ); + } catch (e) { + expect(e.status).to.be(403); + } + }); + + it('DELETE /internal/observability_ai_assistant/kb/entries/{entryId}', async () => { + try { + await observabilityAIAssistantAPIClient.unauthorizedUser({ + endpoint: 'DELETE /internal/observability_ai_assistant/kb/entries/{entryId}', + params: { + path: { entryId: 'my-doc-id-1' }, + }, + }); + throw new ForbiddenApiError( + 'Expected unauthorizedUser() to throw a 403 Forbidden error' + ); + } catch (e) { + expect(e.status).to.be(403); + } + }); + }); + }); }); } diff --git a/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base_setup.spec.ts b/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base_setup.spec.ts index 7903f4b53966a..0d7625bb63ed3 100644 --- a/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base_setup.spec.ts +++ b/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base_setup.spec.ts @@ -13,18 +13,21 @@ import { TINY_ELSER, deleteInferenceEndpoint, } from './helpers'; +import { ForbiddenApiError } from '../../common/config'; export default function ApiTest({ getService }: FtrProviderContext) { const ml = getService('ml'); const es = getService('es'); const observabilityAIAssistantAPIClient = getService('observabilityAIAssistantAPIClient'); + const KNOWLEDGE_BASE_SETUP_API_URL = '/internal/observability_ai_assistant/kb/setup'; + describe('/internal/observability_ai_assistant/kb/setup', () => { it('returns model info when successful', async () => { await createKnowledgeBaseModel(ml); const res = await observabilityAIAssistantAPIClient .admin({ - endpoint: 'POST /internal/observability_ai_assistant/kb/setup', + endpoint: `POST ${KNOWLEDGE_BASE_SETUP_API_URL}`, params: { query: { model_id: TINY_ELSER.id, @@ -43,7 +46,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { it('returns error message if model is not deployed', async () => { const res = await observabilityAIAssistantAPIClient .admin({ - endpoint: 'POST /internal/observability_ai_assistant/kb/setup', + endpoint: `POST ${KNOWLEDGE_BASE_SETUP_API_URL}`, params: { query: { model_id: TINY_ELSER.id, @@ -60,5 +63,23 @@ export default function ApiTest({ getService }: FtrProviderContext) { // @ts-expect-error expect(res.body.statusCode).to.be(500); }); + + describe('security roles and access privileges', () => { + it('should deny access for users without the ai_assistant privilege', async () => { + try { + await observabilityAIAssistantAPIClient.unauthorizedUser({ + endpoint: `POST ${KNOWLEDGE_BASE_SETUP_API_URL}`, + params: { + query: { + model_id: TINY_ELSER.id, + }, + }, + }); + throw new ForbiddenApiError('Expected unauthorizedUser() to throw a 403 Forbidden error'); + } catch (e) { + expect(e.status).to.be(403); + } + }); + }); }); } diff --git a/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base_status.spec.ts b/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base_status.spec.ts index 8c10a6128d302..3f66931ca0719 100644 --- a/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base_status.spec.ts +++ b/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base_status.spec.ts @@ -13,12 +13,15 @@ import { TINY_ELSER, deleteInferenceEndpoint, } from './helpers'; +import { ForbiddenApiError } from '../../common/config'; export default function ApiTest({ getService }: FtrProviderContext) { const ml = getService('ml'); const es = getService('es'); const observabilityAIAssistantAPIClient = getService('observabilityAIAssistantAPIClient'); + const KNOWLEDGE_BASE_STATUS_API_URL = '/internal/observability_ai_assistant/kb/status'; + describe('/internal/observability_ai_assistant/kb/status', () => { beforeEach(async () => { await createKnowledgeBaseModel(ml); @@ -41,7 +44,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { it('returns correct status after knowledge base is setup', async () => { const res = await observabilityAIAssistantAPIClient - .editor({ endpoint: 'GET /internal/observability_ai_assistant/kb/status' }) + .editor({ endpoint: `GET ${KNOWLEDGE_BASE_STATUS_API_URL}` }) .expect(200); expect(res.body.ready).to.be(true); @@ -54,7 +57,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { const res = await observabilityAIAssistantAPIClient .editor({ - endpoint: 'GET /internal/observability_ai_assistant/kb/status', + endpoint: `GET ${KNOWLEDGE_BASE_STATUS_API_URL}`, }) .expect(200); @@ -70,7 +73,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { const res = await observabilityAIAssistantAPIClient .editor({ - endpoint: 'GET /internal/observability_ai_assistant/kb/status', + endpoint: `GET ${KNOWLEDGE_BASE_STATUS_API_URL}`, }) .expect(200); @@ -80,5 +83,18 @@ export default function ApiTest({ getService }: FtrProviderContext) { 'Inference endpoint not found [obs_ai_assistant_kb_inference]' ); }); + + describe('security roles and access privileges', () => { + it('should deny access for users without the ai_assistant privilege', async () => { + try { + await observabilityAIAssistantAPIClient.unauthorizedUser({ + endpoint: `GET ${KNOWLEDGE_BASE_STATUS_API_URL}`, + }); + throw new ForbiddenApiError('Expected unauthorizedUser() to throw a 403 Forbidden error'); + } catch (e) { + expect(e.status).to.be(403); + } + }); + }); }); } diff --git a/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base_user_instructions.spec.ts b/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base_user_instructions.spec.ts index cde2c9e4b4a83..d5022a052d781 100644 --- a/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base_user_instructions.spec.ts +++ b/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base_user_instructions.spec.ts @@ -23,6 +23,7 @@ import { getConversationCreatedEvent } from '../conversations/helpers'; import { LlmProxy, createLlmProxy } from '../../common/create_llm_proxy'; import { createProxyActionConnector, deleteActionConnector } from '../../common/action_connectors'; import { User } from '../../common/users/users'; +import { ForbiddenApiError } from '../../common/config'; export default function ApiTest({ getService }: FtrProviderContext) { const observabilityAIAssistantAPIClient = getService('observabilityAIAssistantAPIClient'); @@ -362,5 +363,42 @@ export default function ApiTest({ getService }: FtrProviderContext) { expect(res2).to.be(''); }); }); + + describe('security roles and access privileges', () => { + describe('should deny access for users without the ai_assistant privilege', () => { + it('PUT /internal/observability_ai_assistant/kb/user_instructions', async () => { + try { + await observabilityAIAssistantAPIClient.unauthorizedUser({ + endpoint: 'PUT /internal/observability_ai_assistant/kb/user_instructions', + params: { + body: { + id: 'test-instruction', + text: 'Test user instruction', + public: true, + }, + }, + }); + throw new ForbiddenApiError( + 'Expected unauthorizedUser() to throw a 403 Forbidden error' + ); + } catch (e) { + expect(e.status).to.be(403); + } + }); + + it('GET /internal/observability_ai_assistant/kb/user_instructions', async () => { + try { + await observabilityAIAssistantAPIClient.unauthorizedUser({ + endpoint: 'GET /internal/observability_ai_assistant/kb/user_instructions', + }); + throw new ForbiddenApiError( + 'Expected unauthorizedUser() to throw a 403 Forbidden error' + ); + } catch (e) { + expect(e.status).to.be(403); + } + }); + }); + }); }); } diff --git a/x-pack/test/observability_functional/apps/observability/pages/alerts/index.ts b/x-pack/test/observability_functional/apps/observability/pages/alerts/index.ts index afee499a5b484..c76a84f2dced5 100644 --- a/x-pack/test/observability_functional/apps/observability/pages/alerts/index.ts +++ b/x-pack/test/observability_functional/apps/observability/pages/alerts/index.ts @@ -75,6 +75,7 @@ export default ({ getService }: FtrProviderContext) => { it('Autocompletion works', async () => { await observability.alerts.common.typeInQueryBar('kibana.alert.s'); + await observability.alerts.common.clickOnQueryBar(); await testSubjects.existOrFail('autocompleteSuggestion-field-kibana.alert.start-'); await testSubjects.existOrFail('autocompleteSuggestion-field-kibana.alert.status-'); }); diff --git a/x-pack/test/reporting_api_integration/reporting_and_security.config.ts b/x-pack/test/reporting_api_integration/reporting_and_security.config.ts index 237bb94ed1dc6..3a7f31ae91033 100644 --- a/x-pack/test/reporting_api_integration/reporting_and_security.config.ts +++ b/x-pack/test/reporting_api_integration/reporting_and_security.config.ts @@ -36,7 +36,6 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { `--xpack.screenshotting.networkPolicy.rules=${JSON.stringify(testPolicyRules)}`, `--xpack.reporting.capture.maxAttempts=1`, `--xpack.reporting.csv.maxSizeBytes=6000`, - '--xpack.reporting.roles.enabled=false', // Reporting access control is implemented by sub-feature application privileges // for testing set buffer duration to 0 to immediately flush counters into saved objects. '--usageCollection.usageCounters.bufferDuration=0', ], diff --git a/x-pack/test/reporting_functional/reporting_and_deprecated_security.config.ts b/x-pack/test/reporting_functional/reporting_and_deprecated_security.config.ts deleted file mode 100644 index a65755e97b0c9..0000000000000 --- a/x-pack/test/reporting_functional/reporting_and_deprecated_security.config.ts +++ /dev/null @@ -1,26 +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 { FtrConfigProviderContext } from '@kbn/test'; -import { resolve } from 'path'; - -export default async function ({ readConfigFile }: FtrConfigProviderContext) { - const reportingConfig = await readConfigFile(require.resolve('./reporting_and_security.config')); - - return { - ...reportingConfig.getAll(), - junit: { reportName: 'X-Pack Reporting Functional Tests With Deprecated Roles config' }, - testFiles: [resolve(__dirname, './reporting_and_deprecated_security')], - kbnTestServer: { - ...reportingConfig.get('kbnTestServer'), - serverArgs: [ - ...reportingConfig.get('kbnTestServer.serverArgs'), - `--xpack.reporting.roles.enabled=true`, // DEPRECATED: support for `true` will be removed in 8.0 - ], - }, - }; -} diff --git a/x-pack/test/reporting_functional/reporting_and_deprecated_security/index.ts b/x-pack/test/reporting_functional/reporting_and_deprecated_security/index.ts deleted file mode 100644 index 722b6545115cd..0000000000000 --- a/x-pack/test/reporting_functional/reporting_and_deprecated_security/index.ts +++ /dev/null @@ -1,58 +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 { FtrProviderContext } from '../ftr_provider_context'; - -// eslint-disable-next-line import/no-default-export -export default function (context: FtrProviderContext) { - const security = context.getService('security'); - const createDataAnalystRole = async () => { - await security.role.create('data_analyst', { - metadata: {}, - elasticsearch: { - cluster: [], - indices: [ - { - names: ['ecommerce'], - privileges: ['read', 'view_index_metadata'], - allow_restricted_indices: false, - }, - ], - run_as: [], - }, - kibana: [{ base: ['all'], feature: {}, spaces: ['*'] }], - }); - }; - const createDataAnalyst = async () => { - await security.user.create('data_analyst', { - password: 'data_analyst-password', - roles: ['data_analyst', 'kibana_user'], - full_name: 'a kibana user called data_a', - }); - }; - const createReportingUser = async () => { - await security.user.create('reporting_user', { - password: 'reporting_user-password', - roles: ['reporting_user', 'data_analyst', 'kibana_user'], // Deprecated: using built-in `reporting_user` role grants all Reporting privileges - full_name: 'a reporting user', - }); - }; - - describe('Reporting Functional Tests with Deprecated Security configuration enabled', function () { - before(async () => { - const reportingAPI = context.getService('reportingAPI'); - await reportingAPI.logTaskManagerHealth(); - await createDataAnalystRole(); - await createDataAnalyst(); - await createReportingUser(); - }); - - const { loadTestFile } = context; - loadTestFile(require.resolve('./security_roles_privileges')); - loadTestFile(require.resolve('./management')); - }); -} diff --git a/x-pack/test/reporting_functional/reporting_and_deprecated_security/management.ts b/x-pack/test/reporting_functional/reporting_and_deprecated_security/management.ts deleted file mode 100644 index dba16c798d4ff..0000000000000 --- a/x-pack/test/reporting_functional/reporting_and_deprecated_security/management.ts +++ /dev/null @@ -1,37 +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 { FtrProviderContext } from '../ftr_provider_context'; - -// eslint-disable-next-line import/no-default-export -export default ({ getService, getPageObjects }: FtrProviderContext) => { - const PageObjects = getPageObjects(['common', 'reporting', 'discover']); - - const testSubjects = getService('testSubjects'); - const reportingFunctional = getService('reportingFunctional'); - - describe('Access to Management > Reporting', () => { - before(async () => { - await reportingFunctional.initEcommerce(); - }); - after(async () => { - await reportingFunctional.teardownEcommerce(); - }); - - it('does not allow user that does not have reporting_user role', async () => { - await reportingFunctional.loginDataAnalyst(); - await PageObjects.common.navigateToApp('reporting'); - await testSubjects.missingOrFail('reportJobListing'); - }); - - it('does allow user with reporting_user role', async () => { - await reportingFunctional.loginReportingUser(); - await PageObjects.common.navigateToApp('reporting'); - await testSubjects.existOrFail('reportJobListing'); - }); - }); -}; diff --git a/x-pack/test/reporting_functional/reporting_and_deprecated_security/security_roles_privileges.ts b/x-pack/test/reporting_functional/reporting_and_deprecated_security/security_roles_privileges.ts deleted file mode 100644 index f73ec8e39fb48..0000000000000 --- a/x-pack/test/reporting_functional/reporting_and_deprecated_security/security_roles_privileges.ts +++ /dev/null @@ -1,82 +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 { FtrProviderContext } from '../ftr_provider_context'; - -const DASHBOARD_TITLE = 'Ecom Dashboard'; -const SAVEDSEARCH_TITLE = 'Ecommerce Data'; -const VIS_TITLE = 'e-commerce pie chart'; - -// eslint-disable-next-line import/no-default-export -export default function ({ getService }: FtrProviderContext) { - const reportingFunctional = getService('reportingFunctional'); - - describe('Security with `reporting_user` built-in role', () => { - before(async () => { - await reportingFunctional.initEcommerce(); - }); - after(async () => { - await reportingFunctional.teardownEcommerce(); - }); - - describe('Dashboard: Download CSV file', () => { - it('does not allow user that does not have reporting_user role', async () => { - await reportingFunctional.loginDataAnalyst(); - await reportingFunctional.openSavedDashboard(DASHBOARD_TITLE); - await reportingFunctional.tryDashboardGenerateCsvFail('Ecommerce Data'); - }); - - it('does allow user with reporting_user role', async () => { - await reportingFunctional.loginReportingUser(); - await reportingFunctional.openSavedDashboard(DASHBOARD_TITLE); - await reportingFunctional.tryDashboardGenerateCsvSuccess('Ecommerce Data'); - }); - }); - - describe('Dashboard: Generate Screenshot', () => { - it('does not allow user that does not have reporting_user role', async () => { - await reportingFunctional.loginDataAnalyst(); - await reportingFunctional.openSavedDashboard(DASHBOARD_TITLE); - await reportingFunctional.tryGeneratePdfFail(); - }); - - it('does allow user with reporting_user role', async () => { - await reportingFunctional.loginReportingUser(); - await reportingFunctional.openSavedDashboard(DASHBOARD_TITLE); - await reportingFunctional.tryGeneratePdfSuccess(); - }); - }); - - describe('Discover: Generate CSV', () => { - it('does not allow user that does not have reporting_user role', async () => { - await reportingFunctional.loginDataAnalyst(); - await reportingFunctional.openSavedSearch(SAVEDSEARCH_TITLE); - await reportingFunctional.tryDiscoverCsvFail(); - }); - - it('does allow user with reporting_user role', async () => { - await reportingFunctional.loginReportingUser(); - await reportingFunctional.openSavedSearch(SAVEDSEARCH_TITLE); - await reportingFunctional.tryDiscoverCsvSuccess(); - }); - }); - - describe('Visualize Editor: Generate Screenshot', () => { - it('does not allow user that does not have reporting_user role', async () => { - await reportingFunctional.loginDataAnalyst(); - await reportingFunctional.openSavedVisualization(VIS_TITLE); - await reportingFunctional.tryGeneratePdfFail(); - }); - - it('does allow user with reporting_user role', async () => { - await reportingFunctional.loginReportingUser(); - await reportingFunctional.openSavedVisualization(VIS_TITLE); - await reportingFunctional.tryGeneratePdfSuccess(); - }); - }); - }); -} diff --git a/x-pack/test/reporting_functional/reporting_and_security.config.ts b/x-pack/test/reporting_functional/reporting_and_security.config.ts index 7d8c3ed696696..48096dbeb3226 100644 --- a/x-pack/test/reporting_functional/reporting_and_security.config.ts +++ b/x-pack/test/reporting_functional/reporting_and_security.config.ts @@ -25,7 +25,6 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { ...functionalConfig.get('kbnTestServer.serverArgs'), `--xpack.reporting.capture.maxAttempts=1`, `--xpack.reporting.csv.maxSizeBytes=6000`, - '--xpack.reporting.roles.enabled=false', // Reporting access control is implemented by sub-feature application privileges ], }, services: { diff --git a/x-pack/test/security_api_integration/tests/anonymous/capabilities.ts b/x-pack/test/security_api_integration/tests/anonymous/capabilities.ts index f4f43b070f0d5..2327292f3ea44 100644 --- a/x-pack/test/security_api_integration/tests/anonymous/capabilities.ts +++ b/x-pack/test/security_api_integration/tests/anonymous/capabilities.ts @@ -56,6 +56,8 @@ export default function ({ getService }: FtrProviderContext) { "dashboard": Object { "createNew": false, "createShortUrl": false, + "downloadCsv": false, + "generateScreenshot": false, "saveQuery": false, "show": false, "showWriteControls": false, @@ -63,6 +65,7 @@ export default function ({ getService }: FtrProviderContext) { }, "discover": Object { "createShortUrl": false, + "generateCsv": false, "save": false, "saveQuery": false, "show": false, @@ -76,6 +79,7 @@ export default function ({ getService }: FtrProviderContext) { "visualize": Object { "createShortUrl": false, "delete": false, + "generateScreenshot": false, "save": false, "saveQuery": false, "show": false, @@ -87,6 +91,8 @@ export default function ({ getService }: FtrProviderContext) { "dashboard": Object { "createNew": false, "createShortUrl": false, + "downloadCsv": false, + "generateScreenshot": false, "saveQuery": false, "show": false, "showWriteControls": false, @@ -94,6 +100,7 @@ export default function ({ getService }: FtrProviderContext) { }, "discover": Object { "createShortUrl": false, + "generateCsv": false, "save": false, "saveQuery": false, "show": false, @@ -107,6 +114,7 @@ export default function ({ getService }: FtrProviderContext) { "visualize": Object { "createShortUrl": false, "delete": false, + "generateScreenshot": false, "save": false, "saveQuery": false, "show": false, @@ -118,6 +126,8 @@ export default function ({ getService }: FtrProviderContext) { "dashboard": Object { "createNew": false, "createShortUrl": false, + "downloadCsv": false, + "generateScreenshot": false, "saveQuery": false, "show": false, "showWriteControls": false, @@ -125,6 +135,7 @@ export default function ({ getService }: FtrProviderContext) { }, "discover": Object { "createShortUrl": false, + "generateCsv": false, "save": false, "saveQuery": false, "show": false, @@ -138,6 +149,7 @@ export default function ({ getService }: FtrProviderContext) { "visualize": Object { "createShortUrl": false, "delete": false, + "generateScreenshot": false, "save": false, "saveQuery": false, "show": false, @@ -168,6 +180,8 @@ export default function ({ getService }: FtrProviderContext) { "dashboard": Object { "createNew": false, "createShortUrl": false, + "downloadCsv": false, + "generateScreenshot": false, "saveQuery": false, "show": false, "showWriteControls": false, @@ -175,6 +189,7 @@ export default function ({ getService }: FtrProviderContext) { }, "discover": Object { "createShortUrl": false, + "generateCsv": false, "save": false, "saveQuery": false, "show": false, @@ -188,6 +203,7 @@ export default function ({ getService }: FtrProviderContext) { "visualize": Object { "createShortUrl": false, "delete": false, + "generateScreenshot": false, "save": false, "saveQuery": false, "show": false, @@ -199,6 +215,8 @@ export default function ({ getService }: FtrProviderContext) { "dashboard": Object { "createNew": false, "createShortUrl": false, + "downloadCsv": false, + "generateScreenshot": false, "saveQuery": false, "show": false, "showWriteControls": false, @@ -206,6 +224,7 @@ export default function ({ getService }: FtrProviderContext) { }, "discover": Object { "createShortUrl": false, + "generateCsv": false, "save": false, "saveQuery": false, "show": false, @@ -219,6 +238,7 @@ export default function ({ getService }: FtrProviderContext) { "visualize": Object { "createShortUrl": false, "delete": false, + "generateScreenshot": false, "save": false, "saveQuery": false, "show": false, @@ -230,6 +250,8 @@ export default function ({ getService }: FtrProviderContext) { "dashboard": Object { "createNew": false, "createShortUrl": false, + "downloadCsv": false, + "generateScreenshot": false, "saveQuery": false, "show": false, "showWriteControls": false, @@ -237,6 +259,7 @@ export default function ({ getService }: FtrProviderContext) { }, "discover": Object { "createShortUrl": false, + "generateCsv": false, "save": false, "saveQuery": false, "show": false, @@ -250,6 +273,7 @@ export default function ({ getService }: FtrProviderContext) { "visualize": Object { "createShortUrl": false, "delete": false, + "generateScreenshot": false, "save": false, "saveQuery": false, "show": false, @@ -298,6 +322,8 @@ export default function ({ getService }: FtrProviderContext) { "dashboard": Object { "createNew": false, "createShortUrl": false, + "downloadCsv": false, + "generateScreenshot": false, "saveQuery": false, "show": true, "showWriteControls": false, @@ -305,6 +331,7 @@ export default function ({ getService }: FtrProviderContext) { }, "discover": Object { "createShortUrl": false, + "generateCsv": false, "save": false, "saveQuery": false, "show": true, @@ -318,6 +345,7 @@ export default function ({ getService }: FtrProviderContext) { "visualize": Object { "createShortUrl": false, "delete": false, + "generateScreenshot": false, "save": false, "saveQuery": false, "show": true, @@ -331,6 +359,8 @@ export default function ({ getService }: FtrProviderContext) { "dashboard": Object { "createNew": false, "createShortUrl": false, + "downloadCsv": false, + "generateScreenshot": false, "saveQuery": false, "show": false, "showWriteControls": false, @@ -338,6 +368,7 @@ export default function ({ getService }: FtrProviderContext) { }, "discover": Object { "createShortUrl": false, + "generateCsv": false, "save": false, "saveQuery": false, "show": false, @@ -351,6 +382,7 @@ export default function ({ getService }: FtrProviderContext) { "visualize": Object { "createShortUrl": false, "delete": false, + "generateScreenshot": false, "save": false, "saveQuery": false, "show": false, @@ -364,6 +396,8 @@ export default function ({ getService }: FtrProviderContext) { "dashboard": Object { "createNew": false, "createShortUrl": false, + "downloadCsv": false, + "generateScreenshot": false, "saveQuery": false, "show": false, "showWriteControls": false, @@ -371,6 +405,7 @@ export default function ({ getService }: FtrProviderContext) { }, "discover": Object { "createShortUrl": false, + "generateCsv": false, "save": false, "saveQuery": false, "show": false, @@ -384,6 +419,7 @@ export default function ({ getService }: FtrProviderContext) { "visualize": Object { "createShortUrl": false, "delete": false, + "generateScreenshot": false, "save": false, "saveQuery": false, "show": true, diff --git a/x-pack/test/security_solution_api_integration/config/ess/config.base.ts b/x-pack/test/security_solution_api_integration/config/ess/config.base.ts index a0d2ee79a7b46..25b7a40c9701e 100644 --- a/x-pack/test/security_solution_api_integration/config/ess/config.base.ts +++ b/x-pack/test/security_solution_api_integration/config/ess/config.base.ts @@ -84,6 +84,7 @@ export function createTestConfig(options: CreateTestConfigOptions, testFiles?: s 'previewTelemetryUrlEnabled', 'riskScoringPersistence', 'riskScoringRoutesEnabled', + 'alertSuppressionForSequenceEqlRuleEnabled', ])}`, '--xpack.task_manager.poll_interval=1000', `--xpack.actions.preconfigured=${JSON.stringify(PRECONFIGURED_ACTION_CONNECTORS)}`, diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/eql/trial_license_complete_tier/eql_alert_suppression.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/eql/trial_license_complete_tier/eql_alert_suppression.ts index 0c3069b3c3b62..71403ad7a3728 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/eql/trial_license_complete_tier/eql_alert_suppression.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/eql/trial_license_complete_tier/eql_alert_suppression.ts @@ -8,8 +8,12 @@ import expect from 'expect'; import { v4 as uuidv4 } from 'uuid'; import sortBy from 'lodash/sortBy'; +import partition from 'lodash/partition'; -import { EqlRuleCreateProps } from '@kbn/security-solution-plugin/common/api/detection_engine'; +import { + DetectionAlert, + EqlRuleCreateProps, +} from '@kbn/security-solution-plugin/common/api/detection_engine'; import { ALERT_SUPPRESSION_START, ALERT_SUPPRESSION_END, @@ -23,6 +27,8 @@ import { DETECTION_ENGINE_SIGNALS_STATUS_URL as DETECTION_ENGINE_ALERTS_STATUS_U import { getSuppressionMaxSignalsWarning as getSuppressionMaxAlertsWarning } from '@kbn/security-solution-plugin/server/lib/detection_engine/rule_types/utils/utils'; import { RuleExecutionStatusEnum } from '@kbn/security-solution-plugin/common/api/detection_engine/rule_monitoring'; import { ALERT_ORIGINAL_TIME } from '@kbn/security-solution-plugin/common/field_maps/field_names'; +import { RiskEnrichmentFields } from '@kbn/security-solution-plugin/server/lib/detection_engine/rule_types/utils/enrichments/types'; +import { SearchHit } from '@elastic/elasticsearch/lib/api/types'; import { createRule, deleteAllRules, @@ -45,11 +51,13 @@ import { deleteAllExceptions } from '../../../../../lists_and_exception_lists/ut const getQuery = (id: string) => `any where id == "${id}"`; const getSequenceQuery = (id: string) => - `sequence by id [any where id == "${id}"] [any where id == "${id}"]`; + `sequence [any where id == "${id}"] [any where id == "${id}"]`; export default ({ getService }: FtrProviderContext) => { const supertest = getService('supertest'); const esArchiver = getService('esArchiver'); + const esDeleteAllIndices = getService('esDeleteAllIndices'); + const es = getService('es'); const log = getService('log'); const { @@ -61,6 +69,10 @@ export default ({ getService }: FtrProviderContext) => { log, }); + const partitionSequenceBuildingBlocks = ( + alerts: Array> + ) => partition(alerts, (alert) => alert?._source?.['kibana.alert.group.index'] == null); + // NOTE: Add to second quality gate after feature is GA describe('@ess @serverless Alert Suppression for EQL rules', () => { before(async () => { @@ -69,10 +81,14 @@ export default ({ getService }: FtrProviderContext) => { after(async () => { await esArchiver.unload('x-pack/test/functional/es_archives/security_solution/ecs_compliant'); + await esDeleteAllIndices('.preview.alerts*'); }); afterEach(async () => { - await deleteAllAlerts(supertest, log, es); + await deleteAllAlerts(supertest, log, es, [ + '.preview.alerts-security.alerts-*', + '.alerts-security.alerts-*', + ]); await deleteAllRules(supertest, log); }); @@ -1778,40 +1794,1511 @@ export default ({ getService }: FtrProviderContext) => { }); }); - describe('sequence queries', () => { - it('logs a warning if suppression is configured', async () => { + describe('@skipInServerless sequence queries with suppression "per rule execution"', () => { + it('suppresses alerts in a given rule execution', async () => { const id = uuidv4(); - await indexGeneratedSourceDocuments({ - docsCount: 10, - seed: () => ({ id }), + const timestamp = '2020-10-28T06:50:00.000Z'; + const laterTimestamp = '2020-10-28T06:51:00.000Z'; + const laterTimestamp2 = '2020-10-28T06:53:00.000Z'; + const doc1 = { + id, + '@timestamp': timestamp, + host: { name: 'host-a' }, + }; + const doc1WithLaterTimestamp = { + ...doc1, + '@timestamp': laterTimestamp, + }; + + const doc2WithLaterTimestamp = { + ...doc1, + '@timestamp': laterTimestamp2, + }; + + // sequence alert 1 is made up of doc1 and doc1WithLaterTimestamp, + // sequence alert 2 is made up of doc1WithLaterTimestamp and doc2WithLaterTimestamp + // sequence alert 2 is suppressed because it shares the same + // host.name value as sequence alert 1 + + await indexListOfSourceDocuments([doc1, doc1WithLaterTimestamp, doc2WithLaterTimestamp]); + + const rule: EqlRuleCreateProps = { + ...getEqlRuleForAlertTesting(['ecs_compliant']), + query: getSequenceQuery(id), + alert_suppression: { + group_by: ['host.name'], + missing_fields_strategy: 'suppress', + }, + from: 'now-35m', + interval: '30m', + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T07:00:00.000Z'), + invocationCount: 1, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: [ALERT_ORIGINAL_TIME], + }); + // we expect one created alert and one suppressed alert + // and two building block alerts, let's confirm that + expect(previewAlerts.length).toEqual(3); + const [sequenceAlert, buildingBlockAlerts] = partitionSequenceBuildingBlocks(previewAlerts); + expect(buildingBlockAlerts.length).toEqual(2); + expect(sequenceAlert.length).toEqual(1); + + expect(sequenceAlert[0]?._source).toEqual({ + ...sequenceAlert[0]?._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [TIMESTAMP]: '2020-10-28T07:00:00.000Z', + [ALERT_LAST_DETECTED]: '2020-10-28T07:00:00.000Z', + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, + }); + }); + + it('suppresses alerts when the rule is a building block type rule', async () => { + const id = uuidv4(); + const timestamp = '2020-10-28T06:50:00.000Z'; + const laterTimestamp = '2020-10-28T06:51:00.000Z'; + const laterTimestamp2 = '2020-10-28T06:53:00.000Z'; + const doc1 = { + id, + '@timestamp': timestamp, + host: { name: 'host-a' }, + }; + const doc1WithLaterTimestamp = { + ...doc1, + '@timestamp': laterTimestamp, + }; + + const doc2WithLaterTimestamp = { + ...doc1, + '@timestamp': laterTimestamp2, + }; + + // sequence alert 1 is made up of doc1 and doc1WithLaterTimestamp, + // sequence alert 2 is made up of doc1WithLaterTimestamp and doc2WithLaterTimestamp + // sequence alert 2 is suppressed because it shares the same + // host.name value as sequence alert 1 + + await indexListOfSourceDocuments([doc1, doc1WithLaterTimestamp, doc2WithLaterTimestamp]); + + const buildingBlockRuleType: EqlRuleCreateProps = { + ...getEqlRuleForAlertTesting(['ecs_compliant']), + building_block_type: 'default', + query: getSequenceQuery(id), + alert_suppression: { + group_by: ['host.name'], + missing_fields_strategy: 'suppress', + }, + from: 'now-35m', + interval: '30m', + }; + + const { previewId } = await previewRule({ + supertest, + rule: buildingBlockRuleType, + timeframeEnd: new Date('2020-10-28T07:00:00.000Z'), + invocationCount: 1, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: [ALERT_ORIGINAL_TIME], }); + // we expect one created alert and one suppressed alert + // and two building block alerts, let's confirm that + expect(previewAlerts.length).toEqual(3); + const [sequenceAlert, buildingBlockAlerts] = partition( + previewAlerts, + (alert) => alert?._source?.[ALERT_SUPPRESSION_DOCS_COUNT] != null + ); + expect(buildingBlockAlerts.length).toEqual(2); + expect(sequenceAlert.length).toEqual(1); + + expect(sequenceAlert[0]?._source).toEqual({ + ...sequenceAlert[0]?._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [TIMESTAMP]: '2020-10-28T07:00:00.000Z', + [ALERT_LAST_DETECTED]: '2020-10-28T07:00:00.000Z', + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, + }); + }); + + it('suppresses alerts in a given rule execution when a subsequent event for a sequence has the suppression field undefined', async () => { + const id = uuidv4(); + const timestamp = '2020-10-28T06:50:00.000Z'; + const laterTimestamp = '2020-10-28T06:51:00.000Z'; + const laterTimestamp2 = '2020-10-28T06:53:00.000Z'; + const doc1 = { + id, + '@timestamp': timestamp, + host: { name: 'host-a' }, + }; + const doc1WithLaterTimestamp = { + ...doc1, + '@timestamp': laterTimestamp, + }; + + const doc2WithNoHost = { + ...doc1, + '@timestamp': laterTimestamp2, + host: undefined, + }; + + // sequence alert 1 will be doc1 and doc1WithLaterTimestamp + // sequence alert 2 will be doc1WithLaterTimestamp and doc2WithNoHost + // the second sequence alert will have null as the value for + // suppression field host.name because of logic defined in the + // objectPairIntersection function defined in + // x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/build_alert_group_from_sequence.ts + + await indexListOfSourceDocuments([ + doc1, + doc1WithLaterTimestamp, + doc2WithNoHost, + { ...doc2WithNoHost, '@timestamp': '2020-10-28T06:53:01.000Z' }, + ]); const rule: EqlRuleCreateProps = { ...getEqlRuleForAlertTesting(['ecs_compliant']), query: getSequenceQuery(id), alert_suppression: { - group_by: ['agent.name'], - duration: { - value: 300, - unit: 'm', + group_by: ['host.name'], + missing_fields_strategy: 'suppress', + }, + from: 'now-35m', + interval: '30m', + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T07:00:00.000Z'), + invocationCount: 1, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: [ALERT_ORIGINAL_TIME], + }); + // we expect two sequence alerts + // each sequence alert having two building block alerts + expect(previewAlerts.length).toEqual(6); + const [sequenceAlerts, buildingBlockAlerts] = + partitionSequenceBuildingBlocks(previewAlerts); + expect(buildingBlockAlerts.length).toEqual(4); + expect(sequenceAlerts.length).toEqual(2); + + expect(sequenceAlerts[0]?._source).toEqual({ + ...sequenceAlerts[0]?._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [TIMESTAMP]: '2020-10-28T07:00:00.000Z', + [ALERT_LAST_DETECTED]: '2020-10-28T07:00:00.000Z', + [ALERT_SUPPRESSION_DOCS_COUNT]: 0, + }); + expect(sequenceAlerts[1]?._source).toEqual({ + ...sequenceAlerts[1]?._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: null, + }, + ], + [TIMESTAMP]: '2020-10-28T07:00:00.000Z', + [ALERT_LAST_DETECTED]: '2020-10-28T07:00:00.000Z', + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, + }); + }); + + it('does not suppress alerts in a given rule execution when doNotSuppress is set and more than one sequence has the suppression field undefined', async () => { + const id = uuidv4(); + const timestamp = '2020-10-28T06:50:00.000Z'; + const laterTimestamp = '2020-10-28T06:51:00.000Z'; + const laterTimestamp2 = '2020-10-28T06:53:00.000Z'; + const laterTimestamp3 = '2020-10-28T06:53:01.000Z'; + + const doc1 = { + id, + '@timestamp': timestamp, + host: { name: 'host-a' }, + }; + const doc1WithLaterTimestamp = { + ...doc1, + '@timestamp': laterTimestamp, + }; + + const doc2WithNoHost = { + ...doc1, + '@timestamp': laterTimestamp2, + host: undefined, + }; + + const doc3WithNoHost = { + ...doc1, + '@timestamp': laterTimestamp3, + host: undefined, + }; + + // this should generate three sequence alerts + // sequence alert 1 will be doc1 and doc1WithLaterTimestamp + // sequence alert 2 will be doc1WithLaterTimestamp and doc2WithNoHost + // sequence alert 3 will be doc2WithNoHost and doc3WithNoHost + // This logic is defined in objectPairIntersection + // x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/build_alert_group_from_sequence.ts + // Any sequence comprised of events where one field contains a value, followed by any number of + // events in the sequence where the value is null or undefined will have that field + // stripped from the sequence alert. So given that, we expect three alerts here + // The sequence comprised of [doc1, doc1WithLaterTimestamp] will have + // host.name and 'host-a' as the suppression values + // the other two sequence alerts comprised of [doc1WithLaterTimestamp, doc2WithNoHost] + // and [doc2WithNoHost, doc3WithNoHost] will have no suppression values set because + // of the logic outlined above + await indexListOfSourceDocuments([ + doc1, + doc1WithLaterTimestamp, + doc2WithNoHost, + doc3WithNoHost, + ]); + + const rule: EqlRuleCreateProps = { + ...getEqlRuleForAlertTesting(['ecs_compliant']), + query: getSequenceQuery(id), + alert_suppression: { + group_by: ['host.name'], + missing_fields_strategy: 'doNotSuppress', + }, + from: 'now-35m', + interval: '30m', + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T07:00:00.000Z'), + invocationCount: 1, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: [TIMESTAMP], + }); + // we expect one alert and one suppressed alert + // and two building block alerts per shell alert, let's confirm that + const [sequenceAlerts, buildingBlockAlerts] = + partitionSequenceBuildingBlocks(previewAlerts); + expect(buildingBlockAlerts.length).toEqual(6); + expect(sequenceAlerts.length).toEqual(3); + const [suppressedSequenceAlerts] = partition( + sequenceAlerts, + (alert) => (alert?._source?.['kibana.alert.suppression.docs_count'] as number) >= 0 + ); + expect(suppressedSequenceAlerts.length).toEqual(1); + + expect(suppressedSequenceAlerts[0]._source).toEqual({ + ...suppressedSequenceAlerts[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', }, + ], + [TIMESTAMP]: '2020-10-28T07:00:00.000Z', + [ALERT_SUPPRESSION_DOCS_COUNT]: 0, + }); + }); + + it('does not suppress alerts when suppression field value is undefined for a sequence alert in a given rule execution', async () => { + const id = uuidv4(); + const timestamp = '2020-10-28T06:50:00.000Z'; + const laterTimestamp = '2020-10-28T06:51:00.000Z'; + const laterTimestamp2 = '2020-10-28T06:53:00.000Z'; + const doc1 = { + id, + '@timestamp': timestamp, + host: { name: 'host-a' }, + }; + const doc1WithNoHost = { + ...doc1, + '@timestamp': laterTimestamp, + host: undefined, + }; + + const doc2WithNoHost = { + ...doc1, + '@timestamp': laterTimestamp2, + host: undefined, + }; + + await indexListOfSourceDocuments([doc1, doc1WithNoHost, doc2WithNoHost]); + + const rule: EqlRuleCreateProps = { + ...getEqlRuleForAlertTesting(['ecs_compliant']), + query: getSequenceQuery(id), + alert_suppression: { + group_by: ['host.name'], + missing_fields_strategy: 'doNotSuppress', + }, + from: 'now-35m', + interval: '30m', + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T07:00:00.000Z'), + invocationCount: 1, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: [ALERT_SUPPRESSION_START], // sorting on null fields was preventing the alerts from yielding + }); + // we expect one alert and two suppressed alerts + // and two building block alerts, let's confirm that + expect(previewAlerts.length).toEqual(6); + const [sequenceAlert, buildingBlockAlerts] = partitionSequenceBuildingBlocks(previewAlerts); + const [suppressedSequenceAlerts] = partition( + sequenceAlert, + (alert) => (alert?._source?.['kibana.alert.suppression.docs_count'] as number) >= 0 + ); + expect(buildingBlockAlerts.length).toEqual(4); + expect(sequenceAlert.length).toEqual(2); + expect(suppressedSequenceAlerts.length).toEqual(0); + expect(sequenceAlert[0]?._source).toEqual({ + ...sequenceAlert[0]?._source, + [ALERT_SUPPRESSION_TERMS]: undefined, + [TIMESTAMP]: '2020-10-28T07:00:00.000Z', + [ALERT_SUPPRESSION_DOCS_COUNT]: undefined, + }); + }); + + it('suppresses alerts when suppression field value is undefined for a sequence alert in a given rule execution', async () => { + const id = uuidv4(); + const timestamp = '2020-10-28T06:50:00.000Z'; + const laterTimestamp = '2020-10-28T06:51:00.000Z'; + const laterTimestamp2 = '2020-10-28T06:53:00.000Z'; + const laterTimestamp3 = '2020-10-28T06:53:01.000Z'; + + const doc1 = { + id, + '@timestamp': timestamp, + host: { name: 'host-a' }, + }; + const doc1WithNoHost = { + ...doc1, + '@timestamp': laterTimestamp, + host: undefined, + }; + + const doc2WithNoHost = { + ...doc1, + '@timestamp': laterTimestamp2, + host: undefined, + }; + + const doc3WithNoHost = { + ...doc1, + '@timestamp': laterTimestamp3, + host: undefined, + }; + + await indexListOfSourceDocuments([doc1, doc1WithNoHost, doc2WithNoHost, doc3WithNoHost]); + + const rule: EqlRuleCreateProps = { + ...getEqlRuleForAlertTesting(['ecs_compliant']), + query: getSequenceQuery(id), + alert_suppression: { + group_by: ['host.name'], missing_fields_strategy: 'suppress', }, from: 'now-35m', interval: '30m', }; - const { logs } = await previewRule({ + const { previewId } = await previewRule({ supertest, rule, + timeframeEnd: new Date('2020-10-28T07:00:00.000Z'), invocationCount: 1, }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: [ALERT_ORIGINAL_TIME], + }); + // we expect one alert and two suppressed alerts + // and two building block alerts, let's confirm that + expect(previewAlerts.length).toEqual(3); + const [sequenceAlert, buildingBlockAlerts] = partitionSequenceBuildingBlocks(previewAlerts); + const [suppressedSequenceAlerts] = partition( + sequenceAlert, + (alert) => (alert?._source?.['kibana.alert.suppression.docs_count'] as number) >= 0 + ); + expect(suppressedSequenceAlerts.length).toEqual(1); + expect(buildingBlockAlerts.length).toEqual(2); + expect(sequenceAlert.length).toEqual(1); + + expect(sequenceAlert[0]?._source).toEqual({ + ...sequenceAlert[0]?._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: null, + }, + ], + [TIMESTAMP]: '2020-10-28T07:00:00.000Z', + [ALERT_LAST_DETECTED]: '2020-10-28T07:00:00.000Z', + [ALERT_SUPPRESSION_DOCS_COUNT]: 2, + }); + }); + + it('does not suppress alerts when "doNotSuppress" is set and suppression field value is undefined for a sequence alert in a given rule execution', async () => { + // This logic should be understood within the confines of the + // objectPairIntersection function defined in + // x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/build_alert_group_from_sequence.ts + // Any sequence comprised of events where one field contains a value, followed by any number of + // events in the sequence where the value is null or undefined will have that field + // stripped from the sequence alert. So given that, we expect three alerts here + // all with the suppression value as undefined + const id = uuidv4(); + const timestamp = '2020-10-28T06:50:00.000Z'; + const laterTimestamp = '2020-10-28T06:51:00.000Z'; + const laterTimestamp2 = '2020-10-28T06:53:00.000Z'; + const laterTimestamp3 = '2020-10-28T06:53:01.000Z'; + + const doc1 = { + id, + '@timestamp': timestamp, + host: { name: 'host-a' }, + }; + const doc1WithNoHost = { + ...doc1, + '@timestamp': laterTimestamp, + host: { name: undefined }, + }; + + const doc2WithNoHost = { + ...doc1, + '@timestamp': laterTimestamp2, + host: { name: undefined }, + }; + + const doc3WithNoHost = { + ...doc1, + '@timestamp': laterTimestamp3, + host: { name: undefined }, + }; + + await indexListOfSourceDocuments([doc1, doc1WithNoHost, doc2WithNoHost, doc3WithNoHost]); + + const rule: EqlRuleCreateProps = { + ...getEqlRuleForAlertTesting(['ecs_compliant']), + query: getSequenceQuery(id), + alert_suppression: { + group_by: ['host.name'], + missing_fields_strategy: 'doNotSuppress', + }, + from: 'now-35m', + interval: '30m', + }; - const [{ warnings }] = logs; + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T07:00:00.000Z'), + invocationCount: 1, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: [ALERT_ORIGINAL_TIME], + }); - expect(warnings).toContain( - 'Suppression is not supported for EQL sequence queries. The rule will proceed without suppression.' + expect(previewAlerts.length).toEqual(9); + const [sequenceAlert, buildingBlockAlerts] = partitionSequenceBuildingBlocks(previewAlerts); + const [suppressedSequenceAlerts] = partition( + sequenceAlert, + (alert) => (alert?._source?.['kibana.alert.suppression.docs_count'] as number) >= 0 ); + // no alerts should be suppressed because doNotSuppress is set + expect(suppressedSequenceAlerts.length).toEqual(0); + expect(buildingBlockAlerts.length).toEqual(6); + // 3 sequence alerts comprised of + // (doc1 + doc1WithNoHost), (doc1WithNoHost + doc2WithNoHost), (doc2WithNoHost + doc3WithNoHost) + expect(sequenceAlert.length).toEqual(3); + + expect(sequenceAlert[0]?._source).toEqual({ + ...sequenceAlert[0]?._source, + [ALERT_SUPPRESSION_TERMS]: undefined, + [ALERT_SUPPRESSION_DOCS_COUNT]: undefined, + }); + }); + + it('does not suppress alerts outside of the current rule execution search range', async () => { + const id = uuidv4(); + const timestamp = '2020-10-28T06:05:00.000Z'; // this should not count towards events + const laterTimestamp = '2020-10-28T06:50:00.000Z'; + const laterTimestamp2 = '2020-10-28T06:51:00.000Z'; + const laterTimestamp3 = '2020-10-28T06:53:00.000Z'; + const doc1 = { + id, + '@timestamp': timestamp, + host: { name: 'host-a' }, + }; + const doc1WithLaterTimestamp = { + ...doc1, + '@timestamp': laterTimestamp, + }; + const doc2WithLaterTimestamp = { ...doc1WithLaterTimestamp, '@timestamp': laterTimestamp2 }; + const doc3WithLaterTimestamp = { ...doc2WithLaterTimestamp, '@timestamp': laterTimestamp3 }; + + await indexListOfSourceDocuments([ + doc1, + doc1WithLaterTimestamp, + doc2WithLaterTimestamp, + doc3WithLaterTimestamp, + ]); + + const rule: EqlRuleCreateProps = { + ...getEqlRuleForAlertTesting(['ecs_compliant']), + query: getSequenceQuery(id), + alert_suppression: { + group_by: ['host.name'], + missing_fields_strategy: 'suppress', + }, + from: 'now-35m', + interval: '30m', + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T07:00:00.000Z'), + invocationCount: 1, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: [ALERT_ORIGINAL_TIME], + }); + // we expect one alert and two suppressed alerts + // and two building block alerts, let's confirm that + expect(previewAlerts.length).toEqual(3); + const [sequenceAlert, buildingBlockAlerts] = partitionSequenceBuildingBlocks(previewAlerts); + expect(buildingBlockAlerts.length).toEqual(2); + expect(sequenceAlert.length).toEqual(1); + + expect(sequenceAlert[0]?._source).toEqual({ + ...sequenceAlert[0]?._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [TIMESTAMP]: '2020-10-28T07:00:00.000Z', + [ALERT_LAST_DETECTED]: '2020-10-28T07:00:00.000Z', + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, + }); + }); + + it('suppresses sequence alert with suppression value of "null" when all events have unique values for suppression field', async () => { + /* + Sequence alerts only contain values which make up the intersection of + a given field in all events for that sequence. + + So for a sequence alert where the two events contain host name values of + host-a and host-b, the sequence alert will have 'null' for that value and will + suppress on null values if missing_fields_strategy is set to 'suppress' + */ + const id = uuidv4(); + const timestamp = '2020-10-28T06:50:00.000Z'; + const laterTimestamp = '2020-10-28T06:50:01.000Z'; + const laterTimestamp2 = '2020-10-28T06:51:00.000Z'; + const laterTimestamp3 = '2020-10-28T06:53:00.000Z'; + const doc1 = { + id, + '@timestamp': timestamp, + host: { name: 'host-a' }, + }; + const doc1WithLaterTimestamp = { + ...doc1, + '@timestamp': laterTimestamp, + host: { name: 'host-b' }, + }; + const doc2WithLaterTimestamp = { + ...doc1WithLaterTimestamp, + '@timestamp': laterTimestamp2, + host: { name: 'host-c' }, + }; + const doc3WithLaterTimestamp = { + ...doc2WithLaterTimestamp, + '@timestamp': laterTimestamp3, + host: { name: 'host-d' }, + }; + await indexListOfSourceDocuments([ + doc1, + doc1WithLaterTimestamp, + doc2WithLaterTimestamp, + doc3WithLaterTimestamp, + ]); + + const rule: EqlRuleCreateProps = { + ...getEqlRuleForAlertTesting(['ecs_compliant']), + query: getSequenceQuery(id), + alert_suppression: { + group_by: ['host.name'], + missing_fields_strategy: 'suppress', + }, + from: 'now-35m', + interval: '30m', + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T07:00:00.000Z'), + invocationCount: 1, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: [ALERT_ORIGINAL_TIME], + }); + // we expect one alert and two suppressed alerts + // and two building block alerts, let's confirm that + expect(previewAlerts.length).toEqual(3); + const [sequenceAlert, buildingBlockAlerts] = partitionSequenceBuildingBlocks(previewAlerts); + expect(buildingBlockAlerts.length).toEqual(2); + expect(sequenceAlert.length).toEqual(1); + + expect(sequenceAlert[0]._source).toEqual({ + ...sequenceAlert[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: null, + }, + ], + [TIMESTAMP]: '2020-10-28T07:00:00.000Z', + [ALERT_LAST_DETECTED]: '2020-10-28T07:00:00.000Z', + [ALERT_SUPPRESSION_DOCS_COUNT]: 2, + }); + }); + + it('suppresses alerts on a field with array values', async () => { + const id = uuidv4(); + + const timestamp = '2020-10-28T06:45:00.000Z'; + const timestamp2 = '2020-10-28T06:46:00.000Z'; + const timestamp3 = '2020-10-28T06:47:00.000Z'; + + const doc1 = { + id, + '@timestamp': timestamp, + host: { name: ['host-a', 'host-b'] }, + }; + + await indexListOfSourceDocuments([ + doc1, + { ...doc1, '@timestamp': timestamp2 }, + { ...doc1, '@timestamp': timestamp3 }, + ]); + const rule: EqlRuleCreateProps = { + ...getEqlRuleForAlertTesting(['ecs_compliant']), + query: getSequenceQuery(id), + alert_suppression: { + group_by: ['host.name'], + missing_fields_strategy: 'suppress', + }, + from: 'now-35m', + interval: '30m', + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T07:00:00.000Z'), + invocationCount: 1, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: [ALERT_ORIGINAL_TIME], + }); + const [sequenceAlert] = partitionSequenceBuildingBlocks(previewAlerts); + expect(previewAlerts.length).toEqual(3); // one sequence, two building block + expect(sequenceAlert[0]._source).toEqual({ + ...sequenceAlert[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: ['host-a', 'host-b'], + }, + ], + [TIMESTAMP]: '2020-10-28T07:00:00.000Z', + [ALERT_LAST_DETECTED]: '2020-10-28T07:00:00.000Z', + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, + }); + }); + + it('suppresses alerts with missing fields and multiple suppress by fields', async () => { + const id = uuidv4(); + const timestamp = '2020-10-28T06:45:00.000Z'; + const timestamp2 = '2020-10-28T06:45:01.000Z'; + const timestamp3 = '2020-10-28T06:45:02.000Z'; + const timestamp4 = '2020-10-28T06:45:03.000Z'; + const timestamp5 = '2020-10-28T06:45:04.000Z'; + const timestamp6 = '2020-10-28T06:45:05.000Z'; + const timestamp7 = '2020-10-28T06:45:06.000Z'; + const timestamp8 = '2020-10-28T06:45:07.000Z'; + const timestamp9 = '2020-10-28T06:45:08.000Z'; + const timestamp10 = '2020-10-28T06:45:09.000Z'; + const timestamp11 = '2020-10-28T06:45:10.000Z'; + const timestamp12 = '2020-10-28T06:45:11.000Z'; + + const noMissingFieldsDoc = { + id, + '@timestamp': timestamp, + host: { name: 'host-a' }, + agent: { name: 'agent-a', version: 10 }, + }; + + const missingNameFieldsDoc = { + ...noMissingFieldsDoc, + agent: { version: 10 }, + }; + + const missingVersionFieldsDoc = { + ...noMissingFieldsDoc, + agent: { name: 'agent-a' }, + }; + + const missingAgentFieldsDoc = { + ...noMissingFieldsDoc, + agent: undefined, + }; + + // 4 alerts should be suppressed: 1 for each pair of documents + await indexListOfSourceDocuments([ + noMissingFieldsDoc, + { ...noMissingFieldsDoc, '@timestamp': timestamp2 }, + { ...noMissingFieldsDoc, '@timestamp': timestamp3 }, + + { ...missingNameFieldsDoc, '@timestamp': timestamp4 }, + { ...missingNameFieldsDoc, '@timestamp': timestamp5 }, + { ...missingNameFieldsDoc, '@timestamp': timestamp6 }, + + { ...missingVersionFieldsDoc, '@timestamp': timestamp7 }, + { ...missingVersionFieldsDoc, '@timestamp': timestamp8 }, + { ...missingVersionFieldsDoc, '@timestamp': timestamp9 }, + + { ...missingAgentFieldsDoc, '@timestamp': timestamp10 }, + { ...missingAgentFieldsDoc, '@timestamp': timestamp11 }, + { ...missingAgentFieldsDoc, '@timestamp': timestamp12 }, + ]); + + const rule: EqlRuleCreateProps = { + ...getEqlRuleForAlertTesting(['ecs_compliant']), + query: getSequenceQuery(id), + alert_suppression: { + group_by: ['agent.name', 'agent.version'], + missing_fields_strategy: 'suppress', + }, + from: 'now-35m', + interval: '30m', + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T07:00:00.000Z'), + invocationCount: 1, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + size: 100, + sort: [ALERT_SUPPRESSION_START], // sorting on null fields was preventing the alerts from yielding + }); + const [sequenceAlert] = partitionSequenceBuildingBlocks(previewAlerts); + + // for sequence alerts if neither of the fields are there, we cannot suppress + expect(sequenceAlert.length).toEqual(4); + expect(sequenceAlert[0]._source).toEqual({ + ...sequenceAlert[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'agent.name', + value: 'agent-a', + }, + { + field: 'agent.version', + value: 10, + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, + }); + + expect(sequenceAlert[1]._source).toEqual({ + ...sequenceAlert[1]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'agent.name', + value: null, + }, + { + field: 'agent.version', + value: 10, + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 2, + }); + + expect(sequenceAlert[2]._source).toEqual({ + ...sequenceAlert[2]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'agent.name', + value: null, + }, + { + field: 'agent.version', + value: null, + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 3, + }); + + expect(sequenceAlert[3]._source).toEqual({ + ...sequenceAlert[3]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'agent.name', + value: 'agent-a', + }, + { + field: 'agent.version', + value: null, + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, + }); + }); + + it('does not suppress alerts when "doNotSuppress" is set and we have alerts with missing fields and multiple suppress by fields', async () => { + const id = uuidv4(); + const timestamp = '2020-10-28T06:45:00.000Z'; + const timestamp2 = '2020-10-28T06:45:01.000Z'; + const timestamp3 = '2020-10-28T06:45:02.000Z'; + const timestamp4 = '2020-10-28T06:45:03.000Z'; + const timestamp5 = '2020-10-28T06:45:04.000Z'; + const timestamp6 = '2020-10-28T06:45:05.000Z'; + const timestamp7 = '2020-10-28T06:45:06.000Z'; + const timestamp8 = '2020-10-28T06:45:07.000Z'; + const timestamp9 = '2020-10-28T06:45:08.000Z'; + const timestamp10 = '2020-10-28T06:45:09.000Z'; + const timestamp11 = '2020-10-28T06:45:10.000Z'; + const timestamp12 = '2020-10-28T06:45:11.000Z'; + + const noMissingFieldsDoc = { + id, + '@timestamp': timestamp, + host: { name: 'host-a' }, + agent: { name: 'agent-a', version: 10 }, + }; + + const missingNameFieldsDoc = { + ...noMissingFieldsDoc, + agent: { version: 10 }, + }; + + const missingVersionFieldsDoc = { + ...noMissingFieldsDoc, + agent: { name: 'agent-a' }, + }; + + const missingAgentFieldsDoc = { + ...noMissingFieldsDoc, + agent: undefined, + }; + + // 4 alerts should be suppressed: 1 for each pair of documents + await indexListOfSourceDocuments([ + noMissingFieldsDoc, + { ...noMissingFieldsDoc, '@timestamp': timestamp2 }, + { ...noMissingFieldsDoc, '@timestamp': timestamp3 }, + + { ...missingNameFieldsDoc, '@timestamp': timestamp4 }, + { ...missingNameFieldsDoc, '@timestamp': timestamp5 }, + { ...missingNameFieldsDoc, '@timestamp': timestamp6 }, + + { ...missingVersionFieldsDoc, '@timestamp': timestamp7 }, + { ...missingVersionFieldsDoc, '@timestamp': timestamp8 }, + { ...missingVersionFieldsDoc, '@timestamp': timestamp9 }, + + { ...missingAgentFieldsDoc, '@timestamp': timestamp10 }, + { ...missingAgentFieldsDoc, '@timestamp': timestamp11 }, + { ...missingAgentFieldsDoc, '@timestamp': timestamp12 }, + ]); + + const rule: EqlRuleCreateProps = { + ...getEqlRuleForAlertTesting(['ecs_compliant']), + query: getSequenceQuery(id), + alert_suppression: { + group_by: ['agent.name', 'agent.version'], + missing_fields_strategy: 'doNotSuppress', + }, + from: 'now-35m', + interval: '30m', + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T07:00:00.000Z'), + invocationCount: 1, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + size: 100, + }); + const [sequenceAlert] = partitionSequenceBuildingBlocks(previewAlerts); + + // for sequence alerts if neither of the fields are there, we cannot suppress + const [suppressedSequenceAlerts] = partition( + sequenceAlert, + (alert) => (alert?._source?.['kibana.alert.suppression.docs_count'] as number) >= 0 + ); + expect(suppressedSequenceAlerts.length).toEqual(1); + expect(suppressedSequenceAlerts[0]._source).toEqual({ + ...suppressedSequenceAlerts[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'agent.name', + value: 'agent-a', + }, + { + field: 'agent.version', + value: 10, + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, + }); + }); + + it('deduplicates multiple alerts while suppressing on rule interval only', async () => { + const id = uuidv4(); + const firstTimestamp = '2020-10-28T05:45:00.000Z'; + const secondTimestamp = '2020-10-28T06:10:00.000Z'; + const secondTimestamp2 = '2020-10-28T06:10:01.000Z'; + const secondTimestamp3 = '2020-10-28T06:10:02.000Z'; + const secondTimestamp4 = '2020-10-28T06:10:03.000Z'; + const secondTimestamp5 = '2020-10-28T06:10:04.000Z'; + const secondTimestamp6 = '2020-10-28T06:10:05.000Z'; + + const doc1 = { + id, + '@timestamp': firstTimestamp, + host: { name: 'host-a' }, + }; + + // 4 alert should be suppressed + await indexListOfSourceDocuments([ + doc1, + { ...doc1, '@timestamp': secondTimestamp }, + { ...doc1, '@timestamp': secondTimestamp2 }, + { ...doc1, '@timestamp': secondTimestamp3 }, + { ...doc1, '@timestamp': secondTimestamp4 }, + { ...doc1, '@timestamp': secondTimestamp5 }, + { ...doc1, '@timestamp': secondTimestamp6 }, + ]); + + const rule: EqlRuleCreateProps = { + ...getEqlRuleForAlertTesting(['ecs_compliant']), + query: getSequenceQuery(id), + alert_suppression: { + group_by: ['host.name'], + missing_fields_strategy: 'suppress', + }, + // large look-back time covers all docs + from: 'now-50m', + interval: '30m', + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T06:30:00.000Z'), + invocationCount: 2, // 2 invocations so we can see that the same sequences are not generated / suppressed again. + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: ['host.name', ALERT_ORIGINAL_TIME], + }); + const [sequenceAlert, buildingBlockAlerts] = partitionSequenceBuildingBlocks(previewAlerts); + + expect(buildingBlockAlerts.length).toEqual(2); + expect(sequenceAlert.length).toEqual(1); + expect(sequenceAlert[0]._source).toEqual({ + ...sequenceAlert[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 5, // if deduplication failed this would 12, or the previewAlerts count would be double + }); + }); + }); + + // FLAKY: https://github.com/elastic/kibana/issues/202940 + // FLAKY: https://github.com/elastic/kibana/issues/202945 + describe.skip('@skipInServerless sequence queries with suppression duration', () => { + it('suppresses alerts across two rule executions when the suppression duration exceeds the rule interval', async () => { + const id = uuidv4(); + const firstTimestamp = new Date(Date.now() - 1000).toISOString(); + const firstTimestamp2 = new Date().toISOString(); + + const firstDocument = { + id, + '@timestamp': firstTimestamp, + host: { + name: 'host-a', + }, + }; + await indexListOfSourceDocuments([ + firstDocument, + { ...firstDocument, '@timestamp': firstTimestamp2 }, + ]); + + const rule: EqlRuleCreateProps = { + ...getEqlRuleForAlertTesting(['ecs_compliant']), + query: getSequenceQuery(id), + alert_suppression: { + group_by: ['host.name'], + duration: { + value: 300, + unit: 'm', + }, + missing_fields_strategy: 'suppress', + }, + from: 'now-35m', + interval: '30m', + }; + const createdRule = await createRule(supertest, log, rule); + const alerts = await getOpenAlerts(supertest, log, es, createdRule); + + expect(alerts.hits.hits.length).toEqual(3); + const [sequenceAlert, buildingBlockAlerts] = partitionSequenceBuildingBlocks( + alerts.hits.hits + ); + expect(buildingBlockAlerts.length).toEqual(2); + expect(sequenceAlert.length).toEqual(1); + + // suppression start equal to alert timestamp + const suppressionStart = sequenceAlert[0]._source?.[TIMESTAMP]; + + expect(sequenceAlert[0]._source).toEqual( + expect.objectContaining({ + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + // suppression boundaries equal to original event time, since no alert been suppressed + [ALERT_SUPPRESSION_START]: suppressionStart, + [ALERT_SUPPRESSION_END]: suppressionStart, + [ALERT_SUPPRESSION_DOCS_COUNT]: 0, + }) + ); + + // index an event that happened 1 second before the next event in the sequence + const secondTimestamp = new Date(Date.now() - 1000).toISOString(); + const secondDocument = { + id, + '@timestamp': secondTimestamp, + host: { + name: 'host-a', + }, + }; + + // Add a new document, then disable and re-enable to trigger another rule run. The second doc should + // trigger an update to the existing alert without changing the timestamp + await indexListOfSourceDocuments([secondDocument]); + await patchRule(supertest, log, { id: createdRule.id, enabled: false }); + await patchRule(supertest, log, { id: createdRule.id, enabled: true }); + const afterTimestamp = new Date(); + const secondAlerts = await getOpenAlerts( + supertest, + log, + es, + createdRule, + RuleExecutionStatusEnum.succeeded, + undefined, + afterTimestamp + ); + + const [sequenceAlert2] = partitionSequenceBuildingBlocks(secondAlerts.hits.hits); + + expect(sequenceAlert2.length).toEqual(1); + expect(sequenceAlert2[0]._source).toEqual({ + ...sequenceAlert2[0]?._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, // 1 alert from second rule run, that's why 1 suppressed + }); + // suppression end value should be greater than second document timestamp, but lesser than current time + const suppressionEnd = new Date( + sequenceAlert2[0]._source?.[ALERT_SUPPRESSION_END] as string + ).getTime(); + expect(suppressionEnd).toBeLessThan(new Date().getTime()); + expect(suppressionEnd).toBeGreaterThan(new Date(secondTimestamp).getDate()); + }); + + // Skipped here: https://github.com/elastic/kibana/issues/202945 + it.skip('does not suppress alerts outside of duration', async () => { + const id = uuidv4(); + // this timestamp is 1 minute in the past + const firstTimestamp = new Date(Date.now() - 5000).toISOString(); + const firstTimestamp2 = new Date(Date.now() - 5500).toISOString(); + + const firstDocument = { + id, + '@timestamp': firstTimestamp, + host: { + name: 'host-a', + }, + }; + await indexListOfSourceDocuments([ + firstDocument, + { ...firstDocument, '@timestamp': firstTimestamp2 }, + ]); + + const rule: EqlRuleCreateProps = { + ...getEqlRuleForAlertTesting(['ecs_compliant']), + query: getSequenceQuery(id), + alert_suppression: { + group_by: ['host.name'], + duration: { + value: 7, + unit: 's', + }, + missing_fields_strategy: 'suppress', + }, + from: 'now-10s', + interval: '5s', + }; + const createdRule = await createRule(supertest, log, rule); + const alerts = await getOpenAlerts(supertest, log, es, createdRule); + + expect(alerts.hits.hits.length).toEqual(3); + const [sequenceAlert, buildingBlockAlerts] = partitionSequenceBuildingBlocks( + alerts.hits.hits + ); + expect(buildingBlockAlerts.length).toEqual(2); + expect(sequenceAlert.length).toEqual(1); + + expect(sequenceAlert[0]._source).toEqual({ + ...sequenceAlert[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 0, + }); + + const secondTimestamp = new Date(Date.now() - 1000).toISOString(); + const secondTimestamp2 = new Date(Date.now()).toISOString(); + const secondDocument = { + id, + '@timestamp': secondTimestamp, + host: { + name: 'host-a', + }, + }; + + // Add a new document, then disable and re-enable to trigger another rule run. + // the second rule run should generate a new alert + await patchRule(supertest, log, { id: createdRule.id, enabled: false }); + + await indexListOfSourceDocuments([ + secondDocument, + { ...secondDocument, '@timestamp': secondTimestamp2 }, + ]); + await patchRule(supertest, log, { id: createdRule.id, enabled: true }); + const afterTimestamp = new Date(Date.now() + 5000); + const secondAlerts = await getOpenAlerts( + supertest, + log, + es, + createdRule, + RuleExecutionStatusEnum.succeeded, + undefined, + afterTimestamp + ); + + const [sequenceAlert2] = partitionSequenceBuildingBlocks(secondAlerts.hits.hits); + + expect(sequenceAlert2.length).toEqual(2); + expect(sequenceAlert2[0]._source).toEqual({ + ...sequenceAlert2[0]?._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 0, // 1 alert from second rule run, that's why 1 suppressed + }); + expect(sequenceAlert2[1]._source).toEqual({ + ...sequenceAlert2[1]?._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 0, // 1 alert from second rule run, that's why 1 suppressed + }); + }); + + it('suppresses alerts when query has 3 sequences', async () => { + // the first sequence alert is comprised of events [timestamp1, ...2, ...3] + // the other suppressed alerts will be made up of the following sequences + // [timestamp2, timestamp3, timestamp4] + // [timestamp3, timestamp4, timestamp5] + // [timestamp4, timestamp5, timestamp6] + const id = uuidv4(); + const dateNow = Date.now(); + const timestamp1 = new Date(dateNow - 5000).toISOString(); + const timestamp2 = new Date(dateNow - 5500).toISOString(); + const timestamp3 = new Date(dateNow - 5800).toISOString(); + const timestamp4 = new Date(dateNow - 6000).toISOString(); + const timestamp5 = new Date(dateNow - 6100).toISOString(); + const timestamp6 = new Date(dateNow - 6200).toISOString(); + + const firstSequenceEvent = { + id, + '@timestamp': timestamp1, + host: { + name: 'host-a', + }, + }; + await indexListOfSourceDocuments([ + firstSequenceEvent, + { ...firstSequenceEvent, '@timestamp': timestamp2 }, + { ...firstSequenceEvent, '@timestamp': timestamp3 }, + ]); + + const secondSequenceEvent = { + id, + '@timestamp': timestamp4, + host: { + name: 'host-a', + }, + }; + + await indexListOfSourceDocuments([ + secondSequenceEvent, + { ...secondSequenceEvent, '@timestamp': timestamp5 }, + { ...secondSequenceEvent, '@timestamp': timestamp6 }, + ]); + + const rule: EqlRuleCreateProps = { + ...getEqlRuleForAlertTesting(['ecs_compliant']), + query: `sequence [any where id == "${id}"] [any where id == "${id}"] [any where id == "${id}"]`, + alert_suppression: { + group_by: ['host.name'], + duration: { + value: 10, + unit: 's', + }, + missing_fields_strategy: 'suppress', + }, + from: 'now-30s', + interval: '10s', + }; + const createdRule = await createRule(supertest, log, rule); + const alerts = await getOpenAlerts(supertest, log, es, createdRule); + + // we expect one shell alert + // and three building block alerts + expect(alerts.hits.hits.length).toEqual(4); + const [sequenceAlert, buildingBlockAlerts] = partitionSequenceBuildingBlocks( + alerts.hits.hits + ); + expect(buildingBlockAlerts.length).toEqual(3); + expect(sequenceAlert.length).toEqual(1); + + expect(sequenceAlert[0]._source).toEqual({ + ...sequenceAlert[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 3, + }); + }); + + // Skipped here: https://github.com/elastic/kibana/issues/202945 + it.skip('does not suppress alerts outside of duration when query with 3 sequences', async () => { + const id = uuidv4(); + const dateNow = Date.now(); + const timestampSequenceEvent1 = new Date(dateNow - 5000).toISOString(); + const timestampSequenceEvent2 = new Date(dateNow - 5500).toISOString(); + const timestampSequenceEvent3 = new Date(dateNow - 5800).toISOString(); + + const firstSequenceEvent = { + id, + '@timestamp': timestampSequenceEvent1, + host: { + name: 'host-a', + }, + }; + await indexListOfSourceDocuments([ + firstSequenceEvent, + { ...firstSequenceEvent, '@timestamp': timestampSequenceEvent2 }, + { ...firstSequenceEvent, '@timestamp': timestampSequenceEvent3 }, + ]); + + const rule: EqlRuleCreateProps = { + ...getEqlRuleForAlertTesting(['ecs_compliant']), + query: `sequence [any where id == "${id}"] [any where id == "${id}"] [any where id == "${id}"]`, + alert_suppression: { + group_by: ['host.name'], + duration: { + value: 7, + unit: 's', + }, + missing_fields_strategy: 'suppress', + }, + from: 'now-10s', + interval: '5s', + }; + const createdRule = await createRule(supertest, log, rule); + const alerts = await getOpenAlerts(supertest, log, es, createdRule); + + // we expect one shell alert + // and three building block alerts + expect(alerts.hits.hits.length).toEqual(4); + const [sequenceAlert, buildingBlockAlerts] = partitionSequenceBuildingBlocks( + alerts.hits.hits + ); + expect(buildingBlockAlerts.length).toEqual(3); + expect(sequenceAlert.length).toEqual(1); + + expect(sequenceAlert[0]._source).toEqual({ + ...sequenceAlert[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 0, + }); + + const dateNow2 = Date.now(); + const secondTimestampEventSequence = new Date(dateNow2 - 2000).toISOString(); + const secondTimestampEventSequence2 = new Date(dateNow2 - 1000).toISOString(); + const secondTimestampEventSequence3 = new Date(dateNow2).toISOString(); + + const secondSequenceEvent = { + id, + '@timestamp': secondTimestampEventSequence, + host: { + name: 'host-a', + }, + }; + + // Add a new document, then disable and re-enable to trigger another rule run. + // the second rule run should generate a new alert + await patchRule(supertest, log, { id: createdRule.id, enabled: false }); + + await indexListOfSourceDocuments([ + secondSequenceEvent, + { ...secondSequenceEvent, '@timestamp': secondTimestampEventSequence2 }, + { ...secondSequenceEvent, '@timestamp': secondTimestampEventSequence3 }, + ]); + await patchRule(supertest, log, { id: createdRule.id, enabled: true }); + const afterTimestamp2 = new Date(dateNow2 + 55000); + const secondAlerts = await getOpenAlerts( + supertest, + log, + es, + createdRule, + RuleExecutionStatusEnum.succeeded, + undefined, + afterTimestamp2 + ); + + const [sequenceAlert2, buildingBlockAlerts2] = partitionSequenceBuildingBlocks( + secondAlerts.hits.hits + ); + + // two sequence alerts because the second one happened + // outside of the rule's suppression duration + expect(sequenceAlert2.length).toEqual(2); + expect(buildingBlockAlerts2.length).toEqual(6); + // timestamps should be different for two alerts, showing they were + // created in different rule executions + expect(sequenceAlert2[0]?._source?.[TIMESTAMP]).not.toEqual( + sequenceAlert2[1]?._source?.[TIMESTAMP] + ); + + expect(sequenceAlert2[0]._source).toEqual({ + ...sequenceAlert2[0]?._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 0, // only one alert created, so zero documents are suppressed + }); + expect(sequenceAlert2[1]._source).toEqual({ + ...sequenceAlert2[1]?._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 0, // only one alert created, so zero documents are suppressed + }); }); }); }); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/general_logic/trial_license_complete_tier/configs/serverless.config.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/general_logic/trial_license_complete_tier/configs/serverless.config.ts index db3ad04b3d1b9..987b9c5004add 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/general_logic/trial_license_complete_tier/configs/serverless.config.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/general_logic/trial_license_complete_tier/configs/serverless.config.ts @@ -17,5 +17,8 @@ export default createTestConfig({ 'testing_ignored.constant', '/testing_regex*/', ])}`, // See tests within the file "ignore_fields.ts" which use these values in "alertIgnoreFields" + `--xpack.securitySolution.enableExperimental=${JSON.stringify([ + 'alertSuppressionForSequenceEqlRuleEnabled', + ])}`, ], }); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/indicator_match/trial_license_complete_tier/indicator_match_alert_suppression.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/indicator_match/trial_license_complete_tier/indicator_match_alert_suppression.ts index 1acb416808081..6ede4121610e6 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/indicator_match/trial_license_complete_tier/indicator_match_alert_suppression.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/indicator_match/trial_license_complete_tier/indicator_match_alert_suppression.ts @@ -1250,7 +1250,7 @@ export default ({ getService }: FtrProviderContext) => { await indexGeneratedSourceDocuments({ docsCount: 60000, - interval: [firstTimestamp, '2020-10-28T05:35:50.000Z'], + interval: [firstTimestamp, '2020-10-28T05:45:50.000Z'], seed: (index, _, timestamp) => ({ id, '@timestamp': timestamp, diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/customization_disabled/configs/ess.config.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/customization_disabled/configs/ess.config.ts new file mode 100644 index 0000000000000..2e1b278c9247f --- /dev/null +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/customization_disabled/configs/ess.config.ts @@ -0,0 +1,25 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrConfigProviderContext } from '@kbn/test'; + +export default async function ({ readConfigFile }: FtrConfigProviderContext) { + const functionalConfig = await readConfigFile( + require.resolve('../../../../../../../config/ess/config.base.trial') + ); + + const testConfig = { + ...functionalConfig.getAll(), + testFiles: [require.resolve('..')], + junit: { + reportName: + 'Rules Management - Prebuilt Rule Customization Disabled Integration Tests - ESS Env', + }, + }; + + return testConfig; +} diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/customization_disabled/configs/serverless.config.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/customization_disabled/configs/serverless.config.ts new file mode 100644 index 0000000000000..462a971d8dda7 --- /dev/null +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/customization_disabled/configs/serverless.config.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 { createTestConfig } from '../../../../../../../config/serverless/config.base'; + +export default createTestConfig({ + testFiles: [require.resolve('..')], + junit: { + reportName: + 'Rules Management - Prebuilt Rule Customization Disabled Integration Tests - Serverless Env', + }, + kbnTestServerArgs: [], +}); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/customization_disabled/index.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/customization_disabled/index.ts new file mode 100644 index 0000000000000..0d78605426dbf --- /dev/null +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/customization_disabled/index.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. + */ + +import { FtrProviderContext } from '../../../../../../ftr_provider_context'; + +export default ({ loadTestFile }: FtrProviderContext): void => { + describe('Rules Management - Prebuilt Rules - Prebuilt Rule Customization Disabled', function () { + loadTestFile(require.resolve('./is_customized_calculation')); + }); +}; diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/customization_disabled/is_customized_calculation.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/customization_disabled/is_customized_calculation.ts new file mode 100644 index 0000000000000..e4ae135b481ed --- /dev/null +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/customization_disabled/is_customized_calculation.ts @@ -0,0 +1,218 @@ +/* + * 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 'expect'; +import { + BulkActionEditTypeEnum, + BulkActionTypeEnum, +} from '@kbn/security-solution-plugin/common/api/detection_engine'; +import { deleteAllRules } from '../../../../../../../common/utils/security_solution'; +import { FtrProviderContext } from '../../../../../../ftr_provider_context'; +import { + deleteAllPrebuiltRuleAssets, + createRuleAssetSavedObject, + createPrebuiltRuleAssetSavedObjects, + installPrebuiltRules, +} from '../../../../utils'; + +export default ({ getService }: FtrProviderContext) => { + const supertest = getService('supertest'); + const securitySolutionApi = getService('securitySolutionApi'); + const log = getService('log'); + const es = getService('es'); + + const ruleAsset = createRuleAssetSavedObject({ + rule_id: 'test-rule-id', + }); + + describe('@ess @serverless @skipInServerlessMKI is_customized calculation with disabled customization', () => { + beforeEach(async () => { + await deleteAllRules(supertest, log); + await deleteAllPrebuiltRuleAssets(es, log); + }); + + it('should set is_customized to "false" on prebuilt rule PATCH', async () => { + await createPrebuiltRuleAssetSavedObjects(es, [ruleAsset]); + await installPrebuiltRules(es, supertest); + + const { body: findResult } = await securitySolutionApi + .findRules({ + query: { + per_page: 1, + filter: `alert.attributes.params.immutable: true`, + }, + }) + .expect(200); + const prebuiltRule = findResult.data[0]; + + // Check that the rule has been created and is not customized + expect(prebuiltRule).not.toBeNull(); + expect(prebuiltRule.rule_source.is_customized).toEqual(false); + + const { body } = await securitySolutionApi + .patchRule({ + body: { + rule_id: 'test-rule-id', + name: 'some other rule name', + }, + }) + .expect(200); + + // Check that the rule name has been updated and the rule is still not customized + expect(body).toEqual( + expect.objectContaining({ + name: 'some other rule name', + }) + ); + expect(body.rule_source.is_customized).toEqual(false); + }); + + it('should set is_customized to "false" on prebuilt rule UPDATE', async () => { + await createPrebuiltRuleAssetSavedObjects(es, [ruleAsset]); + await installPrebuiltRules(es, supertest); + + const { body: findResult } = await securitySolutionApi + .findRules({ + query: { + per_page: 1, + filter: `alert.attributes.params.immutable: true`, + }, + }) + .expect(200); + const prebuiltRule = findResult.data[0]; + + // Check that the rule has been created and is not customized + expect(prebuiltRule).not.toBeNull(); + expect(prebuiltRule.rule_source.is_customized).toEqual(false); + + const { body } = await securitySolutionApi + .updateRule({ + body: { + ...prebuiltRule, + id: undefined, // id together with rule_id is not allowed + name: 'some other rule name', + }, + }) + .expect(200); + + // Check that the rule name has been updated and the rule is still not customized + expect(body).toEqual( + expect.objectContaining({ + name: 'some other rule name', + }) + ); + expect(body.rule_source.is_customized).toEqual(false); + }); + + it('should not allow prebuilt rule customization on import', async () => { + await createPrebuiltRuleAssetSavedObjects(es, [ruleAsset]); + await installPrebuiltRules(es, supertest); + + const { body: findResult } = await securitySolutionApi + .findRules({ + query: { + per_page: 1, + filter: `alert.attributes.params.immutable: true`, + }, + }) + .expect(200); + const prebuiltRule = findResult.data[0]; + + // Check that the rule has been created and is not customized + expect(prebuiltRule).not.toBeNull(); + expect(prebuiltRule.rule_source.is_customized).toEqual(false); + + const ruleBuffer = Buffer.from( + JSON.stringify({ + ...prebuiltRule, + name: 'some other rule name', + }) + ); + + const { body } = await securitySolutionApi + .importRules({ query: {} }) + .attach('file', ruleBuffer, 'rules.ndjson') + .expect('Content-Type', 'application/json; charset=utf-8') + .expect(200); + + expect(body).toMatchObject({ + rules_count: 1, + success: false, + success_count: 0, + errors: [ + { + error: { + message: expect.stringContaining('Importing prebuilt rules is not supported'), + }, + rule_id: 'test-rule-id', + }, + ], + }); + + // Check that the rule has not been customized + const { body: importedRule } = await securitySolutionApi.readRule({ + query: { rule_id: prebuiltRule.rule_id }, + }); + expect(importedRule.rule_source.is_customized).toEqual(false); + }); + + it('should not allow rule customization on bulk edit', async () => { + await createPrebuiltRuleAssetSavedObjects(es, [ruleAsset]); + await installPrebuiltRules(es, supertest); + + const { body: findResult } = await securitySolutionApi + .findRules({ + query: { + per_page: 1, + filter: `alert.attributes.params.immutable: true`, + }, + }) + .expect(200); + const prebuiltRule = findResult.data[0]; + + // Check that the rule has been created and is not customized + expect(prebuiltRule).not.toBeNull(); + expect(prebuiltRule.rule_source.is_customized).toEqual(false); + + const { body: bulkResult } = await securitySolutionApi + .performRulesBulkAction({ + query: {}, + body: { + ids: [prebuiltRule.id], + action: BulkActionTypeEnum.edit, + [BulkActionTypeEnum.edit]: [ + { + type: BulkActionEditTypeEnum.add_tags, + value: ['test'], + }, + ], + }, + }) + .expect(500); + + expect(bulkResult).toMatchObject( + expect.objectContaining({ + attributes: expect.objectContaining({ + summary: { + failed: 1, + skipped: 0, + succeeded: 0, + total: 1, + }, + errors: [expect.objectContaining({ message: "Elastic rule can't be edited" })], + }), + }) + ); + + // Check that the rule has not been customized + const { body: ruleAfterUpdate } = await securitySolutionApi.readRule({ + query: { rule_id: prebuiltRule.rule_id }, + }); + expect(ruleAfterUpdate.rule_source.is_customized).toEqual(false); + }); + }); +}; diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/trial_license_complete_tier/configs/ess.config.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/customization_enabled/configs/ess.config.ts similarity index 91% rename from x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/trial_license_complete_tier/configs/ess.config.ts rename to x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/customization_enabled/configs/ess.config.ts index eee14323c9b98..ff46ebb70d7c8 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/trial_license_complete_tier/configs/ess.config.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/customization_enabled/configs/ess.config.ts @@ -17,7 +17,7 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { testFiles: [require.resolve('..')], junit: { reportName: - 'Rules Management - Prebuilt Rule Customization Integration Tests - ESS Env - Trial License', + 'Rules Management - Prebuilt Rule Customization Enabled Integration Tests - ESS Env', }, }; testConfig.kbnTestServer.serverArgs = testConfig.kbnTestServer.serverArgs.map((arg: string) => { diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/trial_license_complete_tier/configs/serverless.config.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/customization_enabled/configs/serverless.config.ts similarity index 84% rename from x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/trial_license_complete_tier/configs/serverless.config.ts rename to x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/customization_enabled/configs/serverless.config.ts index 79a23c85d2279..8c1d777665667 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/trial_license_complete_tier/configs/serverless.config.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/customization_enabled/configs/serverless.config.ts @@ -11,7 +11,7 @@ export default createTestConfig({ testFiles: [require.resolve('..')], junit: { reportName: - 'Rules Management - Prebuilt Rule Customization Integration Tests - Serverless Env - Complete Tier', + 'Rules Management - Prebuilt Rule Customization Enabled Integration Tests - Serverless Env', }, kbnTestServerArgs: [ `--xpack.securitySolution.enableExperimental=${JSON.stringify([ diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/trial_license_complete_tier/import_rules.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/customization_enabled/import_rules.ts similarity index 100% rename from x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/trial_license_complete_tier/import_rules.ts rename to x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/customization_enabled/import_rules.ts diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/trial_license_complete_tier/index.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/customization_enabled/index.ts similarity index 94% rename from x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/trial_license_complete_tier/index.ts rename to x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/customization_enabled/index.ts index 58904243e51ca..d89f8ed5d49d3 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/trial_license_complete_tier/index.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/customization_enabled/index.ts @@ -8,7 +8,7 @@ import { FtrProviderContext } from '../../../../../../ftr_provider_context'; export default ({ loadTestFile }: FtrProviderContext): void => { - describe('Rules Management - Prebuilt Rules - Prebuilt Rule Customization', function () { + describe('Rules Management - Prebuilt Rules - Prebuilt Rule Customization Enabled', function () { loadTestFile(require.resolve('./is_customized_calculation')); loadTestFile(require.resolve('./import_rules')); loadTestFile(require.resolve('./rules_export')); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/trial_license_complete_tier/is_customized_calculation.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/customization_enabled/is_customized_calculation.ts similarity index 100% rename from x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/trial_license_complete_tier/is_customized_calculation.ts rename to x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/customization_enabled/is_customized_calculation.ts diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/trial_license_complete_tier/rules_export.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/customization_enabled/rules_export.ts similarity index 100% rename from x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/trial_license_complete_tier/rules_export.ts rename to x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/prebuilt_rules/prebuilt_rule_customization/customization_enabled/rules_export.ts diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_patch/basic_license_essentials_tier/patch_rules.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_patch/basic_license_essentials_tier/patch_rules.ts index 86dde0735424e..f4536821dcaaa 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_patch/basic_license_essentials_tier/patch_rules.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_patch/basic_license_essentials_tier/patch_rules.ts @@ -7,25 +7,21 @@ import expect from 'expect'; +import { createRule, deleteAllRules } from '../../../../../../common/utils/security_solution'; import { FtrProviderContext } from '../../../../../ftr_provider_context'; import { + createHistoricalPrebuiltRuleAssetSavedObjects, + createRuleAssetSavedObject, + deleteAllPrebuiltRuleAssets, + getCustomQueryRuleParams, getSimpleRule, getSimpleRuleOutput, - getCustomQueryRuleParams, + getSimpleRuleOutputWithoutRuleId, + installPrebuiltRules, removeServerGeneratedProperties, removeServerGeneratedPropertiesIncludingRuleId, - getSimpleRuleOutputWithoutRuleId, updateUsername, - createHistoricalPrebuiltRuleAssetSavedObjects, - installPrebuiltRules, - createRuleAssetSavedObject, } from '../../../utils'; -import { - createAlertsIndex, - deleteAllRules, - createRule, - deleteAllAlerts, -} from '../../../../../../common/utils/security_solution'; export default ({ getService }: FtrProviderContext) => { const supertest = getService('supertest'); @@ -37,11 +33,6 @@ export default ({ getService }: FtrProviderContext) => { describe('@ess @serverless @serverlessQA patch_rules', () => { describe('patch rules', () => { beforeEach(async () => { - await createAlertsIndex(supertest, log); - }); - - afterEach(async () => { - await deleteAllAlerts(supertest, log, es); await deleteAllRules(supertest, log); }); @@ -241,8 +232,8 @@ export default ({ getService }: FtrProviderContext) => { }); }); - // Unskip: https://github.com/elastic/kibana/issues/195921 it('@skipInServerlessMKI throws an error if rule has external rule source and non-customizable fields are changed', async () => { + await deleteAllPrebuiltRuleAssets(es, log); // Install base prebuilt detection rule await createHistoricalPrebuiltRuleAssetSavedObjects(es, [ createRuleAssetSavedObject({ rule_id: 'rule-1', author: ['elastic'] }), @@ -262,10 +253,6 @@ export default ({ getService }: FtrProviderContext) => { }); describe('max signals', () => { - afterEach(async () => { - await deleteAllRules(supertest, log); - }); - it('does NOT patch a rule when max_signals is less than 1', async () => { await securitySolutionApi.createRule({ body: getCustomQueryRuleParams({ rule_id: 'rule-1', max_signals: 100 }), diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/utils/data_generator/get_timestamp.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/utils/data_generator/get_timestamp.ts index e828767a39650..eb0de446d09d2 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/utils/data_generator/get_timestamp.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/utils/data_generator/get_timestamp.ts @@ -4,12 +4,12 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import faker from 'faker'; +import { faker } from '@faker-js/faker'; import type { IndexingInterval } from './types'; export const getTimestamp = (interval?: IndexingInterval) => { if (interval) { - return faker.date.between(...interval).toISOString(); + return faker.date.between({ from: interval[0], to: interval[1] }).toISOString(); } return new Date().toISOString(); diff --git a/x-pack/test/security_solution_cypress/config.ts b/x-pack/test/security_solution_cypress/config.ts index f02968945087d..6b10122213ca7 100644 --- a/x-pack/test/security_solution_cypress/config.ts +++ b/x-pack/test/security_solution_cypress/config.ts @@ -44,6 +44,9 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { // See https://github.com/elastic/kibana/pull/125396 for details '--xpack.alerting.rules.minimumScheduleInterval.value=1s', '--xpack.ruleRegistry.unsafe.legacyMultiTenancy.enabled=true', + `--xpack.securitySolution.enableExperimental=${JSON.stringify([ + 'alertSuppressionForSequenceEqlRuleEnabled', + ])}`, // mock cloud to enable the guided onboarding tour in e2e tests '--xpack.cloud.id=test', `--home.disableWelcomeScreen=true`, diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/eql_rule_suppression.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/eql_rule_suppression.cy.ts index 31855c3efff15..8f4b6a10faeb8 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/eql_rule_suppression.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/eql_rule_suppression.cy.ts @@ -38,7 +38,7 @@ const SUPPRESS_BY_FIELDS = ['agent.type']; describe( 'Detection Rule Creation - EQL Rules - With Alert Suppression', { - tags: ['@ess', '@serverless', '@skipInServerlessMKI'], + tags: ['@ess', '@skipInServerlessMKI'], }, () => { describe('with non-sequence queries', () => { diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/eql_rule_suppression_sequence.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/eql_rule_suppression_sequence.cy.ts index 8f07781b7732c..2cf8526a2f9c3 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/eql_rule_suppression_sequence.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/eql_rule_suppression_sequence.cy.ts @@ -8,20 +8,45 @@ import { getEqlSequenceRule } from '../../../../objects/rule'; import { login } from '../../../../tasks/login'; import { visit } from '../../../../tasks/navigation'; +import { getDetails } from '../../../../tasks/rule_details'; import { CREATE_RULE_URL } from '../../../../urls/navigation'; import { deleteAlertsAndRules } from '../../../../tasks/api_calls/common'; -import { fillDefineEqlRule, selectEqlRuleType } from '../../../../tasks/create_new_rule'; +import { + fillAlertSuppressionFields, + fillAboutRuleMinimumAndContinue, + createRuleWithoutEnabling, + skipScheduleRuleAction, + continueFromDefineStep, + selectAlertSuppressionPerInterval, + setAlertSuppressionDuration, + selectDoNotSuppressForMissingFields, + fillDefineEqlRule, + selectEqlRuleType, +} from '../../../../tasks/create_new_rule'; -import { TOOLTIP } from '../../../../screens/common'; import { - ALERT_SUPPRESSION_FIELDS, - ALERT_SUPPRESSION_FIELDS_INPUT, -} from '../../../../screens/create_new_rule'; + DEFINITION_DETAILS, + SUPPRESS_FOR_DETAILS, + SUPPRESS_BY_DETAILS, + SUPPRESS_MISSING_FIELD, + DETAILS_TITLE, +} from '../../../../screens/rule_details'; + +const SUPPRESS_BY_FIELDS = ['agent.type']; describe( 'Detection Rule Creation - EQL Rules - With Alert Suppression', { - tags: ['@ess', '@serverless'], + // skipped in MKI as it depends on feature flag alertSuppressionForEsqlRuleEnabled + // alertSuppressionForEsqlRuleEnabled feature flag is also enabled in a global config + tags: ['@ess', '@skipInServerlessMKI'], + env: { + kbnServerArgs: [ + `--xpack.securitySolution.enableExperimental=${JSON.stringify([ + 'alertSuppressionForSequenceEqlRuleEnabled', + ])}`, + ], + }, }, () => { describe('with sequence queries ', () => { @@ -36,11 +61,70 @@ describe( fillDefineEqlRule(rule); }); - it('disables the suppression fields and presents an informative tooltip', () => { - cy.get(ALERT_SUPPRESSION_FIELDS_INPUT).should('be.disabled'); + it('creates a rule with a "per rule execution" suppression duration', () => { + // selecting only suppression fields, the rest options would be default + fillAlertSuppressionFields(SUPPRESS_BY_FIELDS); + continueFromDefineStep(); + + // ensures details preview works correctly + cy.get(DEFINITION_DETAILS).within(() => { + getDetails(SUPPRESS_BY_DETAILS).should('have.text', SUPPRESS_BY_FIELDS.join('')); + getDetails(SUPPRESS_FOR_DETAILS).should('have.text', 'One rule execution'); + getDetails(SUPPRESS_MISSING_FIELD).should( + 'have.text', + 'Suppress and group alerts for events with missing fields' + ); + + // suppression functionality should be under Tech Preview + cy.contains(DETAILS_TITLE, SUPPRESS_FOR_DETAILS).contains('Technical Preview'); + }); + + fillAboutRuleMinimumAndContinue(rule); + skipScheduleRuleAction(); + createRuleWithoutEnabling(); + + cy.get(DEFINITION_DETAILS).within(() => { + getDetails(SUPPRESS_BY_DETAILS).should('have.text', SUPPRESS_BY_FIELDS.join('')); + getDetails(SUPPRESS_FOR_DETAILS).should('have.text', 'One rule execution'); + getDetails(SUPPRESS_MISSING_FIELD).should( + 'have.text', + 'Suppress and group alerts for events with missing fields' + ); + }); + }); + + it('creates a rule with a "per time interval" suppression duration', () => { + const expectedSuppressByFields = SUPPRESS_BY_FIELDS.slice(0, 1); + + // fill suppress by fields and select non-default suppression options + fillAlertSuppressionFields(expectedSuppressByFields); + selectAlertSuppressionPerInterval(); + setAlertSuppressionDuration(45, 'm'); + selectDoNotSuppressForMissingFields(); + continueFromDefineStep(); + + // ensures details preview works correctly + cy.get(DEFINITION_DETAILS).within(() => { + getDetails(SUPPRESS_BY_DETAILS).should('have.text', expectedSuppressByFields.join('')); + getDetails(SUPPRESS_FOR_DETAILS).should('have.text', '45m'); + getDetails(SUPPRESS_MISSING_FIELD).should( + 'have.text', + 'Do not suppress alerts for events with missing fields' + ); + }); + + fillAboutRuleMinimumAndContinue(rule); + skipScheduleRuleAction(); + createRuleWithoutEnabling(); - cy.get(ALERT_SUPPRESSION_FIELDS).trigger('mouseover'); - cy.get(TOOLTIP).contains('Suppression is not supported for EQL sequence queries.'); + cy.get(DEFINITION_DETAILS).within(() => { + getDetails(SUPPRESS_BY_DETAILS).should('have.text', expectedSuppressByFields.join('')); + getDetails(SUPPRESS_FOR_DETAILS).should('have.text', '45m'); + getDetails(SUPPRESS_MISSING_FIELD).should( + 'have.text', + 'Do not suppress alerts for events with missing fields' + ); + }); }); }); } diff --git a/x-pack/test/spaces_api_integration/spaces_only/telemetry/telemetry.ts b/x-pack/test/spaces_api_integration/spaces_only/telemetry/telemetry.ts index 4a43c3831627c..a74fbf6b75383 100644 --- a/x-pack/test/spaces_api_integration/spaces_only/telemetry/telemetry.ts +++ b/x-pack/test/spaces_api_integration/spaces_only/telemetry/telemetry.ts @@ -100,6 +100,7 @@ export default function ({ getService }: FtrProviderContext) { savedObjectsManagement: 1, savedQueryManagement: 0, dataQuality: 0, + entityManager: 0, }); }); diff --git a/x-pack/test/tsconfig.json b/x-pack/test/tsconfig.json index 9db41aecbb612..95178eca83172 100644 --- a/x-pack/test/tsconfig.json +++ b/x-pack/test/tsconfig.json @@ -188,5 +188,8 @@ "@kbn/ai-assistant-common", "@kbn/core-deprecations-common", "@kbn/usage-collection-plugin", + "@kbn/sse-utils-server", + "@kbn/gen-ai-functional-testing", + "@kbn/integration-assistant-plugin" ] } diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/platform_security/authorization.ts b/x-pack/test_serverless/api_integration/test_suites/observability/platform_security/authorization.ts index b6dbceedfe65e..91812dbecb027 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/platform_security/authorization.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/platform_security/authorization.ts @@ -4235,6 +4235,8 @@ export default function ({ getService }: FtrProviderContext) { "login:", "api:bulkGetUserProfiles", "api:dashboardUsageStats", + "api:savedQuery:manage", + "api:savedQuery:read", "api:store_search_session", "api:generateReport", "api:downloadCsv", @@ -4418,6 +4420,8 @@ export default function ({ getService }: FtrProviderContext) { "login:", "api:bulkGetUserProfiles", "api:dashboardUsageStats", + "api:savedQuery:manage", + "api:savedQuery:read", "app:dashboards", "app:kibana", "ui:catalogue/dashboard", @@ -4570,6 +4574,7 @@ export default function ({ getService }: FtrProviderContext) { "login:", "api:bulkGetUserProfiles", "api:dashboardUsageStats", + "api:savedQuery:read", "app:dashboards", "app:kibana", "ui:catalogue/dashboard", @@ -4669,6 +4674,7 @@ export default function ({ getService }: FtrProviderContext) { "login:", "api:bulkGetUserProfiles", "api:dashboardUsageStats", + "api:savedQuery:read", "app:dashboards", "app:kibana", "ui:catalogue/dashboard", @@ -4804,6 +4810,8 @@ export default function ({ getService }: FtrProviderContext) { "all": Array [ "login:", "api:fileUpload:analyzeFile", + "api:savedQuery:manage", + "api:savedQuery:read", "api:store_search_session", "api:generateReport", "app:discover", @@ -6032,6 +6040,8 @@ export default function ({ getService }: FtrProviderContext) { "minimal_all": Array [ "login:", "api:fileUpload:analyzeFile", + "api:savedQuery:manage", + "api:savedQuery:read", "app:discover", "app:kibana", "ui:catalogue/discover", @@ -7227,6 +7237,7 @@ export default function ({ getService }: FtrProviderContext) { ], "minimal_read": Array [ "login:", + "api:savedQuery:read", "app:discover", "app:kibana", "ui:catalogue/discover", @@ -7718,6 +7729,7 @@ export default function ({ getService }: FtrProviderContext) { ], "read": Array [ "login:", + "api:savedQuery:read", "app:discover", "app:kibana", "ui:catalogue/discover", diff --git a/x-pack/test_serverless/api_integration/test_suites/search/platform_security/authorization.ts b/x-pack/test_serverless/api_integration/test_suites/search/platform_security/authorization.ts index a30b8aca571ea..ed9fdd30cbdae 100644 --- a/x-pack/test_serverless/api_integration/test_suites/search/platform_security/authorization.ts +++ b/x-pack/test_serverless/api_integration/test_suites/search/platform_security/authorization.ts @@ -42,6 +42,8 @@ export default function ({ getService }: FtrProviderContext) { "login:", "api:bulkGetUserProfiles", "api:dashboardUsageStats", + "api:savedQuery:manage", + "api:savedQuery:read", "api:store_search_session", "api:generateReport", "api:downloadCsv", @@ -225,6 +227,8 @@ export default function ({ getService }: FtrProviderContext) { "login:", "api:bulkGetUserProfiles", "api:dashboardUsageStats", + "api:savedQuery:manage", + "api:savedQuery:read", "app:dashboards", "app:kibana", "ui:catalogue/dashboard", @@ -377,6 +381,7 @@ export default function ({ getService }: FtrProviderContext) { "login:", "api:bulkGetUserProfiles", "api:dashboardUsageStats", + "api:savedQuery:read", "app:dashboards", "app:kibana", "ui:catalogue/dashboard", @@ -476,6 +481,7 @@ export default function ({ getService }: FtrProviderContext) { "login:", "api:bulkGetUserProfiles", "api:dashboardUsageStats", + "api:savedQuery:read", "app:dashboards", "app:kibana", "ui:catalogue/dashboard", @@ -611,6 +617,8 @@ export default function ({ getService }: FtrProviderContext) { "all": Array [ "login:", "api:fileUpload:analyzeFile", + "api:savedQuery:manage", + "api:savedQuery:read", "api:store_search_session", "api:generateReport", "app:discover", @@ -711,6 +719,8 @@ export default function ({ getService }: FtrProviderContext) { "minimal_all": Array [ "login:", "api:fileUpload:analyzeFile", + "api:savedQuery:manage", + "api:savedQuery:read", "app:discover", "app:kibana", "ui:catalogue/discover", @@ -778,6 +788,7 @@ export default function ({ getService }: FtrProviderContext) { ], "minimal_read": Array [ "login:", + "api:savedQuery:read", "app:discover", "app:kibana", "ui:catalogue/discover", @@ -822,6 +833,7 @@ export default function ({ getService }: FtrProviderContext) { ], "read": Array [ "login:", + "api:savedQuery:read", "app:discover", "app:kibana", "ui:catalogue/discover", diff --git a/x-pack/test_serverless/api_integration/test_suites/security/platform_security/authorization.ts b/x-pack/test_serverless/api_integration/test_suites/security/platform_security/authorization.ts index c3b37539946ff..1f9a7f74fd572 100644 --- a/x-pack/test_serverless/api_integration/test_suites/security/platform_security/authorization.ts +++ b/x-pack/test_serverless/api_integration/test_suites/security/platform_security/authorization.ts @@ -742,6 +742,8 @@ export default function ({ getService }: FtrProviderContext) { "alerting:siem.newTermsRule/siem/alert/getAlertSummary", "alerting:siem.newTermsRule/siem/alert/update", "api:fileUpload:analyzeFile", + "api:savedQuery:manage", + "api:savedQuery:read", "api:store_search_session", "api:generateReport", "app:discover", @@ -1597,6 +1599,8 @@ export default function ({ getService }: FtrProviderContext) { "alerting:siem.newTermsRule/siem/alert/getAlertSummary", "alerting:siem.newTermsRule/siem/alert/update", "api:fileUpload:analyzeFile", + "api:savedQuery:manage", + "api:savedQuery:read", "api:store_search_session", "api:generateReport", "app:discover", @@ -2003,6 +2007,7 @@ export default function ({ getService }: FtrProviderContext) { "alerting:siem.newTermsRule/siem/alert/getAuthorizedAlertsIndices", "alerting:siem.newTermsRule/siem/alert/getAlertSummary", "alerting:siem.newTermsRule/siem/alert/update", + "api:savedQuery:read", "app:discover", "ui:catalogue/discover", "ui:navLinks/discover", @@ -2370,6 +2375,7 @@ export default function ({ getService }: FtrProviderContext) { "alerting:siem.newTermsRule/siem/alert/getAuthorizedAlertsIndices", "alerting:siem.newTermsRule/siem/alert/getAlertSummary", "alerting:siem.newTermsRule/siem/alert/update", + "api:savedQuery:read", "app:discover", "ui:catalogue/discover", "ui:navLinks/discover", diff --git a/x-pack/test_serverless/functional/page_objects/svl_search_index_detail_page.ts b/x-pack/test_serverless/functional/page_objects/svl_search_index_detail_page.ts index 0609b2bec4aed..17821c7dfe73b 100644 --- a/x-pack/test_serverless/functional/page_objects/svl_search_index_detail_page.ts +++ b/x-pack/test_serverless/functional/page_objects/svl_search_index_detail_page.ts @@ -208,6 +208,33 @@ export function SvlSearchIndexDetailPageProvider({ getService }: FtrProviderCont ); }, + async expectHasSampleDocuments() { + await testSubjects.existOrFail('ingestDataCodeExample-code-block'); + expect(await testSubjects.getVisibleText('ingestDataCodeExample-code-block')).to.contain( + 'Yellowstone National Park' + ); + expect(await testSubjects.getVisibleText('ingestDataCodeExample-code-block')).to.contain( + 'Yosemite National Park' + ); + expect(await testSubjects.getVisibleText('ingestDataCodeExample-code-block')).to.contain( + 'Rocky Mountain National Park' + ); + }, + + async expectSampleDocumentsWithCustomMappings() { + await browser.refresh(); + await testSubjects.existOrFail('ingestDataCodeExample-code-block'); + expect(await testSubjects.getVisibleText('ingestDataCodeExample-code-block')).to.contain( + 'Example text 1' + ); + expect(await testSubjects.getVisibleText('ingestDataCodeExample-code-block')).to.contain( + 'Example text 2' + ); + expect(await testSubjects.getVisibleText('ingestDataCodeExample-code-block')).to.contain( + 'Example text 3' + ); + }, + async clickFirstDocumentDeleteAction() { await testSubjects.existOrFail('documentMetadataButton'); await testSubjects.click('documentMetadataButton'); diff --git a/x-pack/test_serverless/functional/test_suites/common/dev_tools/search_profiler.ts b/x-pack/test_serverless/functional/test_suites/common/dev_tools/search_profiler.ts index 979943ffa602c..169f266e0c296 100644 --- a/x-pack/test_serverless/functional/test_suites/common/dev_tools/search_profiler.ts +++ b/x-pack/test_serverless/functional/test_suites/common/dev_tools/search_profiler.ts @@ -18,6 +18,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const PageObjects = getPageObjects(['svlCommonPage', 'common', 'searchProfiler']); const retry = getService('retry'); const es = getService('es'); + const browser = getService('browser'); describe('Search Profiler Editor', () => { before(async () => { @@ -81,6 +82,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('profiles a simple query', async () => { + await browser.refresh(); await PageObjects.searchProfiler.setIndexName(indexName); await PageObjects.searchProfiler.setQuery(testQuery); diff --git a/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/degraded_field_flyout.ts b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/degraded_field_flyout.ts index 4b28ba5e897dd..7d12db16850cc 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/degraded_field_flyout.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/degraded_field_flyout.ts @@ -54,7 +54,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const apmAppDatasetName = 'apm.app.tug'; const apmAppDataStreamName = `${type}-${apmAppDatasetName}-${defaultNamespace}`; - describe('Degraded fields flyout', () => { + describe('Degraded fields flyout', function () { + // see details: https://github.com/elastic/kibana/issues/202641 + this.tags(['failsOnMKI']); describe('degraded field flyout open-close', () => { before(async () => { await synthtrace.index([ diff --git a/x-pack/test_serverless/functional/test_suites/search/search_index_detail.ts b/x-pack/test_serverless/functional/test_suites/search/search_index_detail.ts index 097da2201e1e7..7d47bd732746b 100644 --- a/x-pack/test_serverless/functional/test_suites/search/search_index_detail.ts +++ b/x-pack/test_serverless/functional/test_suites/search/search_index_detail.ts @@ -54,6 +54,33 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await pageObjects.svlSearchIndexDetailPage.expectConnectionDetails(); }); + describe('check code example texts', () => { + const indexNameCodeExample = 'test-my-index2'; + before(async () => { + await es.indices.create({ index: indexNameCodeExample }); + await svlSearchNavigation.navigateToIndexDetailPage(indexNameCodeExample); + }); + + after(async () => { + await esDeleteAllIndices(indexNameCodeExample); + }); + + it('should have basic example texts', async () => { + await pageObjects.svlSearchIndexDetailPage.expectHasSampleDocuments(); + }); + + it('should have other example texts when mapping changed', async () => { + await es.indices.putMapping({ + index: indexNameCodeExample, + properties: { + text: { type: 'text' }, + number: { type: 'integer' }, + }, + }); + await pageObjects.svlSearchIndexDetailPage.expectSampleDocumentsWithCustomMappings(); + }); + }); + describe.skip('API key details', () => { // Flaky test related with deleting API keys it('should show api key', async () => { diff --git a/yarn.lock b/yarn.lock index 90429bc21f489..b936d99ebe74a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -44,6 +44,15 @@ call-me-maybe "^1.0.1" js-yaml "^3.13.1" +"@apidevtools/json-schema-ref-parser@^11.5.5": + version "11.7.2" + resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-11.7.2.tgz#cdf3e0aded21492364a70e193b45b7cf4177f031" + integrity sha512-4gY54eEGEstClvEkGnwVkTkrx0sqwemEFG5OSRRn3tD91XH0+Q8XIkYIfo7IwEWPpJZwILb9GUXeShtplRc/eA== + dependencies: + "@jsdevtools/ono" "^7.1.3" + "@types/json-schema" "^7.0.15" + js-yaml "^4.1.0" + "@apidevtools/json-schema-ref-parser@^9.0.6": version "9.0.9" resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz#d720f9256e3609621280584f2b47ae165359268b" @@ -2295,25 +2304,25 @@ resolved "https://registry.yarnpkg.com/@elastic/eslint-plugin-eui/-/eslint-plugin-eui-0.0.2.tgz#56b9ef03984a05cc213772ae3713ea8ef47b0314" integrity sha512-IoxURM5zraoQ7C8f+mJb9HYSENiZGgRVcG4tLQxE61yHNNRDXtGDWTZh8N1KIHcsqN1CEPETjuzBXkJYF/fDiQ== -"@elastic/eui-theme-borealis@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@elastic/eui-theme-borealis/-/eui-theme-borealis-0.0.3.tgz#a84c59009a331acd711ed14729237a9f348a14b5" - integrity sha512-aO+41iq3igDC852ZUiCkbI44TAt44buxaw3bQS1/Cy50oYlG7TAGEm4f7WZbEnMRK6EeqCNs3Hj+rU5HMDi9vA== +"@elastic/eui-theme-borealis@0.0.4": + version "0.0.4" + resolved "https://registry.yarnpkg.com/@elastic/eui-theme-borealis/-/eui-theme-borealis-0.0.4.tgz#5a1e8d5cd02f25634928106c9845389f6b8568bb" + integrity sha512-6RV49J0saf2zjcf1uXYpoU9AgRlWs+ot+GszZz6iCBavPl7MdMlR13x5WdT7ewtx7cju9taEWhS1YDVfGVCFSA== -"@elastic/eui-theme-common@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@elastic/eui-theme-common/-/eui-theme-common-0.0.3.tgz#55b916229bed02276d4cf8dc9dfb1f72fc47c482" - integrity sha512-I7x5/Z1xxhNvlWj4oUKbbExUBD3tbfIPMvcijeGy44uXOa10Bs0duAcuOdDsQZqQdB7V44KyT5rH2dTqU5ogQw== +"@elastic/eui-theme-common@0.0.4": + version "0.0.4" + resolved "https://registry.yarnpkg.com/@elastic/eui-theme-common/-/eui-theme-common-0.0.4.tgz#83db50a46251c75e6a3c07df0dee3eedb5d49e17" + integrity sha512-IDQ15ytDwlB5OO2UlPKccUR37QnRp1xZE8zPy8LoCPQAX8hgDYjikk8gjA2eixCuTm9+t6Suz+Xuha69VcMMZg== dependencies: "@types/lodash" "^4.14.202" lodash "^4.17.21" -"@elastic/eui@98.0.0-borealis.1": - version "98.0.0-borealis.1" - resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-98.0.0-borealis.1.tgz#0f4e6a1a0afc3270ad1419f540e0d6d709899d63" - integrity sha512-npPTj62wkG2Hvqi/4bkWGi9R8LYsa6cjNBbwj60u9GQbovzR45ZGSjxWfRxrgR3ajqLqf22MnqCKab5hnu/7Mg== +"@elastic/eui@98.1.0-borealis.0": + version "98.1.0-borealis.0" + resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-98.1.0-borealis.0.tgz#b0db1416d81863816939ae4dc067cc089a9f9789" + integrity sha512-DMu+H0j5WrByhJr3Xc3strmsIiwKHLYCOKsTWOqv9CS8tcRFaYa2zHhwhgVhRuBE7XdX++uCsV4vVGrd8qJMVw== dependencies: - "@elastic/eui-theme-common" "0.0.3" + "@elastic/eui-theme-common" "0.0.4" "@hello-pangea/dnd" "^16.6.0" "@types/lodash" "^4.14.202" "@types/numeral" "^2.0.5" @@ -5772,6 +5781,10 @@ version "0.0.0" uid "" +"@kbn/gen-ai-functional-testing@link:packages/kbn-gen-ai-functional-testing": + version "0.0.0" + uid "" + "@kbn/gen-ai-streaming-response-example-plugin@link:x-pack/examples/gen_ai_streaming_response_example": version "0.0.0" uid "" @@ -6772,6 +6785,10 @@ version "0.0.0" uid "" +"@kbn/response-ops-rule-form@link:packages/response-ops/rule_form": + version "0.0.0" + uid "" + "@kbn/response-ops-rule-params@link:packages/response-ops/rule_params": version "0.0.0" uid "" @@ -8058,12 +8075,15 @@ "@langchain/core" ">0.1.0 <0.3.0" js-tiktoken "^1.0.12" -"@langtrase/trace-attributes@^3.0.8": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@langtrase/trace-attributes/-/trace-attributes-3.0.8.tgz#ff6ae44cfc048a9da10a7949664b2060a71b6304" - integrity sha512-GXUH+a0EiO8YgrZR2fkqM0B/xrf3Db1OHDlJUOGVuwacC+LJp89MbJQBlmeu3BBJLMMHG0+q4ERYEt8enCHjHw== +"@langtrase/trace-attributes@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@langtrase/trace-attributes/-/trace-attributes-7.5.0.tgz#b1a523d90f62f233f282fa3949c5da397d3aa0e9" + integrity sha512-U+2dMRJaRv0R6i9qrzh1hXREkrqg01EboCDfrovXeXySFsVGCuvSD8iavXzheOSWVLy9XbiM6gJjekdUFhAhQg== dependencies: + js-tiktoken "^1.0.14" + json-schema-to-typescript "^14.1.0" ncp "^2.0.0" + typescript "^5.5.3" "@launchdarkly/js-sdk-common@2.12.0": version "2.12.0" @@ -8986,12 +9006,12 @@ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@playwright/test@=1.46.0": - version "1.46.0" - resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.46.0.tgz#ccea6d22c40ee7fa567e4192fafbdf2a907e2714" - integrity sha512-/QYft5VArOrGRP5pgkrfKksqsKA6CEFyGQ/gjNe6q0y4tZ1aaPfq4gIjudr1s3D+pXyrPRdsy4opKDrjBabE5w== +"@playwright/test@1.49.0": + version "1.49.0" + resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.49.0.tgz#74227385b58317ee076b86b56d0e1e1b25cff01e" + integrity sha512-DMulbwQURa8rNIQrf94+jPJQ4FmOVdpE5ZppRNvWVjvhC+6sOeo28r8MgIpQRYouXRtt/FCCXU7zn20jnHR4Qw== dependencies: - playwright "1.46.0" + playwright "1.49.0" "@pmmmwh/react-refresh-webpack-plugin@^0.5.3": version "0.5.7" @@ -9360,13 +9380,13 @@ "@smithy/url-parser" "^3.0.8" tslib "^2.6.2" -"@smithy/eventstream-codec@^3.1.1", "@smithy/eventstream-codec@^3.1.7": - version "3.1.7" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-3.1.7.tgz#5bfaffbc83ae374ffd85a755a8200ba3c7aed016" - integrity sha512-kVSXScIiRN7q+s1x7BrQtZ1Aa9hvvP9FeCqCdBxv37GimIHgBCOnZ5Ip80HLt0DhnAKpiobFdGqTFgbaJNrazA== +"@smithy/eventstream-codec@^3.1.1", "@smithy/eventstream-codec@^3.1.9": + version "3.1.9" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-3.1.9.tgz#4271354e75e57d30771fca307da403896c657430" + integrity sha512-F574nX0hhlNOjBnP+noLtsPFqXnWh2L0+nZKCwcu7P7J8k+k+rdIDs+RMnrMwrzhUE4mwMgyN0cYnEn0G8yrnQ== dependencies: "@aws-crypto/crc32" "5.2.0" - "@smithy/types" "^3.6.0" + "@smithy/types" "^3.7.1" "@smithy/util-hex-encoding" "^3.0.0" tslib "^2.6.2" @@ -9387,22 +9407,22 @@ "@smithy/types" "^3.6.0" tslib "^2.6.2" -"@smithy/eventstream-serde-node@^3.0.10", "@smithy/eventstream-serde-node@^3.0.3": - version "3.0.10" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.10.tgz#da40b872001390bb47807186855faba8172b3b5b" - integrity sha512-hjpU1tIsJ9qpcoZq9zGHBJPBOeBGYt+n8vfhDwnITPhEre6APrvqq/y3XMDEGUT2cWQ4ramNqBPRbx3qn55rhw== +"@smithy/eventstream-serde-node@^3.0.10", "@smithy/eventstream-serde-node@^3.0.12": + version "3.0.12" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.12.tgz#7312383e821b5807abf2fe12316c2a8967d022f0" + integrity sha512-kiZymxXvZ4tnuYsPSMUHe+MMfc4FTeFWJIc0Q5wygJoUQM4rVHNghvd48y7ppuulNMbuYt95ah71pYc2+o4JOA== dependencies: - "@smithy/eventstream-serde-universal" "^3.0.10" - "@smithy/types" "^3.6.0" + "@smithy/eventstream-serde-universal" "^3.0.12" + "@smithy/types" "^3.7.1" tslib "^2.6.2" -"@smithy/eventstream-serde-universal@^3.0.10": - version "3.0.10" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.10.tgz#b24e66fec9ec003eb0a1d6733fa22ded43129281" - integrity sha512-ewG1GHbbqsFZ4asaq40KmxCmXO+AFSM1b+DcO2C03dyJj/ZH71CiTg853FSE/3SHK9q3jiYQIFjlGSwfxQ9kww== +"@smithy/eventstream-serde-universal@^3.0.10", "@smithy/eventstream-serde-universal@^3.0.12": + version "3.0.12" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.12.tgz#803d7beb29a3de4a64e91af97331a4654741c35f" + integrity sha512-1i8ifhLJrOZ+pEifTlF0EfZzMLUGQggYQ6WmZ4d5g77zEKf7oZ0kvh1yKWHPjofvOwqrkwRDVuxuYC8wVd662A== dependencies: - "@smithy/eventstream-codec" "^3.1.7" - "@smithy/types" "^3.6.0" + "@smithy/eventstream-codec" "^3.1.9" + "@smithy/types" "^3.7.1" tslib "^2.6.2" "@smithy/fetch-http-handler@^4.0.0": @@ -9571,29 +9591,16 @@ "@smithy/types" "^3.6.0" tslib "^2.6.2" -"@smithy/signature-v4@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-3.1.1.tgz#4882aacb3260a47b8279b2ffc6a135e03e225260" - integrity sha512-2/vlG86Sr489XX8TA/F+VDA+P04ESef04pSz0wRtlQBExcSPjqO08rvrkcas2zLnJ51i+7ukOURCkgqixBYjSQ== - dependencies: - "@smithy/is-array-buffer" "^3.0.0" - "@smithy/types" "^3.2.0" - "@smithy/util-hex-encoding" "^3.0.0" - "@smithy/util-middleware" "^3.0.2" - "@smithy/util-uri-escape" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/signature-v4@^4.2.0": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-4.2.1.tgz#a918fd7d99af9f60aa07617506fa54be408126ee" - integrity sha512-NsV1jF4EvmO5wqmaSzlnTVetemBS3FZHdyc5CExbDljcyJCEEkJr8ANu2JvtNbVg/9MvKAWV44kTrGS+Pi4INg== +"@smithy/signature-v4@^4.2.0", "@smithy/signature-v4@^4.2.3": + version "4.2.3" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-4.2.3.tgz#abbca5e5fe9158422b3125b2956791a325a27f22" + integrity sha512-pPSQQ2v2vu9vc8iew7sszLd0O09I5TRc5zhY71KA+Ao0xYazIG+uLeHbTJfIWGO3BGVLiXjUr3EEeCcEQLjpWQ== dependencies: "@smithy/is-array-buffer" "^3.0.0" - "@smithy/protocol-http" "^4.1.5" - "@smithy/types" "^3.6.0" + "@smithy/protocol-http" "^4.1.7" + "@smithy/types" "^3.7.1" "@smithy/util-hex-encoding" "^3.0.0" - "@smithy/util-middleware" "^3.0.8" + "@smithy/util-middleware" "^3.0.10" "@smithy/util-uri-escape" "^3.0.0" "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" @@ -9611,7 +9618,7 @@ "@smithy/util-stream" "^3.2.1" tslib "^2.6.2" -"@smithy/types@^3.2.0", "@smithy/types@^3.6.0", "@smithy/types@^3.7.1": +"@smithy/types@^3.6.0", "@smithy/types@^3.7.1": version "3.7.1" resolved "https://registry.yarnpkg.com/@smithy/types/-/types-3.7.1.tgz#4af54c4e28351e9101996785a33f2fdbf93debe7" integrity sha512-XKLcLXZY7sUQgvvWyeaL/qwNPp6V3dWcUjqrQKjSb+tzYiCy340R/c64LV5j+Tnb2GhmunEX0eou+L+m2hJNYA== @@ -9713,12 +9720,12 @@ dependencies: tslib "^2.6.2" -"@smithy/util-middleware@^3.0.2", "@smithy/util-middleware@^3.0.8": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-3.0.8.tgz#372bc7a2845408ad69da039d277fc23c2734d0c6" - integrity sha512-p7iYAPaQjoeM+AKABpYWeDdtwQNxasr4aXQEA/OmbOaug9V0odRVDy3Wx4ci8soljE/JXQo+abV0qZpW8NX0yA== +"@smithy/util-middleware@^3.0.10", "@smithy/util-middleware@^3.0.8": + version "3.0.10" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-3.0.10.tgz#ab8be99f1aaafe5a5490c344f27a264b72b7592f" + integrity sha512-eJO+/+RsrG2RpmY68jZdwQtnfsxjmPxzMlQpnHKjFPwrYqvlcT+fHdT+ZVwcjlWSrByOhGr9Ff2GG17efc192A== dependencies: - "@smithy/types" "^3.6.0" + "@smithy/types" "^3.7.1" tslib "^2.6.2" "@smithy/util-retry@^3.0.8": @@ -11411,10 +11418,10 @@ "@types/cheerio" "*" "@types/react" "*" -"@types/eslint-scope@^3.7.3": - version "3.7.4" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" - integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== +"@types/eslint-scope@^3.7.7": + version "3.7.7" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" + integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== dependencies: "@types/eslint" "*" "@types/estree" "*" @@ -11453,15 +11460,10 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== -"@types/estree@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" - integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== - -"@types/estree@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== +"@types/estree@^1.0.0", "@types/estree@^1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" + integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== "@types/expect@^1.20.4": version "1.20.4" @@ -11493,11 +11495,6 @@ resolved "https://registry.yarnpkg.com/@types/extract-zip/-/extract-zip-1.6.2.tgz#5c7eb441c41136167a42b88b64051e6260c29e86" integrity sha1-XH60QcQRNhZ6QriLZAUeYmDCnoY= -"@types/faker@^5.1.5": - version "5.1.5" - resolved "https://registry.yarnpkg.com/@types/faker/-/faker-5.1.5.tgz#f14b015e0100232bb00c6dd7611505efb08709a0" - integrity sha512-2uEQFb7bsx68rqD4F8q95wZq6LTLOyexjv6BnvJogCO4jStkyc6IDEkODPQcWfovI6g6M3uPQ2/uD/oedJKkNw== - "@types/fetch-mock@^7.3.1": version "7.3.1" resolved "https://registry.yarnpkg.com/@types/fetch-mock/-/fetch-mock-7.3.1.tgz#df7421e8bcb351b430bfbfa5c52bb353826ac94f" @@ -11714,7 +11711,7 @@ "@types/tough-cookie" "*" parse5 "^7.0.0" -"@types/json-schema@*", "@types/json-schema@^7", "@types/json-schema@^7.0.0", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": +"@types/json-schema@*", "@types/json-schema@^7.0.0", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.11" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== @@ -11783,7 +11780,7 @@ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.0.tgz#d774355e41f372d5350a4d0714abb48194a489c3" integrity sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA== -"@types/lodash@^4.17.13": +"@types/lodash@^4.17.0", "@types/lodash@^4.17.13": version "4.17.13" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.13.tgz#786e2d67cfd95e32862143abe7463a7f90c300eb" integrity sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg== @@ -13143,11 +13140,6 @@ acorn-globals@^7.0.0: acorn "^8.1.0" acorn-walk "^8.0.2" -acorn-import-assertions@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" - integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== - acorn-import-attributes@^1.9.5: version "1.9.5" resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef" @@ -13201,10 +13193,10 @@ acorn@^7.0.0, acorn@^7.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.0.4, acorn@^8.1.0, acorn@^8.11.0, acorn@^8.12.1, acorn@^8.4.1, acorn@^8.7.1, acorn@^8.8.0, acorn@^8.8.2, acorn@^8.9.0: - version "8.13.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.13.0.tgz#2a30d670818ad16ddd6a35d3842dacec9e5d7ca3" - integrity sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w== +acorn@^8.0.4, acorn@^8.1.0, acorn@^8.11.0, acorn@^8.12.1, acorn@^8.14.0, acorn@^8.4.1, acorn@^8.8.0, acorn@^8.8.2, acorn@^8.9.0: + version "8.14.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" + integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== address@^1.0.1: version "1.1.2" @@ -13334,7 +13326,7 @@ ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.0.1, ajv@^8.12.0, ajv@^8.17.1, ajv@^8.6.3, ajv@^8.8.0: +ajv@^8.0.0, ajv@^8.0.1, ajv@^8.17.1, ajv@^8.6.3, ajv@^8.8.0: version "8.17.1" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== @@ -13929,10 +13921,10 @@ aws-sign2@~0.7.0: resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= -aws4@^1.12.0, aws4@^1.8.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" - integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== +aws4@^1.13.2, aws4@^1.8.0: + version "1.13.2" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.13.2.tgz#0aa167216965ac9474ccfa83892cfb6b3e1e52ef" + integrity sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw== axe-core@^4.10.0: version "4.10.0" @@ -13944,10 +13936,10 @@ axe-core@^4.2.0, axe-core@^4.6.2: resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.2.tgz#040a7342b20765cb18bb50b628394c21bccc17a0" integrity sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g== -axios@^1.0.0, axios@^1.3.4, axios@^1.6.0, axios@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.4.tgz#4c8ded1b43683c8dd362973c393f3ede24052aa2" - integrity sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw== +axios@^1.0.0, axios@^1.3.4, axios@^1.6.0, axios@^1.7.4, axios@^1.7.9: + version "1.7.9" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.9.tgz#d7d071380c132a24accda1b2cfc1535b79ec650a" + integrity sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw== dependencies: follow-redirects "^1.15.6" form-data "^4.0.0" @@ -14633,15 +14625,15 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.16.6, browserslist@^4.20.3, browserslist@^4.21.10, browserslist@^4.22.2, browserslist@^4.23.0: - version "4.23.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" - integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.16.6, browserslist@^4.20.3, browserslist@^4.22.2, browserslist@^4.23.0, browserslist@^4.24.0: + version "4.24.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.2.tgz#f5845bc91069dbd55ee89faf9822e1d885d16580" + integrity sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg== dependencies: - caniuse-lite "^1.0.30001587" - electron-to-chromium "^1.4.668" - node-releases "^2.0.14" - update-browserslist-db "^1.0.13" + caniuse-lite "^1.0.30001669" + electron-to-chromium "^1.5.41" + node-releases "^2.0.18" + update-browserslist-db "^1.1.1" bser@^2.0.0: version "2.0.0" @@ -14955,10 +14947,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001335, caniuse-lite@^1.0.30001587: - version "1.0.30001655" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz#0ce881f5a19a2dcfda2ecd927df4d5c1684b982f" - integrity sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001335, caniuse-lite@^1.0.30001669: + version "1.0.30001685" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001685.tgz#2d10d36c540a9a5d47ad6ab9e1ed5f61fdeadd8c" + integrity sha512-e/kJN1EMyHQzgcMEEgoo+YTCO1NGCmIYHk5Qk8jT6AazWemS5QFKJ5ShCJlH3GZrNIdZofcNCEwZqbMjjKzmnA== canvg@^3.0.9: version "3.0.9" @@ -15276,6 +15268,17 @@ cli-boxes@^2.2.1: resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== +cli-color@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-2.0.4.tgz#d658080290968816b322248b7306fad2346fb2c8" + integrity sha512-zlnpg0jNcibNrO7GG9IeHH7maWFeCz+Ja1wx/7tZNU5ASSSSZ+/qZciM0/LHCYxSdqv5h2sdbQ/PXYdOuetXvA== + dependencies: + d "^1.0.1" + es5-ext "^0.10.64" + es6-iterator "^2.0.3" + memoizee "^0.4.15" + timers-ext "^0.1.7" + cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" @@ -16633,6 +16636,14 @@ d3@3.5.17, d3@^3.5.6: resolved "https://registry.yarnpkg.com/d3/-/d3-3.5.17.tgz#bc46748004378b21a360c9fc7cf5231790762fb8" integrity sha1-vEZ0gAQ3iyGjYMn8fPUjF5B2L7g= +d@1, d@^1.0.1, d@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.2.tgz#2aefd554b81981e7dccf72d6842ae725cb17e5de" + integrity sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw== + dependencies: + es5-ext "^0.10.64" + type "^2.7.2" + dagre@^0.8.2: version "0.8.5" resolved "https://registry.yarnpkg.com/dagre/-/dagre-0.8.5.tgz#ba30b0055dac12b6c1fcc247817442777d06afee" @@ -17664,10 +17675,10 @@ elasticsearch@^16.4.0: chalk "^1.0.0" lodash "^4.17.10" -electron-to-chromium@^1.4.668: - version "1.4.701" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.701.tgz#7335e5761331774b4dea54cd24a1b84861d45cdf" - integrity sha512-K3WPQ36bUOtXg/1+69bFlFOvdSm0/0bGqmsfPDLRXLanoKXdA+pIWuf/VbA9b+2CwBFuONgl4NEz4OEm+OJOKA== +electron-to-chromium@^1.5.41: + version "1.5.67" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.67.tgz#66ebd2be4a77469ac2760ef5e9e460ba9a43a845" + integrity sha512-nz88NNBsD7kQSAGGJyp8hS6xSPtWwqNogA0mjtc2nUYeEf3nURK9qpV18TuBdDmEDgVWotS8Wkzf+V52dSQ/LQ== element-resize-detector@^1.2.2: version "1.2.3" @@ -17769,7 +17780,7 @@ enhanced-resolve@^4.5.0: memory-fs "^0.5.0" tapable "^1.0.0" -enhanced-resolve@^5.14.1, enhanced-resolve@^5.16.0, enhanced-resolve@^5.17.1, enhanced-resolve@^5.7.0: +enhanced-resolve@^5.14.1, enhanced-resolve@^5.17.1, enhanced-resolve@^5.7.0: version "5.17.1" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15" integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== @@ -18013,6 +18024,16 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.62, es5-ext@^0.10.64, es5-ext@~0.10.14, es5-ext@~0.10.2: + version "0.10.64" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.64.tgz#12e4ffb48f1ba2ea777f1fcdd1918ef73ea21714" + integrity sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg== + dependencies: + es6-iterator "^2.0.3" + es6-symbol "^3.1.3" + esniff "^2.0.1" + next-tick "^1.1.0" + es5-shim@^4.5.13: version "4.5.14" resolved "https://registry.yarnpkg.com/es5-shim/-/es5-shim-4.5.14.tgz#90009e1019d0ea327447cb523deaff8fe45697ef" @@ -18023,6 +18044,15 @@ es6-error@^4.0.1: resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== +es6-iterator@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + es6-promise@^3.2.1: version "3.3.1" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" @@ -18038,6 +18068,24 @@ es6-shim@^0.35.5: resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.5.tgz#46f59dc0a84a1c5029e8ff1166ca0a902077a9ab" integrity sha512-E9kK/bjtCQRpN1K28Xh4BlmP8egvZBGJJ+9GtnzOwt7mdqtrjHFuVGr7QJfdjBIKqrlU5duPf3pCBoDrkjVYFg== +es6-symbol@^3.1.1, es6-symbol@^3.1.3: + version "3.1.4" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.4.tgz#f4e7d28013770b4208ecbf3e0bf14d3bcb557b8c" + integrity sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg== + dependencies: + d "^1.0.2" + ext "^1.7.0" + +es6-weak-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" + integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== + dependencies: + d "1" + es5-ext "^0.10.46" + es6-iterator "^2.0.3" + es6-symbol "^3.1.1" + esbuild@^0.19.11: version "0.19.12" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" @@ -18067,10 +18115,10 @@ esbuild@^0.19.11: "@esbuild/win32-ia32" "0.19.12" "@esbuild/win32-x64" "0.19.12" -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +escalade@^3.1.1, escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== escape-html@^1.0.3, escape-html@~1.0.3: version "1.0.3" @@ -18429,6 +18477,16 @@ eslint@^8.57.0: strip-ansi "^6.0.1" text-table "^0.2.0" +esniff@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/esniff/-/esniff-2.0.1.tgz#a4d4b43a5c71c7ec51c51098c1d8a29081f9b308" + integrity sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg== + dependencies: + d "^1.0.1" + es5-ext "^0.10.62" + event-emitter "^0.3.5" + type "^2.7.2" + espree@^9.6.0, espree@^9.6.1: version "9.6.1" resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" @@ -18477,6 +18535,14 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= +event-emitter@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk= + dependencies: + d "1" + es5-ext "~0.10.14" + event-target-shim@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" @@ -18517,10 +18583,10 @@ eventsource-parser@1.0.0: resolved "https://registry.yarnpkg.com/eventsource-parser/-/eventsource-parser-1.0.0.tgz#6332e37fd5512e3c8d9df05773b2bf9e152ccc04" integrity sha512-9jgfSCa3dmEme2ES3mPByGXfgZ87VbP97tng1G2nWwWx6bV2nYxm2AWCrbQjXToSe+yYlqaZNtxffR9IeQr95g== -eventsource-parser@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/eventsource-parser/-/eventsource-parser-1.1.1.tgz#576f8bcf391c5e5ccdea817abd9ead36d1754247" - integrity sha512-3Ej2iLj6ZnX+5CMxqyUb8syl9yVZwcwm8IIMrOJlF7I51zxOOrRlU3zxSb/6hFbl03ts1ZxHAGJdWLZOLyKG7w== +eventsource-parser@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eventsource-parser/-/eventsource-parser-3.0.0.tgz#9303e303ef807d279ee210a17ce80f16300d9f57" + integrity sha512-T1C0XCUimhxVQzW4zFipdx0SficT651NnkR0ZSH3yQwh+mFMdLfgjABVi4YtMTtaL4s168593DaoaRLMqryavA== evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" @@ -18705,6 +18771,13 @@ express@^4.17.1, express@^4.17.3, express@^4.18.2, express@^4.21.1: utils-merge "1.0.1" vary "~1.1.2" +ext@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" + integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== + dependencies: + type "^2.7.2" + extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -18764,11 +18837,6 @@ extsprintf@1.3.0, extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= -faker@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/faker/-/faker-5.1.0.tgz#e10fa1dec4502551aee0eb771617a7e7b94692e8" - integrity sha512-RrWKFSSA/aNLP0g3o2WW1Zez7/MnMr7xkiZmoCfAGZmdkDQZ6l2KtuXHN5XjdvpRjDl8+3vf+Rrtl06Z352+Mw== - fancy-log@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7" @@ -19859,7 +19927,7 @@ glob@8.1.0: minimatch "^5.0.1" once "^1.3.0" -glob@^10.0.0, glob@^10.3.7: +glob@^10.0.0, glob@^10.3.12, glob@^10.3.7: version "10.4.5" resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== @@ -20080,12 +20148,10 @@ got@^11.8.2: p-cancelable "^2.0.0" responselike "^2.0.0" -gpt-tokenizer@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/gpt-tokenizer/-/gpt-tokenizer-2.1.2.tgz#14f7ce424cf2309fb5be66e112d1836080c2791a" - integrity sha512-HSuI5d6uey+c7x/VzQlPfCoGrfLyAc28vxWofKbjR9PJHm0AjQGSWkKw/OJnb+8S1g7nzgRsf0WH3dK+NNWYbg== - dependencies: - rfc4648 "^1.5.2" +gpt-tokenizer@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/gpt-tokenizer/-/gpt-tokenizer-2.6.2.tgz#90e6932c7b5f73df7c13d360802edb43a2776586" + integrity sha512-OznIET3z069FiwbLtLFXJ9pVESYAa8EnX0BMogs6YJ4Fn2FIcyeZYEbxsp2grPiK0DVaqP1f+0JR/8t9R7/jlg== graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.8, graceful-fs@^4.2.9: version "4.2.11" @@ -21588,10 +21654,10 @@ is-primitive@^3.0.1: resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-3.0.1.tgz#98c4db1abff185485a657fc2905052b940524d05" integrity sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w== -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= +is-promise@^2.1.0, is-promise@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" + integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== is-regex@^1.0.4, is-regex@^1.0.5, is-regex@^1.1.2, is-regex@^1.1.4: version "1.1.4" @@ -22549,10 +22615,10 @@ js-string-escape@^1.0.1: resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" integrity sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8= -js-tiktoken@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/js-tiktoken/-/js-tiktoken-1.0.12.tgz#af0f5cf58e5e7318240d050c8413234019424211" - integrity sha512-L7wURW1fH9Qaext0VzaUDpFGVQgjkdE3Dgsy9/+yXyGEpBKnylTd0mU0bfbNkKDlXRb6TEsZkwuflu1B8uQbJQ== +js-tiktoken@^1.0.12, js-tiktoken@^1.0.14: + version "1.0.15" + resolved "https://registry.yarnpkg.com/js-tiktoken/-/js-tiktoken-1.0.15.tgz#92a7d829f6950c2cfb35cc52555502e3d6e2ebac" + integrity sha512-65ruOWWXDEZHHbAo7EjOcNxOGasQKbL4Fq3jEr2xsCqSsoOo6VVSqzWQb6PRIqypFSDcma4jO90YP0w5X8qVXQ== dependencies: base64-js "^1.5.1" @@ -22666,6 +22732,24 @@ json-schema-to-ts@^2.9.1: "@types/json-schema" "^7.0.9" ts-algebra "^1.2.0" +json-schema-to-typescript@^14.1.0: + version "14.1.0" + resolved "https://registry.yarnpkg.com/json-schema-to-typescript/-/json-schema-to-typescript-14.1.0.tgz#31160d9cf13bf8f948a7ccefdf97e995bc183591" + integrity sha512-VIeAFQkn88gFh26MSHWG4uX7TjK/arTw0NVLMZn6vX1WrSF+P6xu5MyEdovu+9PJ0uiS5gm0wzwQvYW9eSq1uw== + dependencies: + "@apidevtools/json-schema-ref-parser" "^11.5.5" + "@types/json-schema" "^7.0.15" + "@types/lodash" "^4.17.0" + cli-color "^2.0.4" + glob "^10.3.12" + is-glob "^4.0.3" + js-yaml "^4.1.0" + lodash "^4.17.21" + minimist "^1.2.8" + mkdirp "^3.0.1" + node-fetch "^3.3.2" + prettier "^3.2.5" + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -22974,10 +23058,10 @@ kuler@^2.0.0: zod "^3.22.4" zod-to-json-schema "^3.22.3" -langsmith@^0.2.0, langsmith@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.2.3.tgz#91c5b4e3d5b030d8a995e9acaac43dba4b9b225c" - integrity sha512-SPMYPVqR9kwXZVmJ2PXC61HeBnXIFHrjfjDxQ14H0+n5p4gqjLzgSHIQyxBlFeWQUQzArJxe65Ap+s+Xo1cZog== +langsmith@^0.2.0, langsmith@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.2.5.tgz#0e58900bcdfb47409222dd6c8c122c50f5015337" + integrity sha512-dA+l7ZEh1Q9Q9FcE39PUSSEMfsFo73R2V81fRo5KSlGNcypOEhoQvv6lbjyZP7MHmt3/9pPcfpuRd5Y4RbFYqQ== dependencies: "@types/uuid" "^10.0.0" commander "^10.0.1" @@ -23525,6 +23609,13 @@ lru-cache@^7.14.1: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== +lru-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3" + integrity sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM= + dependencies: + es5-ext "~0.10.2" + lunr@^2.3.9: version "2.3.9" resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" @@ -23904,6 +23995,20 @@ memoize@^10.0.0: dependencies: mimic-function "^5.0.0" +memoizee@^0.4.15: + version "0.4.17" + resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.17.tgz#942a5f8acee281fa6fb9c620bddc57e3b7382949" + integrity sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA== + dependencies: + d "^1.0.2" + es5-ext "^0.10.64" + es6-weak-map "^2.0.3" + event-emitter "^0.3.5" + is-promise "^2.2.2" + lru-queue "^0.1.0" + next-tick "^1.1.0" + timers-ext "^0.1.7" + memoizerific@^1.11.3: version "1.11.3" resolved "https://registry.yarnpkg.com/memoizerific/-/memoizerific-1.11.3.tgz#7c87a4646444c32d75438570905f2dbd1b1a805a" @@ -24808,6 +24913,11 @@ next-line@^1.1.0: resolved "https://registry.yarnpkg.com/next-line/-/next-line-1.1.0.tgz#fcae57853052b6a9bae8208e40dd7d3c2d304603" integrity sha1-/K5XhTBStqm66CCOQN19PC0wRgM= +next-tick@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" + integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== + nice-napi@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/nice-napi/-/nice-napi-1.0.2.tgz#dc0ab5a1eac20ce548802fc5686eaa6bc654927b" @@ -24999,10 +25109,10 @@ node-readfiles@^0.2.0: dependencies: es6-promise "^3.2.1" -node-releases@^2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" - integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== +node-releases@^2.0.18: + version "2.0.18" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" + integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== node-source-walk@^6.0.0, node-source-walk@^6.0.1, node-source-walk@^6.0.2: version "6.0.2" @@ -25447,10 +25557,10 @@ open@^8.0.9, open@^8.4.0, open@~8.4.0: is-docker "^2.1.1" is-wsl "^2.2.0" -openai@^4.68.0: - version "4.69.0" - resolved "https://registry.yarnpkg.com/openai/-/openai-4.69.0.tgz#ac2463719280987e506e4bd62dd477337e2406a1" - integrity sha512-S3hOHSkk609KqwgH+7dwFrSvO3Gm3Nk0YWGyPHNscoMH/Y2tH1qunMi7gtZnLbUv4/N1elqCp6bDior2401kCQ== +openai@^4.68.0, openai@^4.72.0: + version "4.72.0" + resolved "https://registry.yarnpkg.com/openai/-/openai-4.72.0.tgz#61630553157a0c9bb1c304b1dd4d2f90e9ec4cf7" + integrity sha512-hFqG9BWCs7L7ifrhJXw7mJXmUBr7d9N6If3J9563o0jfwVA4wFANFDDaOIWFdgDdwgCXg5emf0Q+LoLCGszQYA== dependencies: "@types/node" "^18.11.18" "@types/node-fetch" "^2.6.4" @@ -26212,6 +26322,13 @@ platform@^1.3.0: resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.5.tgz#fb6958c696e07e2918d2eeda0f0bc9448d733444" integrity sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q== +playwright-chromium@1.49.0: + version "1.49.0" + resolved "https://registry.yarnpkg.com/playwright-chromium/-/playwright-chromium-1.49.0.tgz#0661428204396dbf5445eb04536d43a5f91bca59" + integrity sha512-xU+nOHawNFKfJsHTTGyWqSJ5nRGGHQq1wTsc49H9rM+hDNnoKZi+3m12mGoLpqvJP7vRjZQ3uvU9/UJZbrJ1AA== + dependencies: + playwright-core "1.49.0" + playwright-chromium@=1.45.1: version "1.45.1" resolved "https://registry.yarnpkg.com/playwright-chromium/-/playwright-chromium-1.45.1.tgz#a20b513edbc0435b2e06a303aac61001f44bf094" @@ -26219,29 +26336,22 @@ playwright-chromium@=1.45.1: dependencies: playwright-core "1.45.1" -playwright-chromium@=1.46.0: - version "1.46.0" - resolved "https://registry.yarnpkg.com/playwright-chromium/-/playwright-chromium-1.46.0.tgz#f24228fec92b380ccc8f5f365b897e9d88b612f6" - integrity sha512-UTHYZsr49XFYRQkpCfaHxL63vfu6uThxR1DrNwnU6qik/OworFcugTOJMWFMoop3QP+ThU8laAMumauLdLZXCQ== - dependencies: - playwright-core "1.46.0" - playwright-core@1.45.1, playwright-core@=1.45.1: version "1.45.1" resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.45.1.tgz#549a2701556b58245cc75263f9fc2795c1158dc1" integrity sha512-LF4CUUtrUu2TCpDw4mcrAIuYrEjVDfT1cHbJMfwnE2+1b8PZcFzPNgvZCvq2JfQ4aTjRCCHw5EJ2tmr2NSzdPg== -playwright-core@1.46.0: - version "1.46.0" - resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.46.0.tgz#2336ac453a943abf0dc95a76c117f9d3ebd390eb" - integrity sha512-9Y/d5UIwuJk8t3+lhmMSAJyNP1BUC/DqP3cQJDQQL/oWqAiuPTLgy7Q5dzglmTLwcBRdetzgNM/gni7ckfTr6A== +playwright-core@1.49.0: + version "1.49.0" + resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.49.0.tgz#8e69ffed3f41855b854982f3632f2922c890afcb" + integrity sha512-R+3KKTQF3npy5GTiKH/T+kdhoJfJojjHESR1YEWhYuEKRVfVaxH3+4+GvXE5xyCngCxhxnykk0Vlah9v8fs3jA== -playwright@1.46.0, playwright@=1.46.0: - version "1.46.0" - resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.46.0.tgz#c7ff490deae41fc1e814bf2cb62109dd9351164d" - integrity sha512-XYJ5WvfefWONh1uPAUAi0H2xXV5S3vrtcnXe6uAOgdGi3aSpqOSXX08IAjXW34xitfuOJsvXU5anXZxPSEQiJw== +playwright@1.49.0: + version "1.49.0" + resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.49.0.tgz#df6b9e05423377a99658202844a294a8afb95d0a" + integrity sha512-eKpmys0UFDnfNb3vfsf8Vx2LEOtflgRebl0Im2eQQnYMA4Aqd+Zw8bEOB+7ZKvN76901mRnqdsiOGKxzVTbi7A== dependencies: - playwright-core "1.46.0" + playwright-core "1.49.0" optionalDependencies: fsevents "2.3.2" @@ -26717,6 +26827,11 @@ prettier@^2.0.0, prettier@^2.8.8: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== +prettier@^3.2.5: + version "3.3.3" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105" + integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew== + pretty-bytes@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" @@ -28644,11 +28759,6 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rfc4648@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/rfc4648/-/rfc4648-1.5.2.tgz#cf5dac417dd83e7f4debf52e3797a723c1373383" - integrity sha512-tLOizhR6YGovrEBLatX1sdcuhoSCXddw3mqNVAcKxGJ+J0hFeJ+SjeWCv5UPA/WU3YzWPPuCVYgXBKZUPGpKtg== - rfdc@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" @@ -30789,10 +30899,10 @@ tabbable@^5.3.3: resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-5.3.3.tgz#aac0ff88c73b22d6c3c5a50b1586310006b47fbf" integrity sha512-QD9qKY3StfbZqWOPLp0++pOrAVb/HbUi5xCc8cUo4XjP19808oaMiDzn0leBY5mCespIBM0CIZePzZjgzR83kA== -table@^6.8.0, table@^6.8.1: - version "6.8.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" - integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== +table@^6.8.0, table@^6.8.2: + version "6.8.2" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.2.tgz#c5504ccf201213fa227248bdc8c5569716ac6c58" + integrity sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA== dependencies: ajv "^8.0.1" lodash.truncate "^4.4.2" @@ -31123,6 +31233,14 @@ timers-browserify@^2.0.4: dependencies: setimmediate "^1.0.4" +timers-ext@^0.1.7: + version "0.1.8" + resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.8.tgz#b4e442f10b7624a29dd2aa42c295e257150cf16c" + integrity sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww== + dependencies: + es5-ext "^0.10.64" + next-tick "^1.1.0" + tiny-inflate@^1.0.0, tiny-inflate@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4" @@ -31572,6 +31690,11 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +type@^2.7.2: + version "2.7.3" + resolved "https://registry.yarnpkg.com/type/-/type-2.7.3.tgz#436981652129285cc3ba94f392886c2637ea0486" + integrity sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ== + typed-array-buffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" @@ -31662,7 +31785,7 @@ typescript-tuple@^2.2.1: dependencies: typescript-compare "^0.0.2" -typescript@5, typescript@5.1.6, typescript@^3.3.3333, typescript@^5.0.4: +typescript@5, typescript@5.1.6, typescript@^3.3.3333, typescript@^5.0.4, typescript@^5.5.3: version "5.1.6" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274" integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== @@ -31985,13 +32108,13 @@ untildify@^4.0.0: resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== -update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== +update-browserslist-db@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz#80846fba1d79e82547fb661f8d141e0945755fe5" + integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A== dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" + escalade "^3.2.0" + picocolors "^1.1.0" uri-js-replace@^1.0.1: version "1.0.1" @@ -33041,20 +33164,19 @@ webpack@4, webpack@^4.41.5: webpack-sources "^1.4.1" "webpack@>=4.43.0 <6.0.0", webpack@^5: - version "5.91.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.91.0.tgz#ffa92c1c618d18c878f06892bbdc3373c71a01d9" - integrity sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw== + version "5.96.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.96.1.tgz#3676d1626d8312b6b10d0c18cc049fba7ac01f0c" + integrity sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA== dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^1.0.5" + "@types/eslint-scope" "^3.7.7" + "@types/estree" "^1.0.6" "@webassemblyjs/ast" "^1.12.1" "@webassemblyjs/wasm-edit" "^1.12.1" "@webassemblyjs/wasm-parser" "^1.12.1" - acorn "^8.7.1" - acorn-import-assertions "^1.9.0" - browserslist "^4.21.10" + acorn "^8.14.0" + browserslist "^4.24.0" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.16.0" + enhanced-resolve "^5.17.1" es-module-lexer "^1.2.1" eslint-scope "5.1.1" events "^3.2.0"