diff --git a/.buildkite/ftr_configs.yml b/.buildkite/ftr_configs.yml index 8d7b3fee29006..9067ecfb25e78 100644 --- a/.buildkite/ftr_configs.yml +++ b/.buildkite/ftr_configs.yml @@ -79,24 +79,12 @@ disabled: - x-pack/test_serverless/functional/config.base.ts - x-pack/test_serverless/shared/config.base.ts - # Serverless configs, currently only for manual tests runs, CI integration planned - - x-pack/test_serverless/api_integration/test_suites/common/config.ts - - x-pack/test_serverless/api_integration/test_suites/observability/config.ts - - x-pack/test_serverless/api_integration/test_suites/observability/config.feature_flags.ts - - x-pack/test_serverless/api_integration/test_suites/search/config.ts - - x-pack/test_serverless/api_integration/test_suites/search/config.feature_flags.ts - - x-pack/test_serverless/api_integration/test_suites/security/config.ts - - x-pack/test_serverless/api_integration/test_suites/security/config.feature_flags.ts - - x-pack/test_serverless/functional/test_suites/common/config.ts - - x-pack/test_serverless/functional/test_suites/observability/config.ts + # Serverless feature flag config files (move to enabled after tests are added) - x-pack/test_serverless/functional/test_suites/observability/config.feature_flags.ts - - x-pack/test_serverless/functional/test_suites/observability/config.examples.ts - - x-pack/test_serverless/functional/test_suites/search/config.ts + - x-pack/test_serverless/api_integration/test_suites/search/config.feature_flags.ts - x-pack/test_serverless/functional/test_suites/search/config.feature_flags.ts - - x-pack/test_serverless/functional/test_suites/search/config.examples.ts - - x-pack/test_serverless/functional/test_suites/security/config.ts + - x-pack/test_serverless/api_integration/test_suites/security/config.feature_flags.ts - x-pack/test_serverless/functional/test_suites/security/config.feature_flags.ts - - x-pack/test_serverless/functional/test_suites/security/config.examples.ts defaultQueue: 'n2-4-spot' enabled: @@ -410,6 +398,17 @@ enabled: - x-pack/test/ui_capabilities/spaces_only/config.ts - x-pack/test/upgrade_assistant_integration/config.js - x-pack/test/usage_collection/config.ts + - x-pack/test_serverless/api_integration/test_suites/observability/config.ts + - x-pack/test_serverless/api_integration/test_suites/search/config.ts + - x-pack/test_serverless/api_integration/test_suites/security/config.ts + - x-pack/test_serverless/functional/test_suites/observability/config.ts + - x-pack/test_serverless/functional/test_suites/observability/config.examples.ts + - x-pack/test_serverless/api_integration/test_suites/observability/config.feature_flags.ts + - x-pack/test_serverless/functional/test_suites/search/config.ts + - x-pack/test_serverless/functional/test_suites/search/config.examples.ts + - x-pack/test_serverless/functional/test_suites/search/config.screenshots.ts + - x-pack/test_serverless/functional/test_suites/security/config.ts + - x-pack/test_serverless/functional/test_suites/security/config.examples.ts - x-pack/performance/journeys/ecommerce_dashboard.ts - x-pack/performance/journeys/ecommerce_dashboard_map_only.ts - x-pack/performance/journeys/flight_dashboard.ts diff --git a/.buildkite/pipelines/on_merge.yml b/.buildkite/pipelines/on_merge.yml index 521a0c76317a0..133004f468948 100644 --- a/.buildkite/pipelines/on_merge.yml +++ b/.buildkite/pipelines/on_merge.yml @@ -78,16 +78,44 @@ steps: - exit_status: '*' limit: 1 - - command: '.buildkite/scripts/steps/functional/on_merge_unsupported_ftrs.sh' - label: Trigger unsupported ftr tests - timeout_in_minutes: 10 - depends_on: - - build + - command: .buildkite/scripts/steps/functional/security_serverless.sh + label: 'Serverless Security Cypress Tests' agents: - queue: 'kibana-default' + queue: n2-4-spot + depends_on: build + timeout_in_minutes: 40 + parallelism: 2 + retry: + automatic: + - exit_status: '*' + limit: 1 + + - command: .buildkite/scripts/steps/functional/security_serverless_explore.sh + label: 'Serverless Explore - Security Solution Cypress Tests' + agents: + queue: n2-4-spot + depends_on: build + timeout_in_minutes: 60 + parallelism: 2 + retry: + automatic: + - exit_status: '*' + limit: 1 + + - command: .buildkite/scripts/steps/functional/security_serverless_investigations.sh + label: 'Serverless Investigations - Security Solution Cypress Tests' + agents: + queue: n2-4-spot + depends_on: build + timeout_in_minutes: 120 + parallelism: 2 + retry: + automatic: + - exit_status: '*' + limit: 1 - - command: '.buildkite/scripts/steps/functional/on_merge_serverless_ftrs.sh' - label: Trigger serverless ftr tests + - command: '.buildkite/scripts/steps/functional/on_merge_unsupported_ftrs.sh' + label: Trigger unsupported ftr tests timeout_in_minutes: 10 depends_on: - build diff --git a/.buildkite/pipelines/pull_request/base.yml b/.buildkite/pipelines/pull_request/base.yml index 60c26c8bce2fb..158c22c0bb0c5 100644 --- a/.buildkite/pipelines/pull_request/base.yml +++ b/.buildkite/pipelines/pull_request/base.yml @@ -56,84 +56,6 @@ steps: - exit_status: '*' limit: 1 - - command: SERVERLESS_ENVIRONMENT=observability .buildkite/scripts/steps/functional/serverless_ftr.sh - label: 'Serverless Observability Tests' - agents: - queue: n2-4-spot - depends_on: build - timeout_in_minutes: 40 - soft_fail: - - exit_status: 10 - retry: - automatic: - - exit_status: '-1' - limit: 3 - - - command: SERVERLESS_ENVIRONMENT=observability.examples .buildkite/scripts/steps/functional/serverless_ftr.sh - label: 'Serverless Observability Examples Tests' - agents: - queue: n2-4-spot - depends_on: build - timeout_in_minutes: 40 - soft_fail: - - exit_status: 10 - retry: - automatic: - - exit_status: '-1' - limit: 3 - - - command: SERVERLESS_ENVIRONMENT=search .buildkite/scripts/steps/functional/serverless_ftr.sh - label: 'Serverless Search Tests' - agents: - queue: n2-4-spot - depends_on: build - timeout_in_minutes: 40 - soft_fail: - - exit_status: 10 - retry: - automatic: - - exit_status: '-1' - limit: 3 - - - command: SERVERLESS_ENVIRONMENT=search.examples .buildkite/scripts/steps/functional/serverless_ftr.sh - label: 'Serverless Search Examples Tests' - agents: - queue: n2-4-spot - depends_on: build - timeout_in_minutes: 40 - soft_fail: - - exit_status: 10 - retry: - automatic: - - exit_status: '-1' - limit: 3 - - - command: SERVERLESS_ENVIRONMENT=security .buildkite/scripts/steps/functional/serverless_ftr.sh - label: 'Serverless Security Tests' - agents: - queue: n2-4-spot - depends_on: build - timeout_in_minutes: 40 - soft_fail: - - exit_status: 10 - retry: - automatic: - - exit_status: '-1' - limit: 3 - - - command: SERVERLESS_ENVIRONMENT=security.examples .buildkite/scripts/steps/functional/serverless_ftr.sh - label: 'Serverless Security Examples Tests' - agents: - queue: n2-4-spot - depends_on: build - timeout_in_minutes: 40 - soft_fail: - - exit_status: 10 - retry: - automatic: - - exit_status: '-1' - limit: 3 - - command: .buildkite/scripts/steps/functional/security_serverless.sh label: 'Serverless Security Cypress Tests' agents: @@ -141,7 +63,6 @@ steps: depends_on: build timeout_in_minutes: 40 parallelism: 2 - soft_fail: true retry: automatic: - exit_status: '*' @@ -154,7 +75,6 @@ steps: # queue: n2-4-spot # depends_on: build # timeout_in_minutes: 40 - # soft_fail: true # retry: # automatic: # - exit_status: '*' @@ -167,7 +87,6 @@ steps: depends_on: build timeout_in_minutes: 40 parallelism: 2 - soft_fail: true retry: automatic: - exit_status: '*' @@ -180,7 +99,6 @@ steps: depends_on: build timeout_in_minutes: 40 parallelism: 2 - soft_fail: true retry: automatic: - exit_status: '*' diff --git a/.buildkite/pipelines/pull_request/osquery_cypress.yml b/.buildkite/pipelines/pull_request/osquery_cypress.yml index 50c4dd4a3faa5..c56d94524f60d 100644 --- a/.buildkite/pipelines/pull_request/osquery_cypress.yml +++ b/.buildkite/pipelines/pull_request/osquery_cypress.yml @@ -10,6 +10,8 @@ steps: automatic: - exit_status: '*' limit: 1 + artifact_paths: + - "target/kibana-osquery/**/*" - command: .buildkite/scripts/steps/functional/osquery_cypress_burn.sh label: 'Osquery Cypress Tests, burning changed specs' @@ -20,6 +22,8 @@ steps: soft_fail: true retry: automatic: false + artifact_paths: + - "target/kibana-osquery/**/*" # Error: self-signed certificate in certificate chain # - command: .buildkite/scripts/steps/functional/security_serverless_osquery.sh @@ -33,3 +37,5 @@ steps: # automatic: # - exit_status: '*' # limit: 1 + # artifact_paths: + # - "target/kibana-osquery/**/*" diff --git a/.buildkite/pipelines/serverless.yml b/.buildkite/pipelines/serverless.yml deleted file mode 100644 index 0a9cc038088ff..0000000000000 --- a/.buildkite/pipelines/serverless.yml +++ /dev/null @@ -1,137 +0,0 @@ -steps: - - command: .buildkite/scripts/lifecycle/pre_build.sh - label: Pre-Build - timeout_in_minutes: 10 - agents: - queue: kibana-default - retry: - automatic: - - exit_status: '*' - limit: 1 - - - command: .buildkite/scripts/steps/build_kibana.sh - label: Build Kibana Distribution and Plugins - agents: - queue: n2-16-spot - key: build - if: "build.env('KIBANA_BUILD_ID') == null || build.env('KIBANA_BUILD_ID') == ''" - timeout_in_minutes: 60 - retry: - automatic: - - exit_status: '-1' - limit: 3 - - - command: SERVERLESS_ENVIRONMENT=observability .buildkite/scripts/steps/functional/serverless_ftr.sh - label: 'Serverless Observability Tests' - agents: - queue: n2-4-spot - depends_on: build - timeout_in_minutes: 40 - retry: - automatic: - - exit_status: '-1' - limit: 3 - - exit_status: '*' - limit: 1 - - - command: SERVERLESS_ENVIRONMENT=observability.examples .buildkite/scripts/steps/functional/serverless_ftr.sh - label: 'Serverless Observability Examples Tests' - agents: - queue: n2-4-spot - depends_on: build - timeout_in_minutes: 40 - retry: - automatic: - - exit_status: '-1' - limit: 3 - - exit_status: '*' - limit: 1 - - - command: SERVERLESS_ENVIRONMENT=search .buildkite/scripts/steps/functional/serverless_ftr.sh - label: 'Serverless Search Tests' - agents: - queue: n2-4-spot - depends_on: build - timeout_in_minutes: 40 - retry: - automatic: - - exit_status: '-1' - limit: 3 - - exit_status: '*' - limit: 1 - - - command: SERVERLESS_ENVIRONMENT=search.examples .buildkite/scripts/steps/functional/serverless_ftr.sh - label: 'Serverless Search Examples Tests' - agents: - queue: n2-4-spot - depends_on: build - timeout_in_minutes: 40 - retry: - automatic: - - exit_status: '-1' - limit: 3 - - exit_status: '*' - limit: 1 - - - command: SERVERLESS_ENVIRONMENT=security .buildkite/scripts/steps/functional/serverless_ftr.sh - label: 'Serverless Security Tests' - agents: - queue: n2-4-spot - depends_on: build - timeout_in_minutes: 40 - retry: - automatic: - - exit_status: '-1' - limit: 3 - - exit_status: '*' - limit: 1 - - - command: SERVERLESS_ENVIRONMENT=security.examples .buildkite/scripts/steps/functional/serverless_ftr.sh - label: 'Serverless Security Examples Tests' - agents: - queue: n2-4-spot - depends_on: build - timeout_in_minutes: 40 - retry: - automatic: - - exit_status: '-1' - limit: 3 - - exit_status: '*' - limit: 1 - - - command: .buildkite/scripts/steps/functional/security_serverless.sh - label: 'Serverless Security Cypress Tests' - agents: - queue: n2-4-spot - depends_on: build - timeout_in_minutes: 40 - parallelism: 2 - retry: - automatic: - - exit_status: '*' - limit: 1 - - - command: .buildkite/scripts/steps/functional/security_serverless_investigations.sh - label: 'Serverless Security Investigations Cypress Tests' - agents: - queue: n2-4-spot - depends_on: build - timeout_in_minutes: 120 - parallelism: 2 - retry: - automatic: - - exit_status: '*' - limit: 1 - - - command: .buildkite/scripts/steps/functional/security_serverless_explore.sh - label: 'Serverless Security Explore Cypress Tests' - agents: - queue: n2-4-spot - depends_on: build - timeout_in_minutes: 60 - parallelism: 2 - retry: - automatic: - - exit_status: '*' - limit: 1 - diff --git a/.buildkite/scripts/steps/functional/on_merge_serverless_ftrs.sh b/.buildkite/scripts/steps/functional/on_merge_serverless_ftrs.sh deleted file mode 100755 index 96a7d82498105..0000000000000 --- a/.buildkite/scripts/steps/functional/on_merge_serverless_ftrs.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -set -euo pipefail - -if [[ "$BUILDKITE_BRANCH" == "main" ]]; then - echo "--- Trigger serverless ftr tests" - ts-node .buildkite/scripts/steps/trigger_pipeline.ts kibana-serverless "$BUILDKITE_BRANCH" "$BUILDKITE_COMMIT" "$BUILDKITE_BUILD_ID" -fi diff --git a/.buildkite/scripts/steps/functional/serverless_ftr.sh b/.buildkite/scripts/steps/functional/serverless_ftr.sh deleted file mode 100755 index 335b4b97f1445..0000000000000 --- a/.buildkite/scripts/steps/functional/serverless_ftr.sh +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -source .buildkite/scripts/steps/functional/common.sh - -export JOB="kibana-serverless-$SERVERLESS_ENVIRONMENT" - -if [[ "$SERVERLESS_ENVIRONMENT" == "search" ]]; then - SERVERLESS_CONFIGS=( - "x-pack/test_serverless/api_integration/test_suites/search/config.ts" - "x-pack/test_serverless/api_integration/test_suites/search/config.feature_flags.ts" - "x-pack/test_serverless/functional/test_suites/search/config.ts" - ) -elif [[ "$SERVERLESS_ENVIRONMENT" == "search.examples" ]]; then - SERVERLESS_CONFIGS=( - "x-pack/test_serverless/functional/test_suites/search/config.examples.ts" - ) -elif [[ "$SERVERLESS_ENVIRONMENT" == "observability" ]]; then - SERVERLESS_CONFIGS=( - "x-pack/test_serverless/api_integration/test_suites/observability/config.ts" - "x-pack/test_serverless/api_integration/test_suites/observability/config.feature_flags.ts" - "x-pack/test_serverless/functional/test_suites/observability/config.ts" - "x-pack/test_serverless/functional/test_suites/observability/cypress/config_headless.ts" - ) -elif [[ "$SERVERLESS_ENVIRONMENT" == "observability.examples" ]]; then - SERVERLESS_CONFIGS=( - "x-pack/test_serverless/functional/test_suites/observability/config.examples.ts" - ) -elif [[ "$SERVERLESS_ENVIRONMENT" == "security" ]]; then - SERVERLESS_CONFIGS=( - "x-pack/test_serverless/api_integration/test_suites/security/config.ts" - "x-pack/test_serverless/api_integration/test_suites/security/config.feature_flags.ts" - "x-pack/test_serverless/functional/test_suites/security/config.ts" - ) -elif [[ "$SERVERLESS_ENVIRONMENT" == "security.examples" ]]; then - SERVERLESS_CONFIGS=( - "x-pack/test_serverless/functional/test_suites/security/config.examples.ts" - ) -fi - -EXIT_CODE=0 -OFFENDING_CONFIG= - -for CONFIG in "${SERVERLESS_CONFIGS[@]}" -do - echo "--- $ node scripts/functional_tests --bail --config $CONFIG" - set +e; - node ./scripts/functional_tests \ - --bail \ - --kibana-install-dir "$KIBANA_BUILD_LOCATION" \ - --config="$CONFIG" - LAST_CODE=$? - set -e; - - if [ $LAST_CODE -ne 0 ]; then - EXIT_CODE=10 - OFFENDING_CONFIG=$CONFIG - fi -done - -echo "--- Serverless FTR Results for $JOB" -if [ $EXIT_CODE -eq 0 ]; then - echo "✅ Success!" -elif [ $EXIT_CODE -eq 10 ]; then - echo "❌ Failed in config: $OFFENDING_CONFIG, exit code set to 10 for soft-failure" -else - echo "❌ Failed." -fi - -exit $EXIT_CODE diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 5ae8101da74fe..5f7502062abdc 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -297,6 +297,7 @@ x-pack/plugins/cross_cluster_replication @elastic/platform-deployment-management packages/kbn-crypto @elastic/kibana-security packages/kbn-crypto-browser @elastic/kibana-core x-pack/plugins/custom_branding @elastic/appex-sharedux +packages/kbn-custom-integrations @elastic/infra-monitoring-ui src/plugins/custom_integrations @elastic/fleet packages/kbn-cypress-config @elastic/kibana-operations x-pack/plugins/dashboard_enhanced @elastic/kibana-presentation @@ -806,6 +807,7 @@ src/plugins/visualizations @elastic/kibana-visualizations x-pack/plugins/watcher @elastic/platform-deployment-management packages/kbn-web-worker-stub @elastic/kibana-operations packages/kbn-whereis-pkg-cli @elastic/kibana-operations +packages/kbn-xstate-utils @elastic/infra-monitoring-ui packages/kbn-yarn-lock-validator @elastic/kibana-operations #### ## Everything below this line overrides the default assignments for each package. @@ -1304,8 +1306,7 @@ x-pack/plugins/cloud_integrations/cloud_full_story/server/config.ts @elastic/kib /x-pack/plugins/security_solution/server/lists_integration/endpoint/ @elastic/security-defend-workflows /x-pack/plugins/security_solution/server/lib/license/ @elastic/security-defend-workflows /x-pack/plugins/security_solution/server/fleet_integration/ @elastic/security-defend-workflows -/x-pack/plugins/security_solution/scripts/endpoint/event_filters/ @elastic/security-defend-workflows -/x-pack/plugins/security_solution/scripts/endpoint/trusted_apps/ @elastic/security-defend-workflows +/x-pack/plugins/security_solution/scripts/endpoint/ @elastic/security-defend-workflows /x-pack/test/security_solution_endpoint/ @elastic/security-defend-workflows /x-pack/test/security_solution_endpoint_api_int/ @elastic/security-defend-workflows /x-pack/test_serverless/shared/lib/security/kibana_roles/ @elastic/security-defend-workflows diff --git a/.i18nrc.json b/.i18nrc.json index 373f28219a8cb..f5de3b91a9a01 100644 --- a/.i18nrc.json +++ b/.i18nrc.json @@ -18,6 +18,7 @@ "packages/core" ], "customIntegrations": "src/plugins/custom_integrations", + "customIntegrationsPackage": "packages/kbn-custom-integrations", "dashboard": "src/plugins/dashboard", "domDragDrop": "packages/kbn-dom-drag-drop", "controls": "src/plugins/controls", diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index f769dec9bbb68..74c2df42d3ebe 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: 2023-09-12 +date: 2023-09-13 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 116f4400fabad..2b846854e3332 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index 7d901d917e219..7080314757917 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops'] --- import aiopsObj from './aiops.devdocs.json'; diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index 8ea4ec8b4e045..49ebca6cd544b 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.devdocs.json'; diff --git a/api_docs/apm.devdocs.json b/api_docs/apm.devdocs.json index e04ccc487115e..65b7ea4e15948 100644 --- a/api_docs/apm.devdocs.json +++ b/api_docs/apm.devdocs.json @@ -408,7 +408,7 @@ "label": "APIEndpoint", "description": [], "signature": [ - "\"POST /internal/apm/data_view/static\" | \"GET /internal/apm/data_view/title\" | \"GET /internal/apm/environments\" | \"GET /internal/apm/services/{serviceName}/errors/groups/main_statistics\" | \"GET /internal/apm/services/{serviceName}/errors/groups/main_statistics_by_transaction_name\" | \"POST /internal/apm/services/{serviceName}/errors/groups/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}/samples\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}/error/{errorId}\" | \"GET /internal/apm/services/{serviceName}/errors/distribution\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}/top_erroneous_transactions\" | \"POST /internal/apm/latency/overall_distribution/transactions\" | \"GET /internal/apm/services/{serviceName}/metrics/charts\" | \"GET /internal/apm/services/{serviceName}/metrics/nodes\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/charts\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/summary\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/functions_overview\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/active_instances\" | \"GET /internal/apm/observability_overview\" | \"GET /internal/apm/observability_overview/has_data\" | \"GET /internal/apm/service-map\" | \"GET /internal/apm/service-map/service/{serviceName}\" | \"GET /internal/apm/service-map/dependency\" | \"GET /internal/apm/services\" | \"POST /internal/apm/services/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/metadata/details\" | \"GET /internal/apm/services/{serviceName}/metadata/icons\" | \"GET /internal/apm/services/{serviceName}/agent\" | \"GET /internal/apm/services/{serviceName}/transaction_types\" | \"GET /internal/apm/services/{serviceName}/node/{serviceNodeName}/metadata\" | \"GET /api/apm/services/{serviceName}/annotation/search 2023-10-31\" | \"POST /api/apm/services/{serviceName}/annotation 2023-10-31\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/details/{serviceNodeName}\" | \"GET /internal/apm/services/{serviceName}/throughput\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/main_statistics\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/dependencies\" | \"GET /internal/apm/services/{serviceName}/dependencies/breakdown\" | \"GET /internal/apm/services/{serviceName}/anomaly_charts\" | \"GET /internal/apm/services/{serviceName}/alerts_count\" | \"GET /internal/apm/service-groups\" | \"GET /internal/apm/service-group\" | \"POST /internal/apm/service-group\" | \"DELETE /internal/apm/service-group\" | \"GET /internal/apm/service-group/services\" | \"GET /internal/apm/service-group/counts\" | \"GET /internal/apm/suggestions\" | \"GET /internal/apm/traces/{traceId}\" | \"GET /internal/apm/traces\" | \"GET /internal/apm/traces/{traceId}/root_transaction\" | \"GET /internal/apm/transactions/{transactionId}\" | \"GET /internal/apm/traces/find\" | \"POST /internal/apm/traces/aggregated_critical_path\" | \"GET /internal/apm/traces/{traceId}/transactions/{transactionId}\" | \"GET /internal/apm/traces/{traceId}/spans/{spanId}\" | \"GET /internal/apm/services/{serviceName}/transactions/groups/main_statistics\" | \"GET /internal/apm/services/{serviceName}/transactions/groups/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/latency\" | \"GET /internal/apm/services/{serviceName}/transactions/traces/samples\" | \"GET /internal/apm/services/{serviceName}/transaction/charts/breakdown\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/error_rate\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/coldstart_rate\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/coldstart_rate_by_transaction_name\" | \"GET /internal/apm/rule_types/transaction_error_rate/chart_preview\" | \"GET /internal/apm/rule_types/error_count/chart_preview\" | \"GET /internal/apm/rule_types/transaction_duration/chart_preview\" | \"GET /api/apm/settings/agent-configuration 2023-10-31\" | \"GET /api/apm/settings/agent-configuration/view 2023-10-31\" | \"DELETE /api/apm/settings/agent-configuration 2023-10-31\" | \"PUT /api/apm/settings/agent-configuration 2023-10-31\" | \"POST /api/apm/settings/agent-configuration/search 2023-10-31\" | \"GET /api/apm/settings/agent-configuration/environments 2023-10-31\" | \"GET /api/apm/settings/agent-configuration/agent_name 2023-10-31\" | \"GET /internal/apm/settings/anomaly-detection/jobs\" | \"POST /internal/apm/settings/anomaly-detection/jobs\" | \"GET /internal/apm/settings/anomaly-detection/environments\" | \"POST /internal/apm/settings/anomaly-detection/update_to_v3\" | \"GET /internal/apm/settings/apm-index-settings\" | \"GET /internal/apm/settings/apm-indices\" | \"POST /internal/apm/settings/apm-indices/save\" | \"GET /internal/apm/settings/custom_links/transaction\" | \"GET /internal/apm/settings/custom_links\" | \"POST /internal/apm/settings/custom_links\" | \"PUT /internal/apm/settings/custom_links/{id}\" | \"DELETE /internal/apm/settings/custom_links/{id}\" | \"GET /api/apm/sourcemaps 2023-10-31\" | \"POST /api/apm/sourcemaps 2023-10-31\" | \"DELETE /api/apm/sourcemaps/{id} 2023-10-31\" | \"POST /internal/apm/sourcemaps/migrate_fleet_artifacts\" | \"GET /internal/apm/fleet/has_apm_policies\" | \"GET /internal/apm/fleet/agents\" | \"POST /api/apm/fleet/apm_server_schema 2023-10-31\" | \"GET /internal/apm/fleet/apm_server_schema/unsupported\" | \"GET /internal/apm/fleet/migration_check\" | \"POST /internal/apm/fleet/cloud_apm_package_policy\" | \"GET /internal/apm/fleet/java_agent_versions\" | \"GET /internal/apm/dependencies/top_dependencies\" | \"GET /internal/apm/dependencies/upstream_services\" | \"GET /internal/apm/dependencies/metadata\" | \"GET /internal/apm/dependencies/charts/latency\" | \"GET /internal/apm/dependencies/charts/throughput\" | \"GET /internal/apm/dependencies/charts/error_rate\" | \"GET /internal/apm/dependencies/operations\" | \"GET /internal/apm/dependencies/charts/distribution\" | \"GET /internal/apm/dependencies/operations/spans\" | \"GET /internal/apm/correlations/field_candidates/transactions\" | \"GET /internal/apm/correlations/field_value_stats/transactions\" | \"POST /internal/apm/correlations/field_value_pairs/transactions\" | \"POST /internal/apm/correlations/significant_correlations/transactions\" | \"POST /internal/apm/correlations/p_values/transactions\" | \"GET /internal/apm/fallback_to_transactions\" | \"GET /internal/apm/has_data\" | \"GET /internal/apm/event_metadata/{processorEvent}/{id}\" | \"GET /internal/apm/agent_keys\" | \"GET /internal/apm/agent_keys/privileges\" | \"POST /internal/apm/api_key/invalidate\" | \"POST /api/apm/agent_keys 2023-10-31\" | \"GET /internal/apm/storage_explorer\" | \"GET /internal/apm/services/{serviceName}/storage_details\" | \"GET /internal/apm/storage_chart\" | \"GET /internal/apm/storage_explorer/privileges\" | \"GET /internal/apm/storage_explorer_summary_stats\" | \"GET /internal/apm/storage_explorer/is_cross_cluster_search\" | \"GET /internal/apm/storage_explorer/get_services\" | \"GET /internal/apm/traces/{traceId}/span_links/{spanId}/parents\" | \"GET /internal/apm/traces/{traceId}/span_links/{spanId}/children\" | \"GET /internal/apm/services/{serviceName}/infrastructure_attributes\" | \"GET /internal/apm/debug-telemetry\" | \"GET /internal/apm/time_range_metadata\" | \"GET /internal/apm/settings/labs\" | \"GET /internal/apm/get_agents_per_service\" | \"GET /internal/apm/get_latest_agent_versions\" | \"GET /internal/apm/services/{serviceName}/agent_instances\" | \"GET /internal/apm/services/{serviceName}/mobile/filters\" | \"GET /internal/apm/mobile-services/{serviceName}/most_used_charts\" | \"GET /internal/apm/mobile-services/{serviceName}/transactions/charts/sessions\" | \"GET /internal/apm/mobile-services/{serviceName}/transactions/charts/http_requests\" | \"GET /internal/apm/mobile-services/{serviceName}/stats\" | \"GET /internal/apm/mobile-services/{serviceName}/location/stats\" | \"GET /internal/apm/mobile-services/{serviceName}/terms\" | \"GET /internal/apm/mobile-services/{serviceName}/main_statistics\" | \"GET /internal/apm/mobile-services/{serviceName}/detailed_statistics\" | \"GET /internal/apm/diagnostics\" | \"POST /internal/apm/assistant/get_apm_timeseries\" | \"GET /internal/apm/assistant/get_service_summary\" | \"GET /internal/apm/assistant/get_error_document\" | \"POST /internal/apm/assistant/get_correlation_values\" | \"GET /internal/apm/assistant/get_downstream_dependencies\" | \"POST /internal/apm/assistant/get_services_list\"" + "\"POST /internal/apm/data_view/static\" | \"GET /internal/apm/data_view/title\" | \"GET /internal/apm/environments\" | \"GET /internal/apm/services/{serviceName}/errors/groups/main_statistics\" | \"GET /internal/apm/services/{serviceName}/errors/groups/main_statistics_by_transaction_name\" | \"POST /internal/apm/services/{serviceName}/errors/groups/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}/samples\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}/error/{errorId}\" | \"GET /internal/apm/services/{serviceName}/errors/distribution\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}/top_erroneous_transactions\" | \"POST /internal/apm/latency/overall_distribution/transactions\" | \"GET /internal/apm/services/{serviceName}/metrics/charts\" | \"GET /internal/apm/services/{serviceName}/metrics/nodes\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/charts\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/summary\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/functions_overview\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/active_instances\" | \"GET /internal/apm/observability_overview\" | \"GET /internal/apm/observability_overview/has_data\" | \"GET /internal/apm/service-map\" | \"GET /internal/apm/service-map/service/{serviceName}\" | \"GET /internal/apm/service-map/dependency\" | \"GET /internal/apm/services\" | \"POST /internal/apm/services/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/metadata/details\" | \"GET /internal/apm/services/{serviceName}/metadata/icons\" | \"GET /internal/apm/services/{serviceName}/agent\" | \"GET /internal/apm/services/{serviceName}/transaction_types\" | \"GET /internal/apm/services/{serviceName}/node/{serviceNodeName}/metadata\" | \"GET /api/apm/services/{serviceName}/annotation/search 2023-10-31\" | \"POST /api/apm/services/{serviceName}/annotation 2023-10-31\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/details/{serviceNodeName}\" | \"GET /internal/apm/services/{serviceName}/throughput\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/main_statistics\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/dependencies\" | \"GET /internal/apm/services/{serviceName}/dependencies/breakdown\" | \"GET /internal/apm/services/{serviceName}/anomaly_charts\" | \"GET /internal/apm/services/{serviceName}/alerts_count\" | \"GET /internal/apm/service-groups\" | \"GET /internal/apm/service-group\" | \"POST /internal/apm/service-group\" | \"DELETE /internal/apm/service-group\" | \"GET /internal/apm/service-group/services\" | \"GET /internal/apm/service-group/counts\" | \"GET /internal/apm/suggestions\" | \"GET /internal/apm/traces/{traceId}\" | \"GET /internal/apm/traces\" | \"GET /internal/apm/traces/{traceId}/root_transaction\" | \"GET /internal/apm/transactions/{transactionId}\" | \"GET /internal/apm/traces/find\" | \"POST /internal/apm/traces/aggregated_critical_path\" | \"GET /internal/apm/traces/{traceId}/transactions/{transactionId}\" | \"GET /internal/apm/traces/{traceId}/spans/{spanId}\" | \"GET /internal/apm/services/{serviceName}/transactions/groups/main_statistics\" | \"GET /internal/apm/services/{serviceName}/transactions/groups/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/latency\" | \"GET /internal/apm/services/{serviceName}/transactions/traces/samples\" | \"GET /internal/apm/services/{serviceName}/transaction/charts/breakdown\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/error_rate\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/coldstart_rate\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/coldstart_rate_by_transaction_name\" | \"GET /internal/apm/rule_types/transaction_error_rate/chart_preview\" | \"GET /internal/apm/rule_types/error_count/chart_preview\" | \"GET /internal/apm/rule_types/transaction_duration/chart_preview\" | \"GET /api/apm/settings/agent-configuration 2023-10-31\" | \"GET /api/apm/settings/agent-configuration/view 2023-10-31\" | \"DELETE /api/apm/settings/agent-configuration 2023-10-31\" | \"PUT /api/apm/settings/agent-configuration 2023-10-31\" | \"POST /api/apm/settings/agent-configuration/search 2023-10-31\" | \"GET /api/apm/settings/agent-configuration/environments 2023-10-31\" | \"GET /api/apm/settings/agent-configuration/agent_name 2023-10-31\" | \"GET /internal/apm/settings/anomaly-detection/jobs\" | \"POST /internal/apm/settings/anomaly-detection/jobs\" | \"GET /internal/apm/settings/anomaly-detection/environments\" | \"POST /internal/apm/settings/anomaly-detection/update_to_v3\" | \"GET /internal/apm/settings/apm-index-settings\" | \"GET /internal/apm/settings/apm-indices\" | \"POST /internal/apm/settings/apm-indices/save\" | \"GET /internal/apm/settings/custom_links/transaction\" | \"GET /internal/apm/settings/custom_links\" | \"POST /internal/apm/settings/custom_links\" | \"PUT /internal/apm/settings/custom_links/{id}\" | \"DELETE /internal/apm/settings/custom_links/{id}\" | \"GET /api/apm/sourcemaps 2023-10-31\" | \"POST /api/apm/sourcemaps 2023-10-31\" | \"DELETE /api/apm/sourcemaps/{id} 2023-10-31\" | \"POST /internal/apm/sourcemaps/migrate_fleet_artifacts\" | \"GET /internal/apm/fleet/has_apm_policies\" | \"GET /internal/apm/fleet/agents\" | \"POST /api/apm/fleet/apm_server_schema 2023-10-31\" | \"GET /internal/apm/fleet/apm_server_schema/unsupported\" | \"GET /internal/apm/fleet/migration_check\" | \"POST /internal/apm/fleet/cloud_apm_package_policy\" | \"GET /internal/apm/fleet/java_agent_versions\" | \"GET /internal/apm/dependencies/top_dependencies\" | \"GET /internal/apm/dependencies/upstream_services\" | \"GET /internal/apm/dependencies/metadata\" | \"GET /internal/apm/dependencies/charts/latency\" | \"GET /internal/apm/dependencies/charts/throughput\" | \"GET /internal/apm/dependencies/charts/error_rate\" | \"GET /internal/apm/dependencies/operations\" | \"GET /internal/apm/dependencies/charts/distribution\" | \"GET /internal/apm/dependencies/operations/spans\" | \"GET /internal/apm/correlations/field_candidates/transactions\" | \"GET /internal/apm/correlations/field_value_stats/transactions\" | \"POST /internal/apm/correlations/field_value_pairs/transactions\" | \"POST /internal/apm/correlations/significant_correlations/transactions\" | \"POST /internal/apm/correlations/p_values/transactions\" | \"GET /internal/apm/fallback_to_transactions\" | \"GET /internal/apm/has_data\" | \"GET /internal/apm/event_metadata/{processorEvent}/{id}\" | \"GET /internal/apm/agent_keys\" | \"GET /internal/apm/agent_keys/privileges\" | \"POST /internal/apm/api_key/invalidate\" | \"POST /api/apm/agent_keys 2023-10-31\" | \"GET /internal/apm/storage_explorer\" | \"GET /internal/apm/services/{serviceName}/storage_details\" | \"GET /internal/apm/storage_chart\" | \"GET /internal/apm/storage_explorer/privileges\" | \"GET /internal/apm/storage_explorer_summary_stats\" | \"GET /internal/apm/storage_explorer/is_cross_cluster_search\" | \"GET /internal/apm/storage_explorer/get_services\" | \"GET /internal/apm/traces/{traceId}/span_links/{spanId}/parents\" | \"GET /internal/apm/traces/{traceId}/span_links/{spanId}/children\" | \"GET /internal/apm/services/{serviceName}/infrastructure_attributes\" | \"GET /internal/apm/debug-telemetry\" | \"GET /internal/apm/time_range_metadata\" | \"GET /internal/apm/settings/labs\" | \"GET /internal/apm/get_agents_per_service\" | \"GET /internal/apm/get_latest_agent_versions\" | \"GET /internal/apm/services/{serviceName}/agent_instances\" | \"GET /internal/apm/services/{serviceName}/mobile/filters\" | \"GET /internal/apm/mobile-services/{serviceName}/most_used_charts\" | \"GET /internal/apm/mobile-services/{serviceName}/transactions/charts/sessions\" | \"GET /internal/apm/mobile-services/{serviceName}/transactions/charts/http_requests\" | \"GET /internal/apm/mobile-services/{serviceName}/stats\" | \"GET /internal/apm/mobile-services/{serviceName}/location/stats\" | \"GET /internal/apm/mobile-services/{serviceName}/terms\" | \"GET /internal/apm/mobile-services/{serviceName}/main_statistics\" | \"GET /internal/apm/mobile-services/{serviceName}/detailed_statistics\" | \"GET /internal/apm/diagnostics\" | \"POST /internal/apm/assistant/get_apm_timeseries\" | \"GET /internal/apm/assistant/get_service_summary\" | \"GET /internal/apm/assistant/get_error_document\" | \"POST /internal/apm/assistant/get_correlation_values\" | \"GET /internal/apm/assistant/get_downstream_dependencies\" | \"POST /internal/apm/assistant/get_services_list\" | \"GET /internal/apm/services/{serviceName}/profiling/flamegraph\"" ], "path": "x-pack/plugins/apm/server/routes/apm_routes/get_global_apm_server_route_repository.ts", "deprecated": false, @@ -455,7 +455,109 @@ "label": "APMServerRouteRepository", "description": [], "signature": [ - "{ \"POST /internal/apm/assistant/get_services_list\": { endpoint: \"POST /internal/apm/assistant/get_services_list\"; params?: ", + "{ \"GET /internal/apm/services/{serviceName}/profiling/flamegraph\": { endpoint: \"GET /internal/apm/services/{serviceName}/profiling/flamegraph\"; params?: ", + "TypeC", + "<{ path: ", + "TypeC", + "<{ serviceName: ", + "StringC", + "; }>; query: ", + "IntersectionC", + "<[", + "TypeC", + "<{ start: ", + "Type", + "; end: ", + "Type", + "; }>, ", + "TypeC", + "<{ kuery: ", + "StringC", + "; }>, ", + "TypeC", + "<{ environment: ", + "UnionC", + "<[", + "LiteralC", + "<\"ENVIRONMENT_NOT_DEFINED\">, ", + "LiteralC", + "<\"ENVIRONMENT_ALL\">, ", + "BrandC", + "<", + "StringC", + ", ", + { + "pluginId": "@kbn/io-ts-utils", + "scope": "common", + "docId": "kibKbnIoTsUtilsPluginApi", + "section": "def-common.NonEmptyStringBrand", + "text": "NonEmptyStringBrand" + }, + ">]>; }>, ", + "TypeC", + "<{ documentType: ", + "UnionC", + "<[", + "LiteralC", + "<", + "ApmDocumentType", + ".ServiceTransactionMetric>, ", + "LiteralC", + "<", + "ApmDocumentType", + ".TransactionMetric>, ", + "LiteralC", + "<", + "ApmDocumentType", + ".TransactionEvent>]>; rollupInterval: ", + "UnionC", + "<[", + "LiteralC", + "<", + "RollupInterval", + ".OneMinute>, ", + "LiteralC", + "<", + "RollupInterval", + ".TenMinutes>, ", + "LiteralC", + "<", + "RollupInterval", + ".SixtyMinutes>, ", + "LiteralC", + "<", + "RollupInterval", + ".None>]>; }>]>; }> | undefined; handler: ({}: ", + "APMRouteHandlerResources", + " & { params: { path: { serviceName: string; }; query: { start: number; end: number; } & { kuery: string; } & { environment: \"ENVIRONMENT_NOT_DEFINED\" | \"ENVIRONMENT_ALL\" | ", + "Branded", + "; } & { documentType: ", + "ApmDocumentType", + ".TransactionMetric | ", + "ApmDocumentType", + ".ServiceTransactionMetric | ", + "ApmDocumentType", + ".TransactionEvent; rollupInterval: ", + "RollupInterval", + "; }; }; }) => Promise<", + { + "pluginId": "@kbn/profiling-utils", + "scope": "common", + "docId": "kibKbnProfilingUtilsPluginApi", + "section": "def-common.BaseFlameGraph", + "text": "BaseFlameGraph" + }, + " | undefined>; } & ", + "APMRouteCreateOptions", + "; \"POST /internal/apm/assistant/get_services_list\": { endpoint: \"POST /internal/apm/assistant/get_services_list\"; params?: ", "TypeC", "<{ body: ", "IntersectionC", diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index 934942ef4dc7d..0321e08da232e 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: 2023-09-12 +date: 2023-09-13 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 7fbbbeaf32cb2..ccc6dae388e7c 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/asset_manager.mdx b/api_docs/asset_manager.mdx index e8a7ead0e3f42..2bad7c5caf69e 100644 --- a/api_docs/asset_manager.mdx +++ b/api_docs/asset_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetManager title: "assetManager" image: https://source.unsplash.com/400x175/?github description: API docs for the assetManager plugin -date: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetManager'] --- import assetManagerObj from './asset_manager.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index dfcf86d1f4c1a..b7b359acda646 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: 2023-09-12 +date: 2023-09-13 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 d3f3b85c98c7c..9f3e7bacf423f 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: 2023-09-12 +date: 2023-09-13 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 6bb63e47bd7e7..35c31f24455e0 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: 2023-09-12 +date: 2023-09-13 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 da249a675d670..c4ea980bdfd40 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: 2023-09-12 +date: 2023-09-13 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 c25aae50c77bd..aaf83ded16c82 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: 2023-09-12 +date: 2023-09-13 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 bb1ca8d19cb37..8baed658a86d9 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] --- import cloudObj from './cloud.devdocs.json'; diff --git a/api_docs/cloud_chat.mdx b/api_docs/cloud_chat.mdx index 7c6de64c57979..2da12d342ced2 100644 --- a/api_docs/cloud_chat.mdx +++ b/api_docs/cloud_chat.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudChat title: "cloudChat" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudChat plugin -date: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudChat'] --- import cloudChatObj from './cloud_chat.devdocs.json'; diff --git a/api_docs/cloud_chat_provider.mdx b/api_docs/cloud_chat_provider.mdx index 42a3f24a762ad..cfefd3c8175fe 100644 --- a/api_docs/cloud_chat_provider.mdx +++ b/api_docs/cloud_chat_provider.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudChatProvider title: "cloudChatProvider" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudChatProvider plugin -date: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudChatProvider'] --- import cloudChatProviderObj from './cloud_chat_provider.devdocs.json'; diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx index a8b3bc251e514..ad12a3d3293e5 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: 2023-09-12 +date: 2023-09-13 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 df824682c02b6..07ba774eeb694 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend'] --- import cloudDefendObj from './cloud_defend.devdocs.json'; diff --git a/api_docs/cloud_experiments.mdx b/api_docs/cloud_experiments.mdx index a7858aded45bb..77d1d81611094 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudExperiments'] --- import cloudExperimentsObj from './cloud_experiments.devdocs.json'; diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx index d48e404e6e148..fa344b8cd1e08 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: 2023-09-12 +date: 2023-09-13 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 cad065ce06831..a5647838823c2 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: 2023-09-12 +date: 2023-09-13 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 53afb192e7202..678f4bc4d01d6 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: 2023-09-12 +date: 2023-09-13 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 7b6a95ddce80b..6222fdddf3101 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: 2023-09-12 +date: 2023-09-13 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 95b1a1250f2f1..ed8b09b8aa01d 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations'] --- import customIntegrationsObj from './custom_integrations.devdocs.json'; diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx index 37a8b7fa72fc3..29e6604854c95 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboard'] --- import dashboardObj from './dashboard.devdocs.json'; diff --git a/api_docs/dashboard_enhanced.mdx b/api_docs/dashboard_enhanced.mdx index db134448b466a..d0984d0dba3e1 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: 2023-09-12 +date: 2023-09-13 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 6bfaae8c55aa0..e03cb84f065e1 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index 440af861a8bee..94a4d83f941cd 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: 2023-09-12 +date: 2023-09-13 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 2be5a1621bac9..d05211b72db28 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] --- import dataSearchObj from './data_search.devdocs.json'; diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index 9b9fe14e12357..bc9c5332b1d5c 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: 2023-09-12 +date: 2023-09-13 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 5f108a797d849..09560e1cd46cd 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: 2023-09-12 +date: 2023-09-13 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 61eb6fc5cb6a4..146d057db3d61 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: 2023-09-12 +date: 2023-09-13 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 cba5d81775e3d..8944c31b46bde 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: 2023-09-12 +date: 2023-09-13 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 8eba1bc28a3ff..45e1f8b045824 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index c34b6f9df39e8..36e26120e41e0 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 20316bc8c6342..0c396bf1c2d0c 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 823c6845fe56f..35aa77b621a4d 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index eae382ca25802..5c28c06fd69c0 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index 3b3259d0cbc12..ef5fa29530011 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: 2023-09-12 +date: 2023-09-13 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 f53d71e4c0be1..ff158f6a5a37f 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index fad333d7c3bca..b653fb78036e4 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/elastic_assistant.mdx b/api_docs/elastic_assistant.mdx index bb5346454d87d..70c1b911bda7e 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'elasticAssistant'] --- import elasticAssistantObj from './elastic_assistant.devdocs.json'; diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index e5863f17a000a..9217763484b93 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: 2023-09-12 +date: 2023-09-13 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 0de54d19b9480..947b0e22a3a51 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: 2023-09-12 +date: 2023-09-13 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 0b47459c13d30..a203be3c2e59b 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: 2023-09-12 +date: 2023-09-13 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 233483ada4ae3..025b910b17d62 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index 7b2cadda5bf1b..2996d73375ba5 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index d2c76e5b124f1..252d84810e54b 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index b35f24c255122..3fff455b0a940 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: 2023-09-12 +date: 2023-09-13 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 e8e9396cf034e..a7af7966142de 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: 2023-09-12 +date: 2023-09-13 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 18c79a3fa66f5..e022424c3bcfd 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: 2023-09-12 +date: 2023-09-13 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 782170289107b..025a92714cb2b 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: 2023-09-12 +date: 2023-09-13 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 81d344911c4c6..f77caa84872dd 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: 2023-09-12 +date: 2023-09-13 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 8586f6f34e582..df0d244e525e0 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: 2023-09-12 +date: 2023-09-13 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 552babe91435a..216d05dfda4b5 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: 2023-09-12 +date: 2023-09-13 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 44f6b30d3a7e3..7447f9267eeab 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: 2023-09-12 +date: 2023-09-13 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 a68aa0869d79d..7f318a76a2e2a 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: 2023-09-12 +date: 2023-09-13 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 7385e62cde7df..fcc3d1cdddc09 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: 2023-09-12 +date: 2023-09-13 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 623f5a94ce8ca..1e57837174182 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: 2023-09-12 +date: 2023-09-13 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 515c8f1d93fe2..4d8583e8c96ed 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: 2023-09-12 +date: 2023-09-13 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 14f3bd8ffdcd9..55b73dc07e946 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: 2023-09-12 +date: 2023-09-13 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 7e5715c6125bd..a7ea5594dc7e1 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: 2023-09-12 +date: 2023-09-13 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 81c150e4528da..4fc8bfe7e5077 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: 2023-09-12 +date: 2023-09-13 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 81a08a37a641c..8ff4021bced53 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressions'] --- import expressionsObj from './expressions.devdocs.json'; diff --git a/api_docs/features.mdx b/api_docs/features.mdx index f7bf9d3871408..b6ead9d135807 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'features'] --- import featuresObj from './features.devdocs.json'; diff --git a/api_docs/field_formats.mdx b/api_docs/field_formats.mdx index 89069da507e73..340c879e1b751 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index 146fb1ad8ac04..b97278b601b79 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: 2023-09-12 +date: 2023-09-13 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 fd565572e57b2..d9370b426ba25 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: 2023-09-12 +date: 2023-09-13 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 cde19e16fd9f2..e2b7e5da3f308 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement'] --- import filesManagementObj from './files_management.devdocs.json'; diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index 008869ed1c103..a2d2ac414a189 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: 2023-09-12 +date: 2023-09-13 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 864f7cb701e52..1e0c1befd77ce 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: 2023-09-12 +date: 2023-09-13 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 4bfd5c20c791b..727ef69690db4 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: 2023-09-12 +date: 2023-09-13 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 89fbe9790ab9b..aeebb152ddbb7 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: 2023-09-12 +date: 2023-09-13 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 7246a3b40891e..30e0ffc11e61b 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: 2023-09-12 +date: 2023-09-13 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 9b7d3e033496c..461076745bfca 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: 2023-09-12 +date: 2023-09-13 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 209b95be63202..10df7ee6b8495 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index f56a7753b1a71..81c6d278ba6c5 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index 2576a9ad71871..05d5cf4824821 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index c40f1d90d78fb..70bd1093402f0 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index 54b791d6d6439..ced2a0416e5ef 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index 201210befdb4d..840621476fc4a 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_utils.mdx b/api_docs/kbn_aiops_utils.mdx index 990f6c875d5ea..30fafa575aa86 100644 --- a/api_docs/kbn_aiops_utils.mdx +++ b/api_docs/kbn_aiops_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils title: "@kbn/aiops-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-utils plugin -date: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils'] --- import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index 4bc2833b5410f..a50005a3eb4d3 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: 2023-09-12 +date: 2023-09-13 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_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index cd2f05ea8cd2d..087548ae3f2c7 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-state-types'] --- import kbnAlertingStateTypesObj from './kbn_alerting_state_types.devdocs.json'; diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index d6fa40ced889a..31dabd1555c9c 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: 2023-09-12 +date: 2023-09-13 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_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 6e0fe1dfd8d22..377eb4a494990 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-ui-shared'] --- import kbnAlertsUiSharedObj from './kbn_alerts_ui_shared.devdocs.json'; diff --git a/api_docs/kbn_analytics.mdx b/api_docs/kbn_analytics.mdx index 1c7a6f69af4d7..ad361f8e3e7c1 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx index 8ef3bf7cbfc5e..7c8bad3bcf0bd 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-client plugin -date: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx index d8031106fc184..612a946dbe6b5 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-browser'] --- import kbnAnalyticsShippersElasticV3BrowserObj from './kbn_analytics_shippers_elastic_v3_browser.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx index 14f2ce75c31ab..29c87b3489d74 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-common'] --- import kbnAnalyticsShippersElasticV3CommonObj from './kbn_analytics_shippers_elastic_v3_common.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx index 342266ca1b6ca..d0a75d3834b97 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-server'] --- import kbnAnalyticsShippersElasticV3ServerObj from './kbn_analytics_shippers_elastic_v3_server.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_fullstory.mdx b/api_docs/kbn_analytics_shippers_fullstory.mdx index 64e95993ed8d7..c7d43d33f7678 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory'] --- import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_gainsight.mdx b/api_docs/kbn_analytics_shippers_gainsight.mdx index 32eed44407a28..4dd5ec04c8753 100644 --- a/api_docs/kbn_analytics_shippers_gainsight.mdx +++ b/api_docs/kbn_analytics_shippers_gainsight.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-gainsight title: "@kbn/analytics-shippers-gainsight" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-gainsight plugin -date: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-gainsight'] --- import kbnAnalyticsShippersGainsightObj from './kbn_analytics_shippers_gainsight.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index 00c606eef262a..16349148ffbdb 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: 2023-09-12 +date: 2023-09-13 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_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index 30890218752fe..211f858c95038 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: 2023-09-12 +date: 2023-09-13 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 894ca4efc02c3..9b59ec8bc69b5 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: 2023-09-12 +date: 2023-09-13 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_utils.mdx b/api_docs/kbn_apm_utils.mdx index feecd076a50e1..caa146e8e0c55 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index eabebcbcad8ca..ce33e7094b5d3 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index e9a8e296cfec9..e154d1876617a 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index 7ce9cdfc75946..43c2d48d8d503 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: 2023-09-12 +date: 2023-09-13 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 d533f759f552a..dc2a22537cfbd 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: 2023-09-12 +date: 2023-09-13 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 e2bbd222f478c..3057e387f2dce 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: 2023-09-12 +date: 2023-09-13 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 a249173c4dc60..624246f3f1cbe 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: 2023-09-12 +date: 2023-09-13 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 c18c56f5e3ebb..9bc2481809ebc 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: 2023-09-12 +date: 2023-09-13 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 0ad31951aa038..bed3382b721da 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: 2023-09-12 +date: 2023-09-13 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 e14c623146071..e004b83be3ba0 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index 5b1f7661fadce..bcf1edf67f4d6 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mocks.mdx b/api_docs/kbn_code_editor_mocks.mdx index 6aa7a61140c19..0693c819d3639 100644 --- a/api_docs/kbn_code_editor_mocks.mdx +++ b/api_docs/kbn_code_editor_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mocks title: "@kbn/code-editor-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mocks plugin -date: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mocks'] --- import kbnCodeEditorMocksObj from './kbn_code_editor_mocks.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index 8e3cf8cc19745..837799a3183ab 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: 2023-09-12 +date: 2023-09-13 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 bf35bb0bae403..ea2afb6cebc6e 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: 2023-09-12 +date: 2023-09-13 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 521b6af3fbb54..fd1b2b0704e5c 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: 2023-09-12 +date: 2023-09-13 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 809925aacafb4..fad14faae22ab 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: 2023-09-12 +date: 2023-09-13 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 3ddbb29dab1fe..689fffafe3d10 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: 2023-09-12 +date: 2023-09-13 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_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index 5b693f3203530..d60366283c07f 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: 2023-09-12 +date: 2023-09-13 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 246ec97ac60e1..7685973bf5445 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: 2023-09-12 +date: 2023-09-13 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_table.mdx b/api_docs/kbn_content_management_table_list_view_table.mdx index 22e9602c9848f..3e120dd75aa81 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: 2023-09-12 +date: 2023-09-13 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_utils.mdx b/api_docs/kbn_content_management_utils.mdx index 8d640591dfbfd..638a0719fbc92 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: 2023-09-12 +date: 2023-09-13 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 fb19b2722811c..38a5af9bca204 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: 2023-09-12 +date: 2023-09-13 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 4a2479339cdc9..cdd8ddc274859 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: 2023-09-12 +date: 2023-09-13 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 03a2d807d608c..b0e98295e3651 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: 2023-09-12 +date: 2023-09-13 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 2c92d56ed82d0..d3fc29b22133c 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: 2023-09-12 +date: 2023-09-13 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 35550fe4ac6b3..f75467bf89bd3 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: 2023-09-12 +date: 2023-09-13 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 0b02b2278d415..83bf6e86b3882 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-mocks'] --- import kbnCoreAnalyticsServerMocksObj from './kbn_core_analytics_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser.mdx b/api_docs/kbn_core_application_browser.mdx index fa7201dd3c0a4..3bceef68891e7 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: 2023-09-12 +date: 2023-09-13 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 709dd2cb65b7a..e6e96eac11a67 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: 2023-09-12 +date: 2023-09-13 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 fd39cd1e5d026..e69b9cbd85f31 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: 2023-09-12 +date: 2023-09-13 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 96d46f1ff82fd..89677d63998f6 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: 2023-09-12 +date: 2023-09-13 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 5c3bbcfb54b1c..1da42e9b40e3b 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: 2023-09-12 +date: 2023-09-13 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 94943f1609c27..f089280e74a0e 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: 2023-09-12 +date: 2023-09-13 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 88c9a6f9d46c0..3be5e340de76f 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: 2023-09-12 +date: 2023-09-13 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 9c026eb2fbd00..fb8a09425d2e4 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: 2023-09-12 +date: 2023-09-13 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 906b1d0faecc3..f2e2d4e81d5c0 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: 2023-09-12 +date: 2023-09-13 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 3eede6580c1ff..799955a5d8168 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: 2023-09-12 +date: 2023-09-13 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 3b7695c8b9e5f..a343df6e423d4 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: 2023-09-12 +date: 2023-09-13 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 960f84c66596f..2e0c77ef52b11 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: 2023-09-12 +date: 2023-09-13 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 eafa0c070d64c..d002a63d85cb6 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: 2023-09-12 +date: 2023-09-13 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 f8bc8816b403c..9078dd27a2cd2 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: 2023-09-12 +date: 2023-09-13 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 b6cffdb054444..627a503686bea 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server-mocks'] --- import kbnCoreCapabilitiesServerMocksObj from './kbn_core_capabilities_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_chrome_browser.mdx b/api_docs/kbn_core_chrome_browser.mdx index d1306a2e1c770..18c9cf8270f55 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: 2023-09-12 +date: 2023-09-13 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 768fdb6ec92b9..cac16801c9b61 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: 2023-09-12 +date: 2023-09-13 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 5cef2d6c9a47c..ec21285b3e2a8 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: 2023-09-12 +date: 2023-09-13 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 6c8f7fcdf06fd..2f5550e57d5d3 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: 2023-09-12 +date: 2023-09-13 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 4f465fa7e77dc..4ad9e7c5b741b 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: 2023-09-12 +date: 2023-09-13 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 33183dff8a1e7..dba337f90278c 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: 2023-09-12 +date: 2023-09-13 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 78627d9cd6ff8..ade37e92fa17b 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: 2023-09-12 +date: 2023-09-13 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 801e8875eb89b..b129f94245a42 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: 2023-09-12 +date: 2023-09-13 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 dfe7f3e008634..b8426f93d901d 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: 2023-09-12 +date: 2023-09-13 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 35e1b62fae435..b223b8ad24295 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: 2023-09-12 +date: 2023-09-13 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 ec8b5d41d1b90..94ff3b5d15f66 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: 2023-09-12 +date: 2023-09-13 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 568684a7ed1b2..85a3df5bd0d3f 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: 2023-09-12 +date: 2023-09-13 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 3c2077ac5c9ce..f65063eff2d64 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: 2023-09-12 +date: 2023-09-13 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 66c6d98643c51..24a60c23de605 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: 2023-09-12 +date: 2023-09-13 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 08027643bb569..ad7bbeba00b9c 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: 2023-09-12 +date: 2023-09-13 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 72cadd2b28a2b..e7601e739d8d0 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: 2023-09-12 +date: 2023-09-13 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 931303a1862cd..019dae5622e00 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: 2023-09-12 +date: 2023-09-13 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 5bffbb6c006f7..625aea26f97c2 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: 2023-09-12 +date: 2023-09-13 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 25f24ade5d1e4..bb05db24ec7ee 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: 2023-09-12 +date: 2023-09-13 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 9d241d30746d2..8d84a1cda3a30 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: 2023-09-12 +date: 2023-09-13 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 3f7758329c5da..2bebe89767c7b 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: 2023-09-12 +date: 2023-09-13 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 427ceda5e1c53..960f0bf180c46 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: 2023-09-12 +date: 2023-09-13 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 10d34fc7145bd..b129f424bc4d6 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-mocks'] --- import kbnCoreElasticsearchClientServerMocksObj from './kbn_core_elasticsearch_client_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server.mdx b/api_docs/kbn_core_elasticsearch_server.mdx index 95f96db44431b..efc5ffba7900a 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: 2023-09-12 +date: 2023-09-13 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 ed6a74ddf6f82..8f44d2fbc2bf3 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: 2023-09-12 +date: 2023-09-13 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 2c3d5c020cd28..12fc7c154011e 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: 2023-09-12 +date: 2023-09-13 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 3ef6f666cffc3..5d373c4a6d75f 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: 2023-09-12 +date: 2023-09-13 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 c498f2281fc02..fa14ca9284b8e 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: 2023-09-12 +date: 2023-09-13 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 d61d47d93930f..04251bcddd9b9 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: 2023-09-12 +date: 2023-09-13 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 247db7882ed85..df8abf49b100c 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: 2023-09-12 +date: 2023-09-13 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 77d9ceaa9d3c0..b6efb8777a1b2 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: 2023-09-12 +date: 2023-09-13 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 669e7426797aa..8d820a4a6512c 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: 2023-09-12 +date: 2023-09-13 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 0b541d9b8e11e..0a82ff6f4bb98 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: 2023-09-12 +date: 2023-09-13 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 074c9871fecdd..6f255b40819c5 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: 2023-09-12 +date: 2023-09-13 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 09b01925db957..990ac7a7691a4 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: 2023-09-12 +date: 2023-09-13 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 f9e7348f255ec..7e3fc0712d744 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: 2023-09-12 +date: 2023-09-13 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 d062156d3954f..788740f733e54 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: 2023-09-12 +date: 2023-09-13 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_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx index ba027e9763dcd..7620efe9b717b 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: 2023-09-12 +date: 2023-09-13 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 09f8ca4c46104..e45995f2ba22f 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: 2023-09-12 +date: 2023-09-13 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 7882f0088aace..edf36ab2b9b30 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: 2023-09-12 +date: 2023-09-13 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 c93ddf9eadeb7..73eaab5107815 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: 2023-09-12 +date: 2023-09-13 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 d9344703a1eaa..333bc2ef14e47 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: 2023-09-12 +date: 2023-09-13 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 0c8023b60b734..c939eccfa85f0 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: 2023-09-12 +date: 2023-09-13 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 d0f719603edb6..75c5bafb6656d 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: 2023-09-12 +date: 2023-09-13 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 ef933f443ae03..e1a27e29f13d0 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: 2023-09-12 +date: 2023-09-13 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 e6eddcaa97a2b..1db0150620673 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: 2023-09-12 +date: 2023-09-13 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 a70f1d958f27c..190f4aaba37e2 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: 2023-09-12 +date: 2023-09-13 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 2918f743edd3a..2b6111f5ee4b7 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks'] --- import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 889b027188406..56192d84288a0 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: 2023-09-12 +date: 2023-09-13 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 18394c44a9d89..fac7054f4bedd 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: 2023-09-12 +date: 2023-09-13 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 6ee2f64396918..ebc8c2badc6d4 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: 2023-09-12 +date: 2023-09-13 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_i18n_browser.mdx b/api_docs/kbn_core_i18n_browser.mdx index 939881a2ca2fe..6793915901fca 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: 2023-09-12 +date: 2023-09-13 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 49ef380d9ae91..297bc703eced0 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: 2023-09-12 +date: 2023-09-13 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 bf7cda6935568..f16a926b45ab2 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: 2023-09-12 +date: 2023-09-13 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 0cfcf35c4bc3c..5f57f2d579b04 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: 2023-09-12 +date: 2023-09-13 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 ceaed89ee3b37..f6299a3b0cbe9 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: 2023-09-12 +date: 2023-09-13 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 ce6e48b6e9315..4d3182846eda3 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: 2023-09-12 +date: 2023-09-13 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 de228bd584509..edffd877512c5 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: 2023-09-12 +date: 2023-09-13 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 dd4a2372f2670..fd71c7f8d2581 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: 2023-09-12 +date: 2023-09-13 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 1837040dbad2a..67205cc60f586 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: 2023-09-12 +date: 2023-09-13 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 35c8c66258c77..4cb2b9b7aa27c 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: 2023-09-12 +date: 2023-09-13 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 b4a94f4128919..622f94777e1e9 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: 2023-09-12 +date: 2023-09-13 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 aeea9e18730df..af0d5329fdbe3 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: 2023-09-12 +date: 2023-09-13 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 d47e7103012ac..70f69fadbc86c 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: 2023-09-12 +date: 2023-09-13 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 e45f3ec2ffefe..c0954438f8bbc 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: 2023-09-12 +date: 2023-09-13 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 54fa7e6298f69..cb285fcbc0817 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: 2023-09-12 +date: 2023-09-13 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 5bc22e3da8cbf..53d61904513b7 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: 2023-09-12 +date: 2023-09-13 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 fa2f6c3f5f16f..c1c6e19ab8a68 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: 2023-09-12 +date: 2023-09-13 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 4d8dda4d1788d..b10208998bcd7 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: 2023-09-12 +date: 2023-09-13 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 2fb057d10a8e2..3ff5150143804 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: 2023-09-12 +date: 2023-09-13 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 400cc8707c7d6..c44b0b2117ce5 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: 2023-09-12 +date: 2023-09-13 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 7a53dc5c044e3..55e9bb16959e5 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: 2023-09-12 +date: 2023-09-13 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 2480a071ce56a..8fac50c57da1a 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: 2023-09-12 +date: 2023-09-13 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 b73065de470c3..1b172c825ace1 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: 2023-09-12 +date: 2023-09-13 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 8b9bd8f098fd0..7008beab1738c 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: 2023-09-12 +date: 2023-09-13 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 d954dce2f2b2b..8b7335baad4bf 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: 2023-09-12 +date: 2023-09-13 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 9763bb576a19d..5ddb00dd955e7 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: 2023-09-12 +date: 2023-09-13 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 fcf14abc66907..3f2acf7b4fb3e 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: 2023-09-12 +date: 2023-09-13 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 5b05388fe50b9..2ac5493f2b133 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: 2023-09-12 +date: 2023-09-13 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 c5068f5d36bc3..90cf4cb1f9fd0 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: 2023-09-12 +date: 2023-09-13 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 fe537a156e974..7d88695f51048 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: 2023-09-12 +date: 2023-09-13 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 dbedde8326fa0..94583af89cadb 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: 2023-09-12 +date: 2023-09-13 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 182fa629af08e..8ae081bcb9b1e 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: 2023-09-12 +date: 2023-09-13 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 1ae2c41237ecb..3e535f141bc30 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: 2023-09-12 +date: 2023-09-13 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 05002f137bb92..2e20f288f809a 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: 2023-09-12 +date: 2023-09-13 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_server.mdx b/api_docs/kbn_core_plugins_server.mdx index ccfb5286d38c1..724b2e312ed06 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: 2023-09-12 +date: 2023-09-13 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 feb0df5014cb4..b509c9f5e2c6c 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: 2023-09-12 +date: 2023-09-13 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 62280c0c12da1..43e99414f7c20 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: 2023-09-12 +date: 2023-09-13 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 2cbc7f9ca6d1f..1b35bf41a48fc 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: 2023-09-12 +date: 2023-09-13 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_mocks.mdx b/api_docs/kbn_core_rendering_browser_mocks.mdx index f30a21ec790b1..3572eec8dc6d7 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: 2023-09-12 +date: 2023-09-13 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 82b10036e143b..280ccbc6fbe40 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: 2023-09-12 +date: 2023-09-13 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 a50be8c4fd1dd..95c7012b86872 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: 2023-09-12 +date: 2023-09-13 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 f6441d6d0b127..da17aa9946e86 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: 2023-09-12 +date: 2023-09-13 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 eb1703990791c..d6855a30e4fcb 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: 2023-09-12 +date: 2023-09-13 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 771990875640a..641c6f84c886a 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: 2023-09-12 +date: 2023-09-13 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 a01a46be63ecd..5ffbe9c75bf4a 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: 2023-09-12 +date: 2023-09-13 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 001c44618d0c3..9d68a4399bdb8 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: 2023-09-12 +date: 2023-09-13 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 027646fe0f9ac..2169deffd755e 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: 2023-09-12 +date: 2023-09-13 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 4651012b8d142..595e680adcd92 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: 2023-09-12 +date: 2023-09-13 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 77294bc412292..c8ada6c1d565d 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: 2023-09-12 +date: 2023-09-13 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 50d29aa340d3d..9ff3c6997fdad 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-mocks'] --- import kbnCoreSavedObjectsBrowserMocksObj from './kbn_core_saved_objects_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_common.mdx b/api_docs/kbn_core_saved_objects_common.mdx index 46a80f8959085..d237c9e4d649c 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: 2023-09-12 +date: 2023-09-13 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 231f0c02bee79..6e9cd37dd72d1 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: 2023-09-12 +date: 2023-09-13 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 3b4ecdf7b9bdb..cad186b2dc033 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: 2023-09-12 +date: 2023-09-13 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 8903a502bfadc..6e1664e89b1bd 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: 2023-09-12 +date: 2023-09-13 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 abdceac9b19ec..c1f3776997875 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: 2023-09-12 +date: 2023-09-13 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 145d5e170fd62..be93347de8bf6 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: 2023-09-12 +date: 2023-09-13 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 4d271c4731a11..21b3f41f0fee1 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: 2023-09-12 +date: 2023-09-13 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 9e6dcb77e9195..46ead18c42752 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: 2023-09-12 +date: 2023-09-13 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 fc7cd5b1cc5b1..1f28dab63ff5b 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: 2023-09-12 +date: 2023-09-13 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_status_common.mdx b/api_docs/kbn_core_status_common.mdx index b474628c4e6ab..647c4e01d8b17 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: 2023-09-12 +date: 2023-09-13 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_common_internal.mdx b/api_docs/kbn_core_status_common_internal.mdx index b5d224491a0d9..20d65f134cf1c 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common-internal'] --- import kbnCoreStatusCommonInternalObj from './kbn_core_status_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_status_server.mdx b/api_docs/kbn_core_status_server.mdx index b936f1cad4950..0707e03010fb3 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: 2023-09-12 +date: 2023-09-13 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 d50758bd95481..33a38b2a54919 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: 2023-09-12 +date: 2023-09-13 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 fbbc9bca14735..481cd2b4bfd41 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: 2023-09-12 +date: 2023-09-13 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 4325a8b9d0a47..b23a31f9048d2 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: 2023-09-12 +date: 2023-09-13 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 0d8c915fc6da6..e8e77e92f6c28 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: 2023-09-12 +date: 2023-09-13 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 70bfe3aae8693..abfa1570e05ed 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: 2023-09-12 +date: 2023-09-13 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_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx index b4511ef51975f..371e3c6f42444 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: 2023-09-12 +date: 2023-09-13 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 79df374c28e3a..db1e0f76d4d62 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: 2023-09-12 +date: 2023-09-13 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 4028e66a556aa..f276b62a73423 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: 2023-09-12 +date: 2023-09-13 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 4ee1059f282fa..7c24094965b1e 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: 2023-09-12 +date: 2023-09-13 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 66e9d39800be8..770daf63751bf 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: 2023-09-12 +date: 2023-09-13 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 dbabbf0a55f92..9b21cae907972 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: 2023-09-12 +date: 2023-09-13 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 ee1d96f201645..65327a6f206fd 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-mocks'] --- import kbnCoreUiSettingsBrowserMocksObj from './kbn_core_ui_settings_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_common.mdx b/api_docs/kbn_core_ui_settings_common.mdx index 8b9b496609e84..1aa4a737229d7 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: 2023-09-12 +date: 2023-09-13 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 e6563f5f7e730..9cb79338d1682 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: 2023-09-12 +date: 2023-09-13 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 3fd46b711a04a..ff32cbf0d8e3c 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: 2023-09-12 +date: 2023-09-13 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 6c9f2ccee8d62..404134d87f917 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: 2023-09-12 +date: 2023-09-13 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 00cc70e786a4c..da875bbf0e182 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: 2023-09-12 +date: 2023-09-13 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 49757b6f75eaa..1e64c972845b0 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: 2023-09-12 +date: 2023-09-13 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 543ce65ee4c81..771d2a438138c 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: 2023-09-12 +date: 2023-09-13 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_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index d51d21ac260c9..06fbdc6d3125b 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: 2023-09-12 +date: 2023-09-13 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_internal.mdx b/api_docs/kbn_core_user_settings_server_internal.mdx index 3c7b6d0c59f05..06b5995f2a0a1 100644 --- a/api_docs/kbn_core_user_settings_server_internal.mdx +++ b/api_docs/kbn_core_user_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-internal title: "@kbn/core-user-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-internal plugin -date: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-internal'] --- import kbnCoreUserSettingsServerInternalObj from './kbn_core_user_settings_server_internal.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 95c53619109b7..dd2186a3171b8 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: 2023-09-12 +date: 2023-09-13 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 978ca8c7e9baa..a853e8d288304 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: 2023-09-12 +date: 2023-09-13 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 ed2a6e799801a..905bcbc3d5f6f 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_custom_integrations.devdocs.json b/api_docs/kbn_custom_integrations.devdocs.json new file mode 100644 index 0000000000000..931ffe65e4a92 --- /dev/null +++ b/api_docs/kbn_custom_integrations.devdocs.json @@ -0,0 +1,404 @@ +{ + "id": "@kbn/custom-integrations", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [ + { + "parentPluginId": "@kbn/custom-integrations", + "id": "def-common.ConnectedCustomIntegrationsButton", + "type": "Function", + "tags": [], + "label": "ConnectedCustomIntegrationsButton", + "description": [], + "signature": [ + "({ isDisabled, onClick, testSubj, }: ConnectedCustomIntegrationsButtonProps) => JSX.Element | null" + ], + "path": "packages/kbn-custom-integrations/src/components/custom_integrations_button.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/custom-integrations", + "id": "def-common.ConnectedCustomIntegrationsButton.$1", + "type": "Object", + "tags": [], + "label": "{\n isDisabled,\n onClick,\n testSubj = 'customIntegrationsPackageConnectedButton',\n}", + "description": [], + "signature": [ + "ConnectedCustomIntegrationsButtonProps" + ], + "path": "packages/kbn-custom-integrations/src/components/custom_integrations_button.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/custom-integrations", + "id": "def-common.ConnectedCustomIntegrationsForm", + "type": "Function", + "tags": [], + "label": "ConnectedCustomIntegrationsForm", + "description": [], + "signature": [ + "({ testSubjects }: Props) => JSX.Element | null" + ], + "path": "packages/kbn-custom-integrations/src/components/custom_integrations_form.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/custom-integrations", + "id": "def-common.ConnectedCustomIntegrationsForm.$1", + "type": "Object", + "tags": [], + "label": "{ testSubjects }", + "description": [], + "signature": [ + "Props" + ], + "path": "packages/kbn-custom-integrations/src/components/custom_integrations_form.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/custom-integrations", + "id": "def-common.CustomIntegrationsProvider", + "type": "Function", + "tags": [], + "label": "CustomIntegrationsProvider", + "description": [], + "signature": [ + "React.FunctionComponent>" + ], + "path": "packages/kbn-custom-integrations/src/state_machines/custom_integrations/provider.tsx", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/custom-integrations", + "id": "def-common.CustomIntegrationsProvider.$1", + "type": "CompoundType", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "P & { children?: React.ReactNode; }" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/custom-integrations", + "id": "def-common.CustomIntegrationsProvider.$2", + "type": "Any", + "tags": [], + "label": "context", + "description": [], + "signature": [ + "any" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/custom-integrations", + "id": "def-common.useConsumerCustomIntegrations", + "type": "Function", + "tags": [], + "label": "useConsumerCustomIntegrations", + "description": [], + "signature": [ + "() => { mode: ", + "Mode", + "; dispatchableEvents: { saveCreateFields: (() => void) | undefined; updateCreateFields: ((fields: Partial<{ integrationName: string; datasets: { name: string; type: \"metrics\" | \"logs\"; }[]; }>) => void) | undefined; }; }" + ], + "path": "packages/kbn-custom-integrations/src/hooks/use_consumer_custom_integrations.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/custom-integrations", + "id": "def-common.useCustomIntegrations", + "type": "Function", + "tags": [], + "label": "useCustomIntegrations", + "description": [], + "signature": [ + "() => { customIntegrationsState: ", + "State", + "<", + "WithSelectedMode", + ", ", + "CreateCustomIntegrationNotificationEvent", + ", any, ", + "CustomIntegrationsTypestate", + ", ", + "ResolveTypegenMeta", + "<", + "TypegenDisabled", + ", ", + "CreateCustomIntegrationNotificationEvent", + ", ", + "BaseActionObject", + ", ", + "ServiceMap", + ">>; customIntegrationsPageSend: (event: ", + "SingleOrArray", + "<", + "Event", + "<", + "CreateCustomIntegrationNotificationEvent", + ">> | ", + "SCXML", + ".Event<", + "CreateCustomIntegrationNotificationEvent", + ">, payload?: ", + "EventData", + " | undefined) => ", + "State", + "<", + "WithSelectedMode", + ", ", + "CreateCustomIntegrationNotificationEvent", + ", any, ", + "CustomIntegrationsTypestate", + ", ", + "ResolveTypegenMeta", + "<", + "TypegenDisabled", + ", ", + "CreateCustomIntegrationNotificationEvent", + ", ", + "BaseActionObject", + ", ", + "ServiceMap", + ">>; customIntegrationsStateService: ", + "Interpreter", + "<", + "WithSelectedMode", + ", any, ", + "CreateCustomIntegrationNotificationEvent", + ", ", + "CustomIntegrationsTypestate", + ", ", + "ResolveTypegenMeta", + "<", + "TypegenDisabled", + ", ", + "CreateCustomIntegrationNotificationEvent", + ", ", + "BaseActionObject", + ", ", + "ServiceMap", + ">>; }" + ], + "path": "packages/kbn-custom-integrations/src/hooks/use_custom_integrations.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [ + { + "parentPluginId": "@kbn/custom-integrations", + "id": "def-common.Callbacks", + "type": "Interface", + "tags": [], + "label": "Callbacks", + "description": [], + "path": "packages/kbn-custom-integrations/src/state_machines/custom_integrations/provider.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/custom-integrations", + "id": "def-common.Callbacks.onIntegrationCreation", + "type": "Function", + "tags": [], + "label": "onIntegrationCreation", + "description": [], + "signature": [ + "((integrationOptions: { integrationName: string; datasets: { name: string; type: \"metrics\" | \"logs\"; }[]; }) => void) | undefined" + ], + "path": "packages/kbn-custom-integrations/src/state_machines/custom_integrations/provider.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/custom-integrations", + "id": "def-common.Callbacks.onIntegrationCreation.$1", + "type": "Object", + "tags": [], + "label": "integrationOptions", + "description": [], + "signature": [ + "{ integrationName: string; datasets: { name: string; type: \"metrics\" | \"logs\"; }[]; }" + ], + "path": "packages/kbn-custom-integrations/src/state_machines/custom_integrations/provider.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/custom-integrations", + "id": "def-common.Callbacks.onIntegrationCleanup", + "type": "Function", + "tags": [], + "label": "onIntegrationCleanup", + "description": [], + "signature": [ + "((integrationName: string) => void) | undefined" + ], + "path": "packages/kbn-custom-integrations/src/state_machines/custom_integrations/provider.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/custom-integrations", + "id": "def-common.Callbacks.onIntegrationCleanup.$1", + "type": "string", + "tags": [], + "label": "integrationName", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-custom-integrations/src/state_machines/custom_integrations/provider.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/custom-integrations", + "id": "def-common.Callbacks.onIntegrationCleanupFailed", + "type": "Function", + "tags": [], + "label": "onIntegrationCleanupFailed", + "description": [], + "signature": [ + "((error: ", + "IntegrationError", + ") => void) | undefined" + ], + "path": "packages/kbn-custom-integrations/src/state_machines/custom_integrations/provider.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/custom-integrations", + "id": "def-common.Callbacks.onIntegrationCleanupFailed.$1", + "type": "Object", + "tags": [], + "label": "error", + "description": [], + "signature": [ + "IntegrationError" + ], + "path": "packages/kbn-custom-integrations/src/state_machines/custom_integrations/provider.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + } + ], + "enums": [], + "misc": [ + { + "parentPluginId": "@kbn/custom-integrations", + "id": "def-common.CustomIntegrationOptions", + "type": "Type", + "tags": [], + "label": "CustomIntegrationOptions", + "description": [], + "signature": [ + "{ integrationName: string; datasets: { name: string; type: \"metrics\" | \"logs\"; }[]; }" + ], + "path": "packages/kbn-custom-integrations/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/custom-integrations", + "id": "def-common.DispatchableEvents", + "type": "Type", + "tags": [], + "label": "DispatchableEvents", + "description": [], + "signature": [ + "{ saveCreateFields: (() => void) | undefined; updateCreateFields: ((fields: Partial<{ integrationName: string; datasets: { name: string; type: \"metrics\" | \"logs\"; }[]; }>) => void) | undefined; }" + ], + "path": "packages/kbn-custom-integrations/src/hooks/use_consumer_custom_integrations.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/custom-integrations", + "id": "def-common.InitialState", + "type": "Type", + "tags": [], + "label": "InitialState", + "description": [], + "signature": [ + "{ context?: Partial<", + "CreateInitialState", + "> | undefined; } & ", + "WithSelectedMode" + ], + "path": "packages/kbn-custom-integrations/src/state_machines/custom_integrations/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_custom_integrations.mdx b/api_docs/kbn_custom_integrations.mdx new file mode 100644 index 0000000000000..a601161cb0b97 --- /dev/null +++ b/api_docs/kbn_custom_integrations.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: kibKbnCustomIntegrationsPluginApi +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: 2023-09-13 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-integrations'] +--- +import kbnCustomIntegrationsObj from './kbn_custom_integrations.devdocs.json'; + + + +Contact [@elastic/infra-monitoring-ui](https://github.com/orgs/elastic/teams/infra-monitoring-ui) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 19 | 0 | 17 | 6 | + +## Common + +### Functions + + +### Interfaces + + +### Consts, variables and types + + diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx index 03b957e3c9f1b..8ac9dd661d0df 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_data_service.mdx b/api_docs/kbn_data_service.mdx index 9ef75da2c9de0..20099207784ab 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-service'] --- import kbnDataServiceObj from './kbn_data_service.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index c71356cd9304e..64ee037296eed 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: 2023-09-12 +date: 2023-09-13 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 76f2ac58f8b7e..c4a834b032daa 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: 2023-09-12 +date: 2023-09-13 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 2580a8aa326dc..ba3d070bf504c 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index 510cb451ce1b2..625bce98cf1d1 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: 2023-09-12 +date: 2023-09-13 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 1af83f0011ab3..c775e2c4cf663 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: 2023-09-12 +date: 2023-09-13 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 a83c88b424fa4..e50ede7967e03 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: 2023-09-12 +date: 2023-09-13 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 afb641c1780cb..785c22d4ff37f 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index 8a47342716dbb..638eab6243550 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: 2023-09-12 +date: 2023-09-13 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 92cf9d528aa73..caed466a20784 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: 2023-09-12 +date: 2023-09-13 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 70fbd6df2921d..99894427aa689 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: 2023-09-12 +date: 2023-09-13 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 d6829a3eb36af..ee9ee501515d8 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: 2023-09-12 +date: 2023-09-13 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 fc8fa93ebdd0b..925f6e916d4b8 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: 2023-09-12 +date: 2023-09-13 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 37a99d2af044c..93ed8330f7bf1 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: 2023-09-12 +date: 2023-09-13 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 ff2feeec50f54..2d9fbd7349e62 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: 2023-09-12 +date: 2023-09-13 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 c93f53a0f0c0e..3720039d4bfe4 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx index 0478522785d51..01964ac5527d7 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils'] --- import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index f9afe57ee80e3..c9b0fa9ec9aac 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: 2023-09-12 +date: 2023-09-13 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 f1da93bae2504..f0d79b25235ba 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: 2023-09-12 +date: 2023-09-13 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 75bd3ffca5292..2bc1fc8dc1528 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: 2023-09-12 +date: 2023-09-13 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 ebfc3717cb907..7c97e78475f7e 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs.mdx b/api_docs/kbn_ecs.mdx index 90978dba36fd3..0173d4a028259 100644 --- a/api_docs/kbn_ecs.mdx +++ b/api_docs/kbn_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs title: "@kbn/ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs plugin -date: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs'] --- import kbnEcsObj from './kbn_ecs.devdocs.json'; diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index 415c11e459383..96f106702aae0 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: 2023-09-12 +date: 2023-09-13 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_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index aceeaa83e8ddd..ab3c82e8fcdc8 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; diff --git a/api_docs/kbn_es.devdocs.json b/api_docs/kbn_es.devdocs.json index b7cfd2bbebb2e..a8542adedc15a 100644 --- a/api_docs/kbn_es.devdocs.json +++ b/api_docs/kbn_es.devdocs.json @@ -17,7 +17,656 @@ "objects": [] }, "common": { - "classes": [], + "classes": [ + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster", + "type": "Class", + "tags": [], + "label": "Cluster", + "description": [], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.Unnamed.$1", + "type": "Object", + "tags": [], + "label": "{ log = defaultLog, ssl = false }", + "description": [], + "signature": [ + "{ log?: ", + { + "pluginId": "@kbn/tooling-log", + "scope": "common", + "docId": "kibKbnToolingLogPluginApi", + "section": "def-common.ToolingLog", + "text": "ToolingLog" + }, + " | undefined; ssl?: boolean | undefined; }" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.installSource", + "type": "Function", + "tags": [], + "label": "installSource", + "description": [ + "\nBuilds and installs ES from source" + ], + "signature": [ + "(options: ", + "InstallSourceOptions", + ") => Promise<{ installPath: string; }>" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.installSource.$1", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "InstallSourceOptions" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.downloadSnapshot", + "type": "Function", + "tags": [], + "label": "downloadSnapshot", + "description": [ + "\nDownload ES from a snapshot" + ], + "signature": [ + "(options: ", + "DownloadSnapshotOptions", + ") => Promise<{ downloadPath: string; }>" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.downloadSnapshot.$1", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "DownloadSnapshotOptions" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.installSnapshot", + "type": "Function", + "tags": [], + "label": "installSnapshot", + "description": [ + "\nDownload and installs ES from a snapshot" + ], + "signature": [ + "(options: ", + "InstallSnapshotOptions", + ") => Promise<{ installPath: string; }>" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.installSnapshot.$1", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "InstallSnapshotOptions" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.installArchive", + "type": "Function", + "tags": [], + "label": "installArchive", + "description": [ + "\nInstalls ES from a local tar" + ], + "signature": [ + "(archivePath: string, options?: ", + "InstallArchiveOptions", + " | undefined) => Promise<{ installPath: string; }>" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.installArchive.$1", + "type": "string", + "tags": [], + "label": "archivePath", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.installArchive.$2", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "InstallArchiveOptions", + " | undefined" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.extractDataDirectory", + "type": "Function", + "tags": [], + "label": "extractDataDirectory", + "description": [ + "\nUnpacks a tar or zip file containing the data directory for an ES cluster." + ], + "signature": [ + "(installPath: string, archivePath: string, extractDirName?: string) => Promise" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.extractDataDirectory.$1", + "type": "string", + "tags": [], + "label": "installPath", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.extractDataDirectory.$2", + "type": "string", + "tags": [], + "label": "archivePath", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.extractDataDirectory.$3", + "type": "string", + "tags": [], + "label": "extractDirName", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.installPlugins", + "type": "Function", + "tags": [], + "label": "installPlugins", + "description": [ + "\nInstalls comma separated list of ES plugins to the specified path" + ], + "signature": [ + "(installPath: string, plugins: string, esJavaOpts?: string | undefined) => Promise" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.installPlugins.$1", + "type": "string", + "tags": [], + "label": "installPath", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.installPlugins.$2", + "type": "string", + "tags": [], + "label": "plugins", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.installPlugins.$3", + "type": "string", + "tags": [], + "label": "esJavaOpts", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.configureKeystoreWithSecureSettingsFiles", + "type": "Function", + "tags": [], + "label": "configureKeystoreWithSecureSettingsFiles", + "description": [], + "signature": [ + "(installPath: string, secureSettingsFiles: string[][]) => Promise" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.configureKeystoreWithSecureSettingsFiles.$1", + "type": "string", + "tags": [], + "label": "installPath", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.configureKeystoreWithSecureSettingsFiles.$2", + "type": "Array", + "tags": [], + "label": "secureSettingsFiles", + "description": [], + "signature": [ + "string[][]" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.start", + "type": "Function", + "tags": [], + "label": "start", + "description": [ + "\nStarts ES and returns resolved promise once started" + ], + "signature": [ + "(installPath: string, options: ", + "EsClusterExecOptions", + ") => Promise" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.start.$1", + "type": "string", + "tags": [], + "label": "installPath", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.start.$2", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "EsClusterExecOptions" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.run", + "type": "Function", + "tags": [], + "label": "run", + "description": [ + "\nStarts Elasticsearch and waits for Elasticsearch to exit" + ], + "signature": [ + "(installPath: string, options: ", + "EsClusterExecOptions", + ") => Promise" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.run.$1", + "type": "string", + "tags": [], + "label": "installPath", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.run.$2", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "EsClusterExecOptions" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.stop", + "type": "Function", + "tags": [], + "label": "stop", + "description": [ + "\nStops ES process, if it's running" + ], + "signature": [ + "() => Promise" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.kill", + "type": "Function", + "tags": [], + "label": "kill", + "description": [ + "\nStops ES process without waiting for it to shutdown gracefully" + ], + "signature": [ + "() => Promise" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.waitForClusterReady", + "type": "Function", + "tags": [], + "label": "waitForClusterReady", + "description": [], + "signature": [ + "(client: ", + "default", + ", readyTimeout?: number) => Promise" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.waitForClusterReady.$1", + "type": "Object", + "tags": [], + "label": "client", + "description": [], + "signature": [ + "default" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.waitForClusterReady.$2", + "type": "number", + "tags": [], + "label": "readyTimeout", + "description": [], + "signature": [ + "number" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.runServerless", + "type": "Function", + "tags": [], + "label": "runServerless", + "description": [ + "\nRuns an Elasticsearch Serverless Docker cluster and returns node names" + ], + "signature": [ + "(options: ", + "ServerlessOptions", + ") => Promise" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.runServerless.$1", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "ServerlessOptions" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.runDocker", + "type": "Function", + "tags": [], + "label": "runDocker", + "description": [ + "\nRun an Elasticsearch Docker container" + ], + "signature": [ + "(options: ", + "DockerOptions", + ") => Promise" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/es", + "id": "def-common.Cluster.runDocker.$1", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "DockerOptions" + ], + "path": "packages/kbn-es/src/cluster.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + } + ], "functions": [ { "parentPluginId": "@kbn/es", @@ -91,6 +740,21 @@ "interfaces": [], "enums": [], "misc": [ + { + "parentPluginId": "@kbn/es", + "id": "def-common.ArtifactLicense", + "type": "Type", + "tags": [], + "label": "ArtifactLicense", + "description": [], + "signature": [ + "\"basic\" | \"trial\" | \"oss\"" + ], + "path": "packages/kbn-es/src/artifact.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/es", "id": "def-common.ELASTIC_SERVERLESS_SUPERUSER", @@ -134,29 +798,6 @@ "initialIsOpen": false } ], - "objects": [ - { - "parentPluginId": "@kbn/es", - "id": "def-common.Cluster", - "type": "Object", - "tags": [], - "label": "Cluster", - "description": [], - "signature": [ - "typeof ", - { - "pluginId": "@kbn/es", - "scope": "common", - "docId": "kibKbnEsPluginApi", - "section": "def-common.Cluster", - "text": "Cluster" - } - ], - "path": "packages/kbn-es/src/cluster.js", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - } - ] + "objects": [] } } \ No newline at end of file diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index d65666ae26616..22c9ba4d80ae4 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es'] --- import kbnEsObj from './kbn_es.devdocs.json'; @@ -21,16 +21,16 @@ Contact [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kiban | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 8 | 0 | 7 | 0 | +| 46 | 0 | 33 | 7 | ## Common -### Objects - - ### Functions +### Classes + + ### Consts, variables and types diff --git a/api_docs/kbn_es_archiver.mdx b/api_docs/kbn_es_archiver.mdx index 11fd9ddc53201..be71956d98fe5 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: 2023-09-12 +date: 2023-09-13 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 1539ce53d1519..40439d20ca089 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: 2023-09-12 +date: 2023-09-13 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 37af94302d29d..0712fca6d837e 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: 2023-09-12 +date: 2023-09-13 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 daab931a6854d..5e31bfaa121ad 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: 2023-09-12 +date: 2023-09-13 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 512dabb1a42e3..dc6d7d4741330 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index ba47b7261b0a9..0580b7ba9cfd2 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: 2023-09-12 +date: 2023-09-13 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 f948ff6b51a3e..fd16db558722a 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: 2023-09-12 +date: 2023-09-13 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 2b28057bccfd4..ec132a7ca87dd 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: 2023-09-12 +date: 2023-09-13 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 2e0f25a31f262..8e0ef67baf5a6 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index 5a072165e09f4..5d7f29a0e55eb 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules'] --- import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index fccc0db06353d..ff41b34f565ab 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: 2023-09-12 +date: 2023-09-13 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_generate.mdx b/api_docs/kbn_generate.mdx index fa31ed7ca7436..482c6066fece2 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: 2023-09-12 +date: 2023-09-13 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 f2945e91c4c98..d577c348169ca 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: 2023-09-12 +date: 2023-09-13 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 0213d9cf372bc..6f0d7a49bb273 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_generate_csv_types.mdx b/api_docs/kbn_generate_csv_types.mdx index c9cf611bccc4f..d3b65b32e9eb8 100644 --- a/api_docs/kbn_generate_csv_types.mdx +++ b/api_docs/kbn_generate_csv_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv-types title: "@kbn/generate-csv-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv-types plugin -date: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv-types'] --- import kbnGenerateCsvTypesObj from './kbn_generate_csv_types.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index 16d6c53bf8188..6f045381a2937 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: 2023-09-12 +date: 2023-09-13 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 447f19a11f64c..83c2936d49330 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: 2023-09-12 +date: 2023-09-13 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 3fcefee6eaeb4..df3d2a40d9d89 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: 2023-09-12 +date: 2023-09-13 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 57310fd29cee3..5b6264973a3f8 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: 2023-09-12 +date: 2023-09-13 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 9bfa6d175ef5d..9c2be72f59c22 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: 2023-09-12 +date: 2023-09-13 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 95b3348353044..f6741ecb0ed6a 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: 2023-09-12 +date: 2023-09-13 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 bf511f730692b..980f13dd03aac 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: 2023-09-12 +date: 2023-09-13 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 724cf2e63ecc7..ec3f632afabc2 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: 2023-09-12 +date: 2023-09-13 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 1db38de200b22..6bc9021130a7c 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index 7be114217863d..101c3b4da4f6f 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: 2023-09-12 +date: 2023-09-13 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 27a614798fe3b..0f4a144df6b34 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index f9642279de432..530eb8d508e45 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index bee594dcc6ad9..6b234c62eb11c 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: 2023-09-12 +date: 2023-09-13 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 6de4795ea9f24..f2a811ec6aa63 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: 2023-09-12 +date: 2023-09-13 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 ece674a9c623f..485643ab2d9b2 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index 6f6850a7eefcc..6c6c91aaea30d 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: 2023-09-12 +date: 2023-09-13 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_popover.mdx b/api_docs/kbn_language_documentation_popover.mdx index 47f4bbcf3c3b1..777ae2876d2ba 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover'] --- import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json'; diff --git a/api_docs/kbn_lens_embeddable_utils.mdx b/api_docs/kbn_lens_embeddable_utils.mdx index 1d32c78f3f29e..d5b016137948e 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-embeddable-utils'] --- import kbnLensEmbeddableUtilsObj from './kbn_lens_embeddable_utils.devdocs.json'; diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index f06e544f9a6be..9406e406bd882 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: 2023-09-12 +date: 2023-09-13 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 a1a3d9889a5ae..1b70ff4c25a95 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index 59937e4ea4c0c..147084d2cb7df 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-vscode-config'] --- import kbnManagedVscodeConfigObj from './kbn_managed_vscode_config.devdocs.json'; diff --git a/api_docs/kbn_management_cards_navigation.mdx b/api_docs/kbn_management_cards_navigation.mdx index db16509d7c6ac..972b00f385842 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: 2023-09-12 +date: 2023-09-13 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_components_field_input.mdx b/api_docs/kbn_management_settings_components_field_input.mdx index eea57589ebe01..559629a02eae2 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: 2023-09-12 +date: 2023-09-13 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 98d151b7e5126..9a012764d458d 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: 2023-09-12 +date: 2023-09-13 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_field_definition.mdx b/api_docs/kbn_management_settings_field_definition.mdx index ef4e437056cdb..63f3d5df631bf 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-field-definition'] --- import kbnManagementSettingsFieldDefinitionObj from './kbn_management_settings_field_definition.devdocs.json'; diff --git a/api_docs/kbn_management_settings_ids.mdx b/api_docs/kbn_management_settings_ids.mdx index 5b79473f1f83d..c294a94fe7007 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-ids'] --- import kbnManagementSettingsIdsObj from './kbn_management_settings_ids.devdocs.json'; diff --git a/api_docs/kbn_management_settings_section_registry.mdx b/api_docs/kbn_management_settings_section_registry.mdx index 03b7078179654..17370654b494a 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: 2023-09-12 +date: 2023-09-13 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 6639e9367400c..c8592100f1456 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: 2023-09-12 +date: 2023-09-13 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 c0f827d4fa2eb..31e0ff94a2a40 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: 2023-09-12 +date: 2023-09-13 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 5eb7918c3f059..8364e5c6de53c 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-storybook-config'] --- import kbnManagementStorybookConfigObj from './kbn_management_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index 915db4f03fbb0..f309595582bc4 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: 2023-09-12 +date: 2023-09-13 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 d62d677cdbb9d..233ec13546216 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: 2023-09-12 +date: 2023-09-13 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 e8fce8a857bf1..657ff4b8264ad 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: 2023-09-12 +date: 2023-09-13 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 8b5c9882de1e2..be9336d573cd2 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: 2023-09-12 +date: 2023-09-13 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_category_validator.mdx b/api_docs/kbn_ml_category_validator.mdx index 534a7c32dd9cd..1a3afc43e56d7 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: 2023-09-12 +date: 2023-09-13 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_data_frame_analytics_utils.mdx b/api_docs/kbn_ml_data_frame_analytics_utils.mdx index 642dafc1dc025..c13c54d34121b 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: 2023-09-12 +date: 2023-09-13 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 f0c45d8a02ee4..647cb07b3eb64 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: 2023-09-12 +date: 2023-09-13 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 00fef314f2e20..c6f8376c47a28 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: 2023-09-12 +date: 2023-09-13 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 e706e8f0bf453..be18567cbb014 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: 2023-09-12 +date: 2023-09-13 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 0b9accd88de8b..726d94891ed72 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: 2023-09-12 +date: 2023-09-13 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_in_memory_table.mdx b/api_docs/kbn_ml_in_memory_table.mdx index 56885607645be..06ab4563359c0 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: 2023-09-12 +date: 2023-09-13 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 9adefe3925137..b74d2f40fb222 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: 2023-09-12 +date: 2023-09-13 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 3f53ab0bb538f..e04b238a09c40 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: 2023-09-12 +date: 2023-09-13 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 272c6f165863b..3c6e582f76844 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: 2023-09-12 +date: 2023-09-13 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 1da930b6ae27c..863d2d28a4e24 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: 2023-09-12 +date: 2023-09-13 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 42579df3f9a2d..03269cb0d0ed3 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: 2023-09-12 +date: 2023-09-13 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 1268beebfc153..0dae3a21c7702 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: 2023-09-12 +date: 2023-09-13 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_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index f26e95da0257e..381ef607c2a62 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: 2023-09-12 +date: 2023-09-13 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 f6a1d69330e47..05c5b586cab36 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: 2023-09-12 +date: 2023-09-13 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 0c2e5aebfe1fd..16c8571c874e4 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: 2023-09-12 +date: 2023-09-13 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 2b5a30c59020f..57a5df70840ad 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: 2023-09-12 +date: 2023-09-13 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 68d9f4f2f1523..9dec182d24c48 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: 2023-09-12 +date: 2023-09-13 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_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index a1078bb9221cf..c6a77c39a1a26 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: 2023-09-12 +date: 2023-09-13 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_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index a07f497fea7a4..0d9473a6f86f5 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index d1e23ccae95b2..9e5313ea98c4a 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: 2023-09-12 +date: 2023-09-13 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 a81de38a2c2c7..dc9d79bfa9777 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning'] --- import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json'; diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx index 9e4d1455bfe98..56b02aebfb5ea 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index 570f8f39c2a24..5380d1d3b8d3a 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: 2023-09-12 +date: 2023-09-13 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 215c5231b5c37..d010e5fe75378 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: 2023-09-12 +date: 2023-09-13 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 12b5b64455563..7c70442dd6f6b 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: 2023-09-12 +date: 2023-09-13 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_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index 18758d2fd8fb9..e581c401d18e4 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: 2023-09-12 +date: 2023-09-13 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_generator.mdx b/api_docs/kbn_plugin_generator.mdx index 8f977f0538d04..d6a167647782b 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: 2023-09-12 +date: 2023-09-13 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 954a5d08bb73c..1f1a6f95d8d1c 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_profiling_utils.devdocs.json b/api_docs/kbn_profiling_utils.devdocs.json new file mode 100644 index 0000000000000..91934b1fb9ad9 --- /dev/null +++ b/api_docs/kbn_profiling_utils.devdocs.json @@ -0,0 +1,2609 @@ +{ + "id": "@kbn/profiling-utils", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.createBaseFlameGraph", + "type": "Function", + "tags": [], + "label": "createBaseFlameGraph", + "description": [ + "\ncreateBaseFlameGraph encapsulates the tree representation into a serialized form." + ], + "signature": [ + "(tree: ", + { + "pluginId": "@kbn/profiling-utils", + "scope": "common", + "docId": "kibKbnProfilingUtilsPluginApi", + "section": "def-common.CalleeTree", + "text": "CalleeTree" + }, + ", samplingRate: number, totalSeconds: number) => ", + { + "pluginId": "@kbn/profiling-utils", + "scope": "common", + "docId": "kibKbnProfilingUtilsPluginApi", + "section": "def-common.BaseFlameGraph", + "text": "BaseFlameGraph" + } + ], + "path": "packages/kbn-profiling-utils/common/flamegraph.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.createBaseFlameGraph.$1", + "type": "Object", + "tags": [], + "label": "tree", + "description": [ + "CalleeTree" + ], + "signature": [ + { + "pluginId": "@kbn/profiling-utils", + "scope": "common", + "docId": "kibKbnProfilingUtilsPluginApi", + "section": "def-common.CalleeTree", + "text": "CalleeTree" + } + ], + "path": "packages/kbn-profiling-utils/common/flamegraph.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.createBaseFlameGraph.$2", + "type": "number", + "tags": [], + "label": "samplingRate", + "description": [ + "number" + ], + "signature": [ + "number" + ], + "path": "packages/kbn-profiling-utils/common/flamegraph.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.createBaseFlameGraph.$3", + "type": "number", + "tags": [], + "label": "totalSeconds", + "description": [ + "number" + ], + "signature": [ + "number" + ], + "path": "packages/kbn-profiling-utils/common/flamegraph.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "BaseFlameGraph" + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.createCalleeTree", + "type": "Function", + "tags": [], + "label": "createCalleeTree", + "description": [ + "\nCreate a callee tree" + ], + "signature": [ + "(events: Map, stackTraces: Map, stackFrames: Map, executables: Map, totalFrames: number, samplingRate: number) => ", + { + "pluginId": "@kbn/profiling-utils", + "scope": "common", + "docId": "kibKbnProfilingUtilsPluginApi", + "section": "def-common.CalleeTree", + "text": "CalleeTree" + } + ], + "path": "packages/kbn-profiling-utils/common/callee.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.createCalleeTree.$1", + "type": "Object", + "tags": [], + "label": "events", + "description": [ + "Map" + ], + "signature": [ + "Map" + ], + "path": "packages/kbn-profiling-utils/common/callee.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.createCalleeTree.$2", + "type": "Object", + "tags": [], + "label": "stackTraces", + "description": [ + "Map" + ], + "signature": [ + "Map" + ], + "path": "packages/kbn-profiling-utils/common/callee.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.createCalleeTree.$3", + "type": "Object", + "tags": [], + "label": "stackFrames", + "description": [ + "Map" + ], + "signature": [ + "Map" + ], + "path": "packages/kbn-profiling-utils/common/callee.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.createCalleeTree.$4", + "type": "Object", + "tags": [], + "label": "executables", + "description": [ + "Map" + ], + "signature": [ + "Map" + ], + "path": "packages/kbn-profiling-utils/common/callee.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.createCalleeTree.$5", + "type": "number", + "tags": [], + "label": "totalFrames", + "description": [ + "number" + ], + "signature": [ + "number" + ], + "path": "packages/kbn-profiling-utils/common/callee.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.createCalleeTree.$6", + "type": "number", + "tags": [], + "label": "samplingRate", + "description": [ + "number" + ], + "signature": [ + "number" + ], + "path": "packages/kbn-profiling-utils/common/callee.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.createFlameGraph", + "type": "Function", + "tags": [], + "label": "createFlameGraph", + "description": [ + "\n\ncreateFlameGraph combines the base flamegraph with CPU-intensive values.\nThis allows us to create a flamegraph in two steps (e.g. first on the server\nand finally in the browser)." + ], + "signature": [ + "(base: ", + { + "pluginId": "@kbn/profiling-utils", + "scope": "common", + "docId": "kibKbnProfilingUtilsPluginApi", + "section": "def-common.BaseFlameGraph", + "text": "BaseFlameGraph" + }, + ") => ", + { + "pluginId": "@kbn/profiling-utils", + "scope": "common", + "docId": "kibKbnProfilingUtilsPluginApi", + "section": "def-common.ElasticFlameGraph", + "text": "ElasticFlameGraph" + } + ], + "path": "packages/kbn-profiling-utils/common/flamegraph.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.createFlameGraph.$1", + "type": "Object", + "tags": [], + "label": "base", + "description": [ + "BaseFlameGraph" + ], + "signature": [ + { + "pluginId": "@kbn/profiling-utils", + "scope": "common", + "docId": "kibKbnProfilingUtilsPluginApi", + "section": "def-common.BaseFlameGraph", + "text": "BaseFlameGraph" + } + ], + "path": "packages/kbn-profiling-utils/common/flamegraph.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "ElasticFlameGraph" + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.createFrameGroupID", + "type": "Function", + "tags": [], + "label": "createFrameGroupID", + "description": [ + "\n\ncreateFrameGroupID is the \"standard\" way of grouping frames, by commonly shared group identifiers.\nFor ELF-symbolized frames, group by FunctionName, ExeFileName and FileID.\nFor non-symbolized frames, group by FileID and AddressOrLine.\notherwise group by ExeFileName, SourceFilename and FunctionName." + ], + "signature": [ + "(fileID: string, addressOrLine: number, exeFilename: string, sourceFilename: string, functionName: string) => string" + ], + "path": "packages/kbn-profiling-utils/common/frame_group.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.createFrameGroupID.$1", + "type": "string", + "tags": [], + "label": "fileID", + "description": [ + "string" + ], + "signature": [ + "string" + ], + "path": "packages/kbn-profiling-utils/common/frame_group.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.createFrameGroupID.$2", + "type": "number", + "tags": [], + "label": "addressOrLine", + "description": [ + "string" + ], + "signature": [ + "number" + ], + "path": "packages/kbn-profiling-utils/common/frame_group.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.createFrameGroupID.$3", + "type": "string", + "tags": [], + "label": "exeFilename", + "description": [ + "string" + ], + "signature": [ + "string" + ], + "path": "packages/kbn-profiling-utils/common/frame_group.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.createFrameGroupID.$4", + "type": "string", + "tags": [], + "label": "sourceFilename", + "description": [ + "string" + ], + "signature": [ + "string" + ], + "path": "packages/kbn-profiling-utils/common/frame_group.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.createFrameGroupID.$5", + "type": "string", + "tags": [], + "label": "functionName", + "description": [ + "string" + ], + "signature": [ + "string" + ], + "path": "packages/kbn-profiling-utils/common/frame_group.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "FrameGroupID" + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.createStackFrameMetadata", + "type": "Function", + "tags": [], + "label": "createStackFrameMetadata", + "description": [ + "\ncreate stackframe metadata" + ], + "signature": [ + "(options: Partial<", + { + "pluginId": "@kbn/profiling-utils", + "scope": "common", + "docId": "kibKbnProfilingUtilsPluginApi", + "section": "def-common.StackFrameMetadata", + "text": "StackFrameMetadata" + }, + ">) => ", + { + "pluginId": "@kbn/profiling-utils", + "scope": "common", + "docId": "kibKbnProfilingUtilsPluginApi", + "section": "def-common.StackFrameMetadata", + "text": "StackFrameMetadata" + } + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.createStackFrameMetadata.$1", + "type": "Object", + "tags": [], + "label": "options", + "description": [ + "Partial" + ], + "signature": [ + "Partial<", + { + "pluginId": "@kbn/profiling-utils", + "scope": "common", + "docId": "kibKbnProfilingUtilsPluginApi", + "section": "def-common.StackFrameMetadata", + "text": "StackFrameMetadata" + }, + ">" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "StackFrameMetadata" + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.decodeStackTraceResponse", + "type": "Function", + "tags": [], + "label": "decodeStackTraceResponse", + "description": [ + "\nDecodes stack trace response" + ], + "signature": [ + "(response: ", + { + "pluginId": "@kbn/profiling-utils", + "scope": "common", + "docId": "kibKbnProfilingUtilsPluginApi", + "section": "def-common.StackTraceResponse", + "text": "StackTraceResponse" + }, + ") => ", + { + "pluginId": "@kbn/profiling-utils", + "scope": "common", + "docId": "kibKbnProfilingUtilsPluginApi", + "section": "def-common.DecodedStackTraceResponse", + "text": "DecodedStackTraceResponse" + } + ], + "path": "packages/kbn-profiling-utils/common/stack_traces.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.decodeStackTraceResponse.$1", + "type": "Object", + "tags": [], + "label": "response", + "description": [ + "StackTraceResponse" + ], + "signature": [ + { + "pluginId": "@kbn/profiling-utils", + "scope": "common", + "docId": "kibKbnProfilingUtilsPluginApi", + "section": "def-common.StackTraceResponse", + "text": "StackTraceResponse" + } + ], + "path": "packages/kbn-profiling-utils/common/stack_traces.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "DecodedStackTraceResponse" + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.describeFrameType", + "type": "Function", + "tags": [], + "label": "describeFrameType", + "description": [ + "\nget frame type name" + ], + "signature": [ + "(ft: ", + { + "pluginId": "@kbn/profiling-utils", + "scope": "common", + "docId": "kibKbnProfilingUtilsPluginApi", + "section": "def-common.FrameType", + "text": "FrameType" + }, + ") => string" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.describeFrameType.$1", + "type": "Enum", + "tags": [], + "label": "ft", + "description": [ + "FrameType" + ], + "signature": [ + { + "pluginId": "@kbn/profiling-utils", + "scope": "common", + "docId": "kibKbnProfilingUtilsPluginApi", + "section": "def-common.FrameType", + "text": "FrameType" + } + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "string" + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.getCalleeFunction", + "type": "Function", + "tags": [], + "label": "getCalleeFunction", + "description": [ + "\nGet callee function name" + ], + "signature": [ + "(frame: ", + { + "pluginId": "@kbn/profiling-utils", + "scope": "common", + "docId": "kibKbnProfilingUtilsPluginApi", + "section": "def-common.StackFrameMetadata", + "text": "StackFrameMetadata" + }, + ") => string" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.getCalleeFunction.$1", + "type": "Object", + "tags": [], + "label": "frame", + "description": [ + "StackFrameMetadata" + ], + "signature": [ + { + "pluginId": "@kbn/profiling-utils", + "scope": "common", + "docId": "kibKbnProfilingUtilsPluginApi", + "section": "def-common.StackFrameMetadata", + "text": "StackFrameMetadata" + } + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "string" + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.getCalleeSource", + "type": "Function", + "tags": [], + "label": "getCalleeSource", + "description": [ + "\nGet callee source information.\nIf we don't have the executable filename, display \nIf no source line or filename available, display the executable offset" + ], + "signature": [ + "(frame: ", + { + "pluginId": "@kbn/profiling-utils", + "scope": "common", + "docId": "kibKbnProfilingUtilsPluginApi", + "section": "def-common.StackFrameMetadata", + "text": "StackFrameMetadata" + }, + ") => string" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.getCalleeSource.$1", + "type": "Object", + "tags": [], + "label": "frame", + "description": [ + "StackFrameMetadata" + ], + "signature": [ + { + "pluginId": "@kbn/profiling-utils", + "scope": "common", + "docId": "kibKbnProfilingUtilsPluginApi", + "section": "def-common.StackFrameMetadata", + "text": "StackFrameMetadata" + } + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "string" + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.getFieldNameForTopNType", + "type": "Function", + "tags": [], + "label": "getFieldNameForTopNType", + "description": [ + "\nGet Profiling ES field based on TopN Type" + ], + "signature": [ + "(type: ", + { + "pluginId": "@kbn/profiling-utils", + "scope": "common", + "docId": "kibKbnProfilingUtilsPluginApi", + "section": "def-common.TopNType", + "text": "TopNType" + }, + ") => string" + ], + "path": "packages/kbn-profiling-utils/common/stack_traces.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.getFieldNameForTopNType.$1", + "type": "Enum", + "tags": [], + "label": "type", + "description": [ + "TopNType" + ], + "signature": [ + { + "pluginId": "@kbn/profiling-utils", + "scope": "common", + "docId": "kibKbnProfilingUtilsPluginApi", + "section": "def-common.TopNType", + "text": "TopNType" + } + ], + "path": "packages/kbn-profiling-utils/common/stack_traces.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "string" + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.getFrameSymbolStatus", + "type": "Function", + "tags": [], + "label": "getFrameSymbolStatus", + "description": [ + "\nGet frame symbol status" + ], + "signature": [ + "(param: FrameSymbolStatusParams) => ", + { + "pluginId": "@kbn/profiling-utils", + "scope": "common", + "docId": "kibKbnProfilingUtilsPluginApi", + "section": "def-common.FrameSymbolStatus", + "text": "FrameSymbolStatus" + } + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.getFrameSymbolStatus.$1", + "type": "Object", + "tags": [], + "label": "param", + "description": [ + "FrameSymbolStatusParams" + ], + "signature": [ + "FrameSymbolStatusParams" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "FrameSymbolStatus" + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.getLanguageType", + "type": "Function", + "tags": [], + "label": "getLanguageType", + "description": [ + "\nGet language type" + ], + "signature": [ + "(param: LanguageTypeParams) => \"NATIVE\" | \"INTERPRETED\"" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.getLanguageType.$1", + "type": "Object", + "tags": [], + "label": "param", + "description": [ + "LanguageTypeParams" + ], + "signature": [ + "LanguageTypeParams" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "string" + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.groupStackFrameMetadataByStackTrace", + "type": "Function", + "tags": [], + "label": "groupStackFrameMetadataByStackTrace", + "description": [ + "\nGroup stackframe by stack trace" + ], + "signature": [ + "(stackTraces: Map, stackFrames: Map, executables: Map) => Record" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.groupStackFrameMetadataByStackTrace.$1", + "type": "Object", + "tags": [], + "label": "stackTraces", + "description": [ + "Map" + ], + "signature": [ + "Map" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.groupStackFrameMetadataByStackTrace.$2", + "type": "Object", + "tags": [], + "label": "stackFrames", + "description": [ + "Map" + ], + "signature": [ + "Map" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.groupStackFrameMetadataByStackTrace.$3", + "type": "Object", + "tags": [], + "label": "executables", + "description": [ + "Map" + ], + "signature": [ + "Map" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "Record" + ], + "initialIsOpen": false + } + ], + "interfaces": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.BaseFlameGraph", + "type": "Interface", + "tags": [], + "label": "BaseFlameGraph", + "description": [ + "\nBase Flamegraph" + ], + "path": "packages/kbn-profiling-utils/common/flamegraph.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.BaseFlameGraph.Size", + "type": "number", + "tags": [], + "label": "Size", + "description": [ + "size" + ], + "path": "packages/kbn-profiling-utils/common/flamegraph.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.BaseFlameGraph.Edges", + "type": "Array", + "tags": [], + "label": "Edges", + "description": [ + "edges" + ], + "signature": [ + "number[][]" + ], + "path": "packages/kbn-profiling-utils/common/flamegraph.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.BaseFlameGraph.FileID", + "type": "Array", + "tags": [], + "label": "FileID", + "description": [ + "file ids" + ], + "signature": [ + "string[]" + ], + "path": "packages/kbn-profiling-utils/common/flamegraph.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.BaseFlameGraph.FrameType", + "type": "Array", + "tags": [], + "label": "FrameType", + "description": [ + "frame types" + ], + "signature": [ + "number[]" + ], + "path": "packages/kbn-profiling-utils/common/flamegraph.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.BaseFlameGraph.Inline", + "type": "Array", + "tags": [], + "label": "Inline", + "description": [ + "inlines" + ], + "signature": [ + "boolean[]" + ], + "path": "packages/kbn-profiling-utils/common/flamegraph.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.BaseFlameGraph.ExeFilename", + "type": "Array", + "tags": [], + "label": "ExeFilename", + "description": [ + "executable file names" + ], + "signature": [ + "string[]" + ], + "path": "packages/kbn-profiling-utils/common/flamegraph.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.BaseFlameGraph.AddressOrLine", + "type": "Array", + "tags": [], + "label": "AddressOrLine", + "description": [ + "address or line" + ], + "signature": [ + "number[]" + ], + "path": "packages/kbn-profiling-utils/common/flamegraph.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.BaseFlameGraph.FunctionName", + "type": "Array", + "tags": [], + "label": "FunctionName", + "description": [ + "function names" + ], + "signature": [ + "string[]" + ], + "path": "packages/kbn-profiling-utils/common/flamegraph.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.BaseFlameGraph.FunctionOffset", + "type": "Array", + "tags": [], + "label": "FunctionOffset", + "description": [ + "function offsets" + ], + "signature": [ + "number[]" + ], + "path": "packages/kbn-profiling-utils/common/flamegraph.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.BaseFlameGraph.SourceFilename", + "type": "Array", + "tags": [], + "label": "SourceFilename", + "description": [ + "source file names" + ], + "signature": [ + "string[]" + ], + "path": "packages/kbn-profiling-utils/common/flamegraph.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.BaseFlameGraph.SourceLine", + "type": "Array", + "tags": [], + "label": "SourceLine", + "description": [ + "source lines" + ], + "signature": [ + "number[]" + ], + "path": "packages/kbn-profiling-utils/common/flamegraph.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.BaseFlameGraph.CountInclusive", + "type": "Array", + "tags": [], + "label": "CountInclusive", + "description": [ + "total cpu" + ], + "signature": [ + "number[]" + ], + "path": "packages/kbn-profiling-utils/common/flamegraph.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.BaseFlameGraph.CountExclusive", + "type": "Array", + "tags": [], + "label": "CountExclusive", + "description": [ + "self cpu" + ], + "signature": [ + "number[]" + ], + "path": "packages/kbn-profiling-utils/common/flamegraph.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.BaseFlameGraph.TotalSeconds", + "type": "number", + "tags": [], + "label": "TotalSeconds", + "description": [ + "total seconds" + ], + "path": "packages/kbn-profiling-utils/common/flamegraph.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.BaseFlameGraph.SamplingRate", + "type": "number", + "tags": [], + "label": "SamplingRate", + "description": [ + "sampling rate" + ], + "path": "packages/kbn-profiling-utils/common/flamegraph.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.CalleeTree", + "type": "Interface", + "tags": [], + "label": "CalleeTree", + "description": [ + "\nCallee tree" + ], + "path": "packages/kbn-profiling-utils/common/callee.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.CalleeTree.Size", + "type": "number", + "tags": [], + "label": "Size", + "description": [ + "size" + ], + "path": "packages/kbn-profiling-utils/common/callee.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.CalleeTree.Edges", + "type": "Array", + "tags": [], + "label": "Edges", + "description": [ + "edges" + ], + "signature": [ + "Map[]" + ], + "path": "packages/kbn-profiling-utils/common/callee.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.CalleeTree.FileID", + "type": "Array", + "tags": [], + "label": "FileID", + "description": [ + "file ids" + ], + "signature": [ + "string[]" + ], + "path": "packages/kbn-profiling-utils/common/callee.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.CalleeTree.FrameType", + "type": "Array", + "tags": [], + "label": "FrameType", + "description": [ + "frame types" + ], + "signature": [ + "number[]" + ], + "path": "packages/kbn-profiling-utils/common/callee.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.CalleeTree.Inline", + "type": "Array", + "tags": [], + "label": "Inline", + "description": [ + "inlines" + ], + "signature": [ + "boolean[]" + ], + "path": "packages/kbn-profiling-utils/common/callee.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.CalleeTree.ExeFilename", + "type": "Array", + "tags": [], + "label": "ExeFilename", + "description": [ + "executable file names" + ], + "signature": [ + "string[]" + ], + "path": "packages/kbn-profiling-utils/common/callee.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.CalleeTree.AddressOrLine", + "type": "Array", + "tags": [], + "label": "AddressOrLine", + "description": [ + "address or lines" + ], + "signature": [ + "number[]" + ], + "path": "packages/kbn-profiling-utils/common/callee.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.CalleeTree.FunctionName", + "type": "Array", + "tags": [], + "label": "FunctionName", + "description": [ + "function names" + ], + "signature": [ + "string[]" + ], + "path": "packages/kbn-profiling-utils/common/callee.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.CalleeTree.FunctionOffset", + "type": "Array", + "tags": [], + "label": "FunctionOffset", + "description": [ + "function offsets" + ], + "signature": [ + "number[]" + ], + "path": "packages/kbn-profiling-utils/common/callee.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.CalleeTree.SourceFilename", + "type": "Array", + "tags": [], + "label": "SourceFilename", + "description": [ + "source file names" + ], + "signature": [ + "string[]" + ], + "path": "packages/kbn-profiling-utils/common/callee.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.CalleeTree.SourceLine", + "type": "Array", + "tags": [], + "label": "SourceLine", + "description": [ + "source lines" + ], + "signature": [ + "number[]" + ], + "path": "packages/kbn-profiling-utils/common/callee.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.CalleeTree.CountInclusive", + "type": "Array", + "tags": [], + "label": "CountInclusive", + "description": [ + "total cpu" + ], + "signature": [ + "number[]" + ], + "path": "packages/kbn-profiling-utils/common/callee.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.CalleeTree.CountExclusive", + "type": "Array", + "tags": [], + "label": "CountExclusive", + "description": [ + "self cpu" + ], + "signature": [ + "number[]" + ], + "path": "packages/kbn-profiling-utils/common/callee.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.DecodedStackTraceResponse", + "type": "Interface", + "tags": [], + "label": "DecodedStackTraceResponse", + "description": [ + "Decoded stack trace response" + ], + "path": "packages/kbn-profiling-utils/common/stack_traces.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.DecodedStackTraceResponse.events", + "type": "Object", + "tags": [], + "label": "events", + "description": [ + "Map of Stacktrace ID and event" + ], + "signature": [ + "Map" + ], + "path": "packages/kbn-profiling-utils/common/stack_traces.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.DecodedStackTraceResponse.stackTraces", + "type": "Object", + "tags": [], + "label": "stackTraces", + "description": [ + "Map of stacktrace ID and stacktrace" + ], + "signature": [ + "Map" + ], + "path": "packages/kbn-profiling-utils/common/stack_traces.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.DecodedStackTraceResponse.stackFrames", + "type": "Object", + "tags": [], + "label": "stackFrames", + "description": [ + "Map of stackframe ID and stackframe" + ], + "signature": [ + "Map" + ], + "path": "packages/kbn-profiling-utils/common/stack_traces.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.DecodedStackTraceResponse.executables", + "type": "Object", + "tags": [], + "label": "executables", + "description": [ + "Map of file ID and Executables" + ], + "signature": [ + "Map" + ], + "path": "packages/kbn-profiling-utils/common/stack_traces.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.DecodedStackTraceResponse.totalFrames", + "type": "number", + "tags": [], + "label": "totalFrames", + "description": [ + "Total number of frames" + ], + "path": "packages/kbn-profiling-utils/common/stack_traces.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.DecodedStackTraceResponse.samplingRate", + "type": "number", + "tags": [], + "label": "samplingRate", + "description": [ + "sampling rate" + ], + "path": "packages/kbn-profiling-utils/common/stack_traces.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.ElasticFlameGraph", + "type": "Interface", + "tags": [], + "label": "ElasticFlameGraph", + "description": [ + "Elasticsearch flamegraph" + ], + "signature": [ + { + "pluginId": "@kbn/profiling-utils", + "scope": "common", + "docId": "kibKbnProfilingUtilsPluginApi", + "section": "def-common.ElasticFlameGraph", + "text": "ElasticFlameGraph" + }, + " extends ", + { + "pluginId": "@kbn/profiling-utils", + "scope": "common", + "docId": "kibKbnProfilingUtilsPluginApi", + "section": "def-common.BaseFlameGraph", + "text": "BaseFlameGraph" + } + ], + "path": "packages/kbn-profiling-utils/common/flamegraph.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.ElasticFlameGraph.ID", + "type": "Array", + "tags": [], + "label": "ID", + "description": [ + "ID" + ], + "signature": [ + "string[]" + ], + "path": "packages/kbn-profiling-utils/common/flamegraph.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.ElasticFlameGraph.Label", + "type": "Array", + "tags": [], + "label": "Label", + "description": [ + "Label" + ], + "signature": [ + "string[]" + ], + "path": "packages/kbn-profiling-utils/common/flamegraph.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.Executable", + "type": "Interface", + "tags": [], + "label": "Executable", + "description": [ + "Executable" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.Executable.FileName", + "type": "string", + "tags": [], + "label": "FileName", + "description": [ + "file name" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.ProfilingStatusResponse", + "type": "Interface", + "tags": [], + "label": "ProfilingStatusResponse", + "description": [ + "Profiling status response" + ], + "path": "packages/kbn-profiling-utils/common/stack_traces.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.ProfilingStatusResponse.profiling", + "type": "Object", + "tags": [], + "label": "profiling", + "description": [ + "profiling enabled" + ], + "signature": [ + "{ enabled: boolean; }" + ], + "path": "packages/kbn-profiling-utils/common/stack_traces.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.ProfilingStatusResponse.resource_management", + "type": "Object", + "tags": [], + "label": "resource_management", + "description": [ + "resource management status" + ], + "signature": [ + "{ enabled: boolean; }" + ], + "path": "packages/kbn-profiling-utils/common/stack_traces.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.ProfilingStatusResponse.resources", + "type": "Object", + "tags": [], + "label": "resources", + "description": [ + "Indices creates / pre 8.9.1 data still available" + ], + "signature": [ + "{ created: boolean; pre_8_9_1_data: boolean; }" + ], + "path": "packages/kbn-profiling-utils/common/stack_traces.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackFrame", + "type": "Interface", + "tags": [], + "label": "StackFrame", + "description": [ + "Stack frame" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackFrame.FileName", + "type": "string", + "tags": [], + "label": "FileName", + "description": [ + "file name" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackFrame.FunctionName", + "type": "string", + "tags": [], + "label": "FunctionName", + "description": [ + "function name" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackFrame.FunctionOffset", + "type": "number", + "tags": [], + "label": "FunctionOffset", + "description": [ + "function offset" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackFrame.LineNumber", + "type": "number", + "tags": [], + "label": "LineNumber", + "description": [ + "line number" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackFrame.Inline", + "type": "boolean", + "tags": [], + "label": "Inline", + "description": [ + "inline" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackFrameMetadata", + "type": "Interface", + "tags": [], + "label": "StackFrameMetadata", + "description": [ + "Stack frame metadata" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackFrameMetadata.FrameID", + "type": "string", + "tags": [], + "label": "FrameID", + "description": [ + "StackTrace.FrameID" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackFrameMetadata.FileID", + "type": "string", + "tags": [], + "label": "FileID", + "description": [ + "StackTrace.FileID" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackFrameMetadata.FrameType", + "type": "Enum", + "tags": [], + "label": "FrameType", + "description": [ + "StackTrace.Type" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackFrameMetadata.Inline", + "type": "boolean", + "tags": [], + "label": "Inline", + "description": [ + "StackFrame.Inline" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackFrameMetadata.AddressOrLine", + "type": "number", + "tags": [], + "label": "AddressOrLine", + "description": [ + "StackTrace.AddressOrLine" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackFrameMetadata.FunctionName", + "type": "string", + "tags": [], + "label": "FunctionName", + "description": [ + "StackFrame.FunctionName" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackFrameMetadata.FunctionOffset", + "type": "number", + "tags": [], + "label": "FunctionOffset", + "description": [ + "StackFrame.FunctionOffset" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackFrameMetadata.SourceID", + "type": "string", + "tags": [], + "label": "SourceID", + "description": [ + "should this be StackFrame.SourceID?" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackFrameMetadata.SourceFilename", + "type": "string", + "tags": [], + "label": "SourceFilename", + "description": [ + "StackFrame.Filename" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackFrameMetadata.SourceLine", + "type": "number", + "tags": [], + "label": "SourceLine", + "description": [ + "StackFrame.LineNumber" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackFrameMetadata.FunctionSourceLine", + "type": "number", + "tags": [], + "label": "FunctionSourceLine", + "description": [ + "auto-generated - see createStackFrameMetadata" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackFrameMetadata.ExeFileName", + "type": "string", + "tags": [], + "label": "ExeFileName", + "description": [ + "Executable.FileName" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackFrameMetadata.CommitHash", + "type": "string", + "tags": [], + "label": "CommitHash", + "description": [ + "unused atm due to lack of symbolization metadata" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackFrameMetadata.SourceCodeURL", + "type": "string", + "tags": [], + "label": "SourceCodeURL", + "description": [ + "unused atm due to lack of symbolization metadata" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackFrameMetadata.SourcePackageHash", + "type": "string", + "tags": [], + "label": "SourcePackageHash", + "description": [ + "unused atm due to lack of symbolization metadata" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackFrameMetadata.SourcePackageURL", + "type": "string", + "tags": [], + "label": "SourcePackageURL", + "description": [ + "unused atm due to lack of symbolization metadata" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackFrameMetadata.SamplingRate", + "type": "number", + "tags": [], + "label": "SamplingRate", + "description": [ + "unused atm due to lack of symbolization metadata" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackTrace", + "type": "Interface", + "tags": [], + "label": "StackTrace", + "description": [ + "Stack trace" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackTrace.FrameIDs", + "type": "Array", + "tags": [], + "label": "FrameIDs", + "description": [ + "frame ids" + ], + "signature": [ + "string[]" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackTrace.FileIDs", + "type": "Array", + "tags": [], + "label": "FileIDs", + "description": [ + "file ids" + ], + "signature": [ + "string[]" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackTrace.AddressOrLines", + "type": "Array", + "tags": [], + "label": "AddressOrLines", + "description": [ + "address or lines" + ], + "signature": [ + "number[]" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackTrace.Types", + "type": "Array", + "tags": [], + "label": "Types", + "description": [ + "types" + ], + "signature": [ + "number[]" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackTraceResponse", + "type": "Interface", + "tags": [], + "label": "StackTraceResponse", + "description": [ + "Profiling stacktrace" + ], + "path": "packages/kbn-profiling-utils/common/stack_traces.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackTraceResponse.stack_trace_events", + "type": "Object", + "tags": [], + "label": "['stack_trace_events']", + "description": [ + "stack trace events" + ], + "signature": [ + "ProfilingEvents | undefined" + ], + "path": "packages/kbn-profiling-utils/common/stack_traces.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackTraceResponse.stack_traces", + "type": "Object", + "tags": [], + "label": "['stack_traces']", + "description": [ + "stack traces" + ], + "signature": [ + "ProfilingStackTraces | undefined" + ], + "path": "packages/kbn-profiling-utils/common/stack_traces.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackTraceResponse.stack_frames", + "type": "Object", + "tags": [], + "label": "['stack_frames']", + "description": [ + "stack frames" + ], + "signature": [ + "ProfilingStackFrames | undefined" + ], + "path": "packages/kbn-profiling-utils/common/stack_traces.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackTraceResponse.executables", + "type": "Object", + "tags": [], + "label": "['executables']", + "description": [ + "executables" + ], + "signature": [ + "ProfilingExecutables | undefined" + ], + "path": "packages/kbn-profiling-utils/common/stack_traces.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackTraceResponse.total_frames", + "type": "number", + "tags": [], + "label": "['total_frames']", + "description": [ + "total frames" + ], + "path": "packages/kbn-profiling-utils/common/stack_traces.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackTraceResponse.sampling_rate", + "type": "number", + "tags": [], + "label": "['sampling_rate']", + "description": [ + "sampling rate" + ], + "path": "packages/kbn-profiling-utils/common/stack_traces.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "enums": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.FrameSymbolStatus", + "type": "Enum", + "tags": [], + "label": "FrameSymbolStatus", + "description": [ + "\nFrame symbol status" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.FrameType", + "type": "Enum", + "tags": [], + "label": "FrameType", + "description": [ + "\nFrame type" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.ProfilingESField", + "type": "Enum", + "tags": [], + "label": "ProfilingESField", + "description": [ + "\nProfiling Elasticsearch fields" + ], + "path": "packages/kbn-profiling-utils/common/elasticsearch.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackTracesDisplayOption", + "type": "Enum", + "tags": [], + "label": "StackTracesDisplayOption", + "description": [ + "\nStacktraces options" + ], + "path": "packages/kbn-profiling-utils/common/stack_traces.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.TopNType", + "type": "Enum", + "tags": [], + "label": "TopNType", + "description": [ + "\nFunctions TopN types definition" + ], + "path": "packages/kbn-profiling-utils/common/stack_traces.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "misc": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.FileID", + "type": "Type", + "tags": [], + "label": "FileID", + "description": [ + "\nFile ID" + ], + "signature": [ + "string" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.FrameGroupID", + "type": "Type", + "tags": [], + "label": "FrameGroupID", + "description": [ + "Frame group ID" + ], + "signature": [ + "string" + ], + "path": "packages/kbn-profiling-utils/common/frame_group.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackFrameID", + "type": "Type", + "tags": [], + "label": "StackFrameID", + "description": [ + "\nStackFrame ID" + ], + "signature": [ + "string" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.StackTraceID", + "type": "Type", + "tags": [], + "label": "StackTraceID", + "description": [ + "\nStacktrace ID" + ], + "signature": [ + "string" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.emptyExecutable", + "type": "Object", + "tags": [], + "label": "emptyExecutable", + "description": [ + "\nEmpty exectutable" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.emptyExecutable.FileName", + "type": "string", + "tags": [], + "label": "FileName", + "description": [ + "/** file name */" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.emptyStackFrame", + "type": "Object", + "tags": [], + "label": "emptyStackFrame", + "description": [ + "\nEmpty stack frame" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.emptyStackFrame.FileName", + "type": "string", + "tags": [], + "label": "FileName", + "description": [ + "/** File name */" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.emptyStackFrame.FunctionName", + "type": "string", + "tags": [], + "label": "FunctionName", + "description": [ + "/** Function name */" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.emptyStackFrame.FunctionOffset", + "type": "number", + "tags": [], + "label": "FunctionOffset", + "description": [ + "/** Function offset */" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.emptyStackFrame.LineNumber", + "type": "number", + "tags": [], + "label": "LineNumber", + "description": [ + "/** Line number */" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.emptyStackFrame.Inline", + "type": "boolean", + "tags": [], + "label": "Inline", + "description": [ + "/** Inline */" + ], + "signature": [ + "false" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.emptyStackTrace", + "type": "Object", + "tags": [], + "label": "emptyStackTrace", + "description": [ + "\nEmpty stack trace" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.emptyStackTrace.FrameIDs", + "type": "Array", + "tags": [], + "label": "FrameIDs", + "description": [ + "/** Frame IDs */" + ], + "signature": [ + "never[]" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.emptyStackTrace.FileIDs", + "type": "Array", + "tags": [], + "label": "FileIDs", + "description": [ + "/** File IDs */" + ], + "signature": [ + "never[]" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.emptyStackTrace.AddressOrLines", + "type": "Array", + "tags": [], + "label": "AddressOrLines", + "description": [ + "/** Address or lines */" + ], + "signature": [ + "never[]" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/profiling-utils", + "id": "def-common.emptyStackTrace.Types", + "type": "Array", + "tags": [], + "label": "Types", + "description": [ + "/** Types */" + ], + "signature": [ + "never[]" + ], + "path": "packages/kbn-profiling-utils/common/profiling.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ] + } +} \ No newline at end of file diff --git a/api_docs/kbn_profiling_utils.mdx b/api_docs/kbn_profiling_utils.mdx new file mode 100644 index 0000000000000..a864a8f52e917 --- /dev/null +++ b/api_docs/kbn_profiling_utils.mdx @@ -0,0 +1,42 @@ +--- +#### +#### 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: kibKbnProfilingUtilsPluginApi +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: 2023-09-13 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/profiling-utils'] +--- +import kbnProfilingUtilsObj from './kbn_profiling_utils.devdocs.json'; + + + +Contact [@elastic/profiling-ui](https://github.com/orgs/elastic/teams/profiling-ui) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 143 | 0 | 0 | 0 | + +## Common + +### Objects + + +### Functions + + +### Interfaces + + +### Enums + + +### Consts, variables and types + + diff --git a/api_docs/kbn_random_sampling.mdx b/api_docs/kbn_random_sampling.mdx index c77bb9da208d4..62f75661a564a 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: 2023-09-12 +date: 2023-09-13 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 ed95221eaac3c..934776daccf4c 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx index ecb05234f67e8..be5b4d7317203 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: 2023-09-12 +date: 2023-09-13 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 39776e48e360b..47a7840f07b8d 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: 2023-09-12 +date: 2023-09-13 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 474b844a12824..2284a1ab60842 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: 2023-09-12 +date: 2023-09-13 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 70e495b760ac2..a2b1c5c67e218 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: 2023-09-12 +date: 2023-09-13 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 ee79f439037c7..1a9f28711e615 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: 2023-09-12 +date: 2023-09-13 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 aeba7bf723a71..32ecfc853ef48 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 5e3df0f22f60d..da1599e7fc66f 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: 2023-09-12 +date: 2023-09-13 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 e848039fa9e3d..76950102c2693 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: 2023-09-12 +date: 2023-09-13 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 e0016968e00d7..3decad6e6e1c3 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: 2023-09-12 +date: 2023-09-13 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 7bda0f53bc2ed..3e2c73632a132 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: 2023-09-12 +date: 2023-09-13 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 b478bf5d1ed96..6a2412a96fc1f 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index d083b86230d94..bd1de89298aa7 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rrule.mdx b/api_docs/kbn_rrule.mdx index dd18c560498ec..679ea275d904d 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rrule'] --- import kbnRruleObj from './kbn_rrule.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index 0e5f469ced3d1..6089cf1b5a99a 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] --- import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json'; diff --git a/api_docs/kbn_saved_objects_settings.mdx b/api_docs/kbn_saved_objects_settings.mdx index cfefb9ad3bc3d..f6c4935a70707 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index 15956b78bfa5a..4234000350c4d 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: 2023-09-12 +date: 2023-09-13 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 684a29baf95d6..091ec4908a5e1 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-connectors'] --- import kbnSearchConnectorsObj from './kbn_search_connectors.devdocs.json'; diff --git a/api_docs/kbn_search_response_warnings.mdx b/api_docs/kbn_search_response_warnings.mdx index 731860e25b054..6acb8bc0ab314 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index a490720588d95..a50f73e7ca604 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: 2023-09-12 +date: 2023-09-13 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 e62d76902651b..265af90e0d81a 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: 2023-09-12 +date: 2023-09-13 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 9cb3b19a47015..90a55a8147350 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: 2023-09-12 +date: 2023-09-13 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 f25bb1c10c79d..349822c41dd04 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: 2023-09-12 +date: 2023-09-13 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_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index 9daa24cda7e59..676bd50193170 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: 2023-09-12 +date: 2023-09-13 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 4d8ab31a786df..45cea3ee8386b 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: 2023-09-12 +date: 2023-09-13 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 1256eb0c23610..425802eee52dc 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: 2023-09-12 +date: 2023-09-13 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 4a7168472dce9..f401066e69335 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: 2023-09-12 +date: 2023-09-13 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 926b98b1efa81..7666acc49edef 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: 2023-09-12 +date: 2023-09-13 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_grouping.mdx b/api_docs/kbn_securitysolution_grouping.mdx index 33cd8dd2c768c..c0d0505a3c8ad 100644 --- a/api_docs/kbn_securitysolution_grouping.mdx +++ b/api_docs/kbn_securitysolution_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-grouping title: "@kbn/securitysolution-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-grouping plugin -date: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-grouping'] --- import kbnSecuritysolutionGroupingObj from './kbn_securitysolution_grouping.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index 9e5deb1638288..47686702540aa 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: 2023-09-12 +date: 2023-09-13 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 a04e30344019e..6c3fa9690485a 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: 2023-09-12 +date: 2023-09-13 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 ade10f96214e5..c88f5a634e9d7 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: 2023-09-12 +date: 2023-09-13 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 da351c7be4d09..fbd9cea5e3ccd 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: 2023-09-12 +date: 2023-09-13 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 089abb8d6bd37..2e40e7c12c181 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: 2023-09-12 +date: 2023-09-13 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 01ee5588d20ff..e542cc8df8dac 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: 2023-09-12 +date: 2023-09-13 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 8def886fcfd32..05eb8cc077765 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: 2023-09-12 +date: 2023-09-13 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 9a9a1714dc894..c38ace33dbbc1 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: 2023-09-12 +date: 2023-09-13 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 c7a598f972254..d1acab8a34fd8 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-utils'] --- import kbnSecuritysolutionListUtilsObj from './kbn_securitysolution_list_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_rules.mdx b/api_docs/kbn_securitysolution_rules.mdx index 89036687b1b23..d8e7c5a7d078f 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-rules'] --- import kbnSecuritysolutionRulesObj from './kbn_securitysolution_rules.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_t_grid.mdx b/api_docs/kbn_securitysolution_t_grid.mdx index 06387a153b5c7..1bc4ef4d225e4 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: 2023-09-12 +date: 2023-09-13 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 dc8410d29b4f3..69ec92ff8e812 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: 2023-09-12 +date: 2023-09-13 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 a975e2ae56d9b..d172148a6b99c 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: 2023-09-12 +date: 2023-09-13 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 7e553f9de10e1..04c06dd1c5630 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index a446dcad2999d..ee878f57220cc 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: 2023-09-12 +date: 2023-09-13 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 869df8a96f801..02c5606b0aa82 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: 2023-09-12 +date: 2023-09-13 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 0b611a3f17bd9..0844f0e999d77 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: 2023-09-12 +date: 2023-09-13 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 451825d91581a..575c3a99a7c68 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: 2023-09-12 +date: 2023-09-13 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 34e8505586a64..9961dbdbed79f 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: 2023-09-12 +date: 2023-09-13 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 51c738dee60ec..29344ddbe1e98 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: 2023-09-12 +date: 2023-09-13 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 2618360284b51..2d8ba2d0494b8 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: 2023-09-12 +date: 2023-09-13 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 277c6c5369e1e..96c052166a38b 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: 2023-09-12 +date: 2023-09-13 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_avatar_user_profile_components.mdx b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx index bf920f2b8c115..a7c0873016a7e 100644 --- a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx +++ b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-user-profile-components title: "@kbn/shared-ux-avatar-user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-user-profile-components plugin -date: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-user-profile-components'] --- import kbnSharedUxAvatarUserProfileComponentsObj from './kbn_shared_ux_avatar_user_profile_components.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 c7de2b98eed64..5e4e0be470993 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: 2023-09-12 +date: 2023-09-13 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_exit_full_screen_mocks.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx index c1924fb9f2d1f..a9da1a6e22917 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen-mocks title: "@kbn/shared-ux-button-exit-full-screen-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen-mocks plugin -date: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen-mocks'] --- import kbnSharedUxButtonExitFullScreenMocksObj from './kbn_shared_ux_button_exit_full_screen_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index 7df7db6897887..f5826bcf9adda 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: 2023-09-12 +date: 2023-09-13 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 6b7fa939ccd49..2c583dc3e77ac 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: 2023-09-12 +date: 2023-09-13 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 cbc5d756c076f..860e878a2a25c 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: 2023-09-12 +date: 2023-09-13 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 49b5f9945894f..65ec1953880ad 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: 2023-09-12 +date: 2023-09-13 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_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index 88cf4ff211fe2..3d5ebbcc325ef 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: 2023-09-12 +date: 2023-09-13 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 5fd7d146b9697..05df1e3c48d61 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: 2023-09-12 +date: 2023-09-13 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 ab3e83679ad86..170065a54c9f7 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: 2023-09-12 +date: 2023-09-13 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 bbe7ac6387687..2c46fdac34a17 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: 2023-09-12 +date: 2023-09-13 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 9a56676638195..2a6fd8a8efa67 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: 2023-09-12 +date: 2023-09-13 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 4ea8828d99496..2a06b6994f5d1 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: 2023-09-12 +date: 2023-09-13 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 13d98cae50fd6..270775d965ea4 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: 2023-09-12 +date: 2023-09-13 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 3c7ab7e9fd75c..aa952107aa3c7 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: 2023-09-12 +date: 2023-09-13 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 2792aae291073..0ceccc88c158b 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: 2023-09-12 +date: 2023-09-13 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 bff2136f90c28..85f28f39af24e 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: 2023-09-12 +date: 2023-09-13 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 0e5e9088ec5e0..460ee093f305b 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: 2023-09-12 +date: 2023-09-13 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 e23c62a91ae64..7cab462394e11 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: 2023-09-12 +date: 2023-09-13 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 28a5b72227b49..e95b52c7c244f 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: 2023-09-12 +date: 2023-09-13 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 e63f97fa9f938..8c3fb6850cb95 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: 2023-09-12 +date: 2023-09-13 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 5352facabfd78..eb426bcaba79e 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: 2023-09-12 +date: 2023-09-13 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 300ae4533116a..49c8f063f8e85 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: 2023-09-12 +date: 2023-09-13 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 7adbfa8474326..48326fcb14531 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: 2023-09-12 +date: 2023-09-13 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 99995775d67ae..20246a63b2fda 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: 2023-09-12 +date: 2023-09-13 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 661bf1190b99c..f7e47aceaa5d8 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: 2023-09-12 +date: 2023-09-13 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 ef911298e80d5..b4f83099a82e3 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: 2023-09-12 +date: 2023-09-13 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 dd58e503fe240..c97a83e2a4f7c 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: 2023-09-12 +date: 2023-09-13 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 79a09f01a8717..e1defde765930 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: 2023-09-12 +date: 2023-09-13 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 88a0aabb12cb0..e283143b1c9e6 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: 2023-09-12 +date: 2023-09-13 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 589db794b95fb..cd1ed4e1ae3c6 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: 2023-09-12 +date: 2023-09-13 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 02cd0b1bfa8d3..6ce1356fa6531 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: 2023-09-12 +date: 2023-09-13 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 ff2e8b9748eed..58f84c6c6b8a5 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: 2023-09-12 +date: 2023-09-13 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 cc72de0669173..426ee9804e6bd 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: 2023-09-12 +date: 2023-09-13 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 163ea98669c23..a40d398aa75e2 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: 2023-09-12 +date: 2023-09-13 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 8251b5e3b70d3..74e0173895b61 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: 2023-09-12 +date: 2023-09-13 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 d97a4e8b96a99..e2098bf0cff02 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: 2023-09-12 +date: 2023-09-13 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_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 309b05d5b1b8e..e9ff3a531ff1b 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: 2023-09-12 +date: 2023-09-13 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 c9d114e6521b0..8bd2a0a66f841 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: 2023-09-12 +date: 2023-09-13 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 22efab0f420ce..79e5777d0b021 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index b74681e3f725d..7ae5e6ab1827e 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: 2023-09-12 +date: 2023-09-13 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 9e82d5d3d4d10..4cf9de783e1cb 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: 2023-09-12 +date: 2023-09-13 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 87f13147190fe..29e0fe389034a 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index 03e96306cdc6c..953065aae5fe0 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: 2023-09-12 +date: 2023-09-13 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 86f6572ae1162..222a0d35f68c6 100644 --- a/api_docs/kbn_test.devdocs.json +++ b/api_docs/kbn_test.devdocs.json @@ -3136,7 +3136,14 @@ "\nLicense to run your cluster under. Keep in mind that a `trial` license\nhas an expiration date. If you are using a `dataArchive` with your tests,\nyou'll likely need to use `basic` or `gold` to prevent the test from failing\nwhen the license expires." ], "signature": [ - "\"basic\" | \"gold\" | \"trial\" | undefined" + { + "pluginId": "@kbn/es", + "scope": "common", + "docId": "kibKbnEsPluginApi", + "section": "def-common.ArtifactLicense", + "text": "ArtifactLicense" + }, + " | undefined" ], "path": "packages/kbn-test/src/es/test_es_cluster.ts", "deprecated": false, diff --git a/api_docs/kbn_test.mdx b/api_docs/kbn_test.mdx index 98dd558fc3b20..bc1f0cceeae58 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index d17622f24a2c9..7afa74db5d8da 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: 2023-09-12 +date: 2023-09-13 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 0eb933113dcd3..46134be6ad400 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_text_based_editor.mdx b/api_docs/kbn_text_based_editor.mdx index 5730d58ec55ad..e7e110038a130 100644 --- a/api_docs/kbn_text_based_editor.mdx +++ b/api_docs/kbn_text_based_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-text-based-editor title: "@kbn/text-based-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/text-based-editor plugin -date: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/text-based-editor'] --- import kbnTextBasedEditorObj from './kbn_text_based_editor.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index 68b4c84a31404..2a80fe3482872 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 9636d92984bb9..14dc50ec51bf4 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: 2023-09-12 +date: 2023-09-13 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 9d129ba2f3b12..a62c7030a00d2 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: 2023-09-12 +date: 2023-09-13 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 a346a96551118..7e28e9a4d322b 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: 2023-09-12 +date: 2023-09-13 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 41db14019f1e4..9f5852794430a 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: 2023-09-12 +date: 2023-09-13 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 b1f6d91a387cb..a43a72a165881 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: 2023-09-12 +date: 2023-09-13 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.devdocs.json b/api_docs/kbn_unified_data_table.devdocs.json index ae7cb737b9638..66f136070b569 100644 --- a/api_docs/kbn_unified_data_table.devdocs.json +++ b/api_docs/kbn_unified_data_table.devdocs.json @@ -1579,6 +1579,56 @@ "initialIsOpen": false } ], - "objects": [] + "objects": [ + { + "parentPluginId": "@kbn/unified-data-table", + "id": "def-common.ROWS_HEIGHT_OPTIONS", + "type": "Object", + "tags": [], + "label": "ROWS_HEIGHT_OPTIONS", + "description": [ + "\nRow height might be a value from -1 to 20\nA value of -1 automatically adjusts the row height to fit the contents.\nA value of 0 displays the content in a single line.\nA value from 1 to 20 represents number of lines of Document explorer row to display." + ], + "path": "packages/kbn-unified-data-table/src/constants.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/unified-data-table", + "id": "def-common.ROWS_HEIGHT_OPTIONS.auto", + "type": "number", + "tags": [], + "label": "auto", + "description": [], + "path": "packages/kbn-unified-data-table/src/constants.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/unified-data-table", + "id": "def-common.ROWS_HEIGHT_OPTIONS.single", + "type": "number", + "tags": [], + "label": "single", + "description": [], + "path": "packages/kbn-unified-data-table/src/constants.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/unified-data-table", + "id": "def-common.ROWS_HEIGHT_OPTIONS.default", + "type": "number", + "tags": [], + "label": "default", + "description": [], + "path": "packages/kbn-unified-data-table/src/constants.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ] } } \ No newline at end of file diff --git a/api_docs/kbn_unified_data_table.mdx b/api_docs/kbn_unified_data_table.mdx index 2f8025640d2f7..2f7a28bcca9ac 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-data-table'] --- import kbnUnifiedDataTableObj from './kbn_unified_data_table.devdocs.json'; @@ -21,10 +21,13 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 88 | 0 | 39 | 1 | +| 92 | 0 | 42 | 1 | ## Common +### Objects + + ### Functions diff --git a/api_docs/kbn_unified_doc_viewer.mdx b/api_docs/kbn_unified_doc_viewer.mdx index df09ce83c9a9f..fb88b69a01b1c 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: 2023-09-12 +date: 2023-09-13 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.devdocs.json b/api_docs/kbn_unified_field_list.devdocs.json index dddaeb04aa725..d8aeafc25ecbe 100644 --- a/api_docs/kbn_unified_field_list.devdocs.json +++ b/api_docs/kbn_unified_field_list.devdocs.json @@ -1520,7 +1520,7 @@ }, " | undefined; }; getCreationOptions: () => ", "UnifiedFieldListSidebarContainerCreationOptions", - "; isSidebarCollapsed?: boolean | undefined; prependInFlyout?: (() => React.ReactNode) | undefined; variant?: \"responsive\" | \"button-and-flyout-always\" | \"list-always\" | undefined; onSelectedFieldFilter?: ((field: ", + "; prependInFlyout?: (() => React.ReactNode) | undefined; variant?: \"responsive\" | \"button-and-flyout-always\" | \"list-always\" | undefined; onSelectedFieldFilter?: ((field: ", { "pluginId": "dataViews", "scope": "common", @@ -2985,6 +2985,20 @@ } ] }, + { + "parentPluginId": "@kbn/unified-field-list", + "id": "def-common.FieldListFiltersProps.compressed", + "type": "CompoundType", + "tags": [], + "label": "compressed", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-unified-field-list/src/components/field_list_filters/field_list_filters.tsx", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/unified-field-list", "id": "def-common.FieldListFiltersProps.nameFilter", @@ -5733,7 +5747,7 @@ }, " | undefined; }; getCreationOptions: () => ", "UnifiedFieldListSidebarContainerCreationOptions", - "; isSidebarCollapsed?: boolean | undefined; prependInFlyout?: (() => React.ReactNode) | undefined; variant?: \"responsive\" | \"button-and-flyout-always\" | \"list-always\" | undefined; onSelectedFieldFilter?: ((field: ", + "; prependInFlyout?: (() => React.ReactNode) | undefined; variant?: \"responsive\" | \"button-and-flyout-always\" | \"list-always\" | undefined; onSelectedFieldFilter?: ((field: ", { "pluginId": "dataViews", "scope": "common", diff --git a/api_docs/kbn_unified_field_list.mdx b/api_docs/kbn_unified_field_list.mdx index 6e240b12f467a..257f9d38d9e90 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-field-list'] --- import kbnUnifiedFieldListObj from './kbn_unified_field_list.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 | |-------------------|-----------|------------------------|-----------------| -| 302 | 0 | 275 | 9 | +| 303 | 0 | 276 | 9 | ## Common diff --git a/api_docs/kbn_url_state.mdx b/api_docs/kbn_url_state.mdx index 1de92fc708a6b..f96bf45a0263b 100644 --- a/api_docs/kbn_url_state.mdx +++ b/api_docs/kbn_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-url-state title: "@kbn/url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/url-state plugin -date: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/url-state'] --- import kbnUrlStateObj from './kbn_url_state.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index e258f23a78a89..3f6ef80b04d09 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: 2023-09-12 +date: 2023-09-13 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 f87eca61d0110..e2494c484925a 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: 2023-09-12 +date: 2023-09-13 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 255e7091c1ffa..62eb2672f9c27 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: 2023-09-12 +date: 2023-09-13 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 d806f2246d29c..0378171610dcb 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: 2023-09-12 +date: 2023-09-13 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 2ab41d7c9b22a..141f78735f1b5 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: 2023-09-12 +date: 2023-09-13 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 1812b6a216504..275fee7af2303 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-ui-components'] --- import kbnVisualizationUiComponentsObj from './kbn_visualization_ui_components.devdocs.json'; diff --git a/api_docs/kbn_xstate_utils.devdocs.json b/api_docs/kbn_xstate_utils.devdocs.json new file mode 100644 index 0000000000000..b67854e217961 --- /dev/null +++ b/api_docs/kbn_xstate_utils.devdocs.json @@ -0,0 +1,274 @@ +{ + "id": "@kbn/xstate-utils", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [ + { + "parentPluginId": "@kbn/xstate-utils", + "id": "def-common.createNotificationChannel", + "type": "Function", + "tags": [], + "label": "createNotificationChannel", + "description": [], + "signature": [ + "(shouldReplayLastEvent?: boolean) => ", + { + "pluginId": "@kbn/xstate-utils", + "scope": "common", + "docId": "kibKbnXstateUtilsPluginApi", + "section": "def-common.NotificationChannel", + "text": "NotificationChannel" + }, + "" + ], + "path": "packages/kbn-xstate-utils/src/notification_channel.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/xstate-utils", + "id": "def-common.createNotificationChannel.$1", + "type": "boolean", + "tags": [], + "label": "shouldReplayLastEvent", + "description": [], + "signature": [ + "boolean" + ], + "path": "packages/kbn-xstate-utils/src/notification_channel.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/xstate-utils", + "id": "def-common.isDevMode", + "type": "Function", + "tags": [], + "label": "isDevMode", + "description": [], + "signature": [ + "() => boolean" + ], + "path": "packages/kbn-xstate-utils/src/dev_tools.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/xstate-utils", + "id": "def-common.sendIfDefined", + "type": "Function", + "tags": [], + "label": "sendIfDefined", + "description": [], + "signature": [ + "(target: string | ", + "ActorRef", + ") => (eventExpr: ", + "Expr", + ", options?: ", + "SendActionOptions", + " | undefined) => ", + "PureAction", + "" + ], + "path": "packages/kbn-xstate-utils/src/actions.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/xstate-utils", + "id": "def-common.sendIfDefined.$1", + "type": "CompoundType", + "tags": [], + "label": "target", + "description": [], + "signature": [ + "string | ", + "ActorRef", + "" + ], + "path": "packages/kbn-xstate-utils/src/actions.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [ + { + "parentPluginId": "@kbn/xstate-utils", + "id": "def-common.NotificationChannel", + "type": "Interface", + "tags": [], + "label": "NotificationChannel", + "description": [], + "signature": [ + { + "pluginId": "@kbn/xstate-utils", + "scope": "common", + "docId": "kibKbnXstateUtilsPluginApi", + "section": "def-common.NotificationChannel", + "text": "NotificationChannel" + }, + "" + ], + "path": "packages/kbn-xstate-utils/src/notification_channel.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/xstate-utils", + "id": "def-common.NotificationChannel.createService", + "type": "Function", + "tags": [], + "label": "createService", + "description": [], + "signature": [ + "() => ", + "Subscribable", + "" + ], + "path": "packages/kbn-xstate-utils/src/notification_channel.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/xstate-utils", + "id": "def-common.NotificationChannel.notify", + "type": "Function", + "tags": [], + "label": "notify", + "description": [], + "signature": [ + "(eventExpr: ", + "Expr", + ") => (context: TContext, event: TEvent, meta: ", + "ActionMeta", + ") => void" + ], + "path": "packages/kbn-xstate-utils/src/notification_channel.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/xstate-utils", + "id": "def-common.NotificationChannel.notify.$1", + "type": "Function", + "tags": [], + "label": "eventExpr", + "description": [], + "signature": [ + "Expr", + "" + ], + "path": "packages/kbn-xstate-utils/src/notification_channel.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + } + ], + "enums": [], + "misc": [ + { + "parentPluginId": "@kbn/xstate-utils", + "id": "def-common.MatchedState", + "type": "Type", + "tags": [], + "label": "MatchedState", + "description": [], + "signature": [ + "TState extends ", + "State", + " ? ", + "State", + "<(TTypestate extends any ? { value: TStateValue; context: any; } extends TTypestate ? TTypestate : never : never)[\"context\"], TEvent, TStateSchema, TTypestate, TResolvedTypesMeta> & { value: TStateValue; } : never" + ], + "path": "packages/kbn-xstate-utils/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/xstate-utils", + "id": "def-common.MatchedStateFromActor", + "type": "Type", + "tags": [], + "label": "MatchedStateFromActor", + "description": [], + "signature": [ + "EmittedFrom", + " extends ", + "State", + " ? ", + "State", + "<(TTypestate extends any ? { value: TStateValue; context: any; } extends TTypestate ? TTypestate : never : never)[\"context\"], TEvent, TStateSchema, TTypestate, TResolvedTypesMeta> & { value: TStateValue; } : never" + ], + "path": "packages/kbn-xstate-utils/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/xstate-utils", + "id": "def-common.OmitDeprecatedState", + "type": "Type", + "tags": [], + "label": "OmitDeprecatedState", + "description": [], + "signature": [ + "{ [P in Exclude]: T[P]; }" + ], + "path": "packages/kbn-xstate-utils/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_xstate_utils.mdx b/api_docs/kbn_xstate_utils.mdx new file mode 100644 index 0000000000000..7ff4e23d1da27 --- /dev/null +++ b/api_docs/kbn_xstate_utils.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: kibKbnXstateUtilsPluginApi +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: 2023-09-13 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/xstate-utils'] +--- +import kbnXstateUtilsObj from './kbn_xstate_utils.devdocs.json'; + + + +Contact [@elastic/infra-monitoring-ui](https://github.com/orgs/elastic/teams/infra-monitoring-ui) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 12 | 0 | 12 | 0 | + +## Common + +### Functions + + +### Interfaces + + +### Consts, variables and types + + diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index d7d62d1c90002..bffee930c8051 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index 78b882febff5c..a68c974f1d405 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: 2023-09-12 +date: 2023-09-13 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 4efa853b5e629..5e89af9eabac7 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: 2023-09-12 +date: 2023-09-13 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 614e5784d0c36..b7f26f3ec2903 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: 2023-09-12 +date: 2023-09-13 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 a33479e97de02..5b0c16a73152b 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] --- import kubernetesSecurityObj from './kubernetes_security.devdocs.json'; diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index 736230a7449fa..8688b219874c8 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: 2023-09-12 +date: 2023-09-13 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 f2c805865bfe8..e2877b9552ceb 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: 2023-09-12 +date: 2023-09-13 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 ec621b8f15af1..b6e081cc6a736 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: 2023-09-12 +date: 2023-09-13 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 c9493739d67f3..451cd31cd5996 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] --- import licensingObj from './licensing.devdocs.json'; diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index a52d007b7917d..32f3640893098 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/log_explorer.mdx b/api_docs/log_explorer.mdx index cd9cb59e049c5..a3c52e411f77a 100644 --- a/api_docs/log_explorer.mdx +++ b/api_docs/log_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logExplorer title: "logExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the logExplorer plugin -date: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logExplorer'] --- import logExplorerObj from './log_explorer.devdocs.json'; diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index 1c152a74556c1..25409f679ad5f 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: 2023-09-12 +date: 2023-09-13 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 ec14f26dc32d7..8ccfceeddf4e6 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management'] --- import managementObj from './management.devdocs.json'; diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx index 288d07088a666..faa9c48aa838a 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: 2023-09-12 +date: 2023-09-13 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 f02fa14743c72..2289ee7785b59 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index c2105c60b8c03..5e1771d3df8bd 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index 176eb7adc367e..c825cb956660b 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: 2023-09-12 +date: 2023-09-13 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 2331dc2fc2d4b..37d9d39cbf00e 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoringCollection'] --- import monitoringCollectionObj from './monitoring_collection.devdocs.json'; diff --git a/api_docs/navigation.mdx b/api_docs/navigation.mdx index 0b0eab77347e7..4480c9f083529 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: 2023-09-12 +date: 2023-09-13 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 53201b623d7e7..2d7b01467c5db 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: 2023-09-12 +date: 2023-09-13 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 fb965deff2126..d2c175ae44c3d 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: 2023-09-12 +date: 2023-09-13 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 78f8b9eaf95c2..b48fefcb206e6 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: 2023-09-12 +date: 2023-09-13 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 7196f2b92b67f..2489775b841ae 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: 2023-09-12 +date: 2023-09-13 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 c0370fca7dcbd..f27a9bd1cfe11 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index 8fe7c510db4d0..35fa1d82dc54b 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityOnboarding'] --- import observabilityOnboardingObj from './observability_onboarding.devdocs.json'; diff --git a/api_docs/observability_shared.devdocs.json b/api_docs/observability_shared.devdocs.json index 03a774e515760..d6d93fdc5e06e 100644 --- a/api_docs/observability_shared.devdocs.json +++ b/api_docs/observability_shared.devdocs.json @@ -270,6 +270,39 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "observabilityShared", + "id": "def-public.EmbeddableFlamegraph", + "type": "Function", + "tags": [], + "label": "EmbeddableFlamegraph", + "description": [], + "signature": [ + "({ data, height, isLoading }: Props) => JSX.Element" + ], + "path": "x-pack/plugins/observability_shared/public/components/profiling/embeddables/embeddable_flamegraph.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityShared", + "id": "def-public.EmbeddableFlamegraph.$1", + "type": "Object", + "tags": [], + "label": "{ data, height, isLoading }", + "description": [], + "signature": [ + "Props" + ], + "path": "x-pack/plugins/observability_shared/public/components/profiling/embeddables/embeddable_flamegraph.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "observabilityShared", "id": "def-public.getContextMenuItemsFromActions", @@ -2362,6 +2395,23 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "observabilityShared", + "id": "def-public.EMBEDDABLE_FLAMEGRAPH", + "type": "string", + "tags": [], + "label": "EMBEDDABLE_FLAMEGRAPH", + "description": [ + "Profiling flamegraph embeddable key" + ], + "signature": [ + "\"EMBEDDABLE_FLAMEGRAPH\"" + ], + "path": "x-pack/plugins/observability_shared/public/components/profiling/embeddables/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "observabilityShared", "id": "def-public.LazyObservabilityPageTemplateProps", diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx index bd2bd933054f0..1fa1a145ce13f 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared'] --- import observabilitySharedObj from './observability_shared.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 278 | 1 | 277 | 11 | +| 281 | 1 | 279 | 11 | ## Client diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index 1e931239869d7..88c1929639562 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: 2023-09-12 +date: 2023-09-13 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 9007e08b5d676..ec3b948caf653 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: 2023-09-12 +date: 2023-09-13 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 328a2c0568ab8..6b709b1457498 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: 2023-09-12 +date: 2023-09-13 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 | |--------------|----------|------------------------| -| 685 | 576 | 43 | +| 688 | 579 | 43 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 74568 | 223 | 63790 | 1517 | +| 74788 | 223 | 63851 | 1530 | ## Plugin Directory @@ -139,7 +139,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-ai-assistant](https://github.com/orgs/elastic/teams/obs-ai-assistant) | - | 42 | 0 | 39 | 7 | | observabilityLogExplorer | [@elastic/infra-monitoring-ui](https://github.com/orgs/elastic/teams/infra-monitoring-ui) | This plugin exposes and registers observability log consumption features. | 0 | 0 | 0 | 0 | | | [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) | - | 15 | 0 | 15 | 0 | -| | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 278 | 1 | 277 | 11 | +| | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 281 | 1 | 279 | 11 | | | [@elastic/security-defend-workflows](https://github.com/orgs/elastic/teams/security-defend-workflows) | - | 24 | 0 | 24 | 7 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 2 | 0 | 2 | 0 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The Presentation Utility Plugin is a set of common, shared components and toolkits for solutions within the Presentation space, (e.g. Dashboards, Canvas). | 218 | 2 | 164 | 11 | @@ -411,6 +411,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 3 | 0 | 3 | 0 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 13 | 0 | 7 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 10 | 0 | 10 | 0 | +| | [@elastic/infra-monitoring-ui](https://github.com/orgs/elastic/teams/infra-monitoring-ui) | - | 19 | 0 | 17 | 6 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 2 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 14 | 0 | 9 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 44 | 0 | 43 | 0 | @@ -436,7 +437,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 35125 | 0 | 34718 | 0 | | | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 13 | 0 | 5 | 0 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 84 | 0 | 64 | 5 | -| | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 8 | 0 | 7 | 0 | +| | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 46 | 0 | 33 | 7 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 27 | 0 | 14 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 7 | 0 | 3 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 259 | 1 | 199 | 15 | @@ -515,6 +516,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-performance-testing](https://github.com/orgs/elastic/teams/kibana-performance-testing) | - | 3 | 0 | 3 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 1 | 0 | 1 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 1 | 0 | 1 | 0 | +| | [@elastic/profiling-ui](https://github.com/orgs/elastic/teams/profiling-ui) | - | 143 | 0 | 0 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 13 | 0 | 7 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 22 | 0 | 9 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 8 | 0 | 2 | 0 | @@ -621,9 +623,9 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 49 | 0 | 35 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 47 | 0 | 38 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 7 | 0 | 6 | 0 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the unified data table which can be integrated into apps | 88 | 0 | 39 | 1 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the unified data table which can be integrated into apps | 92 | 0 | 42 | 1 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 10 | 0 | 7 | 6 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the field list and field stats which can be integrated into apps | 302 | 0 | 275 | 9 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the field list and field stats which can be integrated into apps | 303 | 0 | 276 | 9 | | | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 4 | 0 | 0 | 0 | | | [@elastic/infra-monitoring-ui](https://github.com/orgs/elastic/teams/infra-monitoring-ui) | - | 3 | 0 | 2 | 1 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 80 | 0 | 21 | 2 | @@ -631,5 +633,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 2 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 24 | 0 | 14 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 155 | 0 | 151 | 3 | +| | [@elastic/infra-monitoring-ui](https://github.com/orgs/elastic/teams/infra-monitoring-ui) | - | 12 | 0 | 12 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 6 | 0 | 2 | 0 | diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index 47d6a5cac600d..e4ff920b0c8d6 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] --- import presentationUtilObj from './presentation_util.devdocs.json'; diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx index a186c436db7d7..6a6a990f614b1 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/profiling_data_access.devdocs.json b/api_docs/profiling_data_access.devdocs.json index 3528e7e26c101..e6d9a9ba73a6c 100644 --- a/api_docs/profiling_data_access.devdocs.json +++ b/api_docs/profiling_data_access.devdocs.json @@ -37,8 +37,16 @@ "label": "ProfilingDataAccessPluginStart", "description": [], "signature": [ - "{ services: { fetchFlamechartData: ({ esClient, rangeFrom, rangeTo, kuery }: FetchFlamechartParams) => Promise<", - "BaseFlameGraph", + "{ services: { fetchFlamechartData: ({ esClient, rangeFromMs, rangeToMs, kuery }: ", + "FetchFlamechartParams", + ") => Promise<", + { + "pluginId": "@kbn/profiling-utils", + "scope": "common", + "docId": "kibKbnProfilingUtilsPluginApi", + "section": "def-common.BaseFlameGraph", + "text": "BaseFlameGraph" + }, ">; }; }" ], "path": "x-pack/plugins/profiling_data_access/server/plugin.ts", diff --git a/api_docs/profiling_data_access.mdx b/api_docs/profiling_data_access.mdx index e8dcc62280326..79326ba432d7a 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: 2023-09-12 +date: 2023-09-13 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 f690793b01ce3..ccc7a2726c35c 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: 2023-09-12 +date: 2023-09-13 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 0141ca1a2217c..4b22ef69d9458 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'reporting'] --- import reportingObj from './reporting.devdocs.json'; diff --git a/api_docs/rollup.mdx b/api_docs/rollup.mdx index 4f64c5c128dcb..9dc448dc57502 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup'] --- import rollupObj from './rollup.devdocs.json'; diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx index 53727e1a59aa3..41d6c0a704b8f 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ruleRegistry'] --- import ruleRegistryObj from './rule_registry.devdocs.json'; diff --git a/api_docs/runtime_fields.mdx b/api_docs/runtime_fields.mdx index 42dd68d9bcdf6..43cec5adfb93a 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: 2023-09-12 +date: 2023-09-13 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 599a81017a7d8..f2276867e82bf 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: 2023-09-12 +date: 2023-09-13 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 5ba8370ec43e3..f0749afca0cb3 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: 2023-09-12 +date: 2023-09-13 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 1613f16bb8875..3a6386cb22f4e 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: 2023-09-12 +date: 2023-09-13 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 f7c66d1ce0b28..245d1d7032fd6 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: 2023-09-12 +date: 2023-09-13 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 c3ca3fb2acf98..4bae1c0a95f03 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: 2023-09-12 +date: 2023-09-13 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 4a2a3575076cd..129b5871103ee 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: 2023-09-12 +date: 2023-09-13 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 c075bb89c2578..8ecfc548b34a4 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: 2023-09-12 +date: 2023-09-13 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 f6b9d527ab6d4..786531b718120 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index cf85842c5f5f1..6e2e6e30e7ea1 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index c7a2a2456f96e..fd1c2715fd1f6 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: 2023-09-12 +date: 2023-09-13 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 6e03110f568d0..ed5161597c071 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: 2023-09-12 +date: 2023-09-13 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 f0a8c3de6865e..64c8cd2aeaa93 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: 2023-09-12 +date: 2023-09-13 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 794161bb60566..98e11bb21c91c 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: 2023-09-12 +date: 2023-09-13 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 ba6ca937cc4fb..bc210ab3c6ce9 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: 2023-09-12 +date: 2023-09-13 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 e11a1314be5de..19608208fd71b 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: 2023-09-12 +date: 2023-09-13 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 6512cc62ed6f5..295391e8a034b 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: 2023-09-12 +date: 2023-09-13 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 a19e38b5ef39a..791df54b06f27 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index 65eb4d438d69e..e74f26d598679 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: 2023-09-12 +date: 2023-09-13 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 28cccfb0621ea..5f971d4f8c9e4 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: 2023-09-12 +date: 2023-09-13 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 062ec84b4ef01..6cc3dec6ffe10 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: 2023-09-12 +date: 2023-09-13 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 cb17ccee5d5fd..6fe4521717e3f 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors'] --- import stackConnectorsObj from './stack_connectors.devdocs.json'; diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index d04bb8ad46910..888da9894e207 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: 2023-09-12 +date: 2023-09-13 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 b0cbe13556f6d..1642f2fb8d7df 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: 2023-09-12 +date: 2023-09-13 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 273ec1494f2d7..d86425638a738 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionManager'] --- import telemetryCollectionManagerObj from './telemetry_collection_manager.devdocs.json'; diff --git a/api_docs/telemetry_collection_xpack.mdx b/api_docs/telemetry_collection_xpack.mdx index 5c4169e0bbc35..acb98267b441b 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionXpack plugin -date: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionXpack'] --- import telemetryCollectionXpackObj from './telemetry_collection_xpack.devdocs.json'; diff --git a/api_docs/telemetry_management_section.mdx b/api_docs/telemetry_management_section.mdx index 4706a4ef9fd30..af8357713f14c 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/text_based_languages.mdx b/api_docs/text_based_languages.mdx index c32eeb9556348..167bf0fd570c2 100644 --- a/api_docs/text_based_languages.mdx +++ b/api_docs/text_based_languages.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/textBasedLanguages title: "textBasedLanguages" image: https://source.unsplash.com/400x175/?github description: API docs for the textBasedLanguages plugin -date: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'textBasedLanguages'] --- import textBasedLanguagesObj from './text_based_languages.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index 99f0f9d47cb28..26cd5c79d1dc5 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: 2023-09-12 +date: 2023-09-13 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 b9dd955669318..c2fbff2affc30 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: 2023-09-12 +date: 2023-09-13 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 8b8042465ce92..92cb909761fa4 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index 7f98d3c611e44..e8d467d363418 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: 2023-09-12 +date: 2023-09-13 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 91039c258e654..62661096c057c 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: 2023-09-12 +date: 2023-09-13 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 6339b7aa190e0..482d62bbf6f76 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: 2023-09-12 +date: 2023-09-13 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 a30f08e6ac871..fd4de8afb7c49 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: 2023-09-12 +date: 2023-09-13 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 b3469a4c03e8b..7357d15dcff9d 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedHistogram'] --- import unifiedHistogramObj from './unified_histogram.devdocs.json'; diff --git a/api_docs/unified_search.devdocs.json b/api_docs/unified_search.devdocs.json index 143aaf552bfb8..b02f9ce5f11be 100644 --- a/api_docs/unified_search.devdocs.json +++ b/api_docs/unified_search.devdocs.json @@ -603,7 +603,7 @@ }, "[] | undefined; refreshInterval?: number | undefined; iconType?: ", "IconType", - " | undefined; dataTestSubj?: string | undefined; timeHistory?: ", + " | undefined; showQueryInput?: boolean | undefined; dataTestSubj?: string | undefined; timeHistory?: ", { "pluginId": "data", "scope": "public", @@ -611,7 +611,7 @@ "section": "def-public.TimeHistoryContract", "text": "TimeHistoryContract" }, - " | undefined; customSubmitButton?: React.ReactNode; dataViewPickerOverride?: React.ReactNode; screenTitle?: string | undefined; showQueryMenu?: boolean | undefined; showQueryInput?: boolean | undefined; showFilterBar?: boolean | undefined; showDatePicker?: boolean | undefined; showAutoRefreshOnly?: boolean | undefined; filtersForSuggestions?: ", + " | undefined; customSubmitButton?: React.ReactNode; dataViewPickerOverride?: React.ReactNode; screenTitle?: string | undefined; showQueryMenu?: boolean | undefined; showFilterBar?: boolean | undefined; showDatePicker?: boolean | undefined; showAutoRefreshOnly?: boolean | undefined; filtersForSuggestions?: ", { "pluginId": "@kbn/es-query", "scope": "common", diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx index 9b245eedcbe1b..20509874fc91c 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: 2023-09-12 +date: 2023-09-13 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 aecd79b2a386f..c17109be851c7 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/uptime.mdx b/api_docs/uptime.mdx index fa5458327720b..7dfeea17d0844 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uptime'] --- import uptimeObj from './uptime.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index eb792f6eae078..00b55be3b9d36 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: 2023-09-12 +date: 2023-09-13 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 1cc6169d99376..24f9bd750a5bf 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: 2023-09-12 +date: 2023-09-13 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 923dcf4fc31d9..6389bb834a1af 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: 2023-09-12 +date: 2023-09-13 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 0e49f4764cc85..b277a26fa2f95 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: 2023-09-12 +date: 2023-09-13 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 70eed9b79515a..5feee7e62166c 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: 2023-09-12 +date: 2023-09-13 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 d783cf6242bba..a0a65e0ff8b6c 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: 2023-09-12 +date: 2023-09-13 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 04154e2b428a8..f635d9b5fcab3 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: 2023-09-12 +date: 2023-09-13 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 115bdf3b94975..c74d6003d6b76 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: 2023-09-12 +date: 2023-09-13 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 e601e02929e8a..bc0bbc7d21c85 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: 2023-09-12 +date: 2023-09-13 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 f396e8437e0d8..7dc780b576f66 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: 2023-09-12 +date: 2023-09-13 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 22bf0da00b8ea..b5fe2abb212ff 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: 2023-09-12 +date: 2023-09-13 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 cc536cb602447..a2d355e89a5d3 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: 2023-09-12 +date: 2023-09-13 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 762294e4846d1..f924d3a80161e 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: 2023-09-12 +date: 2023-09-13 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 b5d02375cb38a..29d5001163434 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: 2023-09-12 +date: 2023-09-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; diff --git a/dev_docs/contributing/code_walkthrough.mdx b/dev_docs/contributing/code_walkthrough.mdx index 617b54e519f13..139ac4df93070 100644 --- a/dev_docs/contributing/code_walkthrough.mdx +++ b/dev_docs/contributing/code_walkthrough.mdx @@ -86,7 +86,7 @@ This code primarily belongs to the Core team and contains the plugin infrastruct ### [src/dev](https://github.com/elastic/kibana/tree/main/src/dev) -Maintained by the Operations team, this code contains build and development tooling related code. This folder existed before `packages`, so contains mostly older code that hasn't been migrated to packages. Prefer creating a `package` if possible. Can be ignored for the most part if you are not on the Ops team. Prefer +Maintained by the Operations team, this code contains build and development tooling related code. This folder existed before `packages`, so contains mostly older code that hasn't been migrated to packages. Prefer creating a `package` if possible. Can be ignored for the most part if you are not on the Ops team. ### [src/plugins](https://github.com/elastic/kibana/tree/main/src/plugins) diff --git a/dev_docs/contributing/standards.mdx b/dev_docs/contributing/standards.mdx index aba29e5fab2f2..80df5f4752131 100644 --- a/dev_docs/contributing/standards.mdx +++ b/dev_docs/contributing/standards.mdx @@ -91,11 +91,12 @@ Every public API should have a release tag specified at the top of it’s docume #### Release tags | Type | Description | Documentation | Asciidoc Tag | -| Undocumented | Every public API should be documented, but if it isn’t, we make no guarantees about it. These need to be eliminated and should become internal or documented. | -| Experimental | A public API that may break or be removed at any time. | experimental[] | -| Beta | A public API that we make a best effort not to break or remove. However, there are no guarantees. | beta[] | -| Stable | No breaking changes outside of a Major\* | stable[] | -| Deprecated | Do not use, will be removed. | deprecated[] | +| -----| ------------| ------------- | ------------ | +| Undocumented | Every public API should be documented, but if it isn’t, we make no guarantees about it. These need to be eliminated and should become internal or documented. | | | +| Experimental | A public API that may break or be removed at any time. | experimental[] | | +| Beta | A public API that we make a best effort not to break or remove. However, there are no guarantees. | beta[] | | +| Stable | No breaking changes outside of a Major\* | stable[] | | +| Deprecated | Do not use, will be removed. | deprecated[] | | \*This is likely to change with Make it Minor as we move towards a calendar based rolling deprecation and removal policy. diff --git a/docs/api-generated/connectors/connector-apis-passthru.asciidoc b/docs/api-generated/connectors/connector-apis-passthru.asciidoc index 3c98b232a798c..73a0bf8df1da0 100644 --- a/docs/api-generated/connectors/connector-apis-passthru.asciidoc +++ b/docs/api-generated/connectors/connector-apis-passthru.asciidoc @@ -1002,6 +1002,7 @@ Any modifications made to this file will be overwritten.
  • Update_connector_request_body_properties - Update connector request body properties
  • action_response_properties - Action response properties
  • config_properties_cases_webhook - Connector request properties for Webhook - Case Management connector
  • +
  • config_properties_d3security - Connector request properties for a D3 Security connector
  • config_properties_genai - Connector request properties for a generative AI connector
  • config_properties_index - Connector request properties for an index connector
  • config_properties_jira - Connector request properties for a Jira connector
  • @@ -1015,6 +1016,7 @@ Any modifications made to this file will be overwritten.
  • config_properties_xmatters - Connector request properties for an xMatters connector
  • connector_response_properties - Connector response properties
  • connector_response_properties_cases_webhook - Connector request properties for a Webhook - Case Management connector
  • +
  • connector_response_properties_d3security - Connector response properties for a D3 Security connector
  • connector_response_properties_email - Connector response properties for an email connector
  • connector_response_properties_index - Connector response properties for an index connector
  • connector_response_properties_jira - Connector response properties for a Jira connector
  • @@ -1034,6 +1036,7 @@ Any modifications made to this file will be overwritten.
  • connector_response_properties_xmatters - Connector response properties for an xMatters connector
  • connector_types - Connector types
  • create_connector_request_cases_webhook - Create Webhook - Case Managment connector request
  • +
  • create_connector_request_d3security - Create D3 Security connector request
  • create_connector_request_email - Create email connector request
  • create_connector_request_genai - Create generative AI connector request
  • create_connector_request_index - Create index connector request
  • @@ -1088,6 +1091,7 @@ Any modifications made to this file will be overwritten.
  • run_connector_subaction_pushtoservice_subActionParams_incident_malware_url -
  • run_connector_subaction_pushtoservice_subActionParams_incident_source_ip -
  • secrets_properties_cases_webhook - Connector secrets properties for Webhook - Case Management connector
  • +
  • secrets_properties_d3security - Connector secrets properties for a D3 Security connector
  • secrets_properties_genai - Connector secrets properties for a generative AI connector
  • secrets_properties_jira - Connector secrets properties for a Jira connector
  • secrets_properties_opsgenie - Connector secrets properties for an Opsgenie connector
  • @@ -1102,6 +1106,7 @@ Any modifications made to this file will be overwritten.
  • secrets_properties_xmatters - Connector secrets properties for an xMatters connector
  • updateConnector_400_response -
  • update_connector_request_cases_webhook - Update Webhook - Case Managment connector request
  • +
  • update_connector_request_d3security - Update D3 Security connector request
  • update_connector_request_index - Update index connector request
  • update_connector_request_jira - Update Jira connector request
  • update_connector_request_opsgenie - Update Opsgenie connector request
  • @@ -1385,6 +1390,13 @@ Any modifications made to this file will be overwritten.
    viewIncidentUrl
    String The URL to view the case in the external system. You can use variables to add the external system ID or external system title to the URL.
    +
    +

    config_properties_d3security - Connector request properties for a D3 Security connector Up

    +
    Defines properties for connectors when type is .d3security.
    +
    +
    url
    String The D3 Security API request URL. If you are using the xpack.actions.allowedHosts setting, add the hostname to the allowed hosts.
    +
    +

    config_properties_genai - Connector request properties for a generative AI connector Up

    Defines properties for connectors when type is .gen-ai.
    @@ -1526,6 +1538,22 @@ Any modifications made to this file will be overwritten.
    is_missing_secrets (optional)
    Boolean Indicates whether secrets are missing for the connector. Secrets configuration properties vary depending on the connector type.
    is_preconfigured
    Boolean Indicates whether it is a preconfigured connector. If true, the config and is_missing_secrets properties are omitted from the response.
    is_system_action (optional)
    Boolean Indicates whether the connector is used for system actions.
    +
    name
    String The display name for the connector.
    +
    + +
    +

    connector_response_properties_d3security - Connector response properties for a D3 Security connector Up

    +
    +
    +
    config
    +
    connector_type_id
    String The type of connector.
    +
    Enum:
    +
    .d3security
    +
    id
    String The identifier for the connector.
    +
    is_deprecated
    Boolean Indicates whether the connector type is deprecated.
    +
    is_missing_secrets (optional)
    Boolean Indicates whether secrets are missing for the connector. Secrets configuration properties vary depending on the connector type.
    +
    is_preconfigured
    Boolean Indicates whether it is a preconfigured connector. If true, the config and is_missing_secrets properties are omitted from the response.
    +
    is_system_action (optional)
    Boolean Indicates whether the connector is used for system actions.
    name
    String The display name for the connector.
    @@ -1817,6 +1845,18 @@ Any modifications made to this file will be overwritten.
    secrets (optional)
    +
    +

    create_connector_request_d3security - Create D3 Security connector request Up

    +
    The connector uses axios to send a POST request to a D3 Security endpoint.
    +
    +
    config
    +
    connector_type_id
    String The type of connector.
    +
    Enum:
    +
    .d3security
    +
    name
    String The display name for the connector.
    +
    secrets
    +
    +

    create_connector_request_email - Create email connector request Up

    The email connector uses the SMTP protocol to send mail messages, using an integration of Nodemailer. An exception is Microsoft Exchange, which uses HTTP protocol for sending emails, Send mail. Email message text is sent as both plain text and html text.
    @@ -2378,6 +2418,13 @@ Any modifications made to this file will be overwritten.
    user (optional)
    String The username for HTTP basic authentication. If hasAuth is set to true, this property is required.
    +
    +

    secrets_properties_d3security - Connector secrets properties for a D3 Security connector Up

    +
    Defines secrets for connectors when type is .d3security.
    +
    +
    token
    String The D3 Security token.
    +
    +

    secrets_properties_genai - Connector secrets properties for a generative AI connector Up

    Defines secrets for connectors when type is .gen-ai.
    @@ -2492,6 +2539,15 @@ Any modifications made to this file will be overwritten.
    secrets (optional)
    +

    update_connector_request_index - Update index connector request Up

    diff --git a/docs/apm/api.asciidoc b/docs/apm/api.asciidoc index fb672b2884af2..341e75bbb835c 100644 --- a/docs/apm/api.asciidoc +++ b/docs/apm/api.asciidoc @@ -503,6 +503,16 @@ The following APIs are available: * <> * <> +[float] +[[limit-sourcemap-api]] +==== Max payload size + +{kib}'s maximum payload size is 1mb. +If you attempt to upload a source map that exceeds the max payload size, you will get a `413` error. + +Before uploading source maps that exceed this default, change the maximum payload size allowed by {kib} +with the <> variable. + [float] [[use-sourcemap-api]] ==== How to use APM APIs diff --git a/docs/landing-page.asciidoc b/docs/landing-page.asciidoc index 1cb3e188d6121..79b7fdf2a7ec4 100644 --- a/docs/landing-page.asciidoc +++ b/docs/landing-page.asciidoc @@ -71,8 +71,8 @@

    - What's new - Release notes + What's new + Release notes Install

    diff --git a/docs/management/action-types.asciidoc b/docs/management/action-types.asciidoc index 1e45c9c64fa14..bbaba806386e2 100644 --- a/docs/management/action-types.asciidoc +++ b/docs/management/action-types.asciidoc @@ -27,9 +27,9 @@ a| <> | Send a message to a Microsoft Teams channel. -a| <> +a| <> -| Create or close an alert in Opsgenie. +| Create or close an alert in {opsgenie}. a| <> diff --git a/docs/management/connectors/action-types/d3security.asciidoc b/docs/management/connectors/action-types/d3security.asciidoc index 095e5f5980328..76152365f76cd 100644 --- a/docs/management/connectors/action-types/d3security.asciidoc +++ b/docs/management/connectors/action-types/d3security.asciidoc @@ -3,21 +3,14 @@ ++++ D3 Security ++++ +:frontmatter-description: Add a connector that can send requests to D3 Security. +:frontmatter-tags-products: [alerting] +:frontmatter-tags-content-type: [how-to] +:frontmatter-tags-user-goals: [configure] The D3 Security connector uses https://github.com/axios/axios[axios] to send a POST request to a D3 Security endpoint. The connector uses the <> to send the request. You can use the connector for rule actions. -[float] -[[d3security-connector-prerequisites]] -=== Prerequisites - -To use a D3 Security connector, you must first configure a webhook key in your D3 SOAR environment. To generate an API URL and a token in D3 Security: -1. Log in to your D3 SOAR environment. -2. Navigate to Configuration. -3. Navigate to Integration > Search for “Kibana”. Click “Fetch Event”. -4. Select the "Enable Webhook" checkbox. -5. Click Set up Webhook Keys. -6. Under Event Ingestion, Click +. Select the site for the webhook integration, then click Generate. -7. Copy the Request URL and Request Header Value to configure the Kibana connector +To create this connector, you must first configure a webhook key in your D3 SOAR environment. For configuration tips, refer to <>. [float] [[define-d3security-ui]] @@ -36,35 +29,7 @@ D3 Security connectors have the following configuration properties: Name:: The name of the connector. URL:: The D3 Security API request URL. -Token:: The D3 Security token - -[float] -[[preconfigured-d3security-configuration]] -=== Create preconfigured connectors - -If you are running {kib} on-prem, you can define connectors by -adding `xpack.actions.preconfigured` settings to your `kibana.yml` file. -For example: - -[source,text] --- -xpack.actions.preconfigured: - my-d3security: - name: preconfigured-d3security-connector-type - actionTypeId: .d3security - config: - url: https://testurl.com/elasticsearch/VSOC/api/Data/Kibana/Security%20Operations/CreateEvents - secrets: - token: superlongtoken --- - -Config defines information for the connector type. - -`url`:: A URL string that corresponds to the *D3 Security API URL*. - -Secrets defines sensitive information for the connector type. - -`token`:: A string that corresponds to *D3 Security API Token*. +Token:: The D3 Security token. [float] [[d3security-action-configuration]] @@ -88,4 +53,18 @@ this can be any type, it is not validated [[d3security-connector-networking-configuration]] === Connector networking configuration -Use the <> to customize connector networking configurations, such as proxies, certificates, or TLS settings. You can set configurations that apply to all your connectors or use `xpack.actions.customHostSettings` to set per-host configurations. \ No newline at end of file +Use the <> to customize connector networking configurations, such as proxies, certificates, or TLS settings. You can set configurations that apply to all your connectors or use `xpack.actions.customHostSettings` to set per-host configurations. + +[float] +[[configure-d3security]] +=== Configure D3 Security + +To generate an API URL and a token in D3 Security: + +1. Log in to your D3 SOAR environment. +2. Navigate to *Configuration*. +3. Navigate to *Integration*. Search for {kib}. Click *Fetch Event*. +4. Select the *Enable Webhook* checkbox. +5. Click *Set up Webhook Keys*. +6. Under *Event Ingestion*, click the plus sign(+). Select the site for the webhook integration, then click *Generate*. +7. Copy the request URL and request header value to configure the connector. \ No newline at end of file diff --git a/docs/management/connectors/action-types/opsgenie.asciidoc b/docs/management/connectors/action-types/opsgenie.asciidoc index e7cb784ca31fc..79c03edf964cc 100644 --- a/docs/management/connectors/action-types/opsgenie.asciidoc +++ b/docs/management/connectors/action-types/opsgenie.asciidoc @@ -3,8 +3,16 @@ ++++ Opsgenie ++++ +:frontmatter-description: Add a connector that can create and close alerts in {opsgenie}. +:frontmatter-tags-products: [alerting] +:frontmatter-tags-content-type: [how-to] +:frontmatter-tags-user-goals: [configure] -The Opsgenie connector uses the https://docs.opsgenie.com/docs/alert-api[Opsgenie alert API]. +An {opsgenie} connector enables you to create and close alerts in {opsgenie}. +In particular, it uses the https://docs.opsgenie.com/docs/alert-api[{opsgenie} alert API]. + +To create this connector, you must have a valid {opsgenie} URL and API key. +For configuration tips, refer to <>. [float] [[define-opsgenie-ui]] @@ -27,28 +35,28 @@ Name:: The name of the connector. The name is used to identify a connector in th URL:: The Opsgenie URL. For example, https://api.opsgenie.com or https://api.eu.opsgenie.com. + NOTE: If you are using the <> setting, make sure the hostname is added to the allowed hosts. -API Key:: The Opsgenie API authentication key for HTTP Basic authentication. For more details about generating Opsgenie API keys, refer to https://support.atlassian.com/opsgenie/docs/create-a-default-api-integration/[Opsgenie documentation]. + +API Key:: The Opsgenie API authentication key for HTTP basic authentication. For more details about generating Opsgenie API keys, refer to https://support.atlassian.com/opsgenie/docs/create-a-default-api-integration/[Opsgenie documentation]. [float] [[opsgenie-action-configuration]] === Test connectors -You can test connectors with the <> or -as you're creating or editing the connector in {kib}. For example: - -[role="screenshot"] -image::management/connectors/images/opsgenie-params-test.png[Opsgenie params test] -// NOTE: This is an autogenerated screenshot. Do not edit it directly. - -The Opsgenie connector supports two types of actions: Create alert and Close alert. The properties supported for each action are different because Opsgenie defines different properties for each operation. +After you create a connector, use the *Test* tab to test its actions: -When testing the Opsgenie connector, choose the appropriate action from the selector. Each action has different properties that can be configured. - -Action:: Select *Create alert* to configure the actions that occur when a rule's conditions are met. Select *Close alert* to define the recovery actions that occur when a rule's conditions are no longer met. +* <> +* <> [float] [[opsgenie-action-create-alert-configuration]] -==== Configure the create alert action +==== Create alert action + +When you create a rule that uses an {opsgenie} connector, its actions (with the exception of recovery actions) create {opsgenie} alerts. +You can test this type of action when you create or edit your connector: + +[role="screenshot"] +image::management/connectors/images/opsgenie-create-alert-test.png[{opsgenie} create alert action test] +// NOTE: This is an autogenerated screenshot. Do not edit it directly. You can configure the create alert action through the form view or using a JSON editor. @@ -115,7 +123,14 @@ Example JSON editor contents [float] [[opsgenie-action-close-alert-configuration]] -==== Close alert configuration +==== Close alert action + +When you create a rule that uses an {opsgenie} connector, its recovery actions close {opsgenie} alerts. +You can test this type of action when you create or edit your connector: + +[role="screenshot"] +image::management/connectors/images/opsgenie-close-alert-test.png[{opsgenie} close alert action test] +// NOTE: This is an autogenerated screenshot. Do not edit it directly. The close alert action has the following configuration properties. diff --git a/docs/management/connectors/action-types/pagerduty.asciidoc b/docs/management/connectors/action-types/pagerduty.asciidoc index e9db3eb00360d..0a7cf2b584d11 100644 --- a/docs/management/connectors/action-types/pagerduty.asciidoc +++ b/docs/management/connectors/action-types/pagerduty.asciidoc @@ -8,7 +8,11 @@ :frontmatter-tags-content-type: [how-to] :frontmatter-tags-user-goals: [configure] -The PagerDuty connector uses the https://v2.developer.pagerduty.com/docs/events-api-v2[v2 Events API] to trigger, acknowledge, and resolve PagerDuty alerts. +The PagerDuty connector enables you to trigger, acknowledge, and resolve PagerDuty alerts. +In particular, it uses the https://v2.developer.pagerduty.com/docs/events-api-v2[v2 Events API]. + +To create this connector, you must have a valid PagerDuty integration key. +For configuration tips, refer to <> [float] [[define-pagerduty-ui]] @@ -35,24 +39,58 @@ Integration Key:: A 32 character PagerDuty Integration Key for an integration [[pagerduty-action-configuration]] === Test connectors -You can test connectors with the <> or -as you're creating or editing the connector in {kib}. For example: +After you create a connector, use the *Test* tab to test its actions: + +* <> +* <> +* <> + +When you create a rule that uses a PagerDuty connector, you can use any of these types of actions. +Rule recovery actions also support all types. + +[float] +[[pagerduty-action-acknowledge]] +==== Acknowledge action + +When you test the acknowlege action, you must provide the de-duplication key for a PagerDuty alert: [role="screenshot"] -image::management/connectors/images/pagerduty-params-test.png[PagerDuty params test] +image::management/connectors/images/pagerduty-acknowledge-test.png[PagerDuty params test] // NOTE: This is an autogenerated screenshot. Do not edit it directly. -PagerDuty actions have the following properties. +[float] +[[pagerduty-action-resolve]] +==== Resolve action + +Likewise when you test the resolve action, you must provide the de-duplication key: + +[role="screenshot"] +image::management/connectors/images/pagerduty-resolve-test.png[PagerDuty params test] +// NOTE: This is an autogenerated screenshot. Do not edit it directly. + +[float] +[[pagerduty-action-trigger]] +==== Trigger action + +When you test the trigger action, you must provide a summary for the PagerDuty alert: + +[role="screenshot"] +image::management/connectors/images/pagerduty-trigger-test.png[PagerDuty params test] +// NOTE: This is an autogenerated screenshot. Do not edit it directly. + +This action has the following properties: Severity:: The perceived severity of on the affected system. This can be one of `Critical`, `Error`, `Warning` or `Info`(default). Event action:: One of `Trigger` (default), `Resolve`, or `Acknowledge`. See https://v2.developer.pagerduty.com/docs/events-api-v2#event-action[event action] for more details. -Dedup Key:: All actions sharing this key will be associated with the same PagerDuty alert. This value is used to correlate trigger and resolution. This value is *optional*, and if not set, defaults to `:`. The maximum length is *255* characters. See https://v2.developer.pagerduty.com/docs/events-api-v2#alert-de-duplication[alert deduplication] for details. -Timestamp:: An *optional* https://v2.developer.pagerduty.com/v2/docs/types#datetime[ISO-8601 format date-time], indicating the time the event was detected or generated. -Component:: An *optional* value indicating the component of the source machine that is responsible for the event, for example `mysql` or `eth0`. -Group:: An *optional* value indicating the logical grouping of components of a service, for example `app-stack`. -Source:: An *optional* value indicating the affected system, preferably a hostname or fully qualified domain name. Defaults to the {kib} saved object id of the action. -Summary:: An *optional* text summary of the event, defaults to `No summary provided`. The maximum length is 1024 characters. -Class:: An *optional* value indicating the class/type of the event, for example `ping failure` or `cpu load`. +Dedup Key:: All actions sharing this key will be associated with the same PagerDuty alert. This value is used to correlate trigger and resolution. This value is optional, and if not set, defaults to `:`. The maximum length is 255 characters. See https://v2.developer.pagerduty.com/docs/events-api-v2#alert-de-duplication[alert deduplication] for details. ++ +By default, when you create rules that use the PagerDuty connector, the de-duplication key is used to create a new PagerDuty incident for each alert and reuse the incident when a recovered alert reactivates. +Timestamp:: An optional https://v2.developer.pagerduty.com/v2/docs/types#datetime[ISO-8601 format date-time], indicating the time the event was detected or generated. +Component:: An optional value indicating the component of the source machine that is responsible for the event, for example `mysql` or `eth0`. +Group:: An optional value indicating the logical grouping of components of a service, for example `app-stack`. +Source:: An optional value indicating the affected system, preferably a hostname or fully qualified domain name. Defaults to the {kib} saved object id of the action. +Summary:: An optional text summary of the event, defaults to `No summary provided`. The maximum length is 1024 characters. +Class:: An optional value indicating the class/type of the event, for example `ping failure` or `cpu load`. For more details on these properties, see https://v2.developer.pagerduty.com/v2/docs/send-an-event-events-api-v2[PagerDuty v2 event parameters]. @@ -62,7 +100,6 @@ For more details on these properties, see https://v2.developer.pagerduty.com/v2/ Use the <> to customize connector networking configurations, such as proxies, certificates, or TLS settings. You can set configurations that apply to all your connectors or use `xpack.actions.customHostSettings` to set per-host configurations. - [float] [[pagerduty-benefits]] === Configure PagerDuty @@ -70,22 +107,11 @@ Use the <> to customize connecto By integrating PagerDuty with rules, you can: * Route your rules to the right PagerDuty responder within your team, based on your structure, escalation policies, and workflows. -* Automatically generate incidents of different types and severity based on each rule’s context. -* Tailor the incident data to match your needs by easily passing the rule context from Kibana to PagerDuty. - -[float] -[[pagerduty-support]] -=== Support -If you need help with this integration, get in touch with the {kib} team by visiting -https://support.elastic.co[support.elastic.co] or by using the *Ask Elastic* option in the {kib} Help menu. -You can also select the {kib} category at https://discuss.elastic.co/[discuss.elastic.co]. - -[float] -[[pagerduty-integration-walkthrough]] -=== Integration with PagerDuty walkthrough +* Automatically generate incidents of different types and severity based on each rule's context. +* Tailor the incident data to match your needs by easily passing the rule context from {kib} to PagerDuty. [[pagerduty-in-pagerduty]] -*In PagerDuty* +To set up PagerDuty: . From the *Configuration* menu, select *Services*. . Add an integration to a service: @@ -96,8 +122,8 @@ Then, select the *Integrations* tab and click the *New Integration* button. * If you are creating a new service for your integration, go to https://support.pagerduty.com/docs/services-and-integrations#section-configuring-services-and-integrations[Configuring Services and Integrations] -and follow the steps outlined in the *Create a New Service* section, selecting *Elastic Alerts* as the *Integration Type* in step 4. -Continue with the <> section once you have finished these steps. +and follow the steps outlined in the *Create a New Service* section, selecting *Elastic Alerts* as the *Integration Type*. +Continue with the connector creation in {kib} after you have finished these steps. . Enter an *Integration Name* in the format Elastic-service-name (for example, Elastic-Alerting or Kibana-APM-Alerting) and select *Elastic Alerts* from the *Integration Type* menu. @@ -108,33 +134,4 @@ You will be redirected to the *Integrations* tab for your service. An Integratio [role="screenshot"] image::images/pagerduty-integration.png[PagerDuty Integrations tab] -. Save this key, as you will use it when you configure the integration with Elastic in the next section. - -[[pagerduty-in-elastic]] -*In Elastic* - -. Create a PagerDuty connector in Kibana. You can: -+ -* Create a connector as part of creating an rule by selecting PagerDuty in the *Actions* -section of the rule configuration and selecting *Add new*. -* Alternatively, create a connector. To create a connector, go to *{stack-manage-app} > {connectors-ui}*, click *Create connector*, then select the PagerDuty option. - -. Configure the connector by giving it a name and entering the Integration Key, optionally entering a custom API URL. -+ -See <> for how to obtain the endpoint and key information from PagerDuty and -<> for more details. - -. Save the connector. - -. To create a rule, go to *{stack-manage-app} > {rules-ui}* or the application of your choice. - -. Set up an action using your PagerDuty connector, by determining: -+ -* The action's type: Trigger, Resolve, or Acknowledge. -* The event's severity: Info, warning, error, or critical. -* An array of different fields, including the timestamp, group, class, component, and your dedup key. By default, the dedup is configured to create a new PagerDuty incident for each alert and reuse the incident when a recovered alert reactivates. -Depending on your custom needs, assign them variables from the rule context. -To see the available context variables, click on the *Add variable* icon next -to each corresponding field. For more details on these parameters, see the -<> and the PagerDuty -https://v2.developer.pagerduty.com/v2/docs/send-an-event-events-api-v2[API v2 documentation]. +. Save this key for use when you configure the connector in {kib}. diff --git a/docs/management/connectors/action-types/resilient.asciidoc b/docs/management/connectors/action-types/resilient.asciidoc index a317adf3bfe3e..04531a71dee62 100644 --- a/docs/management/connectors/action-types/resilient.asciidoc +++ b/docs/management/connectors/action-types/resilient.asciidoc @@ -1,8 +1,12 @@ [[resilient-action-type]] -== IBM Resilient connector and action +== {ibm-r} connector and action ++++ -IBM Resilient +{ibm-r} ++++ +:frontmatter-description: Add a connector that can create {ibm-r} incidents. +:frontmatter-tags-products: [kibana] +:frontmatter-tags-content-type: [how-to] +:frontmatter-tags-user-goals: [configure] The IBM Resilient connector uses the https://developer.ibm.com/security/resilient/rest/[RESILIENT REST v2] to create IBM Resilient incidents. @@ -28,38 +32,6 @@ Organization ID:: IBM Resilient organization ID. API key ID:: The authentication key ID for HTTP Basic authentication. API key secret:: The authentication key secret for HTTP Basic authentication. -[float] -[[preconfigured-resilient-configuration]] -=== Create preconfigured connectors - -If you are running {kib} on-prem, you can define connectors by -adding `xpack.actions.preconfigured` settings to your `kibana.yml` file. -For example: - -[source,text] --- -xpack.actions.preconfigured: - my-resilient: - name: preconfigured-resilient-connector-type - actionTypeId: .resilient - config: - apiUrl: https://elastic.resilient.net - orgId: ES - secrets: - apiKeyId: testuser - apiKeySecret: tokenkeystorevalue --- - -Config defines information for the connector type. - -`apiUrl`:: An address that corresponds to *URL*. -`orgId`:: An ID that corresponds to *Organization ID*. - -Secrets defines sensitive information for the connector type. - -`apiKeyId`:: A string that corresponds to *API key ID*. -`apiKeySecret`:: A string that corresponds to *API Key secret*. Should be stored in the <>. - [float] [[resilient-action-configuration]] === Test connectors diff --git a/docs/management/connectors/action-types/slack.asciidoc b/docs/management/connectors/action-types/slack.asciidoc index c5db456fc56a6..c4f1ea6799fb8 100644 --- a/docs/management/connectors/action-types/slack.asciidoc +++ b/docs/management/connectors/action-types/slack.asciidoc @@ -3,6 +3,10 @@ ++++ Slack ++++ +:frontmatter-description: Add a connector that can send Slack messages. +:frontmatter-tags-products: [kibana] +:frontmatter-tags-content-type: [how-to] +:frontmatter-tags-user-goals: [configure] The Slack connector uses incoming webhooks or an API method to send Slack messages. @@ -28,37 +32,6 @@ Thus a connector can be used in multiple rules and actions to communicate with d For Slack setup details, go to <>. -[float] -[[preconfigured-slack-configuration]] -=== Create preconfigured connectors - -If you are running {kib} on-prem, you can define connectors by -adding `xpack.actions.preconfigured` settings to your `kibana.yml` file. - -.Example Slack connector with webhook -[source,text] --- -xpack.actions.preconfigured: - my-slack: - name: preconfigured-slack-webhook-connector-type - actionTypeId: .slack - secrets: - webhookUrl: 'https://hooks.slack.com/services/xxxx/xxxx/xxxx' <1> --- -<1> To obtain this value, go to <>. - -.Example Slack connector with web API -[source,text] --- -xpack.actions.preconfigured: - my-slack: - name: preconfigured-slack-api-connector-type - actionTypeId: .slack_api - secrets: - token: 'xoxb-xxxx-xxxx-xxxx' <1> --- -<1> To obtain this value, go to <>. - [float] [[slack-action-configuration]] === Test connectors diff --git a/docs/management/connectors/images/opsgenie-close-alert-test.png b/docs/management/connectors/images/opsgenie-close-alert-test.png new file mode 100644 index 0000000000000..2892674978234 Binary files /dev/null and b/docs/management/connectors/images/opsgenie-close-alert-test.png differ diff --git a/docs/management/connectors/images/opsgenie-params-test.png b/docs/management/connectors/images/opsgenie-create-alert-test.png similarity index 100% rename from docs/management/connectors/images/opsgenie-params-test.png rename to docs/management/connectors/images/opsgenie-create-alert-test.png diff --git a/docs/management/connectors/images/pagerduty-acknowledge-test.png b/docs/management/connectors/images/pagerduty-acknowledge-test.png new file mode 100644 index 0000000000000..e47901f2a90f4 Binary files /dev/null and b/docs/management/connectors/images/pagerduty-acknowledge-test.png differ diff --git a/docs/management/connectors/images/pagerduty-resolve-test.png b/docs/management/connectors/images/pagerduty-resolve-test.png new file mode 100644 index 0000000000000..37a3c2b2ea895 Binary files /dev/null and b/docs/management/connectors/images/pagerduty-resolve-test.png differ diff --git a/docs/management/connectors/images/pagerduty-params-test.png b/docs/management/connectors/images/pagerduty-trigger-test.png similarity index 100% rename from docs/management/connectors/images/pagerduty-params-test.png rename to docs/management/connectors/images/pagerduty-trigger-test.png diff --git a/docs/management/connectors/pre-configured-connectors.asciidoc b/docs/management/connectors/pre-configured-connectors.asciidoc index d271653d7aa28..60e35eb510597 100644 --- a/docs/management/connectors/pre-configured-connectors.asciidoc +++ b/docs/management/connectors/pre-configured-connectors.asciidoc @@ -106,15 +106,62 @@ Index names must start with `kibana-alert-history-` to take advantage of the pre [float] === Examples +* <> +* <> * <> * <> * <> * <> * <> +* <> * <> * <> * <> +[float] +[[preconfigured-d3security-configuration]] +==== D3 Security connectors + +The following example creates a <>: + +[source,text] +-- +xpack.actions.preconfigured: + my-d3security: + name: preconfigured-d3security-connector-type + actionTypeId: .d3security + config: + url: https://testurl.com/elasticsearch/VSOC/api/Data/Kibana/Security%20Operations/CreateEvents <1> + secrets: + token: superlongtoken <2> +-- +<1> The D3 Security API request URL. +<2> The D3 Security token. + +[float] +[[preconfigured-resilient-configuration]] +==== {ibm-r} connectors + +The following example creates a <>: + +[source,text] +-- +xpack.actions.preconfigured: + my-resilient: + name: preconfigured-resilient-connector-type + actionTypeId: .resilient + config: + apiUrl: https://elastic.resilient.net <1> + orgId: ES <2> + secrets: + apiKeyId: testuser <3> + apiKeySecret: tokenkeystorevalue <4> +-- +<1> The {ibm-r} instance URL. +<2> The {ibm-r} organization identifier. +<3> The authentication key ID for HTTP basic authentication. +<4> The authentication key secret for HTTP basic authentication. NOTE: This value should be stored in the <>. + [float] [[preconfigured-index-configuration]] ==== Index connectors @@ -229,6 +276,37 @@ xpack.actions.preconfigured: actionTypeId: .server-log -- + +[float] +[[preconfigured-slack-configuration]] +==== Slack connectors + +The following example creates a <> with webhook: + +[source,text] +-- +xpack.actions.preconfigured: + my-slack: + name: preconfigured-slack-webhook-connector-type + actionTypeId: .slack + secrets: + webhookUrl: 'https://hooks.slack.com/services/xxxx/xxxx/xxxx' <1> +-- +<1> The Slack webhook URL. + +The following example creates a Slack connector with web API: + +[source,text] +-- +xpack.actions.preconfigured: + my-slack: + name: preconfigured-slack-api-connector-type + actionTypeId: .slack_api + secrets: + token: 'xoxb-xxxx-xxxx-xxxx' <1> +-- +<1> The Slack bot user OAuth token. + [float] [[preconfigured-webhook-configuration]] ==== Webhook connectors diff --git a/docs/settings/alert-action-settings.asciidoc b/docs/settings/alert-action-settings.asciidoc index ba4332c6eb756..c86678ee3a775 100644 --- a/docs/settings/alert-action-settings.asciidoc +++ b/docs/settings/alert-action-settings.asciidoc @@ -262,6 +262,7 @@ The configuration details, which are specific to the type of preconfigured conne A configuration URL that varies by connector: + -- +* For a <>, specifies the {ibm-r} instance URL. * For a <>, specifies the Jira instance URL. * For an <>, specifies the {opsgenie} URL. For example, `https://api.opsgenie.com` or `https://api.eu.opsgenie.com`. * For a <>, specifies the PagerDuty event URL. Defaults to `https://events.pagerduty.com/v2/enqueue`. @@ -322,6 +323,9 @@ For a <>, specifies a set of k `xpack.actions.preconfigured..config.index`:: For an <>, specifies the {es} index. +`xpack.actions.preconfigured..config.orgId`:: +For an <>, specifies the {ibm-r} organization identifier. + `xpack.actions.preconfigured..config.projectKey`:: For a <>, specifies the Jira project key. @@ -339,6 +343,15 @@ For a <>, specifies the REST A + NOTE: If you are using the `xpack.actions.allowedHosts` setting, make sure the hostname in the URL is added to the allowed hosts. +`xpack.actions.preconfigured..config.url`:: +A configuration URL that varies by connector: ++ +-- +* For a <>, specifies the D3 Security API request URL. + +NOTE: If you are using the `xpack.actions.allowedHosts` setting, make sure this hostname is added to the allowed hosts. +-- + `xpack.actions.preconfigured..config.usesBasic`:: For an <>, specifies whether it uses HTTP basic authentication. Defaults to `true`. @@ -360,6 +373,12 @@ An API key secret that varies by connector: * For an <>, specifies the {opsgenie} API authentication key for HTTP basic authentication. -- +`xpack.actions.preconfigured..secrets.apiKeyId`:: +For an <>, specifies the authentication key ID for HTTP basic authentication. + +`xpack.actions.preconfigured..secrets.apiKeySecret`:: +For an <>, specifies the authentication key secret for HTTP basic authentication. + `xpack.actions.preconfigured..secrets.apiToken`:: For a <>, specifies the API authentication token for HTTP basic authentication. @@ -383,6 +402,14 @@ It is used only when `xpack.actions.preconfigured..config.usesBasi + NOTE: If you are using the `xpack.actions.allowedHosts` setting, make sure this hostname is added to the allowed hosts. +`xpack.actions.preconfigured..secrets.token`:: +A token secret that varies by connector: ++ +-- +* For a <>, specifies the D3 Security token. +* For a <>, specifies the Slack bot user OAuth token. +-- + `xpack.actions.preconfigured..secrets.user`:: A user name secret that varies by connector: + @@ -390,11 +417,16 @@ A user name secret that varies by connector: * For a <>, specifies a user name that is required when `xpack.actions.preconfigured..config.hasAuth` is `true`. * For an <>, specifies a user name that is required when `xpack.actions.preconfigured..config.usesBasic` is `true`. -- + `xpack.actions.preconfigured..secrets.webhookUrl`:: -For a <>, specifies the URL of the incoming webhook. +A URL that varies by connector: + -NOTE: If you are using the `xpack.actions.allowedHosts` setting, make sure the hostname is added to the allowed hosts. +-- +* For a <>, specifies the URL of the incoming webhook. +For a <>, specifies the Slack webhook URL. +NOTE: If you are using the `xpack.actions.allowedHosts` setting, make sure the hostname is added to the allowed hosts. +-- [float] [[alert-settings]] diff --git a/docs/user/alerting/create-and-manage-rules.asciidoc b/docs/user/alerting/create-and-manage-rules.asciidoc index aa72b65944462..670e531350d5b 100644 --- a/docs/user/alerting/create-and-manage-rules.asciidoc +++ b/docs/user/alerting/create-and-manage-rules.asciidoc @@ -94,7 +94,8 @@ For example, you can set *Run when* to `Query matched` or `Recovered` for the {e image::images/es-query-rule-recovery-action.png[UI for defining a recovery action,500] // NOTE: This is an autogenerated screenshot. Do not edit it directly. -Each connector enables different action properties. For example, an email connector enables you to set the recipients, the subject, and a message body in markdown format. For more information about connectors, refer to <>. +Each connector supports a specific set of actions for each action group and enables different action properties. +For example, you can have actions that create an {opsgenie} alert when rule conditions are met and recovery actions that close the {opsgenie} alert. For more information about connectors, refer to <>. [[alerting-concepts-suppressing-duplicate-notifications]] [TIP] diff --git a/docs/user/alerting/rule-types/es-query.asciidoc b/docs/user/alerting/rule-types/es-query.asciidoc index f1a391a9e87be..029ec2e1eaa46 100644 --- a/docs/user/alerting/rule-types/es-query.asciidoc +++ b/docs/user/alerting/rule-types/es-query.asciidoc @@ -72,6 +72,9 @@ For example: image::images/es-query-rule-action-query-matched.png[UI for defining a recovery action] // NOTE: This is an autogenerated screenshot. Do not edit it directly. +Each connector supports a specific set of actions for each action group. +For more details, refer to <>. + [float] === Add action variables diff --git a/docs/user/alerting/rule-types/index-threshold.asciidoc b/docs/user/alerting/rule-types/index-threshold.asciidoc index d6a3217f3276d..69cdd2c3bbbcc 100644 --- a/docs/user/alerting/rule-types/index-threshold.asciidoc +++ b/docs/user/alerting/rule-types/index-threshold.asciidoc @@ -9,7 +9,7 @@ The index threshold rule type runs an {es} query. It aggregates field values from documents, compares them to threshold values, and schedules actions to run when the thresholds are met. [float] -=== Rule conditions +=== Define the conditions [role="screenshot"] image::user/alerting/images/rule-types-index-threshold-conditions.png[Defining index threshold rule conditions in {kib}] @@ -27,11 +27,24 @@ It also defines a time window, which determines how far back to search for docum If data is available and all clauses have been defined, a preview chart will render the threshold value and display a line chart showing the value for the last 30 intervals. This can provide an indication of recent values and their proximity to the threshold, and help you tune the clauses. +[float] +[[actions-index-threshold]] +=== Add actions + +You can <> to your rule to generate notifications. + +Each action uses a connector, which provides connection information for a {kib} service or third party integration, depending on where you want to send the notifications. + +After you choose a connector, you must choose an action group, which affects when the action runs. +The valid action groups for an index threshold rule are: `Threshold met` and `Recovered`. +Each connector supports a specific set of actions for each action group. For more details, refer to <>. + [float] [[action-variables-index-threshold]] -=== Action variables +=== Add action variables -The following action variables are specific to the index threshold rule. You can also specify <>. +The following action variables are specific to the index threshold rule. +You can also specify <>. `context.conditions`:: A description of the threshold condition. Example: `count greater than 4` `context.date`:: The date, in ISO format, that the rule met the threshold condition. Example: `2020-01-01T00:00:00.000Z`. diff --git a/package.json b/package.json index fa7ceb4edd592..08d889905d37d 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,7 @@ "@elastic/datemath": "5.0.3", "@elastic/elasticsearch": "npm:@elastic/elasticsearch-canary@8.9.1-canary.1", "@elastic/ems-client": "8.4.0", - "@elastic/eui": "88.1.0", + "@elastic/eui": "88.2.0", "@elastic/filesaver": "1.1.2", "@elastic/node-crypto": "1.2.1", "@elastic/numeral": "^2.5.1", @@ -347,6 +347,7 @@ "@kbn/crypto": "link:packages/kbn-crypto", "@kbn/crypto-browser": "link:packages/kbn-crypto-browser", "@kbn/custom-branding-plugin": "link:x-pack/plugins/custom_branding", + "@kbn/custom-integrations": "link:packages/kbn-custom-integrations", "@kbn/custom-integrations-plugin": "link:src/plugins/custom_integrations", "@kbn/dashboard-enhanced-plugin": "link:x-pack/plugins/dashboard_enhanced", "@kbn/dashboard-plugin": "link:src/plugins/dashboard", @@ -795,6 +796,7 @@ "@kbn/visualization-ui-components": "link:packages/kbn-visualization-ui-components", "@kbn/visualizations-plugin": "link:src/plugins/visualizations", "@kbn/watcher-plugin": "link:x-pack/plugins/watcher", + "@kbn/xstate-utils": "link:packages/kbn-xstate-utils", "@loaders.gl/core": "^3.4.7", "@loaders.gl/json": "^3.4.7", "@loaders.gl/shapefile": "^3.4.7", @@ -871,7 +873,7 @@ "deep-freeze-strict": "^1.1.1", "deepmerge": "^4.2.2", "del": "^6.1.0", - "elastic-apm-node": "^3.49.1", + "elastic-apm-node": "^4.0.0", "email-addresses": "^5.0.0", "execa": "^4.0.2", "expiry-js": "0.1.7", diff --git a/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.test.tsx b/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.test.tsx index ad7c6d8fc52a5..6109a1bd0688c 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.test.tsx +++ b/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.test.tsx @@ -147,16 +147,15 @@ describe('start', () => { const promise = chrome.getBodyClasses$().pipe(toArray()).toPromise(); service.stop(); await expect(promise).resolves.toMatchInlineSnapshot(` - Array [ - Array [ - "kbnBody", - "kbnBody--classicLayout", - "kbnBody--noHeaderBanner", - "kbnBody--chromeHidden", - "kbnVersion-1-2-3", - ], - ] - `); + Array [ + Array [ + "kbnBody", + "kbnBody--noHeaderBanner", + "kbnBody--chromeHidden", + "kbnVersion-1-2-3", + ], + ] + `); }); it('strips off "snapshot" from the kibana version if present', async () => { @@ -166,16 +165,15 @@ describe('start', () => { const promise = chrome.getBodyClasses$().pipe(toArray()).toPromise(); service.stop(); await expect(promise).resolves.toMatchInlineSnapshot(` - Array [ - Array [ - "kbnBody", - "kbnBody--classicLayout", - "kbnBody--noHeaderBanner", - "kbnBody--chromeHidden", - "kbnVersion-8-0-0", - ], - ] - `); + Array [ + Array [ + "kbnBody", + "kbnBody--noHeaderBanner", + "kbnBody--chromeHidden", + "kbnVersion-8-0-0", + ], + ] + `); }); it('does not add legacy browser warning if browser supports CSP', async () => { diff --git a/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.tsx b/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.tsx index 76fef465d823c..02ba5a912cd40 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.tsx +++ b/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.tsx @@ -207,7 +207,6 @@ export class ChromeService { map(([headerBanner, isVisible, chromeStyle]) => { return [ 'kbnBody', - chromeStyle === 'project' ? 'kbnBody--projectLayout' : 'kbnBody--classicLayout', headerBanner ? 'kbnBody--hasHeaderBanner' : 'kbnBody--noHeaderBanner', isVisible ? 'kbnBody--chromeVisible' : 'kbnBody--chromeHidden', getKbnVersionClass(), 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 476776a40a155..0ae5e0504839b 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 @@ -105,7 +105,7 @@ Array [
    { /* fixates the elements position in the viewport, removes the element from the flow of the page */ position: sticky; /* position below the primary fixed EuiHeader in the viewport */ - top: 48px; + top: var(--euiFixedHeadersOffset, 0); `} > diff --git a/packages/core/http/core-http-resources-server-internal/src/get_apm_config.ts b/packages/core/http/core-http-resources-server-internal/src/get_apm_config.ts index 82b4f04410a65..8168d3c22b483 100644 --- a/packages/core/http/core-http-resources-server-internal/src/get_apm_config.ts +++ b/packages/core/http/core-http-resources-server-internal/src/get_apm_config.ts @@ -24,7 +24,7 @@ export const getApmConfig = (requestPath: string) => { } // Cleanup RUM unsupported attrbiutes from base apm config. - const { contextPropagationOnly, logUncaughtExceptions, ...restOfConfig } = baseConfig; + const { contextPropagationOnly, ...restOfConfig } = baseConfig; const config: Record = { ...restOfConfig, pageLoadTransactionName: requestPath, diff --git a/packages/core/root/core-root-server-internal/src/server.ts b/packages/core/root/core-root-server-internal/src/server.ts index 8f8a7f185474a..b7aa0f54839c0 100644 --- a/packages/core/root/core-root-server-internal/src/server.ts +++ b/packages/core/root/core-root-server-internal/src/server.ts @@ -223,7 +223,7 @@ export class Server { this.coreApp.preboot(corePreboot, uiPlugins); - prebootTransaction?.end(); + prebootTransaction.end(); this.uptimePerStep.preboot = { start: prebootStartUptime, end: performance.now() }; return corePreboot; } @@ -352,7 +352,7 @@ export class Server { this.registerCoreContext(coreSetup); await this.coreApp.setup(coreSetup, uiPlugins); - setupTransaction?.end(); + setupTransaction.end(); this.uptimePerStep.setup = { start: setupStartUptime, end: performance.now() }; return coreSetup; } @@ -367,7 +367,7 @@ export class Server { const docLinkStart = this.docLinks.start(); const elasticsearchStart = await this.elasticsearch.start(); const deprecationsStart = this.deprecations.start(); - const soStartSpan = startTransaction?.startSpan('saved_objects.migration', 'migration'); + const soStartSpan = startTransaction.startSpan('saved_objects.migration', 'migration'); const savedObjectsStart = await this.savedObjects.start({ elasticsearch: elasticsearchStart, pluginsInitialized: this.#pluginsInitialized, @@ -379,7 +379,7 @@ export class Server { soStartSpan?.end(); if (this.nodeRoles?.migrator === true) { - startTransaction?.end(); + startTransaction.end(); this.log.info('Detected migrator node role; shutting down Kibana...'); throw new CriticalError( 'Migrations completed, shutting down Kibana', @@ -420,7 +420,7 @@ export class Server { await this.http.start(); - startTransaction?.end(); + startTransaction.end(); this.uptimePerStep.start = { start: startStartUptime, end: performance.now() }; this.reportKibanaStartedEvents(analyticsStart); diff --git a/packages/kbn-apm-config-loader/src/config.test.ts b/packages/kbn-apm-config-loader/src/config.test.ts index ff7afefa204cc..2d6dc013a214e 100644 --- a/packages/kbn-apm-config-loader/src/config.test.ts +++ b/packages/kbn-apm-config-loader/src/config.test.ts @@ -91,7 +91,6 @@ describe('ApmConfiguration', () => { "contextPropagationOnly": true, "environment": "development", "globalLabels": Object {}, - "logUncaughtExceptions": true, "metricsInterval": "30s", "propagateTracestate": true, "secretToken": "JpBCcOQxN81D5yucs2", @@ -116,7 +115,6 @@ describe('ApmConfiguration', () => { "globalLabels": Object { "git_rev": "sha", }, - "logUncaughtExceptions": true, "metricsInterval": "120s", "propagateTracestate": true, "secretToken": "JpBCcOQxN81D5yucs2", diff --git a/packages/kbn-apm-config-loader/src/config.ts b/packages/kbn-apm-config-loader/src/config.ts index 718f3e76236ca..285d6e21f29e4 100644 --- a/packages/kbn-apm-config-loader/src/config.ts +++ b/packages/kbn-apm-config-loader/src/config.ts @@ -20,7 +20,6 @@ const DEFAULT_CONFIG: AgentConfigOptions = { active: true, contextPropagationOnly: true, environment: 'development', - logUncaughtExceptions: true, globalLabels: {}, }; diff --git a/packages/kbn-custom-integrations/README.md b/packages/kbn-custom-integrations/README.md new file mode 100644 index 0000000000000..229437411a62b --- /dev/null +++ b/packages/kbn-custom-integrations/README.md @@ -0,0 +1,90 @@ +# Custom integrations package + +This package provides UI components and state machines to assist with the creation (and in the future other operations) of custom integrations. For consumers the process *should* be as simple as dropping in the provider and connected components. + +## Basic / quickstart usage + +1. Add provider + +```ts + + + +``` + +2. Include Connected form and button components + +```ts + + ``` + + The form will internally interact with the backing state machines. + +```ts + +``` + +Most props are optional, here for example you may conditionally add an extra set of `isDisabled` conditions. They will be applied on top of the internal state machine conditions that ensure the button is disabled when necessary. TypeScript types can be checked for available options. + +## Initial state + +Initial state is just that, initial state, and isn't "reactive". + +## Provider callbacks + +The provider accepts some callbacks, for example `onIntegrationCreation`. Changes to these references are tracked internally, so feel free to have a callback handler that changes it's identity if needed. + +An example handler: + +```ts +const onIntegrationCreation: OnIntegrationCreationCallback = ( + integrationOptions + ) => { + const { + integrationName: createdIntegrationName, + datasets: createdDatasets, + } = integrationOptions; + + setState((state) => ({ + ...state, + integrationName: createdIntegrationName, + datasetName: createdDatasets[0].name, + lastCreatedIntegrationOptions: integrationOptions, + })); + goToStep('installElasticAgent'); + }; +``` + +## Manual dispatching of events + +Sometimes you may have a flow where it is necessary to manually update the internal state machines and bypass the connected components. This is discouraged, but it is possible for some operations. These events are exposed as `DispatchableEvents`, and these are exposed by the `useConsumerCustomIntegrations()` hook. + +For example `updateCreateFields` will update the fields of the creation form in the same manner as the UI components would. + +These functions will either exist, or be `undefined`, the presence of these functions means that the corresponding state checks against the machine have already passed. For instance, `saveCreateFields()` will only exist (and not be `undefined`) when the creation form is valid. These functions therefore also fulfill the role of condition checking if needed. + +Example usage: + +```ts +const { + dispatchableEvents: { updateCreateFields }, +} = useConsumerCustomIntegrations(); +``` + +## Cleanup + +- For the create flow the machine will try to cleanup a previously created integration if needed (if `options.deletePrevious` is `true`). For example, imagine a wizard flow where someone has navigated forward, then navigates back, makes a change, and saves again, the machine will attempt to delete the previously created integration so that lots of rogue custom integrations aren't left behind. The provider accepts an optional `previouslyCreatedIntegration` prop that can serve as initial state. diff --git a/packages/kbn-custom-integrations/index.ts b/packages/kbn-custom-integrations/index.ts new file mode 100644 index 0000000000000..f25ec944c93a2 --- /dev/null +++ b/packages/kbn-custom-integrations/index.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 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 or the Server + * Side Public License, v 1. + */ + +export { + ConnectedCustomIntegrationsForm, + ConnectedCustomIntegrationsButton, +} from './src/components'; +export { useConsumerCustomIntegrations, useCustomIntegrations } from './src/hooks'; +export { CustomIntegrationsProvider } from './src/state_machines'; + +// Types +export type { DispatchableEvents } from './src/hooks'; +export type { Callbacks, InitialState } from './src/state_machines'; +export type { CustomIntegrationOptions } from './src/types'; diff --git a/packages/kbn-custom-integrations/jest.config.js b/packages/kbn-custom-integrations/jest.config.js new file mode 100644 index 0000000000000..ce85d5922ef71 --- /dev/null +++ b/packages/kbn-custom-integrations/jest.config.js @@ -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 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 or the Server + * Side Public License, v 1. + */ + +module.exports = { + preset: '@kbn/test/jest_node', + rootDir: '../..', + roots: ['/packages/kbn-custom-integrations'], +}; diff --git a/packages/kbn-custom-integrations/kibana.jsonc b/packages/kbn-custom-integrations/kibana.jsonc new file mode 100644 index 0000000000000..61c9067c7e659 --- /dev/null +++ b/packages/kbn-custom-integrations/kibana.jsonc @@ -0,0 +1,5 @@ +{ + "type": "shared-common", + "id": "@kbn/custom-integrations", + "owner": "@elastic/infra-monitoring-ui" +} diff --git a/packages/kbn-custom-integrations/package.json b/packages/kbn-custom-integrations/package.json new file mode 100644 index 0000000000000..80b3bc267e5a6 --- /dev/null +++ b/packages/kbn-custom-integrations/package.json @@ -0,0 +1,6 @@ +{ + "name": "@kbn/custom-integrations", + "private": true, + "version": "1.0.0", + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-custom-integrations/src/components/create/button.tsx b/packages/kbn-custom-integrations/src/components/create/button.tsx new file mode 100644 index 0000000000000..a7bd339d19cc4 --- /dev/null +++ b/packages/kbn-custom-integrations/src/components/create/button.tsx @@ -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 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 or the Server + * Side Public License, v 1. + */ + +import { EuiButton } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { useActor, useSelector } from '@xstate/react'; +import React, { useCallback } from 'react'; +import { isSubmittingSelector, isValidSelector } from '../../state_machines/create/selectors'; +import { CreateCustomIntegrationActorRef } from '../../state_machines/create/state_machine'; + +const SUBMITTING_TEXT = i18n.translate('customIntegrationsPackage.create.button.submitting', { + defaultMessage: 'Creating integration...', +}); + +const CONTINUE_TEXT = i18n.translate('customIntegrationsPackage.create.button.continue', { + defaultMessage: 'Continue', +}); + +interface ConnectedCreateCustomIntegrationButtonProps { + machine: CreateCustomIntegrationActorRef; + isDisabled?: boolean; + onClick?: () => void; + submittingText?: string; + continueText?: string; + testSubj: string; +} +export const ConnectedCreateCustomIntegrationButton = ({ + machine, + isDisabled = false, + onClick: consumerOnClick, + submittingText = SUBMITTING_TEXT, + continueText = CONTINUE_TEXT, + testSubj, +}: ConnectedCreateCustomIntegrationButtonProps) => { + const [, send] = useActor(machine); + + const onClick = useCallback(() => { + if (consumerOnClick) { + consumerOnClick(); + } + send({ type: 'SAVE' }); + }, [consumerOnClick, send]); + + const isValid = useSelector(machine, isValidSelector); + const isSubmitting = useSelector(machine, isSubmittingSelector); + + return ( + + ); +}; + +type CreateCustomIntegrationButtonProps = { + isValid: boolean; + isSubmitting: boolean; +} & Omit; + +const CreateCustomIntegrationButton = ({ + onClick, + isValid, + isSubmitting, + isDisabled, + submittingText, + continueText, + testSubj, +}: CreateCustomIntegrationButtonProps) => { + return ( + + {isSubmitting ? submittingText : continueText} + + ); +}; diff --git a/packages/kbn-custom-integrations/src/components/create/error_callout.tsx b/packages/kbn-custom-integrations/src/components/create/error_callout.tsx new file mode 100644 index 0000000000000..032be76aef41c --- /dev/null +++ b/packages/kbn-custom-integrations/src/components/create/error_callout.tsx @@ -0,0 +1,94 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; +import { i18n } from '@kbn/i18n'; +import { EuiButton, EuiCallOut } from '@elastic/eui'; +import { + AuthorizationError, + IntegrationError, + IntegrationNotInstalledError, + UnknownError, +} from '../../types'; +import { CreateTestSubjects } from './form'; + +const TITLE = i18n.translate('customIntegrationsPackage.create.errorCallout.title', { + defaultMessage: 'Sorry, there was an error', +}); + +const RETRY_TEXT = i18n.translate('customIntegrationsPackage.create.errorCallout.retryText', { + defaultMessage: 'Retry', +}); + +export const ErrorCallout = ({ + error, + onRetry, + testSubjects, +}: { + error: IntegrationError; + onRetry?: () => void; + testSubjects?: CreateTestSubjects['errorCallout']; +}) => { + if (error instanceof AuthorizationError) { + const authorizationDescription = i18n.translate( + 'customIntegrationsPackage.create.errorCallout.authorization.description', + { + defaultMessage: 'This user does not have permissions to create an integration.', + } + ); + return ( + + ); + } else if (error instanceof UnknownError || error instanceof IntegrationNotInstalledError) { + return ( + + ); + } else { + return null; + } +}; + +const BaseErrorCallout = ({ + message, + onRetry, + testSubjects, +}: { + message: string; + onRetry?: () => void; + testSubjects?: CreateTestSubjects['errorCallout']; +}) => { + return ( + + <> +

    {message}

    + {onRetry ? ( + + {RETRY_TEXT} + + ) : null} + +
    + ); +}; diff --git a/packages/kbn-custom-integrations/src/components/create/form.tsx b/packages/kbn-custom-integrations/src/components/create/form.tsx new file mode 100644 index 0000000000000..2273db68a479a --- /dev/null +++ b/packages/kbn-custom-integrations/src/components/create/form.tsx @@ -0,0 +1,236 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 or the Server + * Side Public License, v 1. + */ + +import React, { useCallback } from 'react'; +import { + EuiFieldText, + EuiFlexGroup, + EuiFlexItem, + EuiForm, + EuiFormRow, + EuiIconTip, + EuiSpacer, + EuiText, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { useActor, useSelector } from '@xstate/react'; +import { ErrorCallout } from './error_callout'; +import { CreateCustomIntegrationActorRef } from '../../state_machines/create/state_machine'; +import { + CreateCustomIntegrationOptions, + WithOptionalErrors, + WithTouchedFields, +} from '../../state_machines/create/types'; +import { Dataset, IntegrationError } from '../../types'; +import { hasFailedSelector } from '../../state_machines/create/selectors'; + +// NOTE: Hardcoded for now. We will likely extend the functionality here to allow the selection of the type. +// And also to allow adding multiple datasets. +const DATASET_TYPE = 'logs' as const; + +export interface CreateTestSubjects { + integrationName?: string; + datasetName?: string; + errorCallout?: { + callout?: string; + retryButton?: string; + }; +} + +export const ConnectedCreateCustomIntegrationForm = ({ + machineRef, + testSubjects, +}: { + machineRef: CreateCustomIntegrationActorRef; + testSubjects?: CreateTestSubjects; +}) => { + const [state, send] = useActor(machineRef); + const updateIntegrationName = useCallback( + (integrationName: string) => { + send({ type: 'UPDATE_FIELDS', fields: { integrationName } }); + }, + [send] + ); + + const updateDatasetName = useCallback( + (datasetName: string) => { + send({ + type: 'UPDATE_FIELDS', + fields: { + datasets: [{ type: DATASET_TYPE, name: datasetName }], + }, + }); + }, + [send] + ); + + const retry = useCallback(() => { + send({ type: 'RETRY' }); + }, [send]); + + const hasFailed = useSelector(machineRef, hasFailedSelector); + + return ( + + ); +}; + +interface FormProps { + integrationName: CreateCustomIntegrationOptions['integrationName']; + datasetName: Dataset['name']; + errors: WithOptionalErrors['errors']; + touchedFields: WithTouchedFields['touchedFields']; + updateIntegrationName: (integrationName: string) => void; + updateDatasetName: (integrationName: string) => void; + hasFailed: boolean; + onRetry?: () => void; + testSubjects?: CreateTestSubjects; +} + +export const CreateCustomIntegrationForm = ({ + integrationName, + datasetName, + errors, + touchedFields, + updateIntegrationName, + updateDatasetName, + onRetry, + testSubjects, +}: FormProps) => { + return ( + <> + +

    + {i18n.translate('customIntegrationsPackage.create.configureIntegrationDescription', { + defaultMessage: 'Configure integration', + })} +

    +
    + + + + + {i18n.translate('customIntegrationsPackage.create.integration.name', { + defaultMessage: 'Integration name', + })} + + + + + + } + helpText={i18n.translate('customIntegrationsPackage.create.integration.helper', { + defaultMessage: + "All lowercase, max 100 chars, special characters will be replaced with '_'.", + })} + isInvalid={hasErrors(errors?.fields?.integrationName) && touchedFields.integrationName} + error={errorsList(errors?.fields?.integrationName)} + > + updateIntegrationName(event.target.value)} + isInvalid={hasErrors(errors?.fields?.integrationName) && touchedFields.integrationName} + max={100} + data-test-subj={ + testSubjects?.integrationName ?? + 'customIntegrationsPackageCreateFormIntegrationNameInput' + } + /> + + + + {i18n.translate('customIntegrationsPackage.create.dataset.name', { + defaultMessage: 'Dataset name', + })} + + + + + + } + helpText={i18n.translate('customIntegrationsPackage.create.dataset.helper', { + defaultMessage: + "All lowercase, max 100 chars, special characters will be replaced with '_'.", + })} + isInvalid={hasErrors(errors?.fields?.datasets?.[0]?.name) && touchedFields.datasets} + error={errorsList(errors?.fields?.datasets?.[0]?.name)} + > + updateDatasetName(event.target.value)} + isInvalid={hasErrors(errors?.fields?.datasets?.[0].name) && touchedFields.datasets} + max={100} + data-test-subj={ + testSubjects?.datasetName ?? 'customIntegrationsPackageCreateFormDatasetNameInput' + } + /> + + + {errors?.general && ( + <> + + + + )} + + ); +}; + +const hasErrors = (errors?: IntegrationError[]) => errors && errors.length > 0; + +const errorsList = (errors?: IntegrationError[]) => { + return hasErrors(errors) ? ( +
      + {errors!.map((error, index) => ( +
    • {error.message}
    • + ))} +
    + ) : null; +}; diff --git a/packages/kbn-custom-integrations/src/components/create/utils.ts b/packages/kbn-custom-integrations/src/components/create/utils.ts new file mode 100644 index 0000000000000..3af857be37236 --- /dev/null +++ b/packages/kbn-custom-integrations/src/components/create/utils.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 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 or the Server + * Side Public License, v 1. + */ + +export const replaceSpecialChars = (filename: string) => { + // Replace special characters with _ + const replacedSpecialCharacters = filename.replaceAll(/[^a-zA-Z0-9_]/g, '_'); + // Allow only one _ in a row + const noRepetitions = replacedSpecialCharacters.replaceAll(/[\_]{2,}/g, '_'); + return noRepetitions; +}; diff --git a/packages/kbn-custom-integrations/src/components/custom_integrations_button.tsx b/packages/kbn-custom-integrations/src/components/custom_integrations_button.tsx new file mode 100644 index 0000000000000..7304eefdffa1b --- /dev/null +++ b/packages/kbn-custom-integrations/src/components/custom_integrations_button.tsx @@ -0,0 +1,45 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; +import { useSelector } from '@xstate/react'; +import { useCustomIntegrations } from '../hooks/use_custom_integrations'; +import { createIsInitializedSelector } from '../state_machines/custom_integrations/selectors'; +import { ConnectedCreateCustomIntegrationButton } from './create/button'; + +interface ConnectedCustomIntegrationsButtonProps { + isDisabled?: boolean; + onClick?: () => void; + testSubj?: string; +} + +export const ConnectedCustomIntegrationsButton = ({ + isDisabled, + onClick, + testSubj = 'customIntegrationsPackageConnectedButton', +}: ConnectedCustomIntegrationsButtonProps) => { + const { customIntegrationsStateService, customIntegrationsState } = useCustomIntegrations(); + + const createIsInitialized = useSelector( + customIntegrationsStateService, + createIsInitializedSelector + ); + + if (createIsInitialized) { + return ( + + ); + } else { + return null; + } +}; diff --git a/packages/kbn-custom-integrations/src/components/custom_integrations_form.tsx b/packages/kbn-custom-integrations/src/components/custom_integrations_form.tsx new file mode 100644 index 0000000000000..a6a3fa30d8593 --- /dev/null +++ b/packages/kbn-custom-integrations/src/components/custom_integrations_form.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 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 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; +import { useSelector } from '@xstate/react'; +import { useCustomIntegrations } from '../hooks/use_custom_integrations'; +import { createIsInitializedSelector } from '../state_machines/custom_integrations/selectors'; +import { ConnectedCreateCustomIntegrationForm, CreateTestSubjects } from './create/form'; + +interface Props { + testSubjects?: { + create?: CreateTestSubjects; + }; +} + +export const ConnectedCustomIntegrationsForm = ({ testSubjects }: Props) => { + const { customIntegrationsState, customIntegrationsStateService } = useCustomIntegrations(); + + const createIsInitialized = useSelector( + customIntegrationsStateService, + createIsInitializedSelector + ); + + if (createIsInitialized) { + return ( + + ); + } else { + return null; + } +}; diff --git a/packages/kbn-custom-integrations/src/components/index.ts b/packages/kbn-custom-integrations/src/components/index.ts new file mode 100644 index 0000000000000..165dfb3e202b0 --- /dev/null +++ b/packages/kbn-custom-integrations/src/components/index.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 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 or the Server + * Side Public License, v 1. + */ + +export { ConnectedCreateCustomIntegrationForm } from './create/form'; +export * from './create/error_callout'; +export * from './custom_integrations_button'; +export * from './custom_integrations_form'; diff --git a/packages/kbn-custom-integrations/src/hooks/create/use_create_dispatchable_events.ts b/packages/kbn-custom-integrations/src/hooks/create/use_create_dispatchable_events.ts new file mode 100644 index 0000000000000..b17329b7a61b5 --- /dev/null +++ b/packages/kbn-custom-integrations/src/hooks/create/use_create_dispatchable_events.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 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 or the Server + * Side Public License, v 1. + */ + +import { useActor, useSelector } from '@xstate/react'; +import { useMemo } from 'react'; +import { isUninitializedSelector, isValidSelector } from '../../state_machines/create/selectors'; +import { CreateCustomIntegrationActorRef } from '../../state_machines/create/state_machine'; +import { CreateCustomIntegrationOptions } from '../../state_machines/create/types'; + +export const useCreateDispatchableEvents = ({ + machineRef, +}: { + machineRef: CreateCustomIntegrationActorRef; +}) => { + const [, send] = useActor(machineRef); + const isValid = useSelector(machineRef, isValidSelector); + const isUninitialized = useSelector(machineRef, isUninitializedSelector); + const dispatchableEvents = useMemo(() => { + return { + saveCreateFields: isValid ? () => send({ type: 'SAVE' }) : undefined, + updateCreateFields: !isUninitialized + ? (fields: Partial) => + send({ type: 'UPDATE_FIELDS', fields }) + : undefined, + }; + }, [isUninitialized, isValid, send]); + + return dispatchableEvents; +}; + +export type CreateDispatchableEvents = ReturnType; diff --git a/packages/kbn-custom-integrations/src/hooks/index.ts b/packages/kbn-custom-integrations/src/hooks/index.ts new file mode 100644 index 0000000000000..064d55f63a786 --- /dev/null +++ b/packages/kbn-custom-integrations/src/hooks/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 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 or the Server + * Side Public License, v 1. + */ + +export { useConsumerCustomIntegrations } from './use_consumer_custom_integrations'; +export { useCustomIntegrations } from './use_custom_integrations'; +export type { DispatchableEvents } from './use_consumer_custom_integrations'; diff --git a/packages/kbn-custom-integrations/src/hooks/use_consumer_custom_integrations.ts b/packages/kbn-custom-integrations/src/hooks/use_consumer_custom_integrations.ts new file mode 100644 index 0000000000000..3d5bb729350c6 --- /dev/null +++ b/packages/kbn-custom-integrations/src/hooks/use_consumer_custom_integrations.ts @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 or the Server + * Side Public License, v 1. + */ + +import { + CreateDispatchableEvents, + useCreateDispatchableEvents, +} from './create/use_create_dispatchable_events'; +import { useCustomIntegrations } from './use_custom_integrations'; + +export const useConsumerCustomIntegrations = () => { + const { customIntegrationsState } = useCustomIntegrations(); + const dispatchableEvents = useCreateDispatchableEvents({ + machineRef: customIntegrationsState.children.createCustomIntegration, + }); + + return { + mode: customIntegrationsState.context.mode, + dispatchableEvents, + }; +}; + +export type DispatchableEvents = CreateDispatchableEvents; diff --git a/packages/kbn-custom-integrations/src/hooks/use_custom_integrations.ts b/packages/kbn-custom-integrations/src/hooks/use_custom_integrations.ts new file mode 100644 index 0000000000000..9ca7a96c72fda --- /dev/null +++ b/packages/kbn-custom-integrations/src/hooks/use_custom_integrations.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 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 or the Server + * Side Public License, v 1. + */ + +import { useActor } from '@xstate/react'; +import { useCustomIntegrationsContext } from '../state_machines/custom_integrations/provider'; + +export const useCustomIntegrations = () => { + const customIntegrationsStateService = useCustomIntegrationsContext(); + const [customIntegrationsState, customIntegrationsPageSend] = useActor( + customIntegrationsStateService + ); + + return { + customIntegrationsState, + customIntegrationsPageSend, + customIntegrationsStateService, + }; +}; diff --git a/packages/kbn-custom-integrations/src/state_machines/create/defaults.ts b/packages/kbn-custom-integrations/src/state_machines/create/defaults.ts new file mode 100644 index 0000000000000..579f34c6e23f5 --- /dev/null +++ b/packages/kbn-custom-integrations/src/state_machines/create/defaults.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 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 or the Server + * Side Public License, v 1. + */ + +export const DEFAULT_CONTEXT = { + options: { + deletePrevious: false, + resetOnCreation: true, + errorOnFailedCleanup: false, + }, + fields: { + integrationName: '', + datasets: [ + { + type: 'logs' as const, // NOTE: Hardcoded to logs until we support multiple types via the UI. + name: '', + }, + ], + }, + touchedFields: { + integrationName: false, + datasets: false, + }, + errors: null, +}; diff --git a/packages/kbn-custom-integrations/src/state_machines/create/notifications.ts b/packages/kbn-custom-integrations/src/state_machines/create/notifications.ts new file mode 100644 index 0000000000000..38ef7fb993906 --- /dev/null +++ b/packages/kbn-custom-integrations/src/state_machines/create/notifications.ts @@ -0,0 +1,61 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 or the Server + * Side Public License, v 1. + */ + +import { CustomIntegrationOptions, IntegrationError } from '../../types'; +import { CreateCustomIntegrationContext, CreateCustomIntegrationEvent } from './types'; + +export type CreateCustomIntegrationNotificationEvent = + | { + type: 'INTEGRATION_CREATED'; + fields: CustomIntegrationOptions; + } + | { + type: 'INTEGRATION_CLEANUP'; + integrationName: CustomIntegrationOptions['integrationName']; + } + | { + type: 'INTEGRATION_CLEANUP_FAILED'; + error: IntegrationError; + } + | { + type: 'CREATE_INITIALIZED'; + }; + +export const CreateIntegrationNotificationEventSelectors = { + integrationCreated: (context: CreateCustomIntegrationContext) => + ({ + type: 'INTEGRATION_CREATED', + fields: context.fields, + } as CreateCustomIntegrationNotificationEvent), + integrationCleanup: ( + context: CreateCustomIntegrationContext, + event: CreateCustomIntegrationEvent + ) => { + return 'data' in event && 'integrationName' in event.data + ? ({ + type: 'INTEGRATION_CLEANUP', + integrationName: event.data.integrationName, + } as CreateCustomIntegrationNotificationEvent) + : null; + }, + integrationCleanupFailed: ( + context: CreateCustomIntegrationContext, + event: CreateCustomIntegrationEvent + ) => { + return 'data' in event && event.data instanceof IntegrationError + ? ({ + type: 'INTEGRATION_CLEANUP_FAILED', + error: event.data, + } as CreateCustomIntegrationNotificationEvent) + : null; + }, + initialized: () => + ({ + type: 'CREATE_INITIALIZED', + } as CreateCustomIntegrationNotificationEvent), +}; diff --git a/packages/kbn-custom-integrations/src/state_machines/create/selectors.ts b/packages/kbn-custom-integrations/src/state_machines/create/selectors.ts new file mode 100644 index 0000000000000..cc5c26f1ca39f --- /dev/null +++ b/packages/kbn-custom-integrations/src/state_machines/create/selectors.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 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 or the Server + * Side Public License, v 1. + */ + +import { CreateCustomIntegrationState } from './state_machine'; + +export const isValidSelector = (state: CreateCustomIntegrationState) => + state && state.matches('valid'); + +export const isSubmittingSelector = (state: CreateCustomIntegrationState) => + state && state.matches('submitting'); + +export const isUninitializedSelector = (state: CreateCustomIntegrationState) => + !state || state.matches('uninitialized'); + +export const hasFailedSelector = (state: CreateCustomIntegrationState) => + state && state.matches('failure'); diff --git a/packages/kbn-custom-integrations/src/state_machines/create/state_machine.ts b/packages/kbn-custom-integrations/src/state_machines/create/state_machine.ts new file mode 100644 index 0000000000000..ad93d3eb8cb05 --- /dev/null +++ b/packages/kbn-custom-integrations/src/state_machines/create/state_machine.ts @@ -0,0 +1,350 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; +import { actions, ActorRefFrom, createMachine, EmittedFrom, SpecialTargets } from 'xstate'; +import deepEqual from 'react-fast-compare'; +import { sendIfDefined, OmitDeprecatedState } from '@kbn/xstate-utils'; +import { IntegrationError, NamingCollisionError } from '../../types'; +import { IIntegrationsClient } from '../services/integrations_client'; +import { + createArrayValidator, + createCharacterLimitValidation, + createIsEmptyValidation, + createIsLowerCaseValidation, + initializeValidateFields, +} from '../services/validation'; +import { DEFAULT_CONTEXT } from './defaults'; +import { CreateIntegrationNotificationEventSelectors } from './notifications'; +import { + CreateCustomIntegrationContext, + CreateCustomIntegrationEvent, + CreateCustomIntegrationTypestate, + DefaultCreateCustomIntegrationContext, + WithErrors, + WithPreviouslyCreatedIntegration, + WithTouchedFields, + WithFields, +} from './types'; +import { replaceSpecialChars } from '../../components/create/utils'; + +export const createPureCreateCustomIntegrationStateMachine = ( + initialContext: DefaultCreateCustomIntegrationContext = DEFAULT_CONTEXT +) => + createMachine< + CreateCustomIntegrationContext, + CreateCustomIntegrationEvent, + CreateCustomIntegrationTypestate + >( + { + /** @xstate-layout N4IgpgJg5mDOIC5QGEBOYCGAXMyCusWA9gLYCSAdjlKtgJZEUDEAqgAoAiAggCoCiAfQBiZPgBkOAZQDaABgC6iUAAcisOlgYUlIAB6IALACYANCACeh2UYB0ATgBsD6w4DsAVgCMngMyvPAL4BZmiYOPiEpJTUtJqMNngUdEmaGAA2dABekExyikggqupx2gX6CEYGABw2PkZVnk6yjVXVBg5mlgju7TYGxu4eBo1O1UEh6Ni4BMTkVGA09PGJyRp06Vk50p75KmprjDrllTV1DU0tbR0WiK5GPjauHnaydz4G763jIKFTEbPRBaxLQ2ABuGwg9AoUCYEEYYBsyVBRAA1gjfuEZlF5osSmCIVCoAgkUQAMZLCh5PI6IoHUqgcquHyeewOKquOyeKp2Iyedx2HydRA9Aw2Kr8oyybk+HyDdxGb4Y6aROYxCn4jKQzTQphgVCoIioGzKNLYABmhpINiV-2xarx4M1hOJFGR5JKVIUNP2JSOt2ZrPZnO5vP5gpuCH6shsviMDiMdgMnM8zXcismmJVgNxIMddAgTEkXAAanxqQVab6yohvJ47DZeeyOVK+T5ZNcumGxfy65Lk1UHOmwsqATjgfE8wWi6XtrtCj6tH6ELX642ni8Gu42x3EG3o347O4jwLPEZ5YPgj8MyO7UD1ZPCyWy0Y55XF9Xl95V1z1y2t+2hW6D5aglA8j1kAwtyHP4sVVO88QgMA0jAbUoDYdBQQYAhYXhRFXVRdFr1tOCc3iRDkNQ9CwEwogCBdN0KU9V8F0OD9Gl6M46zDDlBgMQD6lFVxrDsET+QcFMmQvCZh2I7NxwoGxyJQ5I0IwrDYF1fVDWNU0sAtVArRtWC5PVJTKLU2jYHoslGIUcs9mKd8GRrBwOPqLiBR41w+IjBo+hExwHHceM+XaVxoMzUd7RBMyVKomjsL1A0jRNc1LWtIjjLHUykOU6F4vU6z3S0Kkdm9RzWOc5dXIcWp3MPTzD28-i-AbYT2WGIS4w8CKbxI+SbFgPAACMSA0VCcIoBESTRDKZKy6L4iG0bxpUorbPkez5wq+k9EQRt6waM8DCZZlIP6QCfCqaM+XE1420cbw00vIys2yvFlrGrAJqS7TUr09LXqi+CQU+1boXWj07K9CsWN244uUO08elOzxzp8rp6lcNq2xOs8grscVnukmC3sWhShtJUk4A0ra30qvaKiedwbC3U8uQTQnxUA9w-OsXnzyMfxgvCl7MrJkH4jNDA6DSPB0CYAAlPgeEVgBNOm4aXIxeVFMMGlkHxXLqDxAJOh4Ux5eM2SN9sB162T3pBaXZflsAlZV9XZ3KultcqWwejZZtxXaOwWtqoSHuZSVIKqB2FslhT0FgFCJs1nal2j+sDHbIWeU5V4eeuhsPAHfw-G5TxRcvCgiEQ+ACiB29SN2+n4cQABaHcEC7mxZH7gfB4H+p44lluEiSFJ1gybIIB9qsquMQC2VFIXecTbzeQk0fgfHydCXnpzGa8FnPK3PxvE+bv3HbGNZB5Pwt0gqU7B35uBsSYg8FJAALSBD4ZuUOolRWb9w5j4Dc1RXCAX8IJZ41hrpOHuKLEmkV373ghAA9uCAeSnyDomKocYBTvB5pKECwZjDtEaImN+-UMFOhKEIGWyE56wwzh+XBgYOTVCITKDGhhxLdgfs0FMCDX5i3mmPAasV8oWQIFgpcaMvC1A+NwpMDhEzuH4k8WoPE7BDBlPyV4tCTIfRGl9VCCiPyShAUyfoR5eZxmaN3eoth86BxvuJdeJinZLW-tTWADcHK+2sUmGorxCGyBvoTdo18jyPFLpQm+1ReY+PJjYF2ct0BWKqpUQmfdXCROia0JwZtnB9wlGA8U+iqhxwkaTXeA1k6pxUjkxmCYAz3A+I9L8HwebxOZq0SoyTxR1KCEAA */ + context: initialContext, + preserveActionOrder: true, + predictableActionArguments: true, + id: 'CreateCustomIntegration', + initial: 'uninitialized', + on: { + UPDATE_FIELDS: { + target: '#validating', + actions: 'storeFields', + }, + }, + states: { + uninitialized: { + always: [ + { + target: 'validating', + cond: 'shouldValidateInitialContext', + }, + { + target: 'untouched', + }, + ], + exit: ['notifyInitialized'], + }, + validating: { + id: 'validating', + invoke: { + src: 'validateFields', + onDone: { + target: 'valid', + }, + onError: { + target: 'validationFailed', + actions: ['storeClientErrors'], + }, + }, + }, + untouched: {}, + valid: { + id: 'valid', + entry: ['clearErrors'], + on: { + SAVE: [ + { + target: 'success', + cond: 'fieldsMatchPreviouslyCreated', + }, + { + target: 'deletingPrevious', + cond: 'shouldCleanup', + }, + { + target: '#submitting', + }, + ], + }, + }, + validationFailed: { + id: 'validationFailed', + }, + deletingPrevious: { + invoke: { + src: 'cleanup', + onDone: { + target: '#submitting', + actions: ['clearPreviouslyCreatedIntegration', 'notifyIntegrationCleanup'], + }, + onError: [ + { + target: '#failure', + cond: 'shouldErrorOnFailedCleanup', + actions: ['storeServerErrors', 'notifyIntegrationCleanupFailed'], + }, + { + target: '#submitting', + }, + ], + }, + }, + submitting: { + id: 'submitting', + invoke: { + src: 'save', + onDone: { + target: 'success', + actions: ['storePreviouslyCreatedIntegration'], + }, + onError: { + target: 'failure', + actions: ['storeServerErrors'], + }, + }, + }, + success: { + entry: ['notifyIntegrationCreated'], + always: [ + { + target: 'resetting', + cond: 'shouldReset', + }, + ], + }, + failure: { + id: 'failure', + on: { + RETRY: [ + { + target: 'deletingPrevious', + cond: 'shouldCleanup', + }, + { + target: 'submitting', + }, + ], + }, + }, + resetting: { + entry: ['resetValues'], + always: { + target: 'untouched', + }, + }, + }, + }, + { + actions: { + storeClientErrors: actions.assign((context, event) => { + return 'data' in event && 'errors' in event.data + ? ({ + errors: { + fields: event.data.errors, + general: null, + }, + } as WithErrors) + : {}; + }), + storeServerErrors: actions.assign((context, event) => { + return 'data' in event && event.data instanceof IntegrationError + ? ({ + errors: { + ...(event.data instanceof NamingCollisionError + ? { fields: { integrationName: [event.data] } } + : { fields: {} }), + ...(!(event.data instanceof NamingCollisionError) + ? { general: event.data } + : { general: null }), + }, + } as WithErrors) + : {}; + }), + clearErrors: actions.assign((context, event) => { + return { errors: null }; + }), + storePreviouslyCreatedIntegration: actions.assign((context, event) => { + return 'data' in event && !(event.data instanceof IntegrationError) + ? ({ + previouslyCreatedIntegration: context.fields, + } as WithPreviouslyCreatedIntegration) + : {}; + }), + clearPreviouslyCreatedIntegration: actions.assign((context, event) => { + return 'data' in event && 'previouslyCreatedIntegration' in context + ? ({ + previouslyCreatedIntegration: undefined, + } as WithPreviouslyCreatedIntegration) + : {}; + }), + storeFields: actions.assign((context, event) => { + return event.type === 'UPDATE_FIELDS' + ? ({ + fields: { + ...context.fields, + ...event.fields, + integrationName: + event.fields.integrationName !== undefined + ? replaceSpecialChars(event.fields.integrationName) + : context.fields.integrationName, + datasets: + event.fields.datasets !== undefined + ? event.fields.datasets.map((dataset) => ({ + ...dataset, + name: replaceSpecialChars(dataset.name), + })) + : context.fields.datasets, + }, + touchedFields: { + ...context.touchedFields, + ...Object.keys(event.fields).reduce( + (acc, field) => ({ ...acc, [field]: true }), + {} as WithTouchedFields['touchedFields'] + ), + }, + } as WithFields & WithTouchedFields) + : {}; + }), + resetValues: actions.assign((context, event) => { + return { + fields: DEFAULT_CONTEXT.fields, + touchedFields: DEFAULT_CONTEXT.touchedFields, + errors: null, + }; + }), + }, + guards: { + shouldValidateInitialContext: (context) => + !deepEqual(DEFAULT_CONTEXT.fields, context.fields), + fieldsMatchPreviouslyCreated: (context) => + deepEqual(context.fields, context.previouslyCreatedIntegration), + shouldCleanup: (context) => + context.options.deletePrevious === true && + context.previouslyCreatedIntegration !== undefined, + shouldErrorOnFailedCleanup: (context) => context.options.errorOnFailedCleanup === true, + shouldReset: (context) => context.options.resetOnCreation === true, + }, + } + ); + +export interface CreateCustomIntegrationStateMachineDependencies { + initialContext?: DefaultCreateCustomIntegrationContext; + integrationsClient: IIntegrationsClient; +} + +export const createCreateCustomIntegrationStateMachine = ({ + initialContext, + integrationsClient, +}: CreateCustomIntegrationStateMachineDependencies) => { + return createPureCreateCustomIntegrationStateMachine(initialContext).withConfig({ + services: { + validateFields: initializeValidateFields({ + integrationName: [ + createIsEmptyValidation( + i18n.translate('customIntegrationsPackage.validations.integrationName.requiredError', { + defaultMessage: 'An integration name is required.', + }) + ), + createIsLowerCaseValidation( + i18n.translate('customIntegrationsPackage.validations.integrationName.lowerCaseError', { + defaultMessage: 'An integration name should be lowercase.', + }) + ), + createCharacterLimitValidation( + i18n.translate( + 'customIntegrationsPackage.validations.integrationName.characterLimitError', + { + defaultMessage: 'An integration name should be less than 100 characters.', + } + ), + 100 + ), + ], + datasets: createArrayValidator({ + name: [ + createIsEmptyValidation( + i18n.translate('customIntegrationsPackage.validations.datasets.requiredError', { + defaultMessage: 'A dataset name is required.', + }) + ), + createIsLowerCaseValidation( + i18n.translate('customIntegrationsPackage.validations.datasets.lowerCaseError', { + defaultMessage: 'A dataset name should be lowercase.', + }) + ), + createCharacterLimitValidation( + i18n.translate('customIntegrationsPackage.validations.datasets.characterLimitError', { + defaultMessage: 'A dataset name should be less than 100 characters.', + }), + 100 + ), + ], + }), + }), + save: (context) => { + return integrationsClient.createCustomIntegration(context.fields); + }, + cleanup: (context) => { + return integrationsClient.deleteCustomIntegration({ + integrationName: context.previouslyCreatedIntegration!.integrationName, // Value will be set due to the guard. + version: '1.0.0', + }); + }, + }, + actions: { + notifyIntegrationCreated: sendIfDefined(SpecialTargets.Parent)( + CreateIntegrationNotificationEventSelectors.integrationCreated + ), + notifyIntegrationCleanup: sendIfDefined(SpecialTargets.Parent)( + CreateIntegrationNotificationEventSelectors.integrationCleanup + ), + notifyIntegrationCleanupFailed: sendIfDefined(SpecialTargets.Parent)( + CreateIntegrationNotificationEventSelectors.integrationCleanupFailed + ), + notifyInitialized: sendIfDefined(SpecialTargets.Parent)( + CreateIntegrationNotificationEventSelectors.initialized + ), + }, + }); +}; + +export type CreateCustomIntegrationStateMachine = ReturnType< + typeof createPureCreateCustomIntegrationStateMachine +>; +export type CreateCustomIntegrationActorRef = OmitDeprecatedState< + ActorRefFrom +>; +export type CreateCustomIntegrationState = EmittedFrom; diff --git a/packages/kbn-custom-integrations/src/state_machines/create/types.ts b/packages/kbn-custom-integrations/src/state_machines/create/types.ts new file mode 100644 index 0000000000000..e7cfad728d78e --- /dev/null +++ b/packages/kbn-custom-integrations/src/state_machines/create/types.ts @@ -0,0 +1,128 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 or the Server + * Side Public License, v 1. + */ + +import { CustomIntegrationOptions, IntegrationError } from '../../types'; +import { + CreateCustomIntegrationValue, + DeleteCustomIntegrationResponse, +} from '../services/integrations_client'; +import { IndexedValidationErrors, ValidationErrors } from '../services/validation'; + +export type CreateCustomIntegrationOptions = CustomIntegrationOptions; + +export interface WithTouchedFields { + touchedFields: Record; +} + +export type CreateInitialState = WithOptions & WithFields & WithPreviouslyCreatedIntegration; + +export interface WithOptions { + options: { + deletePrevious?: boolean; + resetOnCreation?: boolean; + errorOnFailedCleanup?: boolean; + }; +} + +export interface WithIntegrationName { + integrationName: CreateCustomIntegrationOptions['integrationName']; +} + +export interface WithPreviouslyCreatedIntegration { + previouslyCreatedIntegration?: CreateCustomIntegrationOptions; +} + +export interface WithDatasets { + datasets: CreateCustomIntegrationOptions['datasets']; +} + +export interface WithFields { + fields: WithIntegrationName & WithDatasets; +} + +export interface WithErrors { + errors: { + fields: Partial<{ + integrationName: IntegrationError[]; + datasets: IndexedValidationErrors; + }> | null; + general: IntegrationError | null; + }; +} + +export interface WithNullishErrors { + errors: null; +} + +export type WithOptionalErrors = WithErrors | WithNullishErrors; + +export type DefaultCreateCustomIntegrationContext = WithOptions & + WithFields & + WithTouchedFields & + WithPreviouslyCreatedIntegration & + WithNullishErrors; + +export type CreateCustomIntegrationTypestate = + | { + value: 'uninitialized'; + context: DefaultCreateCustomIntegrationContext; + } + | { + value: 'validating'; + context: DefaultCreateCustomIntegrationContext & WithOptionalErrors; + } + | { value: 'valid'; context: DefaultCreateCustomIntegrationContext & WithNullishErrors } + | { + value: 'validationFailed'; + context: DefaultCreateCustomIntegrationContext & WithErrors; + } + | { value: 'submitting'; context: DefaultCreateCustomIntegrationContext & WithNullishErrors } + | { value: 'success'; context: DefaultCreateCustomIntegrationContext & WithNullishErrors } + | { value: 'failure'; context: DefaultCreateCustomIntegrationContext & WithErrors } + | { + value: 'deletingPrevious'; + context: DefaultCreateCustomIntegrationContext & WithNullishErrors; + }; + +export type CreateCustomIntegrationContext = CreateCustomIntegrationTypestate['context']; + +export type CreateCustomIntegrationEvent = + | { + type: 'UPDATE_FIELDS'; + fields: Partial; + } + | { + type: 'INITIALIZE'; + } + | { + type: 'SAVE'; + } + | { + type: 'RETRY'; + } + // NOTE: These aren't ideal but they're more helpful than the DoneInvokeEvent<> and ErrorPlatformEvent types + | { + type: 'error.platform.validating:invocation[0]'; + data: { errors: ValidationErrors }; + } + | { + type: 'error.platform.submitting:invocation[0]'; + data: IntegrationError; + } + | { + type: 'done.invoke.submitting:invocation[0]'; + data: CreateCustomIntegrationValue; + } + | { + type: 'done.invoke.CreateCustomIntegration.deletingPrevious:invocation[0]'; + data: DeleteCustomIntegrationResponse; + } + | { + type: 'error.platform.CreateCustomIntegration.deletingPrevious:invocation[0]'; + data: IntegrationError; + }; diff --git a/packages/kbn-custom-integrations/src/state_machines/custom_integrations/defaults.ts b/packages/kbn-custom-integrations/src/state_machines/custom_integrations/defaults.ts new file mode 100644 index 0000000000000..0c1d58a9ba055 --- /dev/null +++ b/packages/kbn-custom-integrations/src/state_machines/custom_integrations/defaults.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 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 or the Server + * Side Public License, v 1. + */ + +import { DefaultCustomIntegrationsContext } from './types'; + +export const DEFAULT_CONTEXT: DefaultCustomIntegrationsContext = { + mode: 'create' as const, +}; diff --git a/packages/kbn-custom-integrations/src/state_machines/custom_integrations/notifications.ts b/packages/kbn-custom-integrations/src/state_machines/custom_integrations/notifications.ts new file mode 100644 index 0000000000000..96385b9bc4ce5 --- /dev/null +++ b/packages/kbn-custom-integrations/src/state_machines/custom_integrations/notifications.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 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 or the Server + * Side Public License, v 1. + */ + +import { createNotificationChannel, NotificationChannel } from '@kbn/xstate-utils'; +import { CreateCustomIntegrationNotificationEvent } from '../create/notifications'; +import { CustomIntegrationsContext, CustomIntegrationsEvent } from './types'; + +export type CustomIntegrationsNotificationChannel = NotificationChannel< + CustomIntegrationsContext, + CustomIntegrationsEvent | CreateCustomIntegrationNotificationEvent, + CustomIntegrationsEvent | CreateCustomIntegrationNotificationEvent +>; + +export const createCustomIntegrationsNotificationChannel = () => { + return createNotificationChannel< + CustomIntegrationsContext, + CustomIntegrationsEvent | CreateCustomIntegrationNotificationEvent, + CustomIntegrationsEvent | CreateCustomIntegrationNotificationEvent + >(false); +}; diff --git a/packages/kbn-custom-integrations/src/state_machines/custom_integrations/provider.tsx b/packages/kbn-custom-integrations/src/state_machines/custom_integrations/provider.tsx new file mode 100644 index 0000000000000..0f46f7e064b5d --- /dev/null +++ b/packages/kbn-custom-integrations/src/state_machines/custom_integrations/provider.tsx @@ -0,0 +1,92 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 or the Server + * Side Public License, v 1. + */ + +import { useInterpret } from '@xstate/react'; +import createContainer from 'constate'; +import type { HttpSetup } from '@kbn/core-http-browser'; +import { useEffect, useState } from 'react'; +import { isDevMode } from '@kbn/xstate-utils'; +import { createCustomIntegrationsStateMachine } from './state_machine'; +import { IntegrationsClient } from '../services/integrations_client'; +import { CustomIntegrationOptions, IntegrationError } from '../../types'; +import { InitialState } from './types'; +import { createCustomIntegrationsNotificationChannel } from './notifications'; + +interface Services { + http: HttpSetup | undefined; +} + +export interface Callbacks { + onIntegrationCreation?: (integrationOptions: CustomIntegrationOptions) => void; + onIntegrationCleanup?: (integrationName: CustomIntegrationOptions['integrationName']) => void; + onIntegrationCleanupFailed?: (error: IntegrationError) => void; +} + +type ProviderProps = { + services: Services; + useDevTools?: boolean; + initialState: InitialState; +} & Callbacks; + +export const useCustomIntegrationsState = ({ + services, + useDevTools = isDevMode(), + onIntegrationCreation, + onIntegrationCleanup, + onIntegrationCleanupFailed, + initialState, +}: ProviderProps) => { + const { http } = services; + + if (!http) + throw new Error( + 'Please ensure the HTTP service from Core is provided to the useCustomIntegrations Provider' + ); + + const [integrationsClient] = useState(() => new IntegrationsClient(http)); + const [customIntegrationsNotificationsChannel] = useState(() => + createCustomIntegrationsNotificationChannel() + ); + const [notificationsService] = useState(() => + customIntegrationsNotificationsChannel.createService() + ); + + // Provide notifications outside of the state machine context + useEffect(() => { + const sub = notificationsService.subscribe((event) => { + if (event.type === 'INTEGRATION_CREATED' && onIntegrationCreation) { + onIntegrationCreation(event.fields); + } else if (event.type === 'INTEGRATION_CLEANUP' && onIntegrationCleanup) { + onIntegrationCleanup(event.integrationName); + } else if (event.type === 'INTEGRATION_CLEANUP_FAILED' && onIntegrationCleanupFailed) { + onIntegrationCleanupFailed(event.error); + } + }); + return () => sub.unsubscribe(); + }, [ + notificationsService, + onIntegrationCleanup, + onIntegrationCleanupFailed, + onIntegrationCreation, + ]); + + const customIntegrationsStateService = useInterpret( + () => + createCustomIntegrationsStateMachine({ + integrationsClient, + customIntegrationsNotificationsChannel, + initialState, + }), + { devTools: useDevTools } + ); + return customIntegrationsStateService; +}; + +export const [CustomIntegrationsProvider, useCustomIntegrationsContext] = createContainer( + useCustomIntegrationsState +); diff --git a/packages/kbn-custom-integrations/src/state_machines/custom_integrations/selectors.ts b/packages/kbn-custom-integrations/src/state_machines/custom_integrations/selectors.ts new file mode 100644 index 0000000000000..bbe65a650fc29 --- /dev/null +++ b/packages/kbn-custom-integrations/src/state_machines/custom_integrations/selectors.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 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 or the Server + * Side Public License, v 1. + */ + +import { CustomIntegrationsState } from './state_machine'; + +export const createIsInitializedSelector = (state: CustomIntegrationsState) => + state && state.matches({ create: 'initialized' }); diff --git a/packages/kbn-custom-integrations/src/state_machines/custom_integrations/state_machine.ts b/packages/kbn-custom-integrations/src/state_machines/custom_integrations/state_machine.ts new file mode 100644 index 0000000000000..4bd71313bf43a --- /dev/null +++ b/packages/kbn-custom-integrations/src/state_machines/custom_integrations/state_machine.ts @@ -0,0 +1,140 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 or the Server + * Side Public License, v 1. + */ + +import { ActorRefFrom, createMachine, EmittedFrom } from 'xstate'; +import { OmitDeprecatedState } from '@kbn/xstate-utils'; +import { DEFAULT_CONTEXT } from './defaults'; +import { DEFAULT_CONTEXT as DEFAULT_CREATE_CONTEXT } from '../create/defaults'; +import { + CustomIntegrationsContext, + CustomIntegrationsEvent, + CustomIntegrationsTypestate, + DefaultCustomIntegrationsContext, + InitialState, +} from './types'; +import { createCreateCustomIntegrationStateMachine } from '../create/state_machine'; +import { IIntegrationsClient } from '../services/integrations_client'; +import { CustomIntegrationsNotificationChannel } from './notifications'; + +export const createPureCustomIntegrationsStateMachine = ( + initialContext: DefaultCustomIntegrationsContext = DEFAULT_CONTEXT +) => + createMachine( + { + /** @xstate-layout N4IgpgJg5mDOIC5QEkB2AXMUBOBDdAlgPaqwB0ArqgdYbgDYEBekAxANoAMAuoqAA5FYBQiT4gAHogC0ATgBs8sgEYAHAHYALMs7rV85ctkAmADQgAnonWcysgKwHZmgMwPlN1aoC+382kwcfGJSMnoiXAgaKFYIEjAyGgA3IgBrBICsPFFQ8MjohGSiAGNgki5uCvFBYRzxKQRpdQ8yY3tlRTVOF05OTXMrBGUXJXtZVU1J1UMXTWNffwwsstyIqNQYsGxsImwyfnp8ADNdgFsyTKCc8jz1qELUFNKciqqkEBqREPqZHWNjMj2GzGTiqWQuYyuYyqAaIaFKVScZzydT2EY6FwuBYgS7ZEI3NaQRIQehgVgAGQA8gBBAAiAH0ALKUgBKAFF6cgAHIAFTZAHEWdSechKVyAMpvARCL5id4NaTGHqApyyDzKYxaDywhA9VRkMGycGcZSuPSg7G4lYEyJEggksnitnUlkAYQAEpzeQKhSKxZKeNUZXV5TIXOpZGRNA5-prUUigTq2uoyLNOGjFJoI7N5n4cUsrviwoSIMTSaxxayeV6+YLhaKJVKPsHvqHGs1bBrFJj7JN7I4zJZEJolOpjApZoZ5FD9JaC3iSDaIHaHRXnW7Pdza76G+L6eKeezqYyA7x3p8Q6AFSCEUZe2jVD1ZEidUZNGQI2iO7IbA5ZHPAgXVZbVLe1y0rFlqy3H1639fdD2dE8mwvVsrzDMYozRVx7FUTUxiRdQdWkQwAUMbQRkhZ8XCBTQAOWa5ixAxi7kZXYyTiVAEiKdILnna1mKJW5olY7AwAeJ4VleQNzxbOU0IQLN3wotxphsFFDCI2YDXsOM0Q1I1NVovMrQY25BLWYS2NYLYdj2A5jjOXjAP4szSyEjYRLEopnhCKSz2lWpUMkX4TXfdN-lw0E+kUQihwQHD9W6XRsOmEdXDowtFwE0tlwAIyIKhijAcUwFwbBigAC2iEz8TXF0PRrGC-UbaSAtlVAfkaexbAhdRUQmU1+yBLQdTmWx0xwmxPFmeRc0WZzTJLMg8oK1AipKsrKuqvjrlYCRYHQfAElwI5MGwAAKHpOAASlYGqstc5awHywritK8qqo2e7SGQ2SOrbaRpxTVR2jGXDUXBPRRuMZRAX7EH1HkBR1BcU0jPm+ii0elbXo2j7toW-FxXQUTcFOWA6o3Rq62avcDyPJDWubQK5OC+Leg-VHDA8MdXDUeQdQhSNUY7cdmkxTg5vzQmHqWnG1rezbPqgb7YGJ0nyb2g6jrIE6zsu3pbtV7KnpehW8a2r6dqJknSvJ36Wf++Sug-BR2mMeRerBadRv1f4FDVT3wV69Hpcx2X8g2AAxXACFJCBWHZKk6Wpnd-Qd9rOuIzVYemadOBREHoxRpMQdTJEzRBTUwXUXw81QIhl3gd5VaDR2s+GIwDQ6TQC70XsfxcIjoRTMiOg1XCDAjUPjaoGgvgYZhIDbzOAYMsh0xHboNF7Nwh7i4j7FTMYPcfftZhRtEMqApdohXy82eI7pR2jExEb1D3YsGDpbD6xFnH7DoUE4Zr4uRLPfIKCo5gpmjDpf4fVuoOC-r8I0ZADDaFmvoHQyh2hYmMtbCOy5QIOggaza8XhATTFwtMGMIM2g6iRphWayU+4I3sKAxaTF3JQE8qQp2bMXYozcECHsU5lClyPm4I0mh8LdC0FLY22NnqrXWu9S2KsCGkD4VncMsNwxImfkiDQfVBYKDhglac05wQKA4VjOWyjcZqOVqrdWdtm5tQfg0DUAI5jB17moOY44BZxXVK0Bw1EcH6D5v+fBMtgJ3BjnHZeMl24A2wZGHQ4If5omrsg3UiNWh9RjPpaM4467eCAA */ + context: initialContext, + preserveActionOrder: true, + predictableActionArguments: true, + id: 'CustomIntegrations', + initial: 'uninitialized', + states: { + uninitialized: { + always: 'create', + }, + create: { + invoke: [ + { + id: 'createCustomIntegration', + src: 'createCustomIntegration', + }, + ], + on: { + CREATE_INITIALIZED: { + target: '.initialized', + }, + }, + states: { + initialized: { + meta: { + _DX_warning_: + "These inner initialized states on the top level machine exist primarily so that 'connected' components can block the reading of the state of child machines whilst undefined on the first render cycle", + }, + on: { + INTEGRATION_CREATED: { + actions: ['notifyIntegrationCreated'], + }, + INTEGRATION_CLEANUP: { + actions: ['notifyIntegrationCleanup'], + }, + INTEGRATION_CLEANUP_FAILED: { + actions: ['notifyIntegrationCleanupFailed'], + }, + }, + }, + }, + }, + update: { + // NOTE: Placeholder for the future addition of "Add dataset to existing custom integration" + }, + }, + }, + { + actions: {}, + guards: {}, + } + ); + +export interface CustomIntegrationsStateMachineDependencies { + initialContext?: DefaultCustomIntegrationsContext; + integrationsClient: IIntegrationsClient; + customIntegrationsNotificationsChannel: CustomIntegrationsNotificationChannel; + initialState: InitialState; +} + +export const createCustomIntegrationsStateMachine = ({ + initialContext, + integrationsClient, + customIntegrationsNotificationsChannel, + initialState, +}: CustomIntegrationsStateMachineDependencies) => { + return createPureCustomIntegrationsStateMachine(initialContext).withConfig({ + services: { + createCustomIntegration: (context) => { + return createCreateCustomIntegrationStateMachine({ + integrationsClient, + initialContext: + initialState.mode === 'create' + ? { + ...DEFAULT_CREATE_CONTEXT, + ...(initialState?.context ? initialState?.context : {}), + options: { + ...DEFAULT_CREATE_CONTEXT.options, + ...(initialState?.context?.options ? initialState.context.options : {}), + }, + fields: { + ...DEFAULT_CREATE_CONTEXT.fields, + ...(initialState?.context?.fields ? initialState.context.fields : {}), + }, + } + : DEFAULT_CREATE_CONTEXT, + }); + }, + }, + actions: { + notifyIntegrationCreated: customIntegrationsNotificationsChannel.notify((context, event) => { + return event; + }), + notifyIntegrationCleanup: customIntegrationsNotificationsChannel.notify((context, event) => { + return event; + }), + notifyIntegrationCleanupFailed: customIntegrationsNotificationsChannel.notify( + (context, event) => { + return event; + } + ), + }, + }); +}; + +export type CustomIntegrationsStateMachine = ReturnType< + typeof createPureCustomIntegrationsStateMachine +>; +export type CustomIntegrationsActorRef = OmitDeprecatedState< + ActorRefFrom +>; +export type CustomIntegrationsState = EmittedFrom; diff --git a/packages/kbn-custom-integrations/src/state_machines/custom_integrations/types.ts b/packages/kbn-custom-integrations/src/state_machines/custom_integrations/types.ts new file mode 100644 index 0000000000000..6154aa8a14399 --- /dev/null +++ b/packages/kbn-custom-integrations/src/state_machines/custom_integrations/types.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 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 or the Server + * Side Public License, v 1. + */ + +import { CreateCustomIntegrationNotificationEvent } from '../create/notifications'; +import { CreateInitialState } from '../create/types'; + +type ChildInitialStates = Partial; +export type InitialState = { context?: ChildInitialStates } & WithSelectedMode; + +export interface WithSelectedMode { + mode: Mode; +} + +export type Mode = 'create' | 'update'; + +export type DefaultCustomIntegrationsContext = WithSelectedMode; + +export type CustomIntegrationsTypestate = + | { + value: 'uninitialized'; + context: DefaultCustomIntegrationsContext; + } + | { + value: 'create' | { create: 'initialized' }; + context: DefaultCustomIntegrationsContext; + }; + +export type CustomIntegrationsContext = CustomIntegrationsTypestate['context']; + +export type CustomIntegrationsEvent = CreateCustomIntegrationNotificationEvent; diff --git a/packages/kbn-custom-integrations/src/state_machines/index.ts b/packages/kbn-custom-integrations/src/state_machines/index.ts new file mode 100644 index 0000000000000..4f1de9bb58455 --- /dev/null +++ b/packages/kbn-custom-integrations/src/state_machines/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 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 or the Server + * Side Public License, v 1. + */ + +export { CustomIntegrationsProvider } from './custom_integrations/provider'; +export type { Callbacks } from './custom_integrations/provider'; +export type { InitialState } from './custom_integrations/types'; diff --git a/packages/kbn-custom-integrations/src/state_machines/services/integrations_client.ts b/packages/kbn-custom-integrations/src/state_machines/services/integrations_client.ts new file mode 100644 index 0000000000000..c5606a7e2e154 --- /dev/null +++ b/packages/kbn-custom-integrations/src/state_machines/services/integrations_client.ts @@ -0,0 +1,150 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 or the Server + * Side Public License, v 1. + */ + +import { HttpSetup } from '@kbn/core/public'; +import { EPM_API_ROUTES } from '@kbn/fleet-plugin/common'; +import * as rt from 'io-ts'; +import { i18n } from '@kbn/i18n'; +import { decodeOrThrow } from '@kbn/io-ts-utils'; +import { + AuthorizationError, + customIntegrationOptionsRT, + DecodeError, + integrationNameRT, + IntegrationNotInstalledError, + NamingCollisionError, + UnknownError, +} from '../../types'; + +const GENERIC_CREATE_ERROR_MESSAGE = i18n.translate( + 'customIntegrationsPackage.genericCreateError', + { + defaultMessage: 'Unable to create an integration', + } +); + +const GENERIC_DELETE_ERROR_MESSAGE = i18n.translate( + 'customIntegrationsPackage.genericDeleteError', + { + defaultMessage: 'Unable to delete integration', + } +); + +/** + * Constants + */ +const CUSTOM_INTEGRATIONS_URL = EPM_API_ROUTES.CUSTOM_INTEGRATIONS_PATTERN; +const DELETE_PACKAGE_URL = EPM_API_ROUTES.DELETE_PATTERN; + +export interface IIntegrationsClient { + createCustomIntegration( + params?: CreateCustomIntegrationRequestQuery + ): Promise; + deleteCustomIntegration( + params?: DeleteCustomIntegrationRequestQuery + ): Promise; +} + +export class IntegrationsClient implements IIntegrationsClient { + constructor(private readonly http: HttpSetup) {} + + public async createCustomIntegration( + params: CreateCustomIntegrationRequestQuery + ): Promise { + try { + const response = await this.http.post(CUSTOM_INTEGRATIONS_URL, { + version: '2023-10-31', + body: JSON.stringify(params), + }); + + const data = decodeOrThrow( + createCustomIntegrationResponseRT, + (message: string) => + new DecodeError(`Failed to decode create custom integration response: ${message}"`) + )(response); + + return { + integrationName: params.integrationName, + installedAssets: data.items, + }; + } catch (error) { + if (error?.body?.statusCode === 409) { + throw new NamingCollisionError(error.body?.message ?? GENERIC_CREATE_ERROR_MESSAGE); + } else if (error?.body?.statusCode === 403) { + throw new AuthorizationError(error?.body?.message ?? GENERIC_CREATE_ERROR_MESSAGE); + } else if (error instanceof DecodeError) { + throw error; + } else { + throw new UnknownError(error?.body?.message ?? GENERIC_CREATE_ERROR_MESSAGE); + } + } + } + + public async deleteCustomIntegration( + params: DeleteCustomIntegrationRequestQuery + ): Promise { + const { integrationName, version } = params; + try { + await this.http.delete( + DELETE_PACKAGE_URL.replace('{pkgName}', integrationName).replace('{pkgVersion}', version), + { version: '2023-10-31' } + ); + return { + integrationName: params.integrationName, + }; + } catch (error) { + if (error?.body?.message && error.body.message.includes('is not installed')) { + throw new IntegrationNotInstalledError(error.body.message); + } else { + throw new UnknownError(error?.body?.message ?? GENERIC_DELETE_ERROR_MESSAGE); + } + } + } +} + +const assetListRT = rt.array( + rt.type({ + id: rt.string, + type: rt.string, + }) +); + +type AssetList = rt.TypeOf; + +export const createCustomIntegrationRequestQueryRT = customIntegrationOptionsRT; +export type CreateCustomIntegrationRequestQuery = rt.TypeOf< + typeof createCustomIntegrationRequestQueryRT +>; + +export const createCustomIntegrationResponseRT = rt.exact( + rt.type({ + items: assetListRT, + }) +); + +export interface CreateCustomIntegrationValue { + integrationName: string; + installedAssets: AssetList; +} + +export const deleteCustomIntegrationRequestQueryRT = rt.type({ + integrationName: rt.string, + version: rt.string, +}); + +export type DeleteCustomIntegrationRequestQuery = rt.TypeOf< + typeof deleteCustomIntegrationRequestQueryRT +>; + +export const deleteCustomIntegrationResponseRT = rt.exact( + rt.type({ + integrationName: integrationNameRT, + }) +); + +export type DeleteCustomIntegrationResponse = rt.TypeOf; diff --git a/packages/kbn-custom-integrations/src/state_machines/services/validation.ts b/packages/kbn-custom-integrations/src/state_machines/services/validation.ts new file mode 100644 index 0000000000000..3ac325ce3d3a1 --- /dev/null +++ b/packages/kbn-custom-integrations/src/state_machines/services/validation.ts @@ -0,0 +1,99 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 or the Server + * Side Public License, v 1. + */ + +import { isEmpty } from 'lodash'; +import { InvokeCreator } from 'xstate'; +import { IntegrationError } from '../../types'; + +export class FormattingError extends IntegrationError { + constructor(message?: string) { + super(message); + Object.setPrototypeOf(this, new.target.prototype); + } +} + +type Validator = (field: string) => IntegrationError | null; + +interface ValidatorsConfig { + [key: string]: Validator[] | ((arrayField: unknown[]) => IndexedValidationErrors | null); +} + +export interface ValidationErrors { + [key: string]: ValidationResult; +} + +export interface IndexedValidationErrors { + [key: number]: { + [key: string]: IntegrationError[]; + }; +} + +type ValidationResult = IntegrationError[] | IndexedValidationErrors; + +export const initializeValidateFields = + (validatorsConfig: ValidatorsConfig): InvokeCreator => + (context) => { + const errors = validateConfigsAgainstContext(validatorsConfig, context.fields); + if (Object.keys(errors).length > 0) { + return Promise.reject({ errors }); + } else { + return Promise.resolve(); + } + }; + +export const createIsEmptyValidation = (message: string) => (field: unknown) => + isEmpty(field) ? new FormattingError(message) : null; + +export const createIsLowerCaseValidation = (message: string) => (field: string) => + field.toLowerCase() !== field ? new FormattingError(message) : null; + +export const createCharacterLimitValidation = (message: string, limit: number) => (field: string) => + field.length > limit ? new FormattingError(message) : null; + +export const createArrayValidator = (validatorsConfig: ValidatorsConfig) => { + return (arrayField: any[]) => { + const arrayErrors = arrayField.reduce( + (indexedErrors, item, currentIndex) => { + const errorsForField = validateConfigsAgainstContext(validatorsConfig, item); + return { + ...indexedErrors, + ...(Object.keys(errorsForField).length > 0 ? { [currentIndex]: errorsForField } : {}), + } as IndexedValidationErrors; + }, + {} + ); + + return Object.keys(arrayErrors).length > 0 ? arrayErrors : null; + }; +}; + +const validateConfigsAgainstContext = (validatorsConfig: ValidatorsConfig, context: any) => { + const errors = Object.entries(validatorsConfig).reduce( + (validationErrors, validationConfig) => { + const [field, validatorsOrIndexedValidator] = validationConfig; + let errorsForField; + if (Array.isArray(validatorsOrIndexedValidator)) { + errorsForField = validatorsOrIndexedValidator + .map((validator) => validator(context[field])) + .filter((result): result is IntegrationError => result !== null); + } else { + errorsForField = validatorsOrIndexedValidator(context[field]); + } + + return { + ...validationErrors, + ...((Array.isArray(errorsForField) && errorsForField.length > 0) || + (!Array.isArray(errorsForField) && errorsForField !== null) + ? { [field]: errorsForField } + : {}), + }; + }, + {} + ); + return errors; +}; diff --git a/packages/kbn-custom-integrations/src/types.ts b/packages/kbn-custom-integrations/src/types.ts new file mode 100644 index 0000000000000..062601239137a --- /dev/null +++ b/packages/kbn-custom-integrations/src/types.ts @@ -0,0 +1,76 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 or the Server + * Side Public License, v 1. + */ +/* eslint-disable max-classes-per-file */ +import * as rt from 'io-ts'; + +export const integrationNameRT = rt.string; + +const datasetTypes = rt.keyof({ + logs: null, + metrics: null, +}); + +const dataset = rt.exact( + rt.type({ + name: rt.string, + type: datasetTypes, + }) +); + +export type Dataset = rt.TypeOf; + +export const customIntegrationOptionsRT = rt.exact( + rt.type({ + integrationName: integrationNameRT, + datasets: rt.array(dataset), + }) +); + +export type CustomIntegrationOptions = rt.TypeOf; + +export class IntegrationError extends Error { + constructor(message?: string) { + super(message); + Object.setPrototypeOf(this, new.target.prototype); + } +} + +export class NamingCollisionError extends IntegrationError { + constructor(message?: string) { + super(message); + Object.setPrototypeOf(this, new.target.prototype); + } +} + +export class AuthorizationError extends IntegrationError { + constructor(message?: string) { + super(message); + Object.setPrototypeOf(this, new.target.prototype); + } +} + +export class UnknownError extends IntegrationError { + constructor(message?: string) { + super(message); + Object.setPrototypeOf(this, new.target.prototype); + } +} + +export class DecodeError extends IntegrationError { + constructor(message?: string) { + super(message); + Object.setPrototypeOf(this, new.target.prototype); + } +} + +export class IntegrationNotInstalledError extends IntegrationError { + constructor(message?: string) { + super(message); + Object.setPrototypeOf(this, new.target.prototype); + } +} diff --git a/packages/kbn-custom-integrations/tsconfig.json b/packages/kbn-custom-integrations/tsconfig.json new file mode 100644 index 0000000000000..cb57aee9dbeaa --- /dev/null +++ b/packages/kbn-custom-integrations/tsconfig.json @@ -0,0 +1,25 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": [ + "jest", + "node" + ] + }, + "include": [ + "**/*.ts", + "**/*.tsx" + ], + "exclude": [ + "target/**/*", + ], + "kbn_references": [ + "@kbn/core-http-browser", + "@kbn/i18n", + "@kbn/core", + "@kbn/fleet-plugin", + "@kbn/io-ts-utils", + "@kbn/xstate-utils" + ] +} diff --git a/packages/kbn-docs-utils/src/build_api_docs_cli.ts b/packages/kbn-docs-utils/src/build_api_docs_cli.ts index c771ebd743b40..525e47e0997d1 100644 --- a/packages/kbn-docs-utils/src/build_api_docs_cli.ts +++ b/packages/kbn-docs-utils/src/build_api_docs_cli.ts @@ -53,7 +53,7 @@ export function runBuildApiDocsCli() { run( async ({ log, flags }) => { const transaction = apm.startTransaction('build-api-docs', 'kibana-cli'); - const spanSetup = transaction?.startSpan('build_api_docs.setup', 'setup'); + const spanSetup = transaction.startSpan('build_api_docs.setup', 'setup'); const collectReferences = flags.references as boolean; const stats = flags.stats && typeof flags.stats === 'string' ? [flags.stats] : flags.stats; @@ -82,7 +82,7 @@ export function runBuildApiDocsCli() { const outputFolder = Path.resolve(REPO_ROOT, 'api_docs'); spanSetup?.end(); - const spanInitialDocIds = transaction?.startSpan('build_api_docs.initialDocIds', 'setup'); + const spanInitialDocIds = transaction.startSpan('build_api_docs.initialDocIds', 'setup'); const initialDocIds = !pluginFilter && Fs.existsSync(outputFolder) @@ -90,7 +90,7 @@ export function runBuildApiDocsCli() { : undefined; spanInitialDocIds?.end(); - const spanPlugins = transaction?.startSpan('build_api_docs.findPlugins', 'setup'); + const spanPlugins = transaction.startSpan('build_api_docs.findPlugins', 'setup'); const plugins = findPlugins(stats && pluginFilter ? pluginFilter : undefined); @@ -101,16 +101,13 @@ export function runBuildApiDocsCli() { spanPlugins?.end(); - const spanPathsByPackage = transaction?.startSpan( - 'build_api_docs.getPathsByPackage', - 'setup' - ); + const spanPathsByPackage = transaction.startSpan('build_api_docs.getPathsByPackage', 'setup'); const pathsByPlugin = await getPathsByPackage(plugins); spanPathsByPackage?.end(); - const spanProject = transaction?.startSpan('build_api_docs.getTsProject', 'setup'); + const spanProject = transaction.startSpan('build_api_docs.getTsProject', 'setup'); const project = getTsProject( REPO_ROOT, @@ -119,7 +116,7 @@ export function runBuildApiDocsCli() { spanProject?.end(); - const spanFolders = transaction?.startSpan('build_api_docs.check-folders', 'setup'); + const spanFolders = transaction.startSpan('build_api_docs.check-folders', 'setup'); // if the output folder already exists, and we don't have a plugin filter, delete all the files in the output folder if (Fs.existsSync(outputFolder) && !pluginFilter) { @@ -132,7 +129,7 @@ export function runBuildApiDocsCli() { } spanFolders?.end(); - const spanPluginApiMap = transaction?.startSpan('build_api_docs.getPluginApiMap', 'setup'); + const spanPluginApiMap = transaction.startSpan('build_api_docs.getPluginApiMap', 'setup'); const { pluginApiMap, @@ -154,7 +151,7 @@ export function runBuildApiDocsCli() { continue; } - const spanApiStatsForPlugin = transaction?.startSpan( + const spanApiStatsForPlugin = transaction.startSpan( `build_api_docs.collectApiStatsForPlugin-${id}`, 'stats' ); @@ -179,7 +176,7 @@ export function runBuildApiDocsCli() { } if (!stats) { - const spanWritePluginDirectoryDoc = transaction?.startSpan( + const spanWritePluginDirectoryDoc = transaction.startSpan( 'build_api_docs.writePluginDirectoryDoc', 'write' ); @@ -202,7 +199,7 @@ export function runBuildApiDocsCli() { const pluginStats = allPluginStats[id]; const pluginTeam = plugin.manifest.owner.name; - const spanMetrics = transaction?.startSpan( + const spanMetrics = transaction.startSpan( `build_api_docs.collectApiStatsForPlugin-${id}`, 'stats' ); @@ -369,7 +366,7 @@ export function runBuildApiDocsCli() { if (pluginStats.apiCount > 0) { log.info(`Writing public API doc for plugin ${pluginApi.id}.`); - const spanWritePluginDocs = transaction?.startSpan( + const spanWritePluginDocs = transaction.startSpan( 'build_api_docs.writePluginDocs', 'write' ); @@ -381,7 +378,7 @@ export function runBuildApiDocsCli() { log.info(`Plugin ${pluginApi.id} has no public API.`); } - const spanWriteDeprecationDocByPlugin = transaction?.startSpan( + const spanWriteDeprecationDocByPlugin = transaction.startSpan( 'build_api_docs.writeDeprecationDocByPlugin', 'write' ); @@ -390,7 +387,7 @@ export function runBuildApiDocsCli() { spanWriteDeprecationDocByPlugin?.end(); - const spanWriteDeprecationDueByTeam = transaction?.startSpan( + const spanWriteDeprecationDueByTeam = transaction.startSpan( 'build_api_docs.writeDeprecationDueByTeam', 'write' ); @@ -399,7 +396,7 @@ export function runBuildApiDocsCli() { spanWriteDeprecationDueByTeam?.end(); - const spanWriteDeprecationDocByApi = transaction?.startSpan( + const spanWriteDeprecationDocByApi = transaction.startSpan( 'build_api_docs.writeDeprecationDocByApi', 'write' ); @@ -424,7 +421,7 @@ export function runBuildApiDocsCli() { await trimDeletedDocsFromNav(log, initialDocIds, outputFolder); } - transaction?.end(); + transaction.end(); }, { log: { diff --git a/packages/kbn-es/index.ts b/packages/kbn-es/index.ts index 3ccb220be6b52..f64664577695f 100644 --- a/packages/kbn-es/index.ts +++ b/packages/kbn-es/index.ts @@ -14,3 +14,4 @@ export { ELASTIC_SERVERLESS_SUPERUSER_PASSWORD, getDockerFileMountPath, } from './src/utils'; +export type { ArtifactLicense } from './src/artifact'; diff --git a/packages/kbn-es/src/cli_commands/archive.ts b/packages/kbn-es/src/cli_commands/archive.ts index af697975c59ed..075e47356b3dd 100644 --- a/packages/kbn-es/src/cli_commands/archive.ts +++ b/packages/kbn-es/src/cli_commands/archive.ts @@ -59,7 +59,11 @@ export const archive = { throw createCliError('you must provide a path to an ES tar file'); } - const { installPath } = await cluster.installArchive(path, options); + const { installPath } = await cluster.installArchive(path, { + basePath: options.basePath, + installPath: options.installPath, + esArgs: options.esArgs, + }); await cluster.run(installPath, { ...options, readyTimeout: parseTimeoutToMs(options.readyTimeout), diff --git a/packages/kbn-es/src/cli_commands/serverless.ts b/packages/kbn-es/src/cli_commands/serverless.ts index 152ed48abfd76..53f1e1b35ae74 100644 --- a/packages/kbn-es/src/cli_commands/serverless.ts +++ b/packages/kbn-es/src/cli_commands/serverless.ts @@ -11,8 +11,14 @@ import getopts from 'getopts'; import { ToolingLog } from '@kbn/tooling-log'; import { getTimeReporter } from '@kbn/ci-stats-reporter'; -import { Cluster, type ServerlessOptions } from '../cluster'; -import { SERVERLESS_REPO, SERVERLESS_TAG, SERVERLESS_IMG, DEFAULT_PORT } from '../utils'; +import { Cluster } from '../cluster'; +import { + SERVERLESS_REPO, + SERVERLESS_TAG, + SERVERLESS_IMG, + DEFAULT_PORT, + ServerlessOptions, +} from '../utils'; import { Command } from './types'; export const serverless: Command = { diff --git a/packages/kbn-es/src/cli_commands/snapshot.ts b/packages/kbn-es/src/cli_commands/snapshot.ts index 837acc3395e6b..cf8a5149bc892 100644 --- a/packages/kbn-es/src/cli_commands/snapshot.ts +++ b/packages/kbn-es/src/cli_commands/snapshot.ts @@ -73,16 +73,30 @@ export const snapshot: Command = { const cluster = new Cluster({ ssl: options.ssl }); if (options['download-only']) { - await cluster.downloadSnapshot(options); + await cluster.downloadSnapshot({ + version: options.version, + license: options.license, + basePath: options.basePath, + log, + useCached: options.useCached, + }); } else { const installStartTime = Date.now(); - const { installPath } = await cluster.installSnapshot(options); + const { installPath } = await cluster.installSnapshot({ + version: options.version, + license: options.license, + basePath: options.basePath, + log, + useCached: options.useCached, + password: options.password, + esArgs: options.esArgs, + }); if (options.dataArchive) { await cluster.extractDataDirectory(installPath, options.dataArchive); } if (options.plugins) { - await cluster.installPlugins(installPath, options.plugins, options); + await cluster.installPlugins(installPath, options.plugins, options.esJavaOpts); } if (typeof options.secureFiles === 'string' && options.secureFiles) { const pairs = options.secureFiles diff --git a/packages/kbn-es/src/cli_commands/source.ts b/packages/kbn-es/src/cli_commands/source.ts index 19bb59c057ac9..6916c082676c0 100644 --- a/packages/kbn-es/src/cli_commands/source.ts +++ b/packages/kbn-es/src/cli_commands/source.ts @@ -60,13 +60,20 @@ export const source: Command = { }); const cluster = new Cluster({ ssl: options.ssl }); - const { installPath } = await cluster.installSource(options); + const { installPath } = await cluster.installSource({ + sourcePath: options.sourcePath, + license: options.license, + password: options.password, + basePath: options.basePath, + installPath: options.installPath, + esArgs: options.esArgs, + }); if (options.dataArchive) { await cluster.extractDataDirectory(installPath, options.dataArchive); } if (options.plugins) { - await cluster.installPlugins(installPath, options.plugins, options); + await cluster.installPlugins(installPath, options.plugins, options.esJavaOpts); } if (typeof options.secureFiles === 'string' && options.secureFiles) { const pairs = options.secureFiles.split(',').map((kv) => kv.split('=').map((v) => v.trim())); diff --git a/packages/kbn-es/src/cluster.js b/packages/kbn-es/src/cluster.ts similarity index 52% rename from packages/kbn-es/src/cluster.js rename to packages/kbn-es/src/cluster.ts index 084cb9c601578..00cd40875208b 100644 --- a/packages/kbn-es/src/cluster.js +++ b/packages/kbn-es/src/cluster.ts @@ -6,42 +6,49 @@ * Side Public License, v 1. */ -const fs = require('fs'); -const fsp = require('fs/promises'); -const execa = require('execa'); -const chalk = require('chalk'); -const path = require('path'); -const Rx = require('rxjs'); -const { Client } = require('@elastic/elasticsearch'); -const { downloadSnapshot, installSnapshot, installSource, installArchive } = require('./install'); -const { ES_BIN, ES_PLUGIN_BIN, ES_KEYSTORE_BIN } = require('./paths'); -const { +import fs from 'fs'; +import fsp from 'fs/promises'; +import chalk from 'chalk'; +import * as path from 'path'; +import execa from 'execa'; +import { Readable } from 'stream'; +import Rx from 'rxjs'; +import { Client } from '@elastic/elasticsearch'; +import { promisify } from 'util'; +import { CA_CERT_PATH, ES_NOPASSWORD_P12_PATH, extract } from '@kbn/dev-utils'; +import { ToolingLog } from '@kbn/tooling-log'; +import treeKill from 'tree-kill'; +import { downloadSnapshot, installSnapshot, installSource, installArchive } from './install'; +import { ES_BIN, ES_PLUGIN_BIN, ES_KEYSTORE_BIN } from './paths'; +import { + DockerOptions, extractConfigFiles, - log: defaultLog, + log as defaultLog, NativeRealm, parseEsLog, - parseTimeoutToMs, runDockerContainer, runServerlessCluster, + ServerlessOptions, stopServerlessCluster, teardownServerlessClusterSync, -} = require('./utils'); -const { createCliError } = require('./errors'); -const { promisify } = require('util'); -const treeKillAsync = promisify(require('tree-kill')); -const { parseSettings, SettingsFilter } = require('./settings'); -const { CA_CERT_PATH, ES_NOPASSWORD_P12_PATH, extract } = require('@kbn/dev-utils'); - -const DEFAULT_READY_TIMEOUT = parseTimeoutToMs('1m'); - -/** @typedef {import('./cluster_exec_options').EsClusterExecOptions} ExecOptions */ -/** @typedef {import('./utils').DockerOptions} DockerOptions */ -/** @typedef {import('./utils').ServerlessOptions}ServerlessOptions */ +} from './utils'; +import { createCliError } from './errors'; +const treeKillAsync = promisify(treeKill); +import { parseSettings, SettingsFilter } from './settings'; +import { EsClusterExecOptions } from './cluster_exec_options'; +import { + DownloadSnapshotOptions, + InstallArchiveOptions, + InstallSnapshotOptions, + InstallSourceOptions, +} from './install/types'; + +const DEFAULT_READY_TIMEOUT = 60 * 1000; // listen to data on stream until map returns anything but undefined -const first = (stream, map) => +const first = (stream: Readable, map: (data: Buffer) => string | true | undefined) => new Promise((resolve) => { - const onData = (data) => { + const onData = (data: any) => { const result = map(data); if (result !== undefined) { resolve(result); @@ -51,61 +58,66 @@ const first = (stream, map) => stream.on('data', onData); }); -exports.Cluster = class Cluster { +interface StopOptions { + gracefully: boolean; +} +export class Cluster { + private log: ToolingLog; + private ssl: boolean; + private stopCalled: boolean; + private process: execa.ExecaChildProcess | null; + private outcome: Promise | null; + private serverlessNodes: string[]; + private setupPromise: Promise | null; + private stdioTarget: NodeJS.WritableStream | null; + constructor({ log = defaultLog, ssl = false } = {}) { - this._log = log.withType('@kbn/es Cluster'); - this._ssl = ssl; + this.log = log.withType('@kbn/es Cluster'); + this.ssl = ssl; + this.stopCalled = false; + // Serverless Elasticsearch node names, started via Docker + this.serverlessNodes = []; + // properties used exclusively for the locally started Elasticsearch cluster + this.process = null; + this.outcome = null; + this.setupPromise = null; + this.stdioTarget = null; } /** * Builds and installs ES from source - * - * @param {Object} options - * @property {Array} options.installPath - * @property {Array} options.sourcePath - * @returns {Promise<{installPath}>} */ - async installSource(options = {}) { - this._log.info(chalk.bold('Installing from source')); - return await this._log.indent(4, async () => { - const { installPath } = await installSource({ log: this._log, ...options }); + async installSource(options: InstallSourceOptions) { + this.log.info(chalk.bold('Installing from source')); + return await this.log.indent(4, async () => { + const { installPath } = await installSource({ log: this.log, ...options }); return { installPath }; }); } /** * Download ES from a snapshot - * - * @param {Object} options - * @property {Array} options.installPath - * @property {Array} options.sourcePath - * @returns {Promise<{installPath}>} */ - async downloadSnapshot(options = {}) { - this._log.info(chalk.bold('Downloading snapshot')); - return await this._log.indent(4, async () => { - const { installPath } = await downloadSnapshot({ - log: this._log, + async downloadSnapshot(options: DownloadSnapshotOptions) { + this.log.info(chalk.bold('Downloading snapshot')); + return await this.log.indent(4, async () => { + const { downloadPath } = await downloadSnapshot({ + log: this.log, ...options, }); - return { installPath }; + return { downloadPath }; }); } /** * Download and installs ES from a snapshot - * - * @param {Object} options - * @property {Array} options.installPath - * @property {Array} options.sourcePath - * @returns {Promise<{installPath}>} */ - async installSnapshot(options = {}) { - this._log.info(chalk.bold('Installing from snapshot')); - return await this._log.indent(4, async () => { + async installSnapshot(options: InstallSnapshotOptions) { + this.log.info(chalk.bold('Installing from snapshot')); + return await this.log.indent(4, async () => { const { installPath } = await installSnapshot({ - log: this._log, + log: this.log, ...options, }); @@ -115,18 +127,13 @@ exports.Cluster = class Cluster { /** * Installs ES from a local tar - * - * @param {String} path - * @param {Object} options - * @property {Array} options.installPath - * @returns {Promise<{installPath}>} */ - async installArchive(path, options = {}) { - this._log.info(chalk.bold('Installing from an archive')); - return await this._log.indent(4, async () => { - const { installPath } = await installArchive(path, { - log: this._log, - ...options, + async installArchive(archivePath: string, options?: InstallArchiveOptions) { + this.log.info(chalk.bold('Installing from an archive')); + return await this.log.indent(4, async () => { + const { installPath } = await installArchive(archivePath, { + log: this.log, + ...(options || {}), }); return { installPath }; @@ -134,21 +141,16 @@ exports.Cluster = class Cluster { } /** - * Unpacks a tar or zip file containing the data directory for an - * ES cluster. - * - * @param {String} installPath - * @param {String} archivePath - * @param {String} [extractDirName] + * Unpacks a tar or zip file containing the data directory for an ES cluster. */ - async extractDataDirectory(installPath, archivePath, extractDirName = 'data') { - this._log.info(chalk.bold(`Extracting data directory`)); - await this._log.indent(4, async () => { + async extractDataDirectory(installPath: string, archivePath: string, extractDirName = 'data') { + this.log.info(chalk.bold(`Extracting data directory`)); + await this.log.indent(4, async () => { // stripComponents=1 excludes the root directory as that is how our archives are // structured. This works in our favor as we can explicitly extract into the data dir const extractPath = path.resolve(installPath, extractDirName); - this._log.info(`Data archive: ${archivePath}`); - this._log.info(`Extract path: ${extractPath}`); + this.log.info(`Data archive: ${archivePath}`); + this.log.info(`Extract path: ${extractPath}`); await extract({ archivePath, @@ -159,30 +161,28 @@ exports.Cluster = class Cluster { } /** - * Starts ES and returns resolved promise once started - * - * @param {String} installPath - * @param {String} plugins - comma separated list of plugins to install - * @param {Object} options - * @returns {Promise} + * Installs comma separated list of ES plugins to the specified path */ - async installPlugins(installPath, plugins, options) { - const esJavaOpts = this.javaOptions(options); + async installPlugins(installPath: string, plugins: string, esJavaOpts?: string) { + const javaOpts = this.getJavaOptions(esJavaOpts); for (const plugin of plugins.split(',')) { await execa(ES_PLUGIN_BIN, ['install', plugin.trim()], { cwd: installPath, env: { JAVA_HOME: '', // By default, we want to always unset JAVA_HOME so that the bundled JDK will be used - ES_JAVA_OPTS: esJavaOpts.trim(), + ES_JAVA_OPTS: javaOpts, }, }); } } - async configureKeystoreWithSecureSettingsFiles(installPath, secureSettingsFiles) { + async configureKeystoreWithSecureSettingsFiles( + installPath: string, + secureSettingsFiles: string[][] + ) { const env = { JAVA_HOME: '' }; for (const [secureSettingName, secureSettingFile] of secureSettingsFiles) { - this._log.info( + this.log.info( `setting secure setting %s to %s`, chalk.bold(secureSettingName), chalk.bold(secureSettingFile) @@ -196,49 +196,45 @@ exports.Cluster = class Cluster { /** * Starts ES and returns resolved promise once started - * - * @param {String} installPath - * @param {ExecOptions} options - * @returns {Promise} */ - async start(installPath, options = {}) { - // _exec indents and we wait for our own end condition, so reset the indent level to it's current state after we're done waiting - await this._log.indent(0, async () => { - this._exec(installPath, options); + async start(installPath: string, options: EsClusterExecOptions) { + // `exec` indents and we wait for our own end condition, so reset the indent level to it's current state after we're done waiting + await this.log.indent(0, async () => { + this.exec(installPath, options); await Promise.race([ // wait for native realm to be setup and es to be started Promise.all([ - first(this._process.stdout, (data) => { - if (/started/.test(data)) { + first(this.process?.stdout!, (data: Buffer) => { + if (/started/.test(data.toString('utf-8'))) { return true; } }), - this._setupPromise, + this.setupPromise, ]), // await the outcome of the process in case it exits before starting - this._outcome.then(() => { + this.outcome?.then(() => { throw createCliError('ES exited without starting'); }), ]); }); if (options.onEarlyExit) { - this._outcome - .then( + this.outcome + ?.then( () => { - if (!this._stopCalled) { + if (!this.stopCalled && options.onEarlyExit) { options.onEarlyExit(`ES exitted unexpectedly`); } }, - (error) => { - if (!this._stopCalled) { + (error: Error) => { + if (!this.stopCalled && options.onEarlyExit) { options.onEarlyExit(`ES exitted unexpectedly: ${error.stack}`); } } ) - .catch((error) => { + .catch((error: Error) => { throw new Error(`failure handling early exit: ${error.stack}`); }); } @@ -246,85 +242,75 @@ exports.Cluster = class Cluster { /** * Starts Elasticsearch and waits for Elasticsearch to exit - * - * @param {String} installPath - * @param {ExecOptions} options - * @returns {Promise} */ - async run(installPath, options = {}) { - // _exec indents and we wait for our own end condition, so reset the indent level to it's current state after we're done waiting - await this._log.indent(0, async () => { - this._exec(installPath, options); + async run(installPath: string, options: EsClusterExecOptions) { + // `exec` indents and we wait for our own end condition, so reset the indent level to it's current state after we're done waiting + await this.log.indent(0, async () => { + this.exec(installPath, options); // log native realm setup errors so they aren't uncaught - this._setupPromise.catch((error) => { - this._log.error(error); + this.setupPromise?.catch((error: Error) => { + this.log.error(error); this.stop(); }); // await the final outcome of the process - await this._outcome; + await this.outcome; }); } /** - * Stops ES process, if it's running - * - * @returns {Promise} + * Stops cluster */ - async stop() { - if (this._stopCalled) { + private async stopCluster(options: StopOptions) { + if (this.stopCalled) { return; } - this._stopCalled = true; + this.stopCalled = true; - if (this._serverlessNodes?.length) { - return await stopServerlessCluster(this._log, this._serverlessNodes); + // Stop ES docker containers + if (this.serverlessNodes.length) { + return await stopServerlessCluster(this.log, this.serverlessNodes); } - if (!this._process || !this._outcome) { + // Stop local ES process + if (!this.process || !this.outcome) { throw new Error('ES has not been started'); } - await treeKillAsync(this._process.pid); + const pid = this.process.pid; - await this._outcome; + if (pid) { + await treeKillAsync(pid, options.gracefully ? 'SIGTERM' : 'SIGKILL'); + } else { + throw Error(`ES process pid is not defined, can't stop it`); + } + + await this.outcome; } /** - * Stops ES process, it it's running, without waiting for it to shutdown gracefully + * Stops ES process, if it's running */ - async kill() { - if (this._stopCalled) { - return; - } - - this._stopCalled; - - if (this._serverlessNodes?.length) { - return await stopServerlessCluster(this._log, this._serverlessNodes); - } - - if (!this._process || !this._outcome) { - throw new Error('ES has not been started'); - } + async stop() { + await this.stopCluster({ gracefully: true }); + } - await treeKillAsync(this._process.pid, 'SIGKILL'); - await this._outcome; + /** + * Stops ES process without waiting for it to shutdown gracefully + */ + async kill() { + await this.stopCluster({ gracefully: false }); } /** * Common logic from this.start() and this.run() * - * Start the elasticsearch process (stored at `this._process`) - * and "pipe" its stdio to `this._log`. Also create `this._outcome` + * Start the Elasticsearch process (stored at `this.process`) + * and "pipe" its stdio to `this.log`. Also create `this.outcome` * which will be resolved/rejected when the process exits. - * - * @private - * @param {String} installPath - * @param {ExecOptions} opts */ - _exec(installPath, opts = {}) { + private exec(installPath: string, opts: EsClusterExecOptions) { const { skipNativeRealmSetup = false, reportTime = () => {}, @@ -335,24 +321,21 @@ exports.Cluster = class Cluster { ...options } = opts; - if (this._process || this._outcome) { + if (this.process || this.outcome) { throw new Error('ES has already been started'); } - /** @type {NodeJS.WritableStream | undefined} */ - let stdioTarget; - if (writeLogsToPath) { - stdioTarget = fs.createWriteStream(writeLogsToPath, 'utf8'); - this._log.info( + this.stdioTarget = fs.createWriteStream(writeLogsToPath, 'utf8'); + this.log.info( chalk.bold('Starting'), - `and writing logs to ${path.relative(process.cwd(), writeLogsToPath)}` + `and writing logs to ${path.resolve(process.cwd(), writeLogsToPath)}` ); } else { - this._log.info(chalk.bold('Starting')); + this.log.info(chalk.bold('Starting')); } - this._log.indent(4); + this.log.indent(4); const esArgs = new Map([ ['action.destructive_requires_name', 'true'], @@ -362,13 +345,18 @@ exports.Cluster = class Cluster { ]); // options.esArgs overrides the default esArg values - for (const arg of [].concat(options.esArgs || [])) { + const _esArgs = options.esArgs + ? Array.isArray(options.esArgs) + ? options.esArgs + : [options.esArgs] + : []; + for (const arg of _esArgs) { const [key, ...value] = arg.split('='); esArgs.set(key.trim(), value.join('=').trim()); } // Add to esArgs if ssl is enabled - if (this._ssl) { + if (this.ssl) { esArgs.set('xpack.security.http.ssl.enabled', 'true'); // Include default keystore settings only if ssl isn't disabled by esArgs and keystore isn't configured. if (!esArgs.get('xpack.security.http.ssl.keystore.path')) { @@ -383,22 +371,23 @@ exports.Cluster = class Cluster { extractConfigFiles( Array.from(esArgs).map((e) => e.join('=')), installPath, - { log: this._log } + { log: this.log } ), { filter: SettingsFilter.NonSecureOnly, } ).reduce( - (acc, [settingName, settingValue]) => acc.concat(['-E', `${settingName}=${settingValue}`]), + (acc: string[], [settingName, settingValue]) => + acc.concat(['-E', `${settingName}=${settingValue}`]), [] ); - this._log.info('%s %s', ES_BIN, args.join(' ')); - const esJavaOpts = this.javaOptions(options); + this.log.info('%s %s', ES_BIN, args.join(' ')); + const esJavaOpts = this.getJavaOptions(options.esJavaOpts); - this._log.info('ES_JAVA_OPTS: %s', esJavaOpts); + this.log.info('ES_JAVA_OPTS: %s', esJavaOpts); - this._process = execa(ES_BIN, args, { + this.process = execa(ES_BIN, args, { cwd: installPath, env: { ...(installPath ? { ES_TMPDIR: path.resolve(installPath, 'ES_TMPDIR') } : {}), @@ -409,9 +398,9 @@ exports.Cluster = class Cluster { stdio: ['ignore', 'pipe', 'pipe'], }); - this._setupPromise = Promise.all([ + this.setupPromise = Promise.all([ // parse log output to find http port - first(this._process.stdout, (data) => { + first(this.process.stdout!, (data: Buffer) => { const match = data.toString('utf8').match(/HttpServer.+publish_address {[0-9.]+:([0-9]+)/); if (match) { @@ -420,13 +409,13 @@ exports.Cluster = class Cluster { }), // load the CA cert from disk if necessary - this._ssl ? fsp.readFile(CA_CERT_PATH) : null, + this.ssl ? fsp.readFile(CA_CERT_PATH) : null, ]).then(async ([port, caCert]) => { const client = new Client({ node: `${caCert ? 'https:' : 'http:'}//localhost:${port}`, auth: { username: 'elastic', - password: options.password, + password: options.password!, }, tls: caCert ? { @@ -437,13 +426,13 @@ exports.Cluster = class Cluster { }); if (!skipReadyCheck) { - await this._waitForClusterReady(client, readyTimeout); + await this.waitForClusterReady(client, readyTimeout); } // once the cluster is ready setup the native realm if (!skipNativeRealmSetup) { const nativeRealm = new NativeRealm({ - log: this._log, + log: this.log, elasticPassword: options.password, client, }); @@ -451,12 +440,12 @@ exports.Cluster = class Cluster { await nativeRealm.setPasswords(options); } - this._log.success('kbn/es setup complete'); + this.log.success('kbn/es setup complete'); }); let reportSent = false; // parse and forward es stdout to the log - this._process.stdout.on('data', (data) => { + this.process.stdout!.on('data', (data) => { const chunk = data.toString(); const lines = parseEsLog(chunk); lines.forEach((line) => { @@ -467,40 +456,40 @@ exports.Cluster = class Cluster { }); } - if (stdioTarget) { - stdioTarget.write(chunk); + if (this.stdioTarget) { + this.stdioTarget.write(chunk); } else { - this._log.info(line.formattedMessage); + this.log.info(line.formattedMessage); } }); }); // forward es stderr to the log - this._process.stderr.on('data', (data) => { + this.process.stderr!.on('data', (data) => { const chunk = data.toString(); - if (stdioTarget) { - stdioTarget.write(chunk); + if (this.stdioTarget) { + this.stdioTarget.write(chunk); } else { - this._log.error(chalk.red(chunk.trim())); + this.log.error(chalk.red(chunk.trim())); } }); // close the stdio target if we have one defined - if (stdioTarget) { + if (this.stdioTarget) { Rx.combineLatest([ - Rx.fromEvent(this._process.stderr, 'end'), - Rx.fromEvent(this._process.stdout, 'end'), + Rx.fromEvent(this.process.stderr!, 'end'), + Rx.fromEvent(this.process.stdout!, 'end'), ]) .pipe(Rx.first()) .subscribe(() => { - stdioTarget.end(); + this.stdioTarget?.end(); }); } - // observe the exit code of the process and reflect in _outcome promises - const exitCode = new Promise((resolve) => this._process.once('exit', resolve)); - this._outcome = exitCode.then((code) => { - if (this._stopCalled) { + // observe the exit code of the process and reflect in `this.outcome` promises + const exitCode: Promise = new Promise((resolve) => this.process?.once('exit', resolve)); + this.outcome = exitCode.then((code) => { + if (this.stopCalled) { return; } @@ -520,11 +509,11 @@ exports.Cluster = class Cluster { }); } - async _waitForClusterReady(client, readyTimeout = DEFAULT_READY_TIMEOUT) { + async waitForClusterReady(client: Client, readyTimeout = DEFAULT_READY_TIMEOUT) { let attempt = 0; const start = Date.now(); - this._log.info('waiting for ES cluster to report a yellow or green status'); + this.log.info('waiting for ES cluster to report a yellow or green status'); while (true) { attempt += 1; @@ -545,10 +534,10 @@ exports.Cluster = class Cluster { if (error.message.startsWith('not ready,')) { if (timeSinceStart > 10_000) { - this._log.warning(error.message); + this.log.warning(error.message); } } else { - this._log.warning( + this.log.warning( `waiting for ES cluster to come online, attempt ${attempt} failed with: ${error.message}` ); } @@ -559,9 +548,8 @@ exports.Cluster = class Cluster { } } - javaOptions(options) { - let esJavaOpts = `${options.esJavaOpts || ''} ${process.env.ES_JAVA_OPTS || ''}`; - + private getJavaOptions(opts: string | undefined) { + let esJavaOpts = `${opts || ''} ${process.env.ES_JAVA_OPTS || ''}`; // ES now automatically sets heap size to 50% of the machine's available memory // so we need to set it to a smaller size for local dev and CI // especially because we currently run many instances of ES on the same machine during CI @@ -574,36 +562,38 @@ exports.Cluster = class Cluster { } /** - * Run an Elasticsearch Serverless Docker cluster - * - * @param {ServerlessOptions} options + * Runs an Elasticsearch Serverless Docker cluster and returns node names */ - async runServerless(options = {}) { - if (this._process || this._outcome) { - throw new Error('ES has already been started'); + async runServerless(options: ServerlessOptions) { + if (this.process || this.outcome) { + throw new Error('ES stateful cluster has already been started'); } - this._serverlessNodes = await runServerlessCluster(this._log, options); + if (this.serverlessNodes.length > 0) { + throw new Error('ES serverless docker cluster has already been started'); + } + + this.serverlessNodes = await runServerlessCluster(this.log, options); if (options.teardown) { /** * Ideally would be async and an event like beforeExit or SIGINT, * but those events are not being triggered in FTR child process. */ - process.on('exit', () => teardownServerlessClusterSync(this._log, options)); + process.on('exit', () => teardownServerlessClusterSync(this.log, options)); } + + return this.serverlessNodes; } /** * Run an Elasticsearch Docker container - * - * @param {DockerOptions} options */ - async runDocker(options = {}) { - if (this._process || this._outcome) { - throw new Error('ES has already been started'); + async runDocker(options: DockerOptions) { + if (this.process || this.outcome) { + throw new Error('ES stateful cluster has already been started'); } - this._process = await runDockerContainer(this._log, options); + await runDockerContainer(this.log, options); } -}; +} diff --git a/packages/kbn-es/src/install/install_archive.ts b/packages/kbn-es/src/install/install_archive.ts index 9ccf00e09cf85..352b0fe6007db 100644 --- a/packages/kbn-es/src/install/install_archive.ts +++ b/packages/kbn-es/src/install/install_archive.ts @@ -19,15 +19,7 @@ import { BASE_PATH, ES_CONFIG, ES_KEYSTORE_BIN } from '../paths'; import { Artifact } from '../artifact'; import { parseSettings, SettingsFilter } from '../settings'; import { log as defaultLog } from '../utils/log'; - -interface InstallArchiveOptions { - license?: string; - password?: string; - basePath?: string; - installPath?: string; - log?: ToolingLog; - esArgs?: string[]; -} +import { InstallArchiveOptions } from './types'; const isHttpUrl = (str: string) => { try { @@ -40,7 +32,7 @@ const isHttpUrl = (str: string) => { /** * Extracts an ES archive and optionally installs plugins */ -export async function installArchive(archive: string, options: InstallArchiveOptions = {}) { +export async function installArchive(archive: string, options?: InstallArchiveOptions) { const { license = 'basic', password = 'changeme', @@ -48,7 +40,7 @@ export async function installArchive(archive: string, options: InstallArchiveOpt installPath = path.resolve(basePath, path.basename(archive, '.tar.gz')), log = defaultLog, esArgs = [], - } = options; + } = options || {}; let dest = archive; if (isHttpUrl(archive)) { diff --git a/packages/kbn-es/src/install/install_snapshot.ts b/packages/kbn-es/src/install/install_snapshot.ts index 1ab0facfd2601..e4a7fbd678f78 100644 --- a/packages/kbn-es/src/install/install_snapshot.ts +++ b/packages/kbn-es/src/install/install_snapshot.ts @@ -7,23 +7,13 @@ */ import path from 'path'; - import chalk from 'chalk'; -import { ToolingLog } from '@kbn/tooling-log'; import { BASE_PATH } from '../paths'; import { installArchive } from './install_archive'; import { log as defaultLog } from '../utils/log'; -import { Artifact, ArtifactLicense } from '../artifact'; - -interface DownloadSnapshotOptions { - version: string; - license?: ArtifactLicense; - basePath?: string; - installPath?: string; - log?: ToolingLog; - useCached?: boolean; -} +import { Artifact } from '../artifact'; +import { DownloadSnapshotOptions, InstallSnapshotOptions } from './types'; /** * Download an ES snapshot @@ -49,11 +39,6 @@ export async function downloadSnapshot({ }; } -interface InstallSnapshotOptions extends DownloadSnapshotOptions { - password?: string; - esArgs?: string[]; -} - /** * Installs ES from snapshot */ diff --git a/packages/kbn-es/src/install/install_source.ts b/packages/kbn-es/src/install/install_source.ts index 27b2fba7cf635..b3fca2b2ac046 100644 --- a/packages/kbn-es/src/install/install_source.ts +++ b/packages/kbn-es/src/install/install_source.ts @@ -20,16 +20,7 @@ import { log as defaultLog } from '../utils/log'; import { cache } from '../utils/cache'; import { buildSnapshot, archiveForPlatform } from '../utils/build_snapshot'; import { BASE_PATH } from '../paths'; - -interface InstallSourceOptions { - sourcePath: string; - license?: string; - password?: string; - basePath?: string; - installPath?: string; - log?: ToolingLog; - esArgs?: string[]; -} +import { InstallSourceOptions } from './types'; /** * Installs ES from source diff --git a/packages/kbn-es/src/install/types.ts b/packages/kbn-es/src/install/types.ts new file mode 100644 index 0000000000000..e4b750c0ec472 --- /dev/null +++ b/packages/kbn-es/src/install/types.ts @@ -0,0 +1,43 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 or the Server + * Side Public License, v 1. + */ + +import { ToolingLog } from '@kbn/tooling-log'; +import type { ArtifactLicense } from '../artifact'; + +export interface InstallSourceOptions { + sourcePath: string; + license?: ArtifactLicense; + password?: string; + basePath?: string; + installPath?: string; + log?: ToolingLog; + esArgs?: string[]; +} + +export interface DownloadSnapshotOptions { + version: string; + license?: ArtifactLicense; + basePath?: string; + installPath?: string; + log?: ToolingLog; + useCached?: boolean; +} + +export interface InstallSnapshotOptions extends DownloadSnapshotOptions { + password?: string; + esArgs?: string[]; +} + +export interface InstallArchiveOptions { + license?: ArtifactLicense; + password?: string; + basePath?: string; + installPath?: string; + log?: ToolingLog; + esArgs?: string[]; +} diff --git a/packages/kbn-es/src/integration_tests/cluster.test.js b/packages/kbn-es/src/integration_tests/cluster.test.js deleted file mode 100644 index 9f62e0c46a018..0000000000000 --- a/packages/kbn-es/src/integration_tests/cluster.test.js +++ /dev/null @@ -1,490 +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 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 or the Server - * Side Public License, v 1. - */ - -const { ES_NOPASSWORD_P12_PATH } = require('@kbn/dev-utils'); -const { ToolingLog, ToolingLogCollectingWriter } = require('@kbn/tooling-log'); -const { createAnyInstanceSerializer, createStripAnsiSerializer } = require('@kbn/jest-serializers'); -const execa = require('execa'); -const { Cluster } = require('../cluster'); -const { installSource, installSnapshot, installArchive } = require('../install'); -const { extractConfigFiles } = require('../utils/extract_config_files'); - -expect.addSnapshotSerializer(createAnyInstanceSerializer(ToolingLog)); -expect.addSnapshotSerializer(createStripAnsiSerializer()); - -jest.mock('../install', () => ({ - installSource: jest.fn(), - installSnapshot: jest.fn(), - installArchive: jest.fn(), -})); - -jest.mock('execa', () => jest.fn()); -jest.mock('../utils/extract_config_files', () => ({ - extractConfigFiles: jest.fn(), -})); - -const log = new ToolingLog(); -const logWriter = new ToolingLogCollectingWriter(); -log.setWriters([logWriter]); - -function sleep(ms) { - return new Promise((resolve) => setTimeout(resolve, ms)); -} - -async function ensureNoResolve(promise) { - await Promise.race([ - sleep(100), - promise.then(() => { - throw new Error('promise was not supposed to resolve'); - }), - ]); -} - -async function ensureResolve(promise) { - return await Promise.race([ - promise, - sleep(100).then(() => { - throw new Error('promise was supposed to resolve with installSource() resolution'); - }), - ]); -} - -function mockEsBin({ exitCode, start }) { - execa.mockImplementationOnce((cmd, args, options) => - jest.requireActual('execa')( - process.execPath, - [ - '--require=@kbn/babel-register/install', - require.resolve('./__fixtures__/es_bin.js'), - JSON.stringify({ - exitCode, - start, - ssl: args.includes('xpack.security.http.ssl.enabled=true'), - }), - ], - options - ) - ); -} - -const initialEnv = { ...process.env }; - -beforeEach(() => { - jest.resetAllMocks(); - extractConfigFiles.mockImplementation((config) => config); - log.indent(-log.getIndent()); - logWriter.messages.length = 0; -}); - -afterEach(() => { - process.env = { ...initialEnv }; -}); - -describe('#installSource()', () => { - it('awaits installSource() promise and returns { installPath }', async () => { - let resolveInstallSource; - installSource.mockImplementationOnce( - () => - new Promise((resolve) => { - resolveInstallSource = () => { - resolve({ installPath: 'foo' }); - }; - }) - ); - - const cluster = new Cluster({ log }); - const promise = cluster.installSource(); - await ensureNoResolve(promise); - resolveInstallSource(); - await expect(ensureResolve(promise)).resolves.toEqual({ - installPath: 'foo', - }); - }); - - it('passes through all options+log to installSource()', async () => { - installSource.mockResolvedValue({}); - const cluster = new Cluster({ log }); - await cluster.installSource({ foo: 'bar' }); - expect(installSource.mock.calls).toMatchInlineSnapshot(` - Array [ - Array [ - Object { - "foo": "bar", - "log": , - }, - ], - ] - `); - expect(logWriter.messages).toMatchInlineSnapshot(` - Array [ - " info source[@kbn/es Cluster] Installing from source", - ] - `); - }); - - it('rejects if installSource() rejects', async () => { - installSource.mockRejectedValue(new Error('foo')); - const cluster = new Cluster({ log }); - await expect(cluster.installSource()).rejects.toThrowError('foo'); - }); -}); - -describe('#installSnapshot()', () => { - it('awaits installSnapshot() promise and returns { installPath }', async () => { - let resolveInstallSnapshot; - installSnapshot.mockImplementationOnce( - () => - new Promise((resolve) => { - resolveInstallSnapshot = () => { - resolve({ installPath: 'foo' }); - }; - }) - ); - - const cluster = new Cluster({ log }); - const promise = cluster.installSnapshot(); - await ensureNoResolve(promise); - resolveInstallSnapshot(); - await expect(ensureResolve(promise)).resolves.toEqual({ - installPath: 'foo', - }); - }); - - it('passes through all options+log to installSnapshot()', async () => { - installSnapshot.mockResolvedValue({}); - const cluster = new Cluster({ log }); - await cluster.installSnapshot({ foo: 'bar' }); - expect(installSnapshot.mock.calls).toMatchInlineSnapshot(` - Array [ - Array [ - Object { - "foo": "bar", - "log": , - }, - ], - ] - `); - expect(logWriter.messages).toMatchInlineSnapshot(` - Array [ - " info source[@kbn/es Cluster] Installing from snapshot", - ] - `); - }); - - it('rejects if installSnapshot() rejects', async () => { - installSnapshot.mockRejectedValue(new Error('foo')); - const cluster = new Cluster({ log }); - await expect(cluster.installSnapshot()).rejects.toThrowError('foo'); - }); -}); - -describe('#installArchive(path)', () => { - it('awaits installArchive() promise and returns { installPath }', async () => { - let resolveInstallArchive; - installArchive.mockImplementationOnce( - () => - new Promise((resolve) => { - resolveInstallArchive = () => { - resolve({ installPath: 'foo' }); - }; - }) - ); - - const cluster = new Cluster({ log }); - const promise = cluster.installArchive(); - await ensureNoResolve(promise); - resolveInstallArchive(); - await expect(ensureResolve(promise)).resolves.toEqual({ - installPath: 'foo', - }); - }); - - it('passes through path and all options+log to installArchive()', async () => { - installArchive.mockResolvedValue({}); - const cluster = new Cluster({ log }); - await cluster.installArchive('path', { foo: 'bar' }); - expect(installArchive.mock.calls).toMatchInlineSnapshot(` - Array [ - Array [ - "path", - Object { - "foo": "bar", - "log": , - }, - ], - ] - `); - expect(logWriter.messages).toMatchInlineSnapshot(` - Array [ - " info source[@kbn/es Cluster] Installing from an archive", - ] - `); - }); - - it('rejects if installArchive() rejects', async () => { - installArchive.mockRejectedValue(new Error('foo')); - const cluster = new Cluster({ log }); - await expect(cluster.installArchive()).rejects.toThrowError('foo'); - }); -}); - -describe('#start(installPath)', () => { - it('rejects when bin/elasticsearch exists with 0 before starting', async () => { - mockEsBin({ exitCode: 0, start: false }); - - await expect(new Cluster({ log }).start()).rejects.toThrowError('ES exited without starting'); - }); - - it('rejects when bin/elasticsearch exists with 143 before starting', async () => { - mockEsBin({ exitCode: 143, start: false }); - - await expect(new Cluster({ log }).start()).rejects.toThrowError('ES exited without starting'); - }); - - it('rejects when bin/elasticsearch exists with 130 before starting', async () => { - mockEsBin({ exitCode: 130, start: false }); - - await expect(new Cluster({ log }).start()).rejects.toThrowError('ES exited without starting'); - }); - - it('rejects when bin/elasticsearch exists with 1 before starting', async () => { - mockEsBin({ exitCode: 1, start: false }); - - await expect(new Cluster({ log }).start()).rejects.toThrowError('ES exited with code 1'); - }); - - it('resolves when bin/elasticsearch logs "started"', async () => { - mockEsBin({ start: true }); - - await new Cluster({ log }).start(); - }); - - it('rejects if #start() was called previously', async () => { - mockEsBin({ start: true }); - - const cluster = new Cluster({ log }); - await cluster.start(); - await expect(cluster.start()).rejects.toThrowError('ES has already been started'); - }); - - it('rejects if #run() was called previously', async () => { - mockEsBin({ start: true }); - - const cluster = new Cluster({ log }); - await cluster.run(); - await expect(cluster.start()).rejects.toThrowError('ES has already been started'); - }); - - it('sets up SSL when enabled', async () => { - mockEsBin({ start: true, ssl: true }); - - const cluster = new Cluster({ log, ssl: true }); - await cluster.start(); - - const config = extractConfigFiles.mock.calls[0][0]; - expect(config).toContain('xpack.security.http.ssl.enabled=true'); - expect(config).toContain(`xpack.security.http.ssl.keystore.path=${ES_NOPASSWORD_P12_PATH}`); - expect(config).toContain(`xpack.security.http.ssl.keystore.type=PKCS12`); - }); - - it(`doesn't setup SSL when disabled`, async () => { - mockEsBin({ start: true }); - - extractConfigFiles.mockReturnValueOnce([]); - - const cluster = new Cluster({ log, ssl: false }); - await cluster.start(); - - expect(extractConfigFiles.mock.calls).toMatchInlineSnapshot(` - Array [ - Array [ - Array [ - "action.destructive_requires_name=true", - "cluster.routing.allocation.disk.threshold_enabled=false", - "ingest.geoip.downloader.enabled=false", - "search.check_ccs_compatibility=true", - ], - undefined, - Object { - "log": , - }, - ], - ] - `); - }); - - it(`allows overriding search.check_ccs_compatibility`, async () => { - mockEsBin({ start: true }); - - extractConfigFiles.mockReturnValueOnce([]); - - const cluster = new Cluster({ - log, - ssl: false, - }); - - await cluster.start(undefined, { - esArgs: ['search.check_ccs_compatibility=false'], - }); - - expect(extractConfigFiles.mock.calls).toMatchInlineSnapshot(` - Array [ - Array [ - Array [ - "action.destructive_requires_name=true", - "cluster.routing.allocation.disk.threshold_enabled=false", - "ingest.geoip.downloader.enabled=false", - "search.check_ccs_compatibility=false", - ], - undefined, - Object { - "log": , - }, - ], - ] - `); - }); -}); - -describe('#run()', () => { - it('resolves when bin/elasticsearch exists with 0', async () => { - mockEsBin({ exitCode: 0 }); - - await new Cluster({ log }).run(); - }); - - it('resolves when bin/elasticsearch exists with 143', async () => { - mockEsBin({ exitCode: 143 }); - - await new Cluster({ log }).run(); - }); - - it('resolves when bin/elasticsearch exists with 130', async () => { - mockEsBin({ exitCode: 130 }); - - await new Cluster({ log }).run(); - }); - - it('rejects when bin/elasticsearch exists with 1', async () => { - mockEsBin({ exitCode: 1 }); - - await expect(new Cluster({ log }).run()).rejects.toThrowError('ES exited with code 1'); - }); - - it('rejects if #start() was called previously', async () => { - mockEsBin({ exitCode: 0, start: true }); - - const cluster = new Cluster({ log }); - await cluster.start(); - await expect(cluster.run()).rejects.toThrowError('ES has already been started'); - }); - - it('rejects if #run() was called previously', async () => { - mockEsBin({ exitCode: 0 }); - - const cluster = new Cluster({ log }); - await cluster.run(); - await expect(cluster.run()).rejects.toThrowError('ES has already been started'); - }); - - it('sets up SSL when enabled', async () => { - mockEsBin({ start: true, ssl: true }); - - const cluster = new Cluster({ log, ssl: true }); - await cluster.run(); - - const config = extractConfigFiles.mock.calls[0][0]; - expect(config).toContain('xpack.security.http.ssl.enabled=true'); - expect(config).toContain(`xpack.security.http.ssl.keystore.path=${ES_NOPASSWORD_P12_PATH}`); - expect(config).toContain(`xpack.security.http.ssl.keystore.type=PKCS12`); - }); - - it(`doesn't setup SSL when disabled`, async () => { - mockEsBin({ start: true }); - - extractConfigFiles.mockReturnValueOnce([]); - - const cluster = new Cluster({ log, ssl: false }); - await cluster.run(); - - expect(extractConfigFiles.mock.calls).toMatchInlineSnapshot(` - Array [ - Array [ - Array [ - "action.destructive_requires_name=true", - "cluster.routing.allocation.disk.threshold_enabled=false", - "ingest.geoip.downloader.enabled=false", - "search.check_ccs_compatibility=true", - ], - undefined, - Object { - "log": , - }, - ], - ] - `); - }); - - it('sets default Java heap', async () => { - mockEsBin({ start: true }); - - const cluster = new Cluster({ log }); - await cluster.run(); - - expect(execa.mock.calls[0][2].env.ES_JAVA_OPTS).toMatchInlineSnapshot(`"-Xms1536m -Xmx1536m"`); - }); - - it('allows Java heap to be overwritten', async () => { - mockEsBin({ start: true }); - process.env.ES_JAVA_OPTS = '-Xms5g -Xmx5g'; - - const cluster = new Cluster({ log }); - await cluster.run(); - - expect(execa.mock.calls[0][2].env.ES_JAVA_OPTS).toMatchInlineSnapshot(`"-Xms5g -Xmx5g"`); - }); -}); - -describe('#stop()', () => { - it('rejects if #run() or #start() was not called', async () => { - const cluster = new Cluster({ log }); - await expect(cluster.stop()).rejects.toThrowError('ES has not been started'); - }); - - it('resolves when ES exits with 0', async () => { - mockEsBin({ exitCode: 0, start: true }); - - const cluster = new Cluster({ log }); - await cluster.start(); - await cluster.stop(); - }); - - it('resolves when ES exits with 143', async () => { - mockEsBin({ exitCode: 143, start: true }); - - const cluster = new Cluster({ log }); - await cluster.start(); - await cluster.stop(); - }); - - it('resolves when ES exits with 130', async () => { - mockEsBin({ exitCode: 130, start: true }); - - const cluster = new Cluster({ log }); - await cluster.start(); - await cluster.stop(); - }); - - it('rejects when ES exits with 1', async () => { - mockEsBin({ exitCode: 1, start: true }); - - const cluster = new Cluster({ log }); - await expect(cluster.run()).rejects.toThrowError('ES exited with code 1'); - await expect(cluster.stop()).rejects.toThrowError('ES exited with code 1'); - }); -}); diff --git a/packages/kbn-es/src/integration_tests/cluster.test.ts b/packages/kbn-es/src/integration_tests/cluster.test.ts new file mode 100644 index 0000000000000..3d33e2f299a0a --- /dev/null +++ b/packages/kbn-es/src/integration_tests/cluster.test.ts @@ -0,0 +1,815 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 or the Server + * Side Public License, v 1. + */ + +import { ToolingLog, ToolingLogCollectingWriter } from '@kbn/tooling-log'; +import * as extractConfig from '../utils/extract_config_files'; +import * as dockerUtils from '../utils/docker'; +import { createAnyInstanceSerializer, createStripAnsiSerializer } from '@kbn/jest-serializers'; +import * as installUtils from '../install'; +import { Cluster } from '../cluster'; +import { ES_NOPASSWORD_P12_PATH } from '@kbn/dev-utils/src/certs'; +import { + DownloadSnapshotOptions, + InstallArchiveOptions, + InstallSnapshotOptions, + InstallSourceOptions, +} from '../install/types'; + +expect.addSnapshotSerializer(createAnyInstanceSerializer(ToolingLog)); +expect.addSnapshotSerializer(createStripAnsiSerializer()); + +const log = new ToolingLog(); +const logWriter = new ToolingLogCollectingWriter(); +log.setWriters([logWriter]); +const KIBANA_ROOT = process.cwd(); +const installPath = `${KIBANA_ROOT}/.es`; +const esClusterExecOptions = {}; +const initialEnv = { ...process.env }; + +const sleep = (ms: number) => { + return new Promise((resolve) => setTimeout(resolve, ms)); +}; + +const ensureResolve = async (promise: Promise, name: string) => { + return await Promise.race([ + promise, + sleep(100).then(() => { + throw new Error(`promise was supposed to resolve with ${name} resolution`); + }), + ]); +}; + +const ensureNoResolve = async (promise: Promise) => { + await Promise.race([ + sleep(100), + promise.then(() => { + throw new Error('promise was not supposed to resolve'); + }), + ]); +}; + +jest.mock('execa'); +const execaMock = jest.requireMock('execa'); + +const mockEsBin = ( + { + exitCode, + start, + ssl, + }: { + exitCode?: number; + start?: boolean; + ssl?: boolean; + } = { start: false, ssl: false } +) => { + execaMock.mockImplementationOnce((args: string[], options: {}) => + jest.requireActual('execa')( + process.execPath, + [ + '--require=@kbn/babel-register/install', + require.resolve('./__fixtures__/es_bin.js'), + JSON.stringify({ + exitCode, + start, + ssl: ssl || args.includes('xpack.security.http.ssl.enabled=true'), + }), + ], + options + ) + ); +}; + +jest.mock('../install', () => ({ + downloadSnapshot: jest.fn(), + installSource: jest.fn(), + installSnapshot: jest.fn(), + installArchive: jest.fn(), +})); + +jest.mock('../utils/extract_config_files', () => ({ + extractConfigFiles: jest.fn(), +})); + +jest.mock('../utils/docker', () => ({ + runServerlessCluster: jest.fn(), + runDockerContainer: jest.fn(), +})); + +const downloadSnapshotMock = jest.spyOn(installUtils, 'downloadSnapshot'); +const installSourceMock = jest.spyOn(installUtils, 'installSource'); +const installSnapshotMock = jest.spyOn(installUtils, 'installSnapshot'); +const installArchiveMock = jest.spyOn(installUtils, 'installArchive'); +const extractConfigFilesMock = jest.spyOn(extractConfig, 'extractConfigFiles'); +const runServerlessClusterMock = jest.spyOn(dockerUtils, 'runServerlessCluster'); +const runDockerContainerMock = jest.spyOn(dockerUtils, 'runDockerContainer'); + +beforeEach(() => { + jest.resetAllMocks(); + extractConfigFilesMock.mockImplementation((config) => + Array.isArray(config) ? config : [config] + ); + log.indent(-log.getIndent()); + logWriter.messages.length = 0; +}); + +afterEach(() => { + process.env = { ...initialEnv }; +}); + +describe('#downloadSnapshot()', () => { + test('awaits downloadSnapshot() promise and returns { downloadPath }', async () => { + let resolveDownloadSnapshot: Function; + downloadSnapshotMock.mockImplementationOnce( + () => + new Promise((resolve) => { + resolveDownloadSnapshot = () => { + resolve({ downloadPath: 'foo' }); + }; + }) + ); + + const cluster = new Cluster({ log }); + const promise = cluster.downloadSnapshot({ version: '8.10.0' }); + await ensureNoResolve(promise); + resolveDownloadSnapshot!(); + await expect(ensureResolve(promise, 'downloadSnapshot()')).resolves.toEqual({ + downloadPath: 'foo', + }); + }); + + test('passes through all options+log to downloadSnapshot()', async () => { + downloadSnapshotMock.mockResolvedValue({ downloadPath: 'foo' }); + const options: DownloadSnapshotOptions = { + version: '8.10.0', + license: 'trial', + basePath: 'someBasePath', + installPath: 'someInstallPath', + log, + useCached: true, + }; + const cluster = new Cluster({ log }); + await cluster.downloadSnapshot(options); + expect(downloadSnapshotMock.mock.calls[0][0]).toMatchObject(options); + expect(logWriter.messages).toMatchInlineSnapshot(` + Array [ + " info source[@kbn/es Cluster] Downloading snapshot", + ] + `); + }); + + test('rejects if downloadSnapshot() rejects', async () => { + downloadSnapshotMock.mockRejectedValue(new Error('foo')); + const cluster = new Cluster({ log }); + await expect(cluster.downloadSnapshot({ version: '8.10.0' })).rejects.toThrowError('foo'); + }); +}); + +describe('#installSource()', () => { + test('awaits installSource() promise and returns { installPath }', async () => { + let resolveInstallSource: Function; + installSourceMock.mockImplementationOnce( + () => + new Promise((resolve) => { + resolveInstallSource = () => { + resolve({ installPath: 'foo' }); + }; + }) + ); + + const cluster = new Cluster({ log }); + const promise = cluster.installSource({ sourcePath: 'bar' }); + await ensureNoResolve(promise); + resolveInstallSource!(); + await expect(ensureResolve(promise, 'installSource()')).resolves.toEqual({ + installPath: 'foo', + }); + }); + + test('passes through all options+log to installSource()', async () => { + installSourceMock.mockResolvedValue({ installPath: 'foo' }); + const options: InstallSourceOptions = { + sourcePath: 'bar', + license: 'trial', + password: 'changeme', + basePath: 'someBasePath', + installPath: 'someInstallPath', + esArgs: ['foo=true'], + log, + }; + const cluster = new Cluster({ log }); + await cluster.installSource(options); + expect(installSourceMock.mock.calls[0][0]).toMatchObject(options); + expect(logWriter.messages).toMatchInlineSnapshot(` + Array [ + " info source[@kbn/es Cluster] Installing from source", + ] + `); + }); + + test('rejects if installSource() rejects', async () => { + installSourceMock.mockRejectedValue(new Error('foo')); + const cluster = new Cluster({ log }); + await expect(cluster.installSource({ sourcePath: 'bar' })).rejects.toThrowError('foo'); + }); +}); + +describe('#installSnapshot()', () => { + test('awaits installSnapshot() promise and returns { installPath }', async () => { + let resolveInstallSnapshot: Function; + installSnapshotMock.mockImplementationOnce( + () => + new Promise((resolve) => { + resolveInstallSnapshot = () => { + resolve({ installPath: 'foo' }); + }; + }) + ); + + const cluster = new Cluster({ log }); + const promise = cluster.installSnapshot({ version: '8.10.0' }); + await ensureNoResolve(promise); + resolveInstallSnapshot!(); + await expect(ensureResolve(promise, 'installSnapshot()')).resolves.toEqual({ + installPath: 'foo', + }); + }); + + test('passes through all options+log to installSnapshot()', async () => { + installSnapshotMock.mockResolvedValue({ installPath: 'foo' }); + const options: InstallSnapshotOptions = { + version: '8.10.0', + license: 'trial', + password: 'changeme', + basePath: 'someBasePath', + installPath: 'someInstallPath', + esArgs: ['foo=true'], + useCached: true, + log, + }; + const cluster = new Cluster({ log }); + await cluster.installSnapshot(options); + expect(installSnapshotMock.mock.calls[0][0]).toMatchObject(options); + expect(logWriter.messages).toMatchInlineSnapshot(` + Array [ + " info source[@kbn/es Cluster] Installing from snapshot", + ] + `); + }); + + test('rejects if installSnapshot() rejects', async () => { + installSnapshotMock.mockRejectedValue(new Error('foo')); + const cluster = new Cluster({ log }); + await expect(cluster.installSnapshot({ version: '8.10.0' })).rejects.toThrowError('foo'); + }); +}); + +describe('#installArchive()', () => { + test('awaits installArchive() promise and returns { installPath }', async () => { + let resolveInstallArchive: Function; + installArchiveMock.mockImplementationOnce( + () => + new Promise((resolve) => { + resolveInstallArchive = () => { + resolve({ installPath: 'foo' }); + }; + }) + ); + + const cluster = new Cluster({ log }); + const promise = cluster.installArchive('bar'); + await ensureNoResolve(promise); + resolveInstallArchive!(); + await expect(ensureResolve(promise, 'installArchive()')).resolves.toEqual({ + installPath: 'foo', + }); + }); + + test('passes through all options+log to installArchive()', async () => { + installArchiveMock.mockResolvedValue({ installPath: 'foo' }); + const options: InstallArchiveOptions = { + license: 'trial', + password: 'changeme', + basePath: 'someBasePath', + installPath: 'someInstallPath', + esArgs: ['foo=true'], + log, + }; + const cluster = new Cluster({ log }); + await cluster.installArchive('bar', options); + expect(installArchiveMock.mock.calls[0]).toMatchObject(['bar', options]); + expect(logWriter.messages).toMatchInlineSnapshot(` + Array [ + " info source[@kbn/es Cluster] Installing from an archive", + ] + `); + }); + + test('rejects if installArchive() rejects', async () => { + installArchiveMock.mockRejectedValue(new Error('foo')); + const cluster = new Cluster({ log }); + await expect(cluster.installArchive('bar')).rejects.toThrowError('foo'); + }); +}); + +describe('#start(installPath)', () => { + test('rejects when bin/elasticsearch exists with 0 before starting', async () => { + mockEsBin({ exitCode: 0, start: false }); + + await expect( + new Cluster({ log }).start(installPath, esClusterExecOptions) + ).rejects.toThrowError('ES exited without starting'); + }); + + test('rejects when bin/elasticsearch exists with 143 before starting', async () => { + mockEsBin({ exitCode: 143, start: false }); + + await expect( + new Cluster({ log }).start(installPath, esClusterExecOptions) + ).rejects.toThrowError('ES exited without starting'); + }); + + test('rejects when bin/elasticsearch exists with 130 before starting', async () => { + mockEsBin({ exitCode: 130, start: false }); + + await expect( + new Cluster({ log }).start(installPath, esClusterExecOptions) + ).rejects.toThrowError('ES exited without starting'); + }); + + test('rejects when bin/elasticsearch exists with 1 before starting', async () => { + mockEsBin({ exitCode: 1, start: false }); + + await expect( + new Cluster({ log }).start(installPath, esClusterExecOptions) + ).rejects.toThrowError('ES exited with code 1'); + }); + + test('resolves when bin/elasticsearch logs "started"', async () => { + mockEsBin({ start: true }); + + await new Cluster({ log }).start(installPath, esClusterExecOptions); + }); + + test('rejects if #start() was called previously', async () => { + mockEsBin({ start: true }); + + const cluster = new Cluster({ log }); + await cluster.start(installPath, esClusterExecOptions); + await expect(cluster.start(installPath, esClusterExecOptions)).rejects.toThrowError( + 'ES has already been started' + ); + }); + + test('rejects if #run() was called previously', async () => { + mockEsBin({ start: true }); + + const cluster = new Cluster({ log }); + await cluster.run(installPath, esClusterExecOptions); + await expect(cluster.start(installPath, esClusterExecOptions)).rejects.toThrowError( + 'ES has already been started' + ); + }); + + test('sets up SSL when enabled', async () => { + mockEsBin({ start: true, ssl: true }); + + const cluster = new Cluster({ log, ssl: true }); + await cluster.start(installPath, esClusterExecOptions); + + const config = extractConfigFilesMock.mock.calls[0][0]; + expect(config).toContain('xpack.security.http.ssl.enabled=true'); + expect(config).toContain(`xpack.security.http.ssl.keystore.path=${ES_NOPASSWORD_P12_PATH}`); + expect(config).toContain(`xpack.security.http.ssl.keystore.type=PKCS12`); + }); + + test(`doesn't setup SSL when disabled`, async () => { + mockEsBin({ start: true }); + extractConfigFilesMock.mockReturnValueOnce([]); + + const cluster = new Cluster({ log, ssl: false }); + await cluster.start(installPath, esClusterExecOptions); + + expect(extractConfigFilesMock.mock.calls[0][0]).toMatchObject([ + 'action.destructive_requires_name=true', + 'cluster.routing.allocation.disk.threshold_enabled=false', + 'ingest.geoip.downloader.enabled=false', + 'search.check_ccs_compatibility=true', + ]); + }); + + test('allows overriding search.check_ccs_compatibility', async () => { + mockEsBin({ start: true }); + extractConfigFilesMock.mockReturnValueOnce([]); + + const cluster = new Cluster({ + log, + ssl: false, + }); + await cluster.start('undefined', { + esArgs: ['search.check_ccs_compatibility=false'], + }); + + expect(extractConfigFilesMock.mock.calls[0][0]).toMatchObject([ + 'action.destructive_requires_name=true', + 'cluster.routing.allocation.disk.threshold_enabled=false', + 'ingest.geoip.downloader.enabled=false', + 'search.check_ccs_compatibility=false', + ]); + }); +}); + +describe('#run()', () => { + test('resolves when bin/elasticsearch exists with 0', async () => { + mockEsBin({ exitCode: 0 }); + + await new Cluster({ log }).run(installPath, esClusterExecOptions); + }); + + test('resolves when bin/elasticsearch exists with 143', async () => { + mockEsBin({ exitCode: 143 }); + + await new Cluster({ log }).run(installPath, esClusterExecOptions); + }); + + test('resolves when bin/elasticsearch exists with 130', async () => { + mockEsBin({ exitCode: 130 }); + + await new Cluster({ log }).run(installPath, esClusterExecOptions); + }); + + test('rejects when bin/elasticsearch exists with 1', async () => { + mockEsBin({ exitCode: 1 }); + + await expect(new Cluster({ log }).run(installPath, esClusterExecOptions)).rejects.toThrowError( + 'ES exited with code 1' + ); + }); + + test('rejects if #start() was called previously', async () => { + mockEsBin({ exitCode: 0, start: true }); + + const cluster = new Cluster({ log }); + await cluster.start(installPath, esClusterExecOptions); + await expect(cluster.run(installPath, esClusterExecOptions)).rejects.toThrowError( + 'ES has already been started' + ); + }); + + test('rejects if #run() was called previously', async () => { + mockEsBin({ exitCode: 0 }); + + const cluster = new Cluster({ log }); + await cluster.run(installPath, esClusterExecOptions); + await expect(cluster.run(installPath, esClusterExecOptions)).rejects.toThrowError( + 'ES has already been started' + ); + }); + + test('sets up SSL when enabled', async () => { + mockEsBin({ start: true, ssl: true }); + + const cluster = new Cluster({ log, ssl: true }); + await cluster.run(installPath, esClusterExecOptions); + + const config = extractConfigFilesMock.mock.calls[0][0]; + expect(config).toContain('xpack.security.http.ssl.enabled=true'); + expect(config).toContain(`xpack.security.http.ssl.keystore.path=${ES_NOPASSWORD_P12_PATH}`); + expect(config).toContain(`xpack.security.http.ssl.keystore.type=PKCS12`); + }); + + test(`doesn't setup SSL when disabled`, async () => { + mockEsBin({ start: true }); + extractConfigFilesMock.mockReturnValueOnce([]); + + const cluster = new Cluster({ log, ssl: false }); + await cluster.run(installPath, esClusterExecOptions); + + expect(extractConfigFilesMock.mock.calls[0][0]).toMatchObject([ + 'action.destructive_requires_name=true', + 'cluster.routing.allocation.disk.threshold_enabled=false', + 'ingest.geoip.downloader.enabled=false', + 'search.check_ccs_compatibility=true', + ]); + }); + + test('sets default Java heap', async () => { + mockEsBin({ start: true }); + + const cluster = new Cluster({ log }); + await cluster.run(installPath, esClusterExecOptions); + + expect(execaMock.mock.calls[0][2].env.ES_JAVA_OPTS).toMatchInlineSnapshot( + `"-Xms1536m -Xmx1536m"` + ); + }); + + test('allows Java heap to be overwritten', async () => { + mockEsBin({ start: true }); + process.env.ES_JAVA_OPTS = '-Xms5g -Xmx5g'; + + const cluster = new Cluster({ log }); + await cluster.run(installPath, esClusterExecOptions); + + expect(execaMock.mock.calls[0][2].env.ES_JAVA_OPTS).toMatchInlineSnapshot(`"-Xms5g -Xmx5g"`); + }); +}); + +describe('#installPlugins()', () => { + test('passes through installPath and runs execa for each plugin', async () => { + const cluster = new Cluster({ log }); + await cluster.installPlugins('foo', 'esPlugin1,esPlugin2', ''); + expect(execaMock.mock.calls.length).toBe(2); + expect(execaMock.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + "bin/elasticsearch-plugin", + Array [ + "install", + "esPlugin1", + ], + Object { + "cwd": "foo", + "env": Object { + "ES_JAVA_OPTS": "-Xms1536m -Xmx1536m", + "JAVA_HOME": "", + }, + }, + ] + `); + + expect(execaMock.mock.calls[1]).toMatchInlineSnapshot(` + Array [ + "bin/elasticsearch-plugin", + Array [ + "install", + "esPlugin2", + ], + Object { + "cwd": "foo", + "env": Object { + "ES_JAVA_OPTS": "-Xms1536m -Xmx1536m", + "JAVA_HOME": "", + }, + }, + ] + `); + }); + + test(`allows 'esJavaOpts' to be overwritten`, async () => { + mockEsBin({ start: true }); + + const cluster = new Cluster({ log }); + await cluster.installPlugins('foo', 'esPlugin1', '-Xms2g -Xmx2g'); + + expect(execaMock.mock.calls[0][2].env.ES_JAVA_OPTS).toMatchInlineSnapshot(`"-Xms2g -Xmx2g"`); + }); +}); + +describe('#configureKeystoreWithSecureSettingsFiles()', () => { + test('passes through installPath and runs execa for each pair of settings', async () => { + const cluster = new Cluster({ log }); + await cluster.configureKeystoreWithSecureSettingsFiles('foo', [ + ['name1', 'file1'], + ['name2', 'file2'], + ]); + expect(execaMock.mock.calls.length).toBe(2); + expect(execaMock.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + "./bin/elasticsearch-keystore", + Array [ + "add-file", + "name1", + "file1", + ], + Object { + "cwd": "foo", + "env": Object { + "JAVA_HOME": "", + }, + }, + ] + `); + + expect(execaMock.mock.calls[1]).toMatchInlineSnapshot(` + Array [ + "./bin/elasticsearch-keystore", + Array [ + "add-file", + "name2", + "file2", + ], + Object { + "cwd": "foo", + "env": Object { + "JAVA_HOME": "", + }, + }, + ] + `); + }); +}); + +describe('#stop()', () => { + test('rejects if #run() or #start() was not called', async () => { + const cluster = new Cluster({ log }); + await expect(cluster.stop()).rejects.toThrowError('ES has not been started'); + }); + + test('resolves when ES exits with 0', async () => { + mockEsBin({ exitCode: 0, start: true }); + + const cluster = new Cluster({ log }); + await cluster.start(installPath, esClusterExecOptions); + await cluster.stop(); + }); + + test('resolves when ES exits with 143', async () => { + mockEsBin({ exitCode: 143, start: true }); + + const cluster = new Cluster({ log }); + await cluster.start(installPath, esClusterExecOptions); + await cluster.stop(); + }); + + test('resolves when ES exits with 130', async () => { + mockEsBin({ exitCode: 130, start: true }); + + const cluster = new Cluster({ log }); + await cluster.start(installPath, esClusterExecOptions); + await cluster.stop(); + }); + + test('rejects when ES exits with 1', async () => { + mockEsBin({ exitCode: 1, start: true }); + + const cluster = new Cluster({ log }); + await expect(cluster.run(installPath, esClusterExecOptions)).rejects.toThrowError( + 'ES exited with code 1' + ); + await expect(cluster.stop()).rejects.toThrowError('ES exited with code 1'); + }); +}); + +describe('#kill()', () => { + test('rejects if #run() or #start() was not called', async () => { + const cluster = new Cluster({ log }); + await expect(cluster.kill()).rejects.toThrowError('ES has not been started'); + }); + + test('resolves when ES exits with 0', async () => { + mockEsBin({ exitCode: 0, start: true }); + + const cluster = new Cluster({ log }); + await cluster.start(installPath, esClusterExecOptions); + await cluster.kill(); + }); +}); + +describe('#runServerless()', () => { + test(`rejects if #start() was called before`, async () => { + mockEsBin({ start: true }); + + const cluster = new Cluster({ log }); + await cluster.start(installPath, esClusterExecOptions); + await expect(cluster.runServerless({ basePath: installPath })).rejects.toThrowError( + 'ES stateful cluster has already been started' + ); + }); + + test(`rejects if #run() was called before`, async () => { + mockEsBin({ start: true }); + + const cluster = new Cluster({ log }); + await cluster.run(installPath, esClusterExecOptions); + await expect(cluster.runServerless({ basePath: installPath })).rejects.toThrowError( + 'ES stateful cluster has already been started' + ); + }); + + test('awaits runServerlessCluster() promise and returns node names as string[]', async () => { + const nodeNames = ['es1', 'es2', 'es3']; + let resolveRunServerlessCluster: Function; + runServerlessClusterMock.mockImplementationOnce( + () => + new Promise((resolve) => { + resolveRunServerlessCluster = () => { + resolve(nodeNames); + }; + }) + ); + + const cluster = new Cluster({ log }); + const promise = cluster.runServerless({ basePath: installPath }); + await ensureNoResolve(promise); + resolveRunServerlessCluster!(); + await expect(ensureResolve(promise, 'runServerless()')).resolves.toEqual(nodeNames); + }); + + test('rejects if #runServerless() was called before', async () => { + const nodeNames = ['es1', 'es2', 'es3']; + runServerlessClusterMock.mockResolvedValueOnce(nodeNames); + + const cluster = new Cluster({ log }); + await cluster.runServerless({ basePath: installPath }); + await expect(cluster.runServerless({ basePath: installPath })).rejects.toThrowError( + 'ES serverless docker cluster has already been started' + ); + }); + + test('rejects if #runServerlessCluster() rejects', async () => { + runServerlessClusterMock.mockRejectedValueOnce(new Error('foo')); + const cluster = new Cluster({ log }); + await expect(cluster.runServerless({ basePath: installPath })).rejects.toThrowError('foo'); + }); + + test('passes through all options+log to #runServerlessCluster()', async () => { + const nodeNames = ['es1', 'es2', 'es3']; + runServerlessClusterMock.mockResolvedValueOnce(nodeNames); + + const cluster = new Cluster({ log }); + const serverlessOptions = { + clean: true, + basePath: installPath, + teardown: true, + background: true, + waitForReady: true, + }; + await cluster.runServerless(serverlessOptions); + expect(runServerlessClusterMock.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + , + Object { + "background": true, + "basePath": "${installPath}", + "clean": true, + "teardown": true, + "waitForReady": true, + }, + ] + `); + }); +}); + +describe('#runDocker()', () => { + const dockerOptions = {}; + test(`rejects if #start() was called before`, async () => { + mockEsBin({ start: true }); + + const cluster = new Cluster({ log }); + await cluster.start(installPath, esClusterExecOptions); + await expect(cluster.runDocker(dockerOptions)).rejects.toThrowError( + 'ES stateful cluster has already been started' + ); + }); + + test('rejects if #run() was called before', async () => { + mockEsBin({ start: true }); + const cluster = new Cluster({ log }); + await cluster.run(installPath, esClusterExecOptions); + await expect(cluster.runDocker(dockerOptions)).rejects.toThrowError( + 'ES stateful cluster has already been started' + ); + }); + + test('await #runDockerContainer() promise', async () => { + let resolveRunDockerContainer: Function; + runDockerContainerMock.mockImplementationOnce( + () => + new Promise((resolve) => { + resolveRunDockerContainer = () => { + resolve(); + }; + }) + ); + const cluster = new Cluster({ log }); + const promise = cluster.runDocker(dockerOptions); + await ensureNoResolve(promise); + resolveRunDockerContainer!(); + await expect(ensureResolve(promise, 'runDocker()')).resolves.toBeUndefined(); + }); + + test('rejects if #runDockerContainer() rejects', async () => { + runDockerContainerMock.mockRejectedValueOnce(new Error('foo')); + const cluster = new Cluster({ log }); + await expect(cluster.runDocker(dockerOptions)).rejects.toThrowError('foo'); + }); + + test('passes through all options+log to #runDockerContainer()', async () => { + runDockerContainerMock.mockResolvedValueOnce(); + + const cluster = new Cluster({ log }); + await cluster.runDocker({ dockerCmd: 'start -a es01' }); + expect(runDockerContainerMock.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + , + Object { + "dockerCmd": "start -a es01", + }, + ] + `); + }); +}); diff --git a/packages/kbn-es/src/utils/docker.test.ts b/packages/kbn-es/src/utils/docker.test.ts index e499e691b6b8d..4856aa6d1b17d 100644 --- a/packages/kbn-es/src/utils/docker.test.ts +++ b/packages/kbn-es/src/utils/docker.test.ts @@ -559,8 +559,7 @@ describe('resolveDockerCmd()', () => { describe('runDockerContainer()', () => { test('should resolve', async () => { execa.mockImplementation(() => Promise.resolve({ stdout: '' })); - - await expect(runDockerContainer(log, {})).resolves.toEqual({ stdout: '' }); + await expect(runDockerContainer(log, {})).resolves.toBeUndefined(); // setupDocker execa calls then run container expect(execa.mock.calls).toHaveLength(5); }); diff --git a/packages/kbn-es/src/utils/docker.ts b/packages/kbn-es/src/utils/docker.ts index 83c3e58d8322b..563fd33c7a01e 100644 --- a/packages/kbn-es/src/utils/docker.ts +++ b/packages/kbn-es/src/utils/docker.ts @@ -700,7 +700,7 @@ export async function runDockerContainer(log: ToolingLog, options: DockerOptions const dockerCmd = resolveDockerCmd(options, image); log.info(chalk.dim(`docker ${dockerCmd.join(' ')}`)); - return await execa('docker', dockerCmd, { + await execa('docker', dockerCmd, { // inherit is required to show Docker output and Java console output for pw, enrollment token, etc stdio: ['ignore', 'inherit', 'inherit'], }); diff --git a/packages/kbn-monaco/src/esql/antlr/esql_lexer.g4 b/packages/kbn-monaco/src/esql/antlr/esql_lexer.g4 index eb078b7c16ac1..815cf7f237bfb 100644 --- a/packages/kbn-monaco/src/esql/antlr/esql_lexer.g4 +++ b/packages/kbn-monaco/src/esql/antlr/esql_lexer.g4 @@ -166,11 +166,17 @@ MATH_FUNCTION | S U B S T R I N G | T R I M | C O N C A T + | C O A L E S C E + | G R E A T E S T + | L E F T + | N O W + | R I G H T | S T A R T S UNDERSCORE W I T H | D A T E UNDERSCORE F O R M A T | D A T E UNDERSCORE T R U N C | D A T E UNDERSCORE P A R S E | A U T O UNDERSCORE B U C K E T + | D A T E UNDERSCORE E X T R A C T | I S UNDERSCORE F I N I T E | I S UNDERSCORE I N F I N I T E | C A S E @@ -194,10 +200,12 @@ MATH_FUNCTION | T O UNDERSCORE D T | T O UNDERSCORE D B L | T O UNDERSCORE D O U B L E + | T O UNDERSCORE D E G R E E S | T O UNDERSCORE I N T | T O UNDERSCORE I N T E G E R - | T O UNDERSCORE L O N G | T O UNDERSCORE I P + | T O UNDERSCORE L O N G + | T O UNDERSCORE R A D I A N S | T O UNDERSCORE V E R S I O N | T O UNDERSCORE U N S I G N E D UNDERSCORE L O N G ; @@ -212,6 +220,20 @@ UNARY_FUNCTION | P E R C E N T I L E | M E D I A N | M E D I A N UNDERSCORE A B S O L U T E UNDERSCORE D E V I A T I O N + | A C O S + | A S I N + | A T A N + | A T A N '2' + | C E I L + | C O S + | C O S H + | F L O O R + | L T R I M + | S I N + | S I N H + | S Q R T + | T A N + | T A N H ; WHERE_FUNCTIONS diff --git a/packages/kbn-monaco/src/esql/antlr/esql_lexer.interp b/packages/kbn-monaco/src/esql/antlr/esql_lexer.interp index c78a358542485..80f8a20f9d322 100644 --- a/packages/kbn-monaco/src/esql/antlr/esql_lexer.interp +++ b/packages/kbn-monaco/src/esql/antlr/esql_lexer.interp @@ -304,4 +304,4 @@ SOURCE_IDENTIFIERS ENRICH_IDENTIFIERS atn: -[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 2, 83, 1462, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 4, 122, 9, 122, 4, 123, 9, 123, 4, 124, 9, 124, 4, 125, 9, 125, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 7, 19, 399, 10, 19, 12, 19, 14, 19, 402, 11, 19, 3, 19, 5, 19, 405, 10, 19, 3, 19, 5, 19, 408, 10, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 7, 20, 417, 10, 20, 12, 20, 14, 20, 420, 11, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 6, 21, 428, 10, 21, 13, 21, 14, 21, 429, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 5, 32, 471, 10, 32, 3, 32, 6, 32, 474, 10, 32, 13, 32, 14, 32, 475, 3, 33, 3, 33, 3, 33, 7, 33, 481, 10, 33, 12, 33, 14, 33, 484, 11, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 7, 33, 492, 10, 33, 12, 33, 14, 33, 495, 11, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 5, 33, 502, 10, 33, 3, 33, 5, 33, 505, 10, 33, 5, 33, 507, 10, 33, 3, 34, 6, 34, 510, 10, 34, 13, 34, 14, 34, 511, 3, 35, 6, 35, 515, 10, 35, 13, 35, 14, 35, 516, 3, 35, 3, 35, 7, 35, 521, 10, 35, 12, 35, 14, 35, 524, 11, 35, 3, 35, 3, 35, 6, 35, 528, 10, 35, 13, 35, 14, 35, 529, 3, 35, 6, 35, 533, 10, 35, 13, 35, 14, 35, 534, 3, 35, 3, 35, 7, 35, 539, 10, 35, 12, 35, 14, 35, 542, 11, 35, 5, 35, 544, 10, 35, 3, 35, 3, 35, 3, 35, 3, 35, 6, 35, 550, 10, 35, 13, 35, 14, 35, 551, 3, 35, 3, 35, 5, 35, 556, 10, 35, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 655, 10, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 5, 57, 739, 10, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 5, 58, 751, 10, 58, 3, 59, 3, 59, 3, 60, 3, 60, 3, 61, 3, 61, 3, 62, 3, 62, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 5, 65, 773, 10, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 5, 67, 790, 10, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 1154, 10, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 5, 69, 1237, 10, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 7, 71, 1255, 10, 71, 12, 71, 14, 71, 1258, 11, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 6, 71, 1265, 10, 71, 13, 71, 14, 71, 1266, 5, 71, 1269, 10, 71, 3, 72, 3, 72, 3, 72, 3, 72, 7, 72, 1275, 10, 72, 12, 72, 14, 72, 1278, 11, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 82, 6, 82, 1329, 10, 82, 13, 82, 14, 82, 1330, 3, 83, 6, 83, 1334, 10, 83, 13, 83, 14, 83, 1335, 3, 83, 3, 83, 5, 83, 1340, 10, 83, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 92, 3, 92, 3, 92, 3, 92, 3, 93, 3, 93, 3, 93, 3, 93, 3, 94, 6, 94, 1384, 10, 94, 13, 94, 14, 94, 1385, 3, 95, 6, 95, 1389, 10, 95, 13, 95, 14, 95, 1390, 3, 95, 3, 95, 5, 95, 1395, 10, 95, 3, 96, 3, 96, 3, 97, 3, 97, 3, 97, 3, 97, 3, 98, 3, 98, 3, 98, 3, 98, 3, 99, 3, 99, 3, 99, 3, 99, 3, 100, 3, 100, 3, 101, 3, 101, 3, 102, 3, 102, 3, 103, 3, 103, 3, 104, 3, 104, 3, 105, 3, 105, 3, 106, 3, 106, 3, 107, 3, 107, 3, 108, 3, 108, 3, 109, 3, 109, 3, 110, 3, 110, 3, 111, 3, 111, 3, 112, 3, 112, 3, 113, 3, 113, 3, 114, 3, 114, 3, 115, 3, 115, 3, 116, 3, 116, 3, 117, 3, 117, 3, 118, 3, 118, 3, 119, 3, 119, 3, 120, 3, 120, 3, 121, 3, 121, 3, 122, 3, 122, 3, 123, 3, 123, 3, 124, 3, 124, 3, 125, 3, 125, 4, 418, 493, 2, 2, 126, 7, 2, 3, 9, 2, 4, 11, 2, 5, 13, 2, 6, 15, 2, 7, 17, 2, 8, 19, 2, 9, 21, 2, 10, 23, 2, 11, 25, 2, 12, 27, 2, 13, 29, 2, 14, 31, 2, 15, 33, 2, 16, 35, 2, 17, 37, 2, 18, 39, 2, 19, 41, 2, 20, 43, 2, 21, 45, 2, 22, 47, 2, 2, 49, 2, 83, 51, 2, 23, 53, 2, 24, 55, 2, 25, 57, 2, 26, 59, 2, 2, 61, 2, 2, 63, 2, 2, 65, 2, 2, 67, 2, 2, 69, 2, 27, 71, 2, 28, 73, 2, 29, 75, 2, 30, 77, 2, 31, 79, 2, 32, 81, 2, 33, 83, 2, 34, 85, 2, 35, 87, 2, 36, 89, 2, 37, 91, 2, 38, 93, 2, 39, 95, 2, 40, 97, 2, 41, 99, 2, 42, 101, 2, 43, 103, 2, 44, 105, 2, 45, 107, 2, 46, 109, 2, 47, 111, 2, 48, 113, 2, 49, 115, 2, 50, 117, 2, 51, 119, 2, 52, 121, 2, 53, 123, 2, 54, 125, 2, 55, 127, 2, 56, 129, 2, 57, 131, 2, 58, 133, 2, 59, 135, 2, 60, 137, 2, 61, 139, 2, 62, 141, 2, 63, 143, 2, 64, 145, 2, 65, 147, 2, 66, 149, 2, 67, 151, 2, 68, 153, 2, 69, 155, 2, 2, 157, 2, 2, 159, 2, 2, 161, 2, 2, 163, 2, 2, 165, 2, 70, 167, 2, 71, 169, 2, 2, 171, 2, 72, 173, 2, 73, 175, 2, 74, 177, 2, 75, 179, 2, 76, 181, 2, 77, 183, 2, 2, 185, 2, 2, 187, 2, 2, 189, 2, 2, 191, 2, 78, 193, 2, 2, 195, 2, 79, 197, 2, 80, 199, 2, 81, 201, 2, 82, 203, 2, 2, 205, 2, 2, 207, 2, 2, 209, 2, 2, 211, 2, 2, 213, 2, 2, 215, 2, 2, 217, 2, 2, 219, 2, 2, 221, 2, 2, 223, 2, 2, 225, 2, 2, 227, 2, 2, 229, 2, 2, 231, 2, 2, 233, 2, 2, 235, 2, 2, 237, 2, 2, 239, 2, 2, 241, 2, 2, 243, 2, 2, 245, 2, 2, 247, 2, 2, 249, 2, 2, 251, 2, 2, 253, 2, 2, 7, 2, 3, 4, 5, 6, 39, 4, 2, 12, 12, 15, 15, 5, 2, 11, 12, 15, 15, 34, 34, 3, 2, 50, 59, 4, 2, 67, 92, 99, 124, 7, 2, 36, 36, 94, 94, 112, 112, 116, 116, 118, 118, 6, 2, 12, 12, 15, 15, 36, 36, 94, 94, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 4, 2, 66, 66, 97, 97, 3, 2, 98, 98, 12, 2, 11, 12, 15, 15, 34, 34, 46, 46, 49, 49, 63, 63, 93, 93, 95, 95, 98, 98, 126, 126, 4, 2, 44, 44, 49, 49, 4, 2, 67, 67, 99, 99, 4, 2, 68, 68, 100, 100, 4, 2, 69, 69, 101, 101, 4, 2, 70, 70, 102, 102, 4, 2, 72, 72, 104, 104, 4, 2, 73, 73, 105, 105, 4, 2, 74, 74, 106, 106, 4, 2, 75, 75, 107, 107, 4, 2, 76, 76, 108, 108, 4, 2, 77, 77, 109, 109, 4, 2, 78, 78, 110, 110, 4, 2, 79, 79, 111, 111, 4, 2, 80, 80, 112, 112, 4, 2, 81, 81, 113, 113, 4, 2, 82, 82, 114, 114, 4, 2, 83, 83, 115, 115, 4, 2, 84, 84, 116, 116, 4, 2, 85, 85, 117, 117, 4, 2, 86, 86, 118, 118, 4, 2, 87, 87, 119, 119, 4, 2, 88, 88, 120, 120, 4, 2, 89, 89, 121, 121, 4, 2, 90, 90, 122, 122, 4, 2, 91, 91, 123, 123, 4, 2, 92, 92, 124, 124, 2, 1540, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 3, 47, 3, 2, 2, 2, 3, 49, 3, 2, 2, 2, 3, 51, 3, 2, 2, 2, 3, 53, 3, 2, 2, 2, 3, 55, 3, 2, 2, 2, 4, 57, 3, 2, 2, 2, 4, 69, 3, 2, 2, 2, 4, 71, 3, 2, 2, 2, 4, 73, 3, 2, 2, 2, 4, 75, 3, 2, 2, 2, 4, 77, 3, 2, 2, 2, 4, 79, 3, 2, 2, 2, 4, 81, 3, 2, 2, 2, 4, 83, 3, 2, 2, 2, 4, 85, 3, 2, 2, 2, 4, 87, 3, 2, 2, 2, 4, 89, 3, 2, 2, 2, 4, 91, 3, 2, 2, 2, 4, 93, 3, 2, 2, 2, 4, 95, 3, 2, 2, 2, 4, 97, 3, 2, 2, 2, 4, 99, 3, 2, 2, 2, 4, 101, 3, 2, 2, 2, 4, 103, 3, 2, 2, 2, 4, 105, 3, 2, 2, 2, 4, 107, 3, 2, 2, 2, 4, 109, 3, 2, 2, 2, 4, 111, 3, 2, 2, 2, 4, 113, 3, 2, 2, 2, 4, 115, 3, 2, 2, 2, 4, 117, 3, 2, 2, 2, 4, 119, 3, 2, 2, 2, 4, 121, 3, 2, 2, 2, 4, 123, 3, 2, 2, 2, 4, 125, 3, 2, 2, 2, 4, 127, 3, 2, 2, 2, 4, 129, 3, 2, 2, 2, 4, 131, 3, 2, 2, 2, 4, 133, 3, 2, 2, 2, 4, 135, 3, 2, 2, 2, 4, 137, 3, 2, 2, 2, 4, 139, 3, 2, 2, 2, 4, 141, 3, 2, 2, 2, 4, 143, 3, 2, 2, 2, 4, 145, 3, 2, 2, 2, 4, 147, 3, 2, 2, 2, 4, 149, 3, 2, 2, 2, 4, 151, 3, 2, 2, 2, 4, 153, 3, 2, 2, 2, 5, 155, 3, 2, 2, 2, 5, 157, 3, 2, 2, 2, 5, 159, 3, 2, 2, 2, 5, 161, 3, 2, 2, 2, 5, 163, 3, 2, 2, 2, 5, 165, 3, 2, 2, 2, 5, 167, 3, 2, 2, 2, 5, 171, 3, 2, 2, 2, 5, 173, 3, 2, 2, 2, 5, 175, 3, 2, 2, 2, 5, 177, 3, 2, 2, 2, 6, 179, 3, 2, 2, 2, 6, 181, 3, 2, 2, 2, 6, 183, 3, 2, 2, 2, 6, 185, 3, 2, 2, 2, 6, 187, 3, 2, 2, 2, 6, 189, 3, 2, 2, 2, 6, 191, 3, 2, 2, 2, 6, 195, 3, 2, 2, 2, 6, 197, 3, 2, 2, 2, 6, 199, 3, 2, 2, 2, 6, 201, 3, 2, 2, 2, 7, 255, 3, 2, 2, 2, 9, 265, 3, 2, 2, 2, 11, 272, 3, 2, 2, 2, 13, 279, 3, 2, 2, 2, 15, 289, 3, 2, 2, 2, 17, 296, 3, 2, 2, 2, 19, 302, 3, 2, 2, 2, 21, 310, 3, 2, 2, 2, 23, 318, 3, 2, 2, 2, 25, 325, 3, 2, 2, 2, 27, 337, 3, 2, 2, 2, 29, 345, 3, 2, 2, 2, 31, 355, 3, 2, 2, 2, 33, 362, 3, 2, 2, 2, 35, 371, 3, 2, 2, 2, 37, 378, 3, 2, 2, 2, 39, 387, 3, 2, 2, 2, 41, 394, 3, 2, 2, 2, 43, 411, 3, 2, 2, 2, 45, 427, 3, 2, 2, 2, 47, 433, 3, 2, 2, 2, 49, 438, 3, 2, 2, 2, 51, 443, 3, 2, 2, 2, 53, 447, 3, 2, 2, 2, 55, 451, 3, 2, 2, 2, 57, 455, 3, 2, 2, 2, 59, 459, 3, 2, 2, 2, 61, 461, 3, 2, 2, 2, 63, 463, 3, 2, 2, 2, 65, 466, 3, 2, 2, 2, 67, 468, 3, 2, 2, 2, 69, 506, 3, 2, 2, 2, 71, 509, 3, 2, 2, 2, 73, 555, 3, 2, 2, 2, 75, 557, 3, 2, 2, 2, 77, 654, 3, 2, 2, 2, 79, 656, 3, 2, 2, 2, 81, 660, 3, 2, 2, 2, 83, 662, 3, 2, 2, 2, 85, 664, 3, 2, 2, 2, 87, 666, 3, 2, 2, 2, 89, 668, 3, 2, 2, 2, 91, 673, 3, 2, 2, 2, 93, 678, 3, 2, 2, 2, 95, 682, 3, 2, 2, 2, 97, 687, 3, 2, 2, 2, 99, 693, 3, 2, 2, 2, 101, 696, 3, 2, 2, 2, 103, 699, 3, 2, 2, 2, 105, 702, 3, 2, 2, 2, 107, 707, 3, 2, 2, 2, 109, 710, 3, 2, 2, 2, 111, 712, 3, 2, 2, 2, 113, 714, 3, 2, 2, 2, 115, 719, 3, 2, 2, 2, 117, 738, 3, 2, 2, 2, 119, 750, 3, 2, 2, 2, 121, 752, 3, 2, 2, 2, 123, 754, 3, 2, 2, 2, 125, 756, 3, 2, 2, 2, 127, 758, 3, 2, 2, 2, 129, 760, 3, 2, 2, 2, 131, 762, 3, 2, 2, 2, 133, 772, 3, 2, 2, 2, 135, 774, 3, 2, 2, 2, 137, 789, 3, 2, 2, 2, 139, 1153, 3, 2, 2, 2, 141, 1236, 3, 2, 2, 2, 143, 1238, 3, 2, 2, 2, 145, 1268, 3, 2, 2, 2, 147, 1270, 3, 2, 2, 2, 149, 1281, 3, 2, 2, 2, 151, 1285, 3, 2, 2, 2, 153, 1289, 3, 2, 2, 2, 155, 1293, 3, 2, 2, 2, 157, 1298, 3, 2, 2, 2, 159, 1304, 3, 2, 2, 2, 161, 1310, 3, 2, 2, 2, 163, 1314, 3, 2, 2, 2, 165, 1318, 3, 2, 2, 2, 167, 1328, 3, 2, 2, 2, 169, 1339, 3, 2, 2, 2, 171, 1341, 3, 2, 2, 2, 173, 1343, 3, 2, 2, 2, 175, 1347, 3, 2, 2, 2, 177, 1351, 3, 2, 2, 2, 179, 1355, 3, 2, 2, 2, 181, 1358, 3, 2, 2, 2, 183, 1363, 3, 2, 2, 2, 185, 1368, 3, 2, 2, 2, 187, 1374, 3, 2, 2, 2, 189, 1378, 3, 2, 2, 2, 191, 1383, 3, 2, 2, 2, 193, 1394, 3, 2, 2, 2, 195, 1396, 3, 2, 2, 2, 197, 1398, 3, 2, 2, 2, 199, 1402, 3, 2, 2, 2, 201, 1406, 3, 2, 2, 2, 203, 1410, 3, 2, 2, 2, 205, 1412, 3, 2, 2, 2, 207, 1414, 3, 2, 2, 2, 209, 1416, 3, 2, 2, 2, 211, 1418, 3, 2, 2, 2, 213, 1420, 3, 2, 2, 2, 215, 1422, 3, 2, 2, 2, 217, 1424, 3, 2, 2, 2, 219, 1426, 3, 2, 2, 2, 221, 1428, 3, 2, 2, 2, 223, 1430, 3, 2, 2, 2, 225, 1432, 3, 2, 2, 2, 227, 1434, 3, 2, 2, 2, 229, 1436, 3, 2, 2, 2, 231, 1438, 3, 2, 2, 2, 233, 1440, 3, 2, 2, 2, 235, 1442, 3, 2, 2, 2, 237, 1444, 3, 2, 2, 2, 239, 1446, 3, 2, 2, 2, 241, 1448, 3, 2, 2, 2, 243, 1450, 3, 2, 2, 2, 245, 1452, 3, 2, 2, 2, 247, 1454, 3, 2, 2, 2, 249, 1456, 3, 2, 2, 2, 251, 1458, 3, 2, 2, 2, 253, 1460, 3, 2, 2, 2, 255, 256, 5, 209, 103, 2, 256, 257, 5, 219, 108, 2, 257, 258, 5, 239, 118, 2, 258, 259, 5, 239, 118, 2, 259, 260, 5, 211, 104, 2, 260, 261, 5, 207, 102, 2, 261, 262, 5, 241, 119, 2, 262, 263, 3, 2, 2, 2, 263, 264, 8, 2, 2, 2, 264, 8, 3, 2, 2, 2, 265, 266, 5, 215, 106, 2, 266, 267, 5, 237, 117, 2, 267, 268, 5, 231, 114, 2, 268, 269, 5, 223, 110, 2, 269, 270, 3, 2, 2, 2, 270, 271, 8, 3, 2, 2, 271, 10, 3, 2, 2, 2, 272, 273, 5, 211, 104, 2, 273, 274, 5, 245, 121, 2, 274, 275, 5, 203, 100, 2, 275, 276, 5, 225, 111, 2, 276, 277, 3, 2, 2, 2, 277, 278, 8, 4, 2, 2, 278, 12, 3, 2, 2, 2, 279, 280, 5, 211, 104, 2, 280, 281, 5, 249, 123, 2, 281, 282, 5, 233, 115, 2, 282, 283, 5, 225, 111, 2, 283, 284, 5, 203, 100, 2, 284, 285, 5, 219, 108, 2, 285, 286, 5, 229, 113, 2, 286, 287, 3, 2, 2, 2, 287, 288, 8, 5, 3, 2, 288, 14, 3, 2, 2, 2, 289, 290, 5, 213, 105, 2, 290, 291, 5, 237, 117, 2, 291, 292, 5, 231, 114, 2, 292, 293, 5, 227, 112, 2, 293, 294, 3, 2, 2, 2, 294, 295, 8, 6, 4, 2, 295, 16, 3, 2, 2, 2, 296, 297, 5, 237, 117, 2, 297, 298, 5, 231, 114, 2, 298, 299, 5, 247, 122, 2, 299, 300, 3, 2, 2, 2, 300, 301, 8, 7, 2, 2, 301, 18, 3, 2, 2, 2, 302, 303, 5, 239, 118, 2, 303, 304, 5, 241, 119, 2, 304, 305, 5, 203, 100, 2, 305, 306, 5, 241, 119, 2, 306, 307, 5, 239, 118, 2, 307, 308, 3, 2, 2, 2, 308, 309, 8, 8, 2, 2, 309, 20, 3, 2, 2, 2, 310, 311, 5, 247, 122, 2, 311, 312, 5, 217, 107, 2, 312, 313, 5, 211, 104, 2, 313, 314, 5, 237, 117, 2, 314, 315, 5, 211, 104, 2, 315, 316, 3, 2, 2, 2, 316, 317, 8, 9, 2, 2, 317, 22, 3, 2, 2, 2, 318, 319, 5, 239, 118, 2, 319, 320, 5, 231, 114, 2, 320, 321, 5, 237, 117, 2, 321, 322, 5, 241, 119, 2, 322, 323, 3, 2, 2, 2, 323, 324, 8, 10, 2, 2, 324, 24, 3, 2, 2, 2, 325, 326, 5, 227, 112, 2, 326, 327, 5, 245, 121, 2, 327, 328, 5, 111, 54, 2, 328, 329, 5, 211, 104, 2, 329, 330, 5, 249, 123, 2, 330, 331, 5, 233, 115, 2, 331, 332, 5, 203, 100, 2, 332, 333, 5, 229, 113, 2, 333, 334, 5, 209, 103, 2, 334, 335, 3, 2, 2, 2, 335, 336, 8, 11, 2, 2, 336, 26, 3, 2, 2, 2, 337, 338, 5, 225, 111, 2, 338, 339, 5, 219, 108, 2, 339, 340, 5, 227, 112, 2, 340, 341, 5, 219, 108, 2, 341, 342, 5, 241, 119, 2, 342, 343, 3, 2, 2, 2, 343, 344, 8, 12, 2, 2, 344, 28, 3, 2, 2, 2, 345, 346, 5, 233, 115, 2, 346, 347, 5, 237, 117, 2, 347, 348, 5, 231, 114, 2, 348, 349, 5, 221, 109, 2, 349, 350, 5, 211, 104, 2, 350, 351, 5, 207, 102, 2, 351, 352, 5, 241, 119, 2, 352, 353, 3, 2, 2, 2, 353, 354, 8, 13, 2, 2, 354, 30, 3, 2, 2, 2, 355, 356, 5, 209, 103, 2, 356, 357, 5, 237, 117, 2, 357, 358, 5, 231, 114, 2, 358, 359, 5, 233, 115, 2, 359, 360, 3, 2, 2, 2, 360, 361, 8, 14, 2, 2, 361, 32, 3, 2, 2, 2, 362, 363, 5, 237, 117, 2, 363, 364, 5, 211, 104, 2, 364, 365, 5, 229, 113, 2, 365, 366, 5, 203, 100, 2, 366, 367, 5, 227, 112, 2, 367, 368, 5, 211, 104, 2, 368, 369, 3, 2, 2, 2, 369, 370, 8, 15, 2, 2, 370, 34, 3, 2, 2, 2, 371, 372, 5, 239, 118, 2, 372, 373, 5, 217, 107, 2, 373, 374, 5, 231, 114, 2, 374, 375, 5, 247, 122, 2, 375, 376, 3, 2, 2, 2, 376, 377, 8, 16, 2, 2, 377, 36, 3, 2, 2, 2, 378, 379, 5, 211, 104, 2, 379, 380, 5, 229, 113, 2, 380, 381, 5, 237, 117, 2, 381, 382, 5, 219, 108, 2, 382, 383, 5, 207, 102, 2, 383, 384, 5, 217, 107, 2, 384, 385, 3, 2, 2, 2, 385, 386, 8, 17, 5, 2, 386, 38, 3, 2, 2, 2, 387, 388, 5, 223, 110, 2, 388, 389, 5, 211, 104, 2, 389, 390, 5, 211, 104, 2, 390, 391, 5, 233, 115, 2, 391, 392, 3, 2, 2, 2, 392, 393, 8, 18, 2, 2, 393, 40, 3, 2, 2, 2, 394, 395, 7, 49, 2, 2, 395, 396, 7, 49, 2, 2, 396, 400, 3, 2, 2, 2, 397, 399, 10, 2, 2, 2, 398, 397, 3, 2, 2, 2, 399, 402, 3, 2, 2, 2, 400, 398, 3, 2, 2, 2, 400, 401, 3, 2, 2, 2, 401, 404, 3, 2, 2, 2, 402, 400, 3, 2, 2, 2, 403, 405, 7, 15, 2, 2, 404, 403, 3, 2, 2, 2, 404, 405, 3, 2, 2, 2, 405, 407, 3, 2, 2, 2, 406, 408, 7, 12, 2, 2, 407, 406, 3, 2, 2, 2, 407, 408, 3, 2, 2, 2, 408, 409, 3, 2, 2, 2, 409, 410, 8, 19, 6, 2, 410, 42, 3, 2, 2, 2, 411, 412, 7, 49, 2, 2, 412, 413, 7, 44, 2, 2, 413, 418, 3, 2, 2, 2, 414, 417, 5, 43, 20, 2, 415, 417, 11, 2, 2, 2, 416, 414, 3, 2, 2, 2, 416, 415, 3, 2, 2, 2, 417, 420, 3, 2, 2, 2, 418, 419, 3, 2, 2, 2, 418, 416, 3, 2, 2, 2, 419, 421, 3, 2, 2, 2, 420, 418, 3, 2, 2, 2, 421, 422, 7, 44, 2, 2, 422, 423, 7, 49, 2, 2, 423, 424, 3, 2, 2, 2, 424, 425, 8, 20, 6, 2, 425, 44, 3, 2, 2, 2, 426, 428, 9, 3, 2, 2, 427, 426, 3, 2, 2, 2, 428, 429, 3, 2, 2, 2, 429, 427, 3, 2, 2, 2, 429, 430, 3, 2, 2, 2, 430, 431, 3, 2, 2, 2, 431, 432, 8, 21, 6, 2, 432, 46, 3, 2, 2, 2, 433, 434, 7, 93, 2, 2, 434, 435, 3, 2, 2, 2, 435, 436, 8, 22, 7, 2, 436, 437, 8, 22, 8, 2, 437, 48, 3, 2, 2, 2, 438, 439, 7, 126, 2, 2, 439, 440, 3, 2, 2, 2, 440, 441, 8, 23, 9, 2, 441, 442, 8, 23, 10, 2, 442, 50, 3, 2, 2, 2, 443, 444, 5, 45, 21, 2, 444, 445, 3, 2, 2, 2, 445, 446, 8, 24, 6, 2, 446, 52, 3, 2, 2, 2, 447, 448, 5, 41, 19, 2, 448, 449, 3, 2, 2, 2, 449, 450, 8, 25, 6, 2, 450, 54, 3, 2, 2, 2, 451, 452, 5, 43, 20, 2, 452, 453, 3, 2, 2, 2, 453, 454, 8, 26, 6, 2, 454, 56, 3, 2, 2, 2, 455, 456, 7, 126, 2, 2, 456, 457, 3, 2, 2, 2, 457, 458, 8, 27, 10, 2, 458, 58, 3, 2, 2, 2, 459, 460, 9, 4, 2, 2, 460, 60, 3, 2, 2, 2, 461, 462, 9, 5, 2, 2, 462, 62, 3, 2, 2, 2, 463, 464, 7, 94, 2, 2, 464, 465, 9, 6, 2, 2, 465, 64, 3, 2, 2, 2, 466, 467, 10, 7, 2, 2, 467, 66, 3, 2, 2, 2, 468, 470, 9, 8, 2, 2, 469, 471, 9, 9, 2, 2, 470, 469, 3, 2, 2, 2, 470, 471, 3, 2, 2, 2, 471, 473, 3, 2, 2, 2, 472, 474, 5, 59, 28, 2, 473, 472, 3, 2, 2, 2, 474, 475, 3, 2, 2, 2, 475, 473, 3, 2, 2, 2, 475, 476, 3, 2, 2, 2, 476, 68, 3, 2, 2, 2, 477, 482, 7, 36, 2, 2, 478, 481, 5, 63, 30, 2, 479, 481, 5, 65, 31, 2, 480, 478, 3, 2, 2, 2, 480, 479, 3, 2, 2, 2, 481, 484, 3, 2, 2, 2, 482, 480, 3, 2, 2, 2, 482, 483, 3, 2, 2, 2, 483, 485, 3, 2, 2, 2, 484, 482, 3, 2, 2, 2, 485, 507, 7, 36, 2, 2, 486, 487, 7, 36, 2, 2, 487, 488, 7, 36, 2, 2, 488, 489, 7, 36, 2, 2, 489, 493, 3, 2, 2, 2, 490, 492, 10, 2, 2, 2, 491, 490, 3, 2, 2, 2, 492, 495, 3, 2, 2, 2, 493, 494, 3, 2, 2, 2, 493, 491, 3, 2, 2, 2, 494, 496, 3, 2, 2, 2, 495, 493, 3, 2, 2, 2, 496, 497, 7, 36, 2, 2, 497, 498, 7, 36, 2, 2, 498, 499, 7, 36, 2, 2, 499, 501, 3, 2, 2, 2, 500, 502, 7, 36, 2, 2, 501, 500, 3, 2, 2, 2, 501, 502, 3, 2, 2, 2, 502, 504, 3, 2, 2, 2, 503, 505, 7, 36, 2, 2, 504, 503, 3, 2, 2, 2, 504, 505, 3, 2, 2, 2, 505, 507, 3, 2, 2, 2, 506, 477, 3, 2, 2, 2, 506, 486, 3, 2, 2, 2, 507, 70, 3, 2, 2, 2, 508, 510, 5, 59, 28, 2, 509, 508, 3, 2, 2, 2, 510, 511, 3, 2, 2, 2, 511, 509, 3, 2, 2, 2, 511, 512, 3, 2, 2, 2, 512, 72, 3, 2, 2, 2, 513, 515, 5, 59, 28, 2, 514, 513, 3, 2, 2, 2, 515, 516, 3, 2, 2, 2, 516, 514, 3, 2, 2, 2, 516, 517, 3, 2, 2, 2, 517, 518, 3, 2, 2, 2, 518, 522, 5, 85, 41, 2, 519, 521, 5, 59, 28, 2, 520, 519, 3, 2, 2, 2, 521, 524, 3, 2, 2, 2, 522, 520, 3, 2, 2, 2, 522, 523, 3, 2, 2, 2, 523, 556, 3, 2, 2, 2, 524, 522, 3, 2, 2, 2, 525, 527, 5, 85, 41, 2, 526, 528, 5, 59, 28, 2, 527, 526, 3, 2, 2, 2, 528, 529, 3, 2, 2, 2, 529, 527, 3, 2, 2, 2, 529, 530, 3, 2, 2, 2, 530, 556, 3, 2, 2, 2, 531, 533, 5, 59, 28, 2, 532, 531, 3, 2, 2, 2, 533, 534, 3, 2, 2, 2, 534, 532, 3, 2, 2, 2, 534, 535, 3, 2, 2, 2, 535, 543, 3, 2, 2, 2, 536, 540, 5, 85, 41, 2, 537, 539, 5, 59, 28, 2, 538, 537, 3, 2, 2, 2, 539, 542, 3, 2, 2, 2, 540, 538, 3, 2, 2, 2, 540, 541, 3, 2, 2, 2, 541, 544, 3, 2, 2, 2, 542, 540, 3, 2, 2, 2, 543, 536, 3, 2, 2, 2, 543, 544, 3, 2, 2, 2, 544, 545, 3, 2, 2, 2, 545, 546, 5, 67, 32, 2, 546, 556, 3, 2, 2, 2, 547, 549, 5, 85, 41, 2, 548, 550, 5, 59, 28, 2, 549, 548, 3, 2, 2, 2, 550, 551, 3, 2, 2, 2, 551, 549, 3, 2, 2, 2, 551, 552, 3, 2, 2, 2, 552, 553, 3, 2, 2, 2, 553, 554, 5, 67, 32, 2, 554, 556, 3, 2, 2, 2, 555, 514, 3, 2, 2, 2, 555, 525, 3, 2, 2, 2, 555, 532, 3, 2, 2, 2, 555, 547, 3, 2, 2, 2, 556, 74, 3, 2, 2, 2, 557, 558, 7, 100, 2, 2, 558, 559, 7, 123, 2, 2, 559, 76, 3, 2, 2, 2, 560, 561, 7, 123, 2, 2, 561, 562, 7, 103, 2, 2, 562, 563, 7, 99, 2, 2, 563, 655, 7, 116, 2, 2, 564, 565, 7, 111, 2, 2, 565, 566, 7, 113, 2, 2, 566, 567, 7, 112, 2, 2, 567, 568, 7, 118, 2, 2, 568, 655, 7, 106, 2, 2, 569, 570, 7, 102, 2, 2, 570, 571, 7, 99, 2, 2, 571, 655, 7, 123, 2, 2, 572, 573, 7, 117, 2, 2, 573, 574, 7, 103, 2, 2, 574, 575, 7, 101, 2, 2, 575, 576, 7, 113, 2, 2, 576, 577, 7, 112, 2, 2, 577, 655, 7, 102, 2, 2, 578, 579, 7, 111, 2, 2, 579, 580, 7, 107, 2, 2, 580, 581, 7, 112, 2, 2, 581, 582, 7, 119, 2, 2, 582, 583, 7, 118, 2, 2, 583, 655, 7, 103, 2, 2, 584, 585, 7, 106, 2, 2, 585, 586, 7, 113, 2, 2, 586, 587, 7, 119, 2, 2, 587, 655, 7, 116, 2, 2, 588, 589, 7, 121, 2, 2, 589, 590, 7, 103, 2, 2, 590, 591, 7, 103, 2, 2, 591, 655, 7, 109, 2, 2, 592, 593, 7, 111, 2, 2, 593, 594, 7, 107, 2, 2, 594, 595, 7, 110, 2, 2, 595, 596, 7, 110, 2, 2, 596, 597, 7, 107, 2, 2, 597, 598, 7, 117, 2, 2, 598, 599, 7, 103, 2, 2, 599, 600, 7, 101, 2, 2, 600, 601, 7, 113, 2, 2, 601, 602, 7, 112, 2, 2, 602, 655, 7, 102, 2, 2, 603, 604, 7, 123, 2, 2, 604, 605, 7, 103, 2, 2, 605, 606, 7, 99, 2, 2, 606, 607, 7, 116, 2, 2, 607, 655, 7, 117, 2, 2, 608, 609, 7, 111, 2, 2, 609, 610, 7, 113, 2, 2, 610, 611, 7, 112, 2, 2, 611, 612, 7, 118, 2, 2, 612, 613, 7, 106, 2, 2, 613, 655, 7, 117, 2, 2, 614, 615, 7, 102, 2, 2, 615, 616, 7, 99, 2, 2, 616, 617, 7, 123, 2, 2, 617, 655, 7, 117, 2, 2, 618, 619, 7, 117, 2, 2, 619, 620, 7, 103, 2, 2, 620, 621, 7, 101, 2, 2, 621, 622, 7, 113, 2, 2, 622, 623, 7, 112, 2, 2, 623, 624, 7, 102, 2, 2, 624, 655, 7, 117, 2, 2, 625, 626, 7, 111, 2, 2, 626, 627, 7, 107, 2, 2, 627, 628, 7, 112, 2, 2, 628, 629, 7, 119, 2, 2, 629, 630, 7, 118, 2, 2, 630, 631, 7, 103, 2, 2, 631, 655, 7, 117, 2, 2, 632, 633, 7, 106, 2, 2, 633, 634, 7, 113, 2, 2, 634, 635, 7, 119, 2, 2, 635, 636, 7, 116, 2, 2, 636, 655, 7, 117, 2, 2, 637, 638, 7, 121, 2, 2, 638, 639, 7, 103, 2, 2, 639, 640, 7, 103, 2, 2, 640, 641, 7, 109, 2, 2, 641, 655, 7, 117, 2, 2, 642, 643, 7, 111, 2, 2, 643, 644, 7, 107, 2, 2, 644, 645, 7, 110, 2, 2, 645, 646, 7, 110, 2, 2, 646, 647, 7, 107, 2, 2, 647, 648, 7, 117, 2, 2, 648, 649, 7, 103, 2, 2, 649, 650, 7, 101, 2, 2, 650, 651, 7, 113, 2, 2, 651, 652, 7, 112, 2, 2, 652, 653, 7, 102, 2, 2, 653, 655, 7, 117, 2, 2, 654, 560, 3, 2, 2, 2, 654, 564, 3, 2, 2, 2, 654, 569, 3, 2, 2, 2, 654, 572, 3, 2, 2, 2, 654, 578, 3, 2, 2, 2, 654, 584, 3, 2, 2, 2, 654, 588, 3, 2, 2, 2, 654, 592, 3, 2, 2, 2, 654, 603, 3, 2, 2, 2, 654, 608, 3, 2, 2, 2, 654, 614, 3, 2, 2, 2, 654, 618, 3, 2, 2, 2, 654, 625, 3, 2, 2, 2, 654, 632, 3, 2, 2, 2, 654, 637, 3, 2, 2, 2, 654, 642, 3, 2, 2, 2, 655, 78, 3, 2, 2, 2, 656, 657, 7, 99, 2, 2, 657, 658, 7, 112, 2, 2, 658, 659, 7, 102, 2, 2, 659, 80, 3, 2, 2, 2, 660, 661, 7, 63, 2, 2, 661, 82, 3, 2, 2, 2, 662, 663, 7, 46, 2, 2, 663, 84, 3, 2, 2, 2, 664, 665, 7, 48, 2, 2, 665, 86, 3, 2, 2, 2, 666, 667, 7, 42, 2, 2, 667, 88, 3, 2, 2, 2, 668, 669, 7, 93, 2, 2, 669, 670, 3, 2, 2, 2, 670, 671, 8, 43, 2, 2, 671, 672, 8, 43, 2, 2, 672, 90, 3, 2, 2, 2, 673, 674, 7, 95, 2, 2, 674, 675, 3, 2, 2, 2, 675, 676, 8, 44, 10, 2, 676, 677, 8, 44, 10, 2, 677, 92, 3, 2, 2, 2, 678, 679, 5, 229, 113, 2, 679, 680, 5, 231, 114, 2, 680, 681, 5, 241, 119, 2, 681, 94, 3, 2, 2, 2, 682, 683, 5, 225, 111, 2, 683, 684, 5, 219, 108, 2, 684, 685, 5, 223, 110, 2, 685, 686, 5, 211, 104, 2, 686, 96, 3, 2, 2, 2, 687, 688, 5, 237, 117, 2, 688, 689, 5, 225, 111, 2, 689, 690, 5, 219, 108, 2, 690, 691, 5, 223, 110, 2, 691, 692, 5, 211, 104, 2, 692, 98, 3, 2, 2, 2, 693, 694, 5, 219, 108, 2, 694, 695, 5, 229, 113, 2, 695, 100, 3, 2, 2, 2, 696, 697, 5, 219, 108, 2, 697, 698, 5, 239, 118, 2, 698, 102, 3, 2, 2, 2, 699, 700, 5, 203, 100, 2, 700, 701, 5, 239, 118, 2, 701, 104, 3, 2, 2, 2, 702, 703, 5, 229, 113, 2, 703, 704, 5, 243, 120, 2, 704, 705, 5, 225, 111, 2, 705, 706, 5, 225, 111, 2, 706, 106, 3, 2, 2, 2, 707, 708, 7, 113, 2, 2, 708, 709, 7, 116, 2, 2, 709, 108, 3, 2, 2, 2, 710, 711, 7, 43, 2, 2, 711, 110, 3, 2, 2, 2, 712, 713, 7, 97, 2, 2, 713, 112, 3, 2, 2, 2, 714, 715, 7, 107, 2, 2, 715, 716, 7, 112, 2, 2, 716, 717, 7, 104, 2, 2, 717, 718, 7, 113, 2, 2, 718, 114, 3, 2, 2, 2, 719, 720, 7, 104, 2, 2, 720, 721, 7, 119, 2, 2, 721, 722, 7, 112, 2, 2, 722, 723, 7, 101, 2, 2, 723, 724, 7, 118, 2, 2, 724, 725, 7, 107, 2, 2, 725, 726, 7, 113, 2, 2, 726, 727, 7, 112, 2, 2, 727, 728, 7, 117, 2, 2, 728, 116, 3, 2, 2, 2, 729, 730, 7, 118, 2, 2, 730, 731, 7, 116, 2, 2, 731, 732, 7, 119, 2, 2, 732, 739, 7, 103, 2, 2, 733, 734, 7, 104, 2, 2, 734, 735, 7, 99, 2, 2, 735, 736, 7, 110, 2, 2, 736, 737, 7, 117, 2, 2, 737, 739, 7, 103, 2, 2, 738, 729, 3, 2, 2, 2, 738, 733, 3, 2, 2, 2, 739, 118, 3, 2, 2, 2, 740, 741, 7, 63, 2, 2, 741, 751, 7, 63, 2, 2, 742, 743, 7, 35, 2, 2, 743, 751, 7, 63, 2, 2, 744, 751, 7, 62, 2, 2, 745, 746, 7, 62, 2, 2, 746, 751, 7, 63, 2, 2, 747, 751, 7, 64, 2, 2, 748, 749, 7, 64, 2, 2, 749, 751, 7, 63, 2, 2, 750, 740, 3, 2, 2, 2, 750, 742, 3, 2, 2, 2, 750, 744, 3, 2, 2, 2, 750, 745, 3, 2, 2, 2, 750, 747, 3, 2, 2, 2, 750, 748, 3, 2, 2, 2, 751, 120, 3, 2, 2, 2, 752, 753, 7, 45, 2, 2, 753, 122, 3, 2, 2, 2, 754, 755, 7, 47, 2, 2, 755, 124, 3, 2, 2, 2, 756, 757, 7, 44, 2, 2, 757, 126, 3, 2, 2, 2, 758, 759, 7, 49, 2, 2, 759, 128, 3, 2, 2, 2, 760, 761, 7, 39, 2, 2, 761, 130, 3, 2, 2, 2, 762, 763, 7, 51, 2, 2, 763, 764, 7, 50, 2, 2, 764, 132, 3, 2, 2, 2, 765, 766, 7, 99, 2, 2, 766, 767, 7, 117, 2, 2, 767, 773, 7, 101, 2, 2, 768, 769, 7, 102, 2, 2, 769, 770, 7, 103, 2, 2, 770, 771, 7, 117, 2, 2, 771, 773, 7, 101, 2, 2, 772, 765, 3, 2, 2, 2, 772, 768, 3, 2, 2, 2, 773, 134, 3, 2, 2, 2, 774, 775, 7, 112, 2, 2, 775, 776, 7, 119, 2, 2, 776, 777, 7, 110, 2, 2, 777, 778, 7, 110, 2, 2, 778, 779, 7, 117, 2, 2, 779, 136, 3, 2, 2, 2, 780, 781, 7, 104, 2, 2, 781, 782, 7, 107, 2, 2, 782, 783, 7, 116, 2, 2, 783, 784, 7, 117, 2, 2, 784, 790, 7, 118, 2, 2, 785, 786, 7, 110, 2, 2, 786, 787, 7, 99, 2, 2, 787, 788, 7, 117, 2, 2, 788, 790, 7, 118, 2, 2, 789, 780, 3, 2, 2, 2, 789, 785, 3, 2, 2, 2, 790, 138, 3, 2, 2, 2, 791, 792, 5, 237, 117, 2, 792, 793, 5, 231, 114, 2, 793, 794, 5, 243, 120, 2, 794, 795, 5, 229, 113, 2, 795, 796, 5, 209, 103, 2, 796, 1154, 3, 2, 2, 2, 797, 798, 5, 203, 100, 2, 798, 799, 5, 205, 101, 2, 799, 800, 5, 239, 118, 2, 800, 1154, 3, 2, 2, 2, 801, 802, 5, 233, 115, 2, 802, 803, 5, 231, 114, 2, 803, 804, 5, 247, 122, 2, 804, 1154, 3, 2, 2, 2, 805, 806, 5, 225, 111, 2, 806, 807, 5, 231, 114, 2, 807, 808, 5, 215, 106, 2, 808, 809, 5, 131, 64, 2, 809, 1154, 3, 2, 2, 2, 810, 811, 5, 233, 115, 2, 811, 812, 5, 219, 108, 2, 812, 1154, 3, 2, 2, 2, 813, 814, 5, 241, 119, 2, 814, 815, 5, 203, 100, 2, 815, 816, 5, 243, 120, 2, 816, 1154, 3, 2, 2, 2, 817, 1154, 5, 211, 104, 2, 818, 819, 5, 239, 118, 2, 819, 820, 5, 243, 120, 2, 820, 821, 5, 205, 101, 2, 821, 822, 5, 239, 118, 2, 822, 823, 5, 241, 119, 2, 823, 824, 5, 237, 117, 2, 824, 825, 5, 219, 108, 2, 825, 826, 5, 229, 113, 2, 826, 827, 5, 215, 106, 2, 827, 1154, 3, 2, 2, 2, 828, 829, 5, 241, 119, 2, 829, 830, 5, 237, 117, 2, 830, 831, 5, 219, 108, 2, 831, 832, 5, 227, 112, 2, 832, 1154, 3, 2, 2, 2, 833, 834, 5, 207, 102, 2, 834, 835, 5, 231, 114, 2, 835, 836, 5, 229, 113, 2, 836, 837, 5, 207, 102, 2, 837, 838, 5, 203, 100, 2, 838, 839, 5, 241, 119, 2, 839, 1154, 3, 2, 2, 2, 840, 841, 5, 239, 118, 2, 841, 842, 5, 241, 119, 2, 842, 843, 5, 203, 100, 2, 843, 844, 5, 237, 117, 2, 844, 845, 5, 241, 119, 2, 845, 846, 5, 239, 118, 2, 846, 847, 5, 111, 54, 2, 847, 848, 5, 247, 122, 2, 848, 849, 5, 219, 108, 2, 849, 850, 5, 241, 119, 2, 850, 851, 5, 217, 107, 2, 851, 1154, 3, 2, 2, 2, 852, 853, 5, 209, 103, 2, 853, 854, 5, 203, 100, 2, 854, 855, 5, 241, 119, 2, 855, 856, 5, 211, 104, 2, 856, 857, 5, 111, 54, 2, 857, 858, 5, 213, 105, 2, 858, 859, 5, 231, 114, 2, 859, 860, 5, 237, 117, 2, 860, 861, 5, 227, 112, 2, 861, 862, 5, 203, 100, 2, 862, 863, 5, 241, 119, 2, 863, 1154, 3, 2, 2, 2, 864, 865, 5, 209, 103, 2, 865, 866, 5, 203, 100, 2, 866, 867, 5, 241, 119, 2, 867, 868, 5, 211, 104, 2, 868, 869, 5, 111, 54, 2, 869, 870, 5, 241, 119, 2, 870, 871, 5, 237, 117, 2, 871, 872, 5, 243, 120, 2, 872, 873, 5, 229, 113, 2, 873, 874, 5, 207, 102, 2, 874, 1154, 3, 2, 2, 2, 875, 876, 5, 209, 103, 2, 876, 877, 5, 203, 100, 2, 877, 878, 5, 241, 119, 2, 878, 879, 5, 211, 104, 2, 879, 880, 5, 111, 54, 2, 880, 881, 5, 233, 115, 2, 881, 882, 5, 203, 100, 2, 882, 883, 5, 237, 117, 2, 883, 884, 5, 239, 118, 2, 884, 885, 5, 211, 104, 2, 885, 1154, 3, 2, 2, 2, 886, 887, 5, 203, 100, 2, 887, 888, 5, 243, 120, 2, 888, 889, 5, 241, 119, 2, 889, 890, 5, 231, 114, 2, 890, 891, 5, 111, 54, 2, 891, 892, 5, 205, 101, 2, 892, 893, 5, 243, 120, 2, 893, 894, 5, 207, 102, 2, 894, 895, 5, 223, 110, 2, 895, 896, 5, 211, 104, 2, 896, 897, 5, 241, 119, 2, 897, 1154, 3, 2, 2, 2, 898, 899, 5, 219, 108, 2, 899, 900, 5, 239, 118, 2, 900, 901, 5, 111, 54, 2, 901, 902, 5, 213, 105, 2, 902, 903, 5, 219, 108, 2, 903, 904, 5, 229, 113, 2, 904, 905, 5, 219, 108, 2, 905, 906, 5, 241, 119, 2, 906, 907, 5, 211, 104, 2, 907, 1154, 3, 2, 2, 2, 908, 909, 5, 219, 108, 2, 909, 910, 5, 239, 118, 2, 910, 911, 5, 111, 54, 2, 911, 912, 5, 219, 108, 2, 912, 913, 5, 229, 113, 2, 913, 914, 5, 213, 105, 2, 914, 915, 5, 219, 108, 2, 915, 916, 5, 229, 113, 2, 916, 917, 5, 219, 108, 2, 917, 918, 5, 241, 119, 2, 918, 919, 5, 211, 104, 2, 919, 1154, 3, 2, 2, 2, 920, 921, 5, 207, 102, 2, 921, 922, 5, 203, 100, 2, 922, 923, 5, 239, 118, 2, 923, 924, 5, 211, 104, 2, 924, 1154, 3, 2, 2, 2, 925, 926, 5, 225, 111, 2, 926, 927, 5, 211, 104, 2, 927, 928, 5, 229, 113, 2, 928, 929, 5, 215, 106, 2, 929, 930, 5, 241, 119, 2, 930, 931, 5, 217, 107, 2, 931, 1154, 3, 2, 2, 2, 932, 933, 5, 227, 112, 2, 933, 934, 5, 245, 121, 2, 934, 935, 5, 111, 54, 2, 935, 936, 5, 227, 112, 2, 936, 937, 5, 203, 100, 2, 937, 938, 5, 249, 123, 2, 938, 1154, 3, 2, 2, 2, 939, 940, 5, 227, 112, 2, 940, 941, 5, 245, 121, 2, 941, 942, 5, 111, 54, 2, 942, 943, 5, 227, 112, 2, 943, 944, 5, 219, 108, 2, 944, 945, 5, 229, 113, 2, 945, 1154, 3, 2, 2, 2, 946, 947, 5, 227, 112, 2, 947, 948, 5, 245, 121, 2, 948, 949, 5, 111, 54, 2, 949, 950, 5, 203, 100, 2, 950, 951, 5, 245, 121, 2, 951, 952, 5, 215, 106, 2, 952, 1154, 3, 2, 2, 2, 953, 954, 5, 227, 112, 2, 954, 955, 5, 245, 121, 2, 955, 956, 5, 111, 54, 2, 956, 957, 5, 239, 118, 2, 957, 958, 5, 243, 120, 2, 958, 959, 5, 227, 112, 2, 959, 1154, 3, 2, 2, 2, 960, 961, 5, 227, 112, 2, 961, 962, 5, 245, 121, 2, 962, 963, 5, 111, 54, 2, 963, 964, 5, 207, 102, 2, 964, 965, 5, 231, 114, 2, 965, 966, 5, 243, 120, 2, 966, 967, 5, 229, 113, 2, 967, 968, 5, 241, 119, 2, 968, 1154, 3, 2, 2, 2, 969, 970, 5, 227, 112, 2, 970, 971, 5, 245, 121, 2, 971, 972, 5, 111, 54, 2, 972, 973, 5, 207, 102, 2, 973, 974, 5, 231, 114, 2, 974, 975, 5, 229, 113, 2, 975, 976, 5, 207, 102, 2, 976, 977, 5, 203, 100, 2, 977, 978, 5, 241, 119, 2, 978, 1154, 3, 2, 2, 2, 979, 980, 5, 227, 112, 2, 980, 981, 5, 245, 121, 2, 981, 982, 5, 111, 54, 2, 982, 983, 5, 221, 109, 2, 983, 984, 5, 231, 114, 2, 984, 985, 5, 219, 108, 2, 985, 986, 5, 229, 113, 2, 986, 1154, 3, 2, 2, 2, 987, 988, 5, 227, 112, 2, 988, 989, 5, 245, 121, 2, 989, 990, 5, 111, 54, 2, 990, 991, 5, 227, 112, 2, 991, 992, 5, 211, 104, 2, 992, 993, 5, 209, 103, 2, 993, 994, 5, 219, 108, 2, 994, 995, 5, 203, 100, 2, 995, 996, 5, 229, 113, 2, 996, 1154, 3, 2, 2, 2, 997, 998, 5, 227, 112, 2, 998, 999, 5, 245, 121, 2, 999, 1000, 5, 111, 54, 2, 1000, 1001, 5, 209, 103, 2, 1001, 1002, 5, 211, 104, 2, 1002, 1003, 5, 209, 103, 2, 1003, 1004, 5, 243, 120, 2, 1004, 1005, 5, 233, 115, 2, 1005, 1006, 5, 211, 104, 2, 1006, 1154, 3, 2, 2, 2, 1007, 1008, 5, 227, 112, 2, 1008, 1009, 5, 211, 104, 2, 1009, 1010, 5, 241, 119, 2, 1010, 1011, 5, 203, 100, 2, 1011, 1012, 5, 209, 103, 2, 1012, 1013, 5, 203, 100, 2, 1013, 1014, 5, 241, 119, 2, 1014, 1015, 5, 203, 100, 2, 1015, 1154, 3, 2, 2, 2, 1016, 1017, 5, 239, 118, 2, 1017, 1018, 5, 233, 115, 2, 1018, 1019, 5, 225, 111, 2, 1019, 1020, 5, 219, 108, 2, 1020, 1021, 5, 241, 119, 2, 1021, 1154, 3, 2, 2, 2, 1022, 1023, 5, 241, 119, 2, 1023, 1024, 5, 231, 114, 2, 1024, 1025, 5, 111, 54, 2, 1025, 1026, 5, 239, 118, 2, 1026, 1027, 5, 241, 119, 2, 1027, 1028, 5, 237, 117, 2, 1028, 1029, 5, 219, 108, 2, 1029, 1030, 5, 229, 113, 2, 1030, 1031, 5, 215, 106, 2, 1031, 1154, 3, 2, 2, 2, 1032, 1033, 5, 241, 119, 2, 1033, 1034, 5, 231, 114, 2, 1034, 1035, 5, 111, 54, 2, 1035, 1036, 5, 239, 118, 2, 1036, 1037, 5, 241, 119, 2, 1037, 1038, 5, 237, 117, 2, 1038, 1154, 3, 2, 2, 2, 1039, 1040, 5, 241, 119, 2, 1040, 1041, 5, 231, 114, 2, 1041, 1042, 5, 111, 54, 2, 1042, 1043, 5, 205, 101, 2, 1043, 1044, 5, 231, 114, 2, 1044, 1045, 5, 231, 114, 2, 1045, 1046, 5, 225, 111, 2, 1046, 1154, 3, 2, 2, 2, 1047, 1048, 5, 241, 119, 2, 1048, 1049, 5, 231, 114, 2, 1049, 1050, 5, 111, 54, 2, 1050, 1051, 5, 205, 101, 2, 1051, 1052, 5, 231, 114, 2, 1052, 1053, 5, 231, 114, 2, 1053, 1054, 5, 225, 111, 2, 1054, 1055, 5, 211, 104, 2, 1055, 1056, 5, 203, 100, 2, 1056, 1057, 5, 229, 113, 2, 1057, 1154, 3, 2, 2, 2, 1058, 1059, 5, 241, 119, 2, 1059, 1060, 5, 231, 114, 2, 1060, 1061, 5, 111, 54, 2, 1061, 1062, 5, 209, 103, 2, 1062, 1063, 5, 203, 100, 2, 1063, 1064, 5, 241, 119, 2, 1064, 1065, 5, 211, 104, 2, 1065, 1066, 5, 241, 119, 2, 1066, 1067, 5, 219, 108, 2, 1067, 1068, 5, 227, 112, 2, 1068, 1069, 5, 211, 104, 2, 1069, 1154, 3, 2, 2, 2, 1070, 1071, 5, 241, 119, 2, 1071, 1072, 5, 231, 114, 2, 1072, 1073, 5, 111, 54, 2, 1073, 1074, 5, 209, 103, 2, 1074, 1075, 5, 241, 119, 2, 1075, 1154, 3, 2, 2, 2, 1076, 1077, 5, 241, 119, 2, 1077, 1078, 5, 231, 114, 2, 1078, 1079, 5, 111, 54, 2, 1079, 1080, 5, 209, 103, 2, 1080, 1081, 5, 205, 101, 2, 1081, 1082, 5, 225, 111, 2, 1082, 1154, 3, 2, 2, 2, 1083, 1084, 5, 241, 119, 2, 1084, 1085, 5, 231, 114, 2, 1085, 1086, 5, 111, 54, 2, 1086, 1087, 5, 209, 103, 2, 1087, 1088, 5, 231, 114, 2, 1088, 1089, 5, 243, 120, 2, 1089, 1090, 5, 205, 101, 2, 1090, 1091, 5, 225, 111, 2, 1091, 1092, 5, 211, 104, 2, 1092, 1154, 3, 2, 2, 2, 1093, 1094, 5, 241, 119, 2, 1094, 1095, 5, 231, 114, 2, 1095, 1096, 5, 111, 54, 2, 1096, 1097, 5, 219, 108, 2, 1097, 1098, 5, 229, 113, 2, 1098, 1099, 5, 241, 119, 2, 1099, 1154, 3, 2, 2, 2, 1100, 1101, 5, 241, 119, 2, 1101, 1102, 5, 231, 114, 2, 1102, 1103, 5, 111, 54, 2, 1103, 1104, 5, 219, 108, 2, 1104, 1105, 5, 229, 113, 2, 1105, 1106, 5, 241, 119, 2, 1106, 1107, 5, 211, 104, 2, 1107, 1108, 5, 215, 106, 2, 1108, 1109, 5, 211, 104, 2, 1109, 1110, 5, 237, 117, 2, 1110, 1154, 3, 2, 2, 2, 1111, 1112, 5, 241, 119, 2, 1112, 1113, 5, 231, 114, 2, 1113, 1114, 5, 111, 54, 2, 1114, 1115, 5, 225, 111, 2, 1115, 1116, 5, 231, 114, 2, 1116, 1117, 5, 229, 113, 2, 1117, 1118, 5, 215, 106, 2, 1118, 1154, 3, 2, 2, 2, 1119, 1120, 5, 241, 119, 2, 1120, 1121, 5, 231, 114, 2, 1121, 1122, 5, 111, 54, 2, 1122, 1123, 5, 219, 108, 2, 1123, 1124, 5, 233, 115, 2, 1124, 1154, 3, 2, 2, 2, 1125, 1126, 5, 241, 119, 2, 1126, 1127, 5, 231, 114, 2, 1127, 1128, 5, 111, 54, 2, 1128, 1129, 5, 245, 121, 2, 1129, 1130, 5, 211, 104, 2, 1130, 1131, 5, 237, 117, 2, 1131, 1132, 5, 239, 118, 2, 1132, 1133, 5, 219, 108, 2, 1133, 1134, 5, 231, 114, 2, 1134, 1135, 5, 229, 113, 2, 1135, 1154, 3, 2, 2, 2, 1136, 1137, 5, 241, 119, 2, 1137, 1138, 5, 231, 114, 2, 1138, 1139, 5, 111, 54, 2, 1139, 1140, 5, 243, 120, 2, 1140, 1141, 5, 229, 113, 2, 1141, 1142, 5, 239, 118, 2, 1142, 1143, 5, 219, 108, 2, 1143, 1144, 5, 215, 106, 2, 1144, 1145, 5, 229, 113, 2, 1145, 1146, 5, 211, 104, 2, 1146, 1147, 5, 209, 103, 2, 1147, 1148, 5, 111, 54, 2, 1148, 1149, 5, 225, 111, 2, 1149, 1150, 5, 231, 114, 2, 1150, 1151, 5, 229, 113, 2, 1151, 1152, 5, 215, 106, 2, 1152, 1154, 3, 2, 2, 2, 1153, 791, 3, 2, 2, 2, 1153, 797, 3, 2, 2, 2, 1153, 801, 3, 2, 2, 2, 1153, 805, 3, 2, 2, 2, 1153, 810, 3, 2, 2, 2, 1153, 813, 3, 2, 2, 2, 1153, 817, 3, 2, 2, 2, 1153, 818, 3, 2, 2, 2, 1153, 828, 3, 2, 2, 2, 1153, 833, 3, 2, 2, 2, 1153, 840, 3, 2, 2, 2, 1153, 852, 3, 2, 2, 2, 1153, 864, 3, 2, 2, 2, 1153, 875, 3, 2, 2, 2, 1153, 886, 3, 2, 2, 2, 1153, 898, 3, 2, 2, 2, 1153, 908, 3, 2, 2, 2, 1153, 920, 3, 2, 2, 2, 1153, 925, 3, 2, 2, 2, 1153, 932, 3, 2, 2, 2, 1153, 939, 3, 2, 2, 2, 1153, 946, 3, 2, 2, 2, 1153, 953, 3, 2, 2, 2, 1153, 960, 3, 2, 2, 2, 1153, 969, 3, 2, 2, 2, 1153, 979, 3, 2, 2, 2, 1153, 987, 3, 2, 2, 2, 1153, 997, 3, 2, 2, 2, 1153, 1007, 3, 2, 2, 2, 1153, 1016, 3, 2, 2, 2, 1153, 1022, 3, 2, 2, 2, 1153, 1032, 3, 2, 2, 2, 1153, 1039, 3, 2, 2, 2, 1153, 1047, 3, 2, 2, 2, 1153, 1058, 3, 2, 2, 2, 1153, 1070, 3, 2, 2, 2, 1153, 1076, 3, 2, 2, 2, 1153, 1083, 3, 2, 2, 2, 1153, 1093, 3, 2, 2, 2, 1153, 1100, 3, 2, 2, 2, 1153, 1111, 3, 2, 2, 2, 1153, 1119, 3, 2, 2, 2, 1153, 1125, 3, 2, 2, 2, 1153, 1136, 3, 2, 2, 2, 1154, 140, 3, 2, 2, 2, 1155, 1156, 5, 203, 100, 2, 1156, 1157, 5, 245, 121, 2, 1157, 1158, 5, 215, 106, 2, 1158, 1237, 3, 2, 2, 2, 1159, 1160, 5, 227, 112, 2, 1160, 1161, 5, 219, 108, 2, 1161, 1162, 5, 229, 113, 2, 1162, 1237, 3, 2, 2, 2, 1163, 1164, 5, 227, 112, 2, 1164, 1165, 5, 203, 100, 2, 1165, 1166, 5, 249, 123, 2, 1166, 1237, 3, 2, 2, 2, 1167, 1168, 5, 239, 118, 2, 1168, 1169, 5, 243, 120, 2, 1169, 1170, 5, 227, 112, 2, 1170, 1237, 3, 2, 2, 2, 1171, 1172, 5, 207, 102, 2, 1172, 1173, 5, 231, 114, 2, 1173, 1174, 5, 243, 120, 2, 1174, 1175, 5, 229, 113, 2, 1175, 1176, 5, 241, 119, 2, 1176, 1237, 3, 2, 2, 2, 1177, 1178, 5, 207, 102, 2, 1178, 1179, 5, 231, 114, 2, 1179, 1180, 5, 243, 120, 2, 1180, 1181, 5, 229, 113, 2, 1181, 1182, 5, 241, 119, 2, 1182, 1183, 5, 111, 54, 2, 1183, 1184, 5, 209, 103, 2, 1184, 1185, 5, 219, 108, 2, 1185, 1186, 5, 239, 118, 2, 1186, 1187, 5, 241, 119, 2, 1187, 1188, 5, 219, 108, 2, 1188, 1189, 5, 229, 113, 2, 1189, 1190, 5, 207, 102, 2, 1190, 1191, 5, 241, 119, 2, 1191, 1237, 3, 2, 2, 2, 1192, 1193, 5, 233, 115, 2, 1193, 1194, 5, 211, 104, 2, 1194, 1195, 5, 237, 117, 2, 1195, 1196, 5, 207, 102, 2, 1196, 1197, 5, 211, 104, 2, 1197, 1198, 5, 229, 113, 2, 1198, 1199, 5, 241, 119, 2, 1199, 1200, 5, 219, 108, 2, 1200, 1201, 5, 225, 111, 2, 1201, 1202, 5, 211, 104, 2, 1202, 1237, 3, 2, 2, 2, 1203, 1204, 5, 227, 112, 2, 1204, 1205, 5, 211, 104, 2, 1205, 1206, 5, 209, 103, 2, 1206, 1207, 5, 219, 108, 2, 1207, 1208, 5, 203, 100, 2, 1208, 1209, 5, 229, 113, 2, 1209, 1237, 3, 2, 2, 2, 1210, 1211, 5, 227, 112, 2, 1211, 1212, 5, 211, 104, 2, 1212, 1213, 5, 209, 103, 2, 1213, 1214, 5, 219, 108, 2, 1214, 1215, 5, 203, 100, 2, 1215, 1216, 5, 229, 113, 2, 1216, 1217, 5, 111, 54, 2, 1217, 1218, 5, 203, 100, 2, 1218, 1219, 5, 205, 101, 2, 1219, 1220, 5, 239, 118, 2, 1220, 1221, 5, 231, 114, 2, 1221, 1222, 5, 225, 111, 2, 1222, 1223, 5, 243, 120, 2, 1223, 1224, 5, 241, 119, 2, 1224, 1225, 5, 211, 104, 2, 1225, 1226, 5, 111, 54, 2, 1226, 1227, 5, 209, 103, 2, 1227, 1228, 5, 211, 104, 2, 1228, 1229, 5, 245, 121, 2, 1229, 1230, 5, 219, 108, 2, 1230, 1231, 5, 203, 100, 2, 1231, 1232, 5, 241, 119, 2, 1232, 1233, 5, 219, 108, 2, 1233, 1234, 5, 231, 114, 2, 1234, 1235, 5, 229, 113, 2, 1235, 1237, 3, 2, 2, 2, 1236, 1155, 3, 2, 2, 2, 1236, 1159, 3, 2, 2, 2, 1236, 1163, 3, 2, 2, 2, 1236, 1167, 3, 2, 2, 2, 1236, 1171, 3, 2, 2, 2, 1236, 1177, 3, 2, 2, 2, 1236, 1192, 3, 2, 2, 2, 1236, 1203, 3, 2, 2, 2, 1236, 1210, 3, 2, 2, 2, 1237, 142, 3, 2, 2, 2, 1238, 1239, 5, 207, 102, 2, 1239, 1240, 5, 219, 108, 2, 1240, 1241, 5, 209, 103, 2, 1241, 1242, 5, 237, 117, 2, 1242, 1243, 5, 111, 54, 2, 1243, 1244, 5, 227, 112, 2, 1244, 1245, 5, 203, 100, 2, 1245, 1246, 5, 241, 119, 2, 1246, 1247, 5, 207, 102, 2, 1247, 1248, 5, 217, 107, 2, 1248, 144, 3, 2, 2, 2, 1249, 1256, 5, 61, 29, 2, 1250, 1255, 5, 61, 29, 2, 1251, 1255, 5, 59, 28, 2, 1252, 1255, 7, 97, 2, 2, 1253, 1255, 5, 125, 61, 2, 1254, 1250, 3, 2, 2, 2, 1254, 1251, 3, 2, 2, 2, 1254, 1252, 3, 2, 2, 2, 1254, 1253, 3, 2, 2, 2, 1255, 1258, 3, 2, 2, 2, 1256, 1254, 3, 2, 2, 2, 1256, 1257, 3, 2, 2, 2, 1257, 1269, 3, 2, 2, 2, 1258, 1256, 3, 2, 2, 2, 1259, 1264, 9, 10, 2, 2, 1260, 1265, 5, 61, 29, 2, 1261, 1265, 5, 59, 28, 2, 1262, 1265, 7, 97, 2, 2, 1263, 1265, 5, 125, 61, 2, 1264, 1260, 3, 2, 2, 2, 1264, 1261, 3, 2, 2, 2, 1264, 1262, 3, 2, 2, 2, 1264, 1263, 3, 2, 2, 2, 1265, 1266, 3, 2, 2, 2, 1266, 1264, 3, 2, 2, 2, 1266, 1267, 3, 2, 2, 2, 1267, 1269, 3, 2, 2, 2, 1268, 1249, 3, 2, 2, 2, 1268, 1259, 3, 2, 2, 2, 1269, 146, 3, 2, 2, 2, 1270, 1276, 7, 98, 2, 2, 1271, 1275, 10, 11, 2, 2, 1272, 1273, 7, 98, 2, 2, 1273, 1275, 7, 98, 2, 2, 1274, 1271, 3, 2, 2, 2, 1274, 1272, 3, 2, 2, 2, 1275, 1278, 3, 2, 2, 2, 1276, 1274, 3, 2, 2, 2, 1276, 1277, 3, 2, 2, 2, 1277, 1279, 3, 2, 2, 2, 1278, 1276, 3, 2, 2, 2, 1279, 1280, 7, 98, 2, 2, 1280, 148, 3, 2, 2, 2, 1281, 1282, 5, 41, 19, 2, 1282, 1283, 3, 2, 2, 2, 1283, 1284, 8, 73, 6, 2, 1284, 150, 3, 2, 2, 2, 1285, 1286, 5, 43, 20, 2, 1286, 1287, 3, 2, 2, 2, 1287, 1288, 8, 74, 6, 2, 1288, 152, 3, 2, 2, 2, 1289, 1290, 5, 45, 21, 2, 1290, 1291, 3, 2, 2, 2, 1291, 1292, 8, 75, 6, 2, 1292, 154, 3, 2, 2, 2, 1293, 1294, 7, 126, 2, 2, 1294, 1295, 3, 2, 2, 2, 1295, 1296, 8, 76, 9, 2, 1296, 1297, 8, 76, 10, 2, 1297, 156, 3, 2, 2, 2, 1298, 1299, 7, 93, 2, 2, 1299, 1300, 3, 2, 2, 2, 1300, 1301, 8, 77, 7, 2, 1301, 1302, 8, 77, 4, 2, 1302, 1303, 8, 77, 4, 2, 1303, 158, 3, 2, 2, 2, 1304, 1305, 7, 95, 2, 2, 1305, 1306, 3, 2, 2, 2, 1306, 1307, 8, 78, 10, 2, 1307, 1308, 8, 78, 10, 2, 1308, 1309, 8, 78, 11, 2, 1309, 160, 3, 2, 2, 2, 1310, 1311, 7, 46, 2, 2, 1311, 1312, 3, 2, 2, 2, 1312, 1313, 8, 79, 12, 2, 1313, 162, 3, 2, 2, 2, 1314, 1315, 7, 63, 2, 2, 1315, 1316, 3, 2, 2, 2, 1316, 1317, 8, 80, 13, 2, 1317, 164, 3, 2, 2, 2, 1318, 1319, 5, 227, 112, 2, 1319, 1320, 5, 211, 104, 2, 1320, 1321, 5, 241, 119, 2, 1321, 1322, 5, 203, 100, 2, 1322, 1323, 5, 209, 103, 2, 1323, 1324, 5, 203, 100, 2, 1324, 1325, 5, 241, 119, 2, 1325, 1326, 5, 203, 100, 2, 1326, 166, 3, 2, 2, 2, 1327, 1329, 5, 169, 83, 2, 1328, 1327, 3, 2, 2, 2, 1329, 1330, 3, 2, 2, 2, 1330, 1328, 3, 2, 2, 2, 1330, 1331, 3, 2, 2, 2, 1331, 168, 3, 2, 2, 2, 1332, 1334, 10, 12, 2, 2, 1333, 1332, 3, 2, 2, 2, 1334, 1335, 3, 2, 2, 2, 1335, 1333, 3, 2, 2, 2, 1335, 1336, 3, 2, 2, 2, 1336, 1340, 3, 2, 2, 2, 1337, 1338, 7, 49, 2, 2, 1338, 1340, 10, 13, 2, 2, 1339, 1333, 3, 2, 2, 2, 1339, 1337, 3, 2, 2, 2, 1340, 170, 3, 2, 2, 2, 1341, 1342, 5, 147, 72, 2, 1342, 172, 3, 2, 2, 2, 1343, 1344, 5, 41, 19, 2, 1344, 1345, 3, 2, 2, 2, 1345, 1346, 8, 85, 6, 2, 1346, 174, 3, 2, 2, 2, 1347, 1348, 5, 43, 20, 2, 1348, 1349, 3, 2, 2, 2, 1349, 1350, 8, 86, 6, 2, 1350, 176, 3, 2, 2, 2, 1351, 1352, 5, 45, 21, 2, 1352, 1353, 3, 2, 2, 2, 1353, 1354, 8, 87, 6, 2, 1354, 178, 3, 2, 2, 2, 1355, 1356, 5, 231, 114, 2, 1356, 1357, 5, 229, 113, 2, 1357, 180, 3, 2, 2, 2, 1358, 1359, 5, 247, 122, 2, 1359, 1360, 5, 219, 108, 2, 1360, 1361, 5, 241, 119, 2, 1361, 1362, 5, 217, 107, 2, 1362, 182, 3, 2, 2, 2, 1363, 1364, 7, 126, 2, 2, 1364, 1365, 3, 2, 2, 2, 1365, 1366, 8, 90, 9, 2, 1366, 1367, 8, 90, 10, 2, 1367, 184, 3, 2, 2, 2, 1368, 1369, 7, 95, 2, 2, 1369, 1370, 3, 2, 2, 2, 1370, 1371, 8, 91, 10, 2, 1371, 1372, 8, 91, 10, 2, 1372, 1373, 8, 91, 11, 2, 1373, 186, 3, 2, 2, 2, 1374, 1375, 7, 46, 2, 2, 1375, 1376, 3, 2, 2, 2, 1376, 1377, 8, 92, 12, 2, 1377, 188, 3, 2, 2, 2, 1378, 1379, 7, 63, 2, 2, 1379, 1380, 3, 2, 2, 2, 1380, 1381, 8, 93, 13, 2, 1381, 190, 3, 2, 2, 2, 1382, 1384, 5, 193, 95, 2, 1383, 1382, 3, 2, 2, 2, 1384, 1385, 3, 2, 2, 2, 1385, 1383, 3, 2, 2, 2, 1385, 1386, 3, 2, 2, 2, 1386, 192, 3, 2, 2, 2, 1387, 1389, 10, 12, 2, 2, 1388, 1387, 3, 2, 2, 2, 1389, 1390, 3, 2, 2, 2, 1390, 1388, 3, 2, 2, 2, 1390, 1391, 3, 2, 2, 2, 1391, 1395, 3, 2, 2, 2, 1392, 1393, 7, 49, 2, 2, 1393, 1395, 10, 13, 2, 2, 1394, 1388, 3, 2, 2, 2, 1394, 1392, 3, 2, 2, 2, 1395, 194, 3, 2, 2, 2, 1396, 1397, 5, 147, 72, 2, 1397, 196, 3, 2, 2, 2, 1398, 1399, 5, 41, 19, 2, 1399, 1400, 3, 2, 2, 2, 1400, 1401, 8, 97, 6, 2, 1401, 198, 3, 2, 2, 2, 1402, 1403, 5, 43, 20, 2, 1403, 1404, 3, 2, 2, 2, 1404, 1405, 8, 98, 6, 2, 1405, 200, 3, 2, 2, 2, 1406, 1407, 5, 45, 21, 2, 1407, 1408, 3, 2, 2, 2, 1408, 1409, 8, 99, 6, 2, 1409, 202, 3, 2, 2, 2, 1410, 1411, 9, 14, 2, 2, 1411, 204, 3, 2, 2, 2, 1412, 1413, 9, 15, 2, 2, 1413, 206, 3, 2, 2, 2, 1414, 1415, 9, 16, 2, 2, 1415, 208, 3, 2, 2, 2, 1416, 1417, 9, 17, 2, 2, 1417, 210, 3, 2, 2, 2, 1418, 1419, 9, 8, 2, 2, 1419, 212, 3, 2, 2, 2, 1420, 1421, 9, 18, 2, 2, 1421, 214, 3, 2, 2, 2, 1422, 1423, 9, 19, 2, 2, 1423, 216, 3, 2, 2, 2, 1424, 1425, 9, 20, 2, 2, 1425, 218, 3, 2, 2, 2, 1426, 1427, 9, 21, 2, 2, 1427, 220, 3, 2, 2, 2, 1428, 1429, 9, 22, 2, 2, 1429, 222, 3, 2, 2, 2, 1430, 1431, 9, 23, 2, 2, 1431, 224, 3, 2, 2, 2, 1432, 1433, 9, 24, 2, 2, 1433, 226, 3, 2, 2, 2, 1434, 1435, 9, 25, 2, 2, 1435, 228, 3, 2, 2, 2, 1436, 1437, 9, 26, 2, 2, 1437, 230, 3, 2, 2, 2, 1438, 1439, 9, 27, 2, 2, 1439, 232, 3, 2, 2, 2, 1440, 1441, 9, 28, 2, 2, 1441, 234, 3, 2, 2, 2, 1442, 1443, 9, 29, 2, 2, 1443, 236, 3, 2, 2, 2, 1444, 1445, 9, 30, 2, 2, 1445, 238, 3, 2, 2, 2, 1446, 1447, 9, 31, 2, 2, 1447, 240, 3, 2, 2, 2, 1448, 1449, 9, 32, 2, 2, 1449, 242, 3, 2, 2, 2, 1450, 1451, 9, 33, 2, 2, 1451, 244, 3, 2, 2, 2, 1452, 1453, 9, 34, 2, 2, 1453, 246, 3, 2, 2, 2, 1454, 1455, 9, 35, 2, 2, 1455, 248, 3, 2, 2, 2, 1456, 1457, 9, 36, 2, 2, 1457, 250, 3, 2, 2, 2, 1458, 1459, 9, 37, 2, 2, 1459, 252, 3, 2, 2, 2, 1460, 1461, 9, 38, 2, 2, 1461, 254, 3, 2, 2, 2, 50, 2, 3, 4, 5, 6, 400, 404, 407, 416, 418, 429, 470, 475, 480, 482, 493, 501, 504, 506, 511, 516, 522, 529, 534, 540, 543, 551, 555, 654, 738, 750, 772, 789, 1153, 1236, 1254, 1256, 1264, 1266, 1268, 1274, 1276, 1330, 1335, 1339, 1385, 1390, 1394, 14, 7, 4, 2, 7, 3, 2, 7, 5, 2, 7, 6, 2, 2, 3, 2, 9, 37, 2, 7, 2, 2, 9, 26, 2, 6, 2, 2, 9, 38, 2, 9, 34, 2, 9, 33, 2] \ No newline at end of file +[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 2, 83, 1600, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 4, 122, 9, 122, 4, 123, 9, 123, 4, 124, 9, 124, 4, 125, 9, 125, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 7, 19, 399, 10, 19, 12, 19, 14, 19, 402, 11, 19, 3, 19, 5, 19, 405, 10, 19, 3, 19, 5, 19, 408, 10, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 7, 20, 417, 10, 20, 12, 20, 14, 20, 420, 11, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 6, 21, 428, 10, 21, 13, 21, 14, 21, 429, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 5, 32, 471, 10, 32, 3, 32, 6, 32, 474, 10, 32, 13, 32, 14, 32, 475, 3, 33, 3, 33, 3, 33, 7, 33, 481, 10, 33, 12, 33, 14, 33, 484, 11, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 7, 33, 492, 10, 33, 12, 33, 14, 33, 495, 11, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 5, 33, 502, 10, 33, 3, 33, 5, 33, 505, 10, 33, 5, 33, 507, 10, 33, 3, 34, 6, 34, 510, 10, 34, 13, 34, 14, 34, 511, 3, 35, 6, 35, 515, 10, 35, 13, 35, 14, 35, 516, 3, 35, 3, 35, 7, 35, 521, 10, 35, 12, 35, 14, 35, 524, 11, 35, 3, 35, 3, 35, 6, 35, 528, 10, 35, 13, 35, 14, 35, 529, 3, 35, 6, 35, 533, 10, 35, 13, 35, 14, 35, 534, 3, 35, 3, 35, 7, 35, 539, 10, 35, 12, 35, 14, 35, 542, 11, 35, 5, 35, 544, 10, 35, 3, 35, 3, 35, 3, 35, 3, 35, 6, 35, 550, 10, 35, 13, 35, 14, 35, 551, 3, 35, 3, 35, 5, 35, 556, 10, 35, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 655, 10, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 5, 57, 739, 10, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 5, 58, 751, 10, 58, 3, 59, 3, 59, 3, 60, 3, 60, 3, 61, 3, 61, 3, 62, 3, 62, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 5, 65, 773, 10, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 5, 67, 790, 10, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 1222, 10, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 5, 69, 1375, 10, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 7, 71, 1393, 10, 71, 12, 71, 14, 71, 1396, 11, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 6, 71, 1403, 10, 71, 13, 71, 14, 71, 1404, 5, 71, 1407, 10, 71, 3, 72, 3, 72, 3, 72, 3, 72, 7, 72, 1413, 10, 72, 12, 72, 14, 72, 1416, 11, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 82, 6, 82, 1467, 10, 82, 13, 82, 14, 82, 1468, 3, 83, 6, 83, 1472, 10, 83, 13, 83, 14, 83, 1473, 3, 83, 3, 83, 5, 83, 1478, 10, 83, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 92, 3, 92, 3, 92, 3, 92, 3, 93, 3, 93, 3, 93, 3, 93, 3, 94, 6, 94, 1522, 10, 94, 13, 94, 14, 94, 1523, 3, 95, 6, 95, 1527, 10, 95, 13, 95, 14, 95, 1528, 3, 95, 3, 95, 5, 95, 1533, 10, 95, 3, 96, 3, 96, 3, 97, 3, 97, 3, 97, 3, 97, 3, 98, 3, 98, 3, 98, 3, 98, 3, 99, 3, 99, 3, 99, 3, 99, 3, 100, 3, 100, 3, 101, 3, 101, 3, 102, 3, 102, 3, 103, 3, 103, 3, 104, 3, 104, 3, 105, 3, 105, 3, 106, 3, 106, 3, 107, 3, 107, 3, 108, 3, 108, 3, 109, 3, 109, 3, 110, 3, 110, 3, 111, 3, 111, 3, 112, 3, 112, 3, 113, 3, 113, 3, 114, 3, 114, 3, 115, 3, 115, 3, 116, 3, 116, 3, 117, 3, 117, 3, 118, 3, 118, 3, 119, 3, 119, 3, 120, 3, 120, 3, 121, 3, 121, 3, 122, 3, 122, 3, 123, 3, 123, 3, 124, 3, 124, 3, 125, 3, 125, 4, 418, 493, 2, 2, 126, 7, 2, 3, 9, 2, 4, 11, 2, 5, 13, 2, 6, 15, 2, 7, 17, 2, 8, 19, 2, 9, 21, 2, 10, 23, 2, 11, 25, 2, 12, 27, 2, 13, 29, 2, 14, 31, 2, 15, 33, 2, 16, 35, 2, 17, 37, 2, 18, 39, 2, 19, 41, 2, 20, 43, 2, 21, 45, 2, 22, 47, 2, 2, 49, 2, 83, 51, 2, 23, 53, 2, 24, 55, 2, 25, 57, 2, 26, 59, 2, 2, 61, 2, 2, 63, 2, 2, 65, 2, 2, 67, 2, 2, 69, 2, 27, 71, 2, 28, 73, 2, 29, 75, 2, 30, 77, 2, 31, 79, 2, 32, 81, 2, 33, 83, 2, 34, 85, 2, 35, 87, 2, 36, 89, 2, 37, 91, 2, 38, 93, 2, 39, 95, 2, 40, 97, 2, 41, 99, 2, 42, 101, 2, 43, 103, 2, 44, 105, 2, 45, 107, 2, 46, 109, 2, 47, 111, 2, 48, 113, 2, 49, 115, 2, 50, 117, 2, 51, 119, 2, 52, 121, 2, 53, 123, 2, 54, 125, 2, 55, 127, 2, 56, 129, 2, 57, 131, 2, 58, 133, 2, 59, 135, 2, 60, 137, 2, 61, 139, 2, 62, 141, 2, 63, 143, 2, 64, 145, 2, 65, 147, 2, 66, 149, 2, 67, 151, 2, 68, 153, 2, 69, 155, 2, 2, 157, 2, 2, 159, 2, 2, 161, 2, 2, 163, 2, 2, 165, 2, 70, 167, 2, 71, 169, 2, 2, 171, 2, 72, 173, 2, 73, 175, 2, 74, 177, 2, 75, 179, 2, 76, 181, 2, 77, 183, 2, 2, 185, 2, 2, 187, 2, 2, 189, 2, 2, 191, 2, 78, 193, 2, 2, 195, 2, 79, 197, 2, 80, 199, 2, 81, 201, 2, 82, 203, 2, 2, 205, 2, 2, 207, 2, 2, 209, 2, 2, 211, 2, 2, 213, 2, 2, 215, 2, 2, 217, 2, 2, 219, 2, 2, 221, 2, 2, 223, 2, 2, 225, 2, 2, 227, 2, 2, 229, 2, 2, 231, 2, 2, 233, 2, 2, 235, 2, 2, 237, 2, 2, 239, 2, 2, 241, 2, 2, 243, 2, 2, 245, 2, 2, 247, 2, 2, 249, 2, 2, 251, 2, 2, 253, 2, 2, 7, 2, 3, 4, 5, 6, 39, 4, 2, 12, 12, 15, 15, 5, 2, 11, 12, 15, 15, 34, 34, 3, 2, 50, 59, 4, 2, 67, 92, 99, 124, 7, 2, 36, 36, 94, 94, 112, 112, 116, 116, 118, 118, 6, 2, 12, 12, 15, 15, 36, 36, 94, 94, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 4, 2, 66, 66, 97, 97, 3, 2, 98, 98, 12, 2, 11, 12, 15, 15, 34, 34, 46, 46, 49, 49, 63, 63, 93, 93, 95, 95, 98, 98, 126, 126, 4, 2, 44, 44, 49, 49, 4, 2, 67, 67, 99, 99, 4, 2, 68, 68, 100, 100, 4, 2, 69, 69, 101, 101, 4, 2, 70, 70, 102, 102, 4, 2, 72, 72, 104, 104, 4, 2, 73, 73, 105, 105, 4, 2, 74, 74, 106, 106, 4, 2, 75, 75, 107, 107, 4, 2, 76, 76, 108, 108, 4, 2, 77, 77, 109, 109, 4, 2, 78, 78, 110, 110, 4, 2, 79, 79, 111, 111, 4, 2, 80, 80, 112, 112, 4, 2, 81, 81, 113, 113, 4, 2, 82, 82, 114, 114, 4, 2, 83, 83, 115, 115, 4, 2, 84, 84, 116, 116, 4, 2, 85, 85, 117, 117, 4, 2, 86, 86, 118, 118, 4, 2, 87, 87, 119, 119, 4, 2, 88, 88, 120, 120, 4, 2, 89, 89, 121, 121, 4, 2, 90, 90, 122, 122, 4, 2, 91, 91, 123, 123, 4, 2, 92, 92, 124, 124, 2, 1700, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 3, 47, 3, 2, 2, 2, 3, 49, 3, 2, 2, 2, 3, 51, 3, 2, 2, 2, 3, 53, 3, 2, 2, 2, 3, 55, 3, 2, 2, 2, 4, 57, 3, 2, 2, 2, 4, 69, 3, 2, 2, 2, 4, 71, 3, 2, 2, 2, 4, 73, 3, 2, 2, 2, 4, 75, 3, 2, 2, 2, 4, 77, 3, 2, 2, 2, 4, 79, 3, 2, 2, 2, 4, 81, 3, 2, 2, 2, 4, 83, 3, 2, 2, 2, 4, 85, 3, 2, 2, 2, 4, 87, 3, 2, 2, 2, 4, 89, 3, 2, 2, 2, 4, 91, 3, 2, 2, 2, 4, 93, 3, 2, 2, 2, 4, 95, 3, 2, 2, 2, 4, 97, 3, 2, 2, 2, 4, 99, 3, 2, 2, 2, 4, 101, 3, 2, 2, 2, 4, 103, 3, 2, 2, 2, 4, 105, 3, 2, 2, 2, 4, 107, 3, 2, 2, 2, 4, 109, 3, 2, 2, 2, 4, 111, 3, 2, 2, 2, 4, 113, 3, 2, 2, 2, 4, 115, 3, 2, 2, 2, 4, 117, 3, 2, 2, 2, 4, 119, 3, 2, 2, 2, 4, 121, 3, 2, 2, 2, 4, 123, 3, 2, 2, 2, 4, 125, 3, 2, 2, 2, 4, 127, 3, 2, 2, 2, 4, 129, 3, 2, 2, 2, 4, 131, 3, 2, 2, 2, 4, 133, 3, 2, 2, 2, 4, 135, 3, 2, 2, 2, 4, 137, 3, 2, 2, 2, 4, 139, 3, 2, 2, 2, 4, 141, 3, 2, 2, 2, 4, 143, 3, 2, 2, 2, 4, 145, 3, 2, 2, 2, 4, 147, 3, 2, 2, 2, 4, 149, 3, 2, 2, 2, 4, 151, 3, 2, 2, 2, 4, 153, 3, 2, 2, 2, 5, 155, 3, 2, 2, 2, 5, 157, 3, 2, 2, 2, 5, 159, 3, 2, 2, 2, 5, 161, 3, 2, 2, 2, 5, 163, 3, 2, 2, 2, 5, 165, 3, 2, 2, 2, 5, 167, 3, 2, 2, 2, 5, 171, 3, 2, 2, 2, 5, 173, 3, 2, 2, 2, 5, 175, 3, 2, 2, 2, 5, 177, 3, 2, 2, 2, 6, 179, 3, 2, 2, 2, 6, 181, 3, 2, 2, 2, 6, 183, 3, 2, 2, 2, 6, 185, 3, 2, 2, 2, 6, 187, 3, 2, 2, 2, 6, 189, 3, 2, 2, 2, 6, 191, 3, 2, 2, 2, 6, 195, 3, 2, 2, 2, 6, 197, 3, 2, 2, 2, 6, 199, 3, 2, 2, 2, 6, 201, 3, 2, 2, 2, 7, 255, 3, 2, 2, 2, 9, 265, 3, 2, 2, 2, 11, 272, 3, 2, 2, 2, 13, 279, 3, 2, 2, 2, 15, 289, 3, 2, 2, 2, 17, 296, 3, 2, 2, 2, 19, 302, 3, 2, 2, 2, 21, 310, 3, 2, 2, 2, 23, 318, 3, 2, 2, 2, 25, 325, 3, 2, 2, 2, 27, 337, 3, 2, 2, 2, 29, 345, 3, 2, 2, 2, 31, 355, 3, 2, 2, 2, 33, 362, 3, 2, 2, 2, 35, 371, 3, 2, 2, 2, 37, 378, 3, 2, 2, 2, 39, 387, 3, 2, 2, 2, 41, 394, 3, 2, 2, 2, 43, 411, 3, 2, 2, 2, 45, 427, 3, 2, 2, 2, 47, 433, 3, 2, 2, 2, 49, 438, 3, 2, 2, 2, 51, 443, 3, 2, 2, 2, 53, 447, 3, 2, 2, 2, 55, 451, 3, 2, 2, 2, 57, 455, 3, 2, 2, 2, 59, 459, 3, 2, 2, 2, 61, 461, 3, 2, 2, 2, 63, 463, 3, 2, 2, 2, 65, 466, 3, 2, 2, 2, 67, 468, 3, 2, 2, 2, 69, 506, 3, 2, 2, 2, 71, 509, 3, 2, 2, 2, 73, 555, 3, 2, 2, 2, 75, 557, 3, 2, 2, 2, 77, 654, 3, 2, 2, 2, 79, 656, 3, 2, 2, 2, 81, 660, 3, 2, 2, 2, 83, 662, 3, 2, 2, 2, 85, 664, 3, 2, 2, 2, 87, 666, 3, 2, 2, 2, 89, 668, 3, 2, 2, 2, 91, 673, 3, 2, 2, 2, 93, 678, 3, 2, 2, 2, 95, 682, 3, 2, 2, 2, 97, 687, 3, 2, 2, 2, 99, 693, 3, 2, 2, 2, 101, 696, 3, 2, 2, 2, 103, 699, 3, 2, 2, 2, 105, 702, 3, 2, 2, 2, 107, 707, 3, 2, 2, 2, 109, 710, 3, 2, 2, 2, 111, 712, 3, 2, 2, 2, 113, 714, 3, 2, 2, 2, 115, 719, 3, 2, 2, 2, 117, 738, 3, 2, 2, 2, 119, 750, 3, 2, 2, 2, 121, 752, 3, 2, 2, 2, 123, 754, 3, 2, 2, 2, 125, 756, 3, 2, 2, 2, 127, 758, 3, 2, 2, 2, 129, 760, 3, 2, 2, 2, 131, 762, 3, 2, 2, 2, 133, 772, 3, 2, 2, 2, 135, 774, 3, 2, 2, 2, 137, 789, 3, 2, 2, 2, 139, 1221, 3, 2, 2, 2, 141, 1374, 3, 2, 2, 2, 143, 1376, 3, 2, 2, 2, 145, 1406, 3, 2, 2, 2, 147, 1408, 3, 2, 2, 2, 149, 1419, 3, 2, 2, 2, 151, 1423, 3, 2, 2, 2, 153, 1427, 3, 2, 2, 2, 155, 1431, 3, 2, 2, 2, 157, 1436, 3, 2, 2, 2, 159, 1442, 3, 2, 2, 2, 161, 1448, 3, 2, 2, 2, 163, 1452, 3, 2, 2, 2, 165, 1456, 3, 2, 2, 2, 167, 1466, 3, 2, 2, 2, 169, 1477, 3, 2, 2, 2, 171, 1479, 3, 2, 2, 2, 173, 1481, 3, 2, 2, 2, 175, 1485, 3, 2, 2, 2, 177, 1489, 3, 2, 2, 2, 179, 1493, 3, 2, 2, 2, 181, 1496, 3, 2, 2, 2, 183, 1501, 3, 2, 2, 2, 185, 1506, 3, 2, 2, 2, 187, 1512, 3, 2, 2, 2, 189, 1516, 3, 2, 2, 2, 191, 1521, 3, 2, 2, 2, 193, 1532, 3, 2, 2, 2, 195, 1534, 3, 2, 2, 2, 197, 1536, 3, 2, 2, 2, 199, 1540, 3, 2, 2, 2, 201, 1544, 3, 2, 2, 2, 203, 1548, 3, 2, 2, 2, 205, 1550, 3, 2, 2, 2, 207, 1552, 3, 2, 2, 2, 209, 1554, 3, 2, 2, 2, 211, 1556, 3, 2, 2, 2, 213, 1558, 3, 2, 2, 2, 215, 1560, 3, 2, 2, 2, 217, 1562, 3, 2, 2, 2, 219, 1564, 3, 2, 2, 2, 221, 1566, 3, 2, 2, 2, 223, 1568, 3, 2, 2, 2, 225, 1570, 3, 2, 2, 2, 227, 1572, 3, 2, 2, 2, 229, 1574, 3, 2, 2, 2, 231, 1576, 3, 2, 2, 2, 233, 1578, 3, 2, 2, 2, 235, 1580, 3, 2, 2, 2, 237, 1582, 3, 2, 2, 2, 239, 1584, 3, 2, 2, 2, 241, 1586, 3, 2, 2, 2, 243, 1588, 3, 2, 2, 2, 245, 1590, 3, 2, 2, 2, 247, 1592, 3, 2, 2, 2, 249, 1594, 3, 2, 2, 2, 251, 1596, 3, 2, 2, 2, 253, 1598, 3, 2, 2, 2, 255, 256, 5, 209, 103, 2, 256, 257, 5, 219, 108, 2, 257, 258, 5, 239, 118, 2, 258, 259, 5, 239, 118, 2, 259, 260, 5, 211, 104, 2, 260, 261, 5, 207, 102, 2, 261, 262, 5, 241, 119, 2, 262, 263, 3, 2, 2, 2, 263, 264, 8, 2, 2, 2, 264, 8, 3, 2, 2, 2, 265, 266, 5, 215, 106, 2, 266, 267, 5, 237, 117, 2, 267, 268, 5, 231, 114, 2, 268, 269, 5, 223, 110, 2, 269, 270, 3, 2, 2, 2, 270, 271, 8, 3, 2, 2, 271, 10, 3, 2, 2, 2, 272, 273, 5, 211, 104, 2, 273, 274, 5, 245, 121, 2, 274, 275, 5, 203, 100, 2, 275, 276, 5, 225, 111, 2, 276, 277, 3, 2, 2, 2, 277, 278, 8, 4, 2, 2, 278, 12, 3, 2, 2, 2, 279, 280, 5, 211, 104, 2, 280, 281, 5, 249, 123, 2, 281, 282, 5, 233, 115, 2, 282, 283, 5, 225, 111, 2, 283, 284, 5, 203, 100, 2, 284, 285, 5, 219, 108, 2, 285, 286, 5, 229, 113, 2, 286, 287, 3, 2, 2, 2, 287, 288, 8, 5, 3, 2, 288, 14, 3, 2, 2, 2, 289, 290, 5, 213, 105, 2, 290, 291, 5, 237, 117, 2, 291, 292, 5, 231, 114, 2, 292, 293, 5, 227, 112, 2, 293, 294, 3, 2, 2, 2, 294, 295, 8, 6, 4, 2, 295, 16, 3, 2, 2, 2, 296, 297, 5, 237, 117, 2, 297, 298, 5, 231, 114, 2, 298, 299, 5, 247, 122, 2, 299, 300, 3, 2, 2, 2, 300, 301, 8, 7, 2, 2, 301, 18, 3, 2, 2, 2, 302, 303, 5, 239, 118, 2, 303, 304, 5, 241, 119, 2, 304, 305, 5, 203, 100, 2, 305, 306, 5, 241, 119, 2, 306, 307, 5, 239, 118, 2, 307, 308, 3, 2, 2, 2, 308, 309, 8, 8, 2, 2, 309, 20, 3, 2, 2, 2, 310, 311, 5, 247, 122, 2, 311, 312, 5, 217, 107, 2, 312, 313, 5, 211, 104, 2, 313, 314, 5, 237, 117, 2, 314, 315, 5, 211, 104, 2, 315, 316, 3, 2, 2, 2, 316, 317, 8, 9, 2, 2, 317, 22, 3, 2, 2, 2, 318, 319, 5, 239, 118, 2, 319, 320, 5, 231, 114, 2, 320, 321, 5, 237, 117, 2, 321, 322, 5, 241, 119, 2, 322, 323, 3, 2, 2, 2, 323, 324, 8, 10, 2, 2, 324, 24, 3, 2, 2, 2, 325, 326, 5, 227, 112, 2, 326, 327, 5, 245, 121, 2, 327, 328, 5, 111, 54, 2, 328, 329, 5, 211, 104, 2, 329, 330, 5, 249, 123, 2, 330, 331, 5, 233, 115, 2, 331, 332, 5, 203, 100, 2, 332, 333, 5, 229, 113, 2, 333, 334, 5, 209, 103, 2, 334, 335, 3, 2, 2, 2, 335, 336, 8, 11, 2, 2, 336, 26, 3, 2, 2, 2, 337, 338, 5, 225, 111, 2, 338, 339, 5, 219, 108, 2, 339, 340, 5, 227, 112, 2, 340, 341, 5, 219, 108, 2, 341, 342, 5, 241, 119, 2, 342, 343, 3, 2, 2, 2, 343, 344, 8, 12, 2, 2, 344, 28, 3, 2, 2, 2, 345, 346, 5, 233, 115, 2, 346, 347, 5, 237, 117, 2, 347, 348, 5, 231, 114, 2, 348, 349, 5, 221, 109, 2, 349, 350, 5, 211, 104, 2, 350, 351, 5, 207, 102, 2, 351, 352, 5, 241, 119, 2, 352, 353, 3, 2, 2, 2, 353, 354, 8, 13, 2, 2, 354, 30, 3, 2, 2, 2, 355, 356, 5, 209, 103, 2, 356, 357, 5, 237, 117, 2, 357, 358, 5, 231, 114, 2, 358, 359, 5, 233, 115, 2, 359, 360, 3, 2, 2, 2, 360, 361, 8, 14, 2, 2, 361, 32, 3, 2, 2, 2, 362, 363, 5, 237, 117, 2, 363, 364, 5, 211, 104, 2, 364, 365, 5, 229, 113, 2, 365, 366, 5, 203, 100, 2, 366, 367, 5, 227, 112, 2, 367, 368, 5, 211, 104, 2, 368, 369, 3, 2, 2, 2, 369, 370, 8, 15, 2, 2, 370, 34, 3, 2, 2, 2, 371, 372, 5, 239, 118, 2, 372, 373, 5, 217, 107, 2, 373, 374, 5, 231, 114, 2, 374, 375, 5, 247, 122, 2, 375, 376, 3, 2, 2, 2, 376, 377, 8, 16, 2, 2, 377, 36, 3, 2, 2, 2, 378, 379, 5, 211, 104, 2, 379, 380, 5, 229, 113, 2, 380, 381, 5, 237, 117, 2, 381, 382, 5, 219, 108, 2, 382, 383, 5, 207, 102, 2, 383, 384, 5, 217, 107, 2, 384, 385, 3, 2, 2, 2, 385, 386, 8, 17, 5, 2, 386, 38, 3, 2, 2, 2, 387, 388, 5, 223, 110, 2, 388, 389, 5, 211, 104, 2, 389, 390, 5, 211, 104, 2, 390, 391, 5, 233, 115, 2, 391, 392, 3, 2, 2, 2, 392, 393, 8, 18, 2, 2, 393, 40, 3, 2, 2, 2, 394, 395, 7, 49, 2, 2, 395, 396, 7, 49, 2, 2, 396, 400, 3, 2, 2, 2, 397, 399, 10, 2, 2, 2, 398, 397, 3, 2, 2, 2, 399, 402, 3, 2, 2, 2, 400, 398, 3, 2, 2, 2, 400, 401, 3, 2, 2, 2, 401, 404, 3, 2, 2, 2, 402, 400, 3, 2, 2, 2, 403, 405, 7, 15, 2, 2, 404, 403, 3, 2, 2, 2, 404, 405, 3, 2, 2, 2, 405, 407, 3, 2, 2, 2, 406, 408, 7, 12, 2, 2, 407, 406, 3, 2, 2, 2, 407, 408, 3, 2, 2, 2, 408, 409, 3, 2, 2, 2, 409, 410, 8, 19, 6, 2, 410, 42, 3, 2, 2, 2, 411, 412, 7, 49, 2, 2, 412, 413, 7, 44, 2, 2, 413, 418, 3, 2, 2, 2, 414, 417, 5, 43, 20, 2, 415, 417, 11, 2, 2, 2, 416, 414, 3, 2, 2, 2, 416, 415, 3, 2, 2, 2, 417, 420, 3, 2, 2, 2, 418, 419, 3, 2, 2, 2, 418, 416, 3, 2, 2, 2, 419, 421, 3, 2, 2, 2, 420, 418, 3, 2, 2, 2, 421, 422, 7, 44, 2, 2, 422, 423, 7, 49, 2, 2, 423, 424, 3, 2, 2, 2, 424, 425, 8, 20, 6, 2, 425, 44, 3, 2, 2, 2, 426, 428, 9, 3, 2, 2, 427, 426, 3, 2, 2, 2, 428, 429, 3, 2, 2, 2, 429, 427, 3, 2, 2, 2, 429, 430, 3, 2, 2, 2, 430, 431, 3, 2, 2, 2, 431, 432, 8, 21, 6, 2, 432, 46, 3, 2, 2, 2, 433, 434, 7, 93, 2, 2, 434, 435, 3, 2, 2, 2, 435, 436, 8, 22, 7, 2, 436, 437, 8, 22, 8, 2, 437, 48, 3, 2, 2, 2, 438, 439, 7, 126, 2, 2, 439, 440, 3, 2, 2, 2, 440, 441, 8, 23, 9, 2, 441, 442, 8, 23, 10, 2, 442, 50, 3, 2, 2, 2, 443, 444, 5, 45, 21, 2, 444, 445, 3, 2, 2, 2, 445, 446, 8, 24, 6, 2, 446, 52, 3, 2, 2, 2, 447, 448, 5, 41, 19, 2, 448, 449, 3, 2, 2, 2, 449, 450, 8, 25, 6, 2, 450, 54, 3, 2, 2, 2, 451, 452, 5, 43, 20, 2, 452, 453, 3, 2, 2, 2, 453, 454, 8, 26, 6, 2, 454, 56, 3, 2, 2, 2, 455, 456, 7, 126, 2, 2, 456, 457, 3, 2, 2, 2, 457, 458, 8, 27, 10, 2, 458, 58, 3, 2, 2, 2, 459, 460, 9, 4, 2, 2, 460, 60, 3, 2, 2, 2, 461, 462, 9, 5, 2, 2, 462, 62, 3, 2, 2, 2, 463, 464, 7, 94, 2, 2, 464, 465, 9, 6, 2, 2, 465, 64, 3, 2, 2, 2, 466, 467, 10, 7, 2, 2, 467, 66, 3, 2, 2, 2, 468, 470, 9, 8, 2, 2, 469, 471, 9, 9, 2, 2, 470, 469, 3, 2, 2, 2, 470, 471, 3, 2, 2, 2, 471, 473, 3, 2, 2, 2, 472, 474, 5, 59, 28, 2, 473, 472, 3, 2, 2, 2, 474, 475, 3, 2, 2, 2, 475, 473, 3, 2, 2, 2, 475, 476, 3, 2, 2, 2, 476, 68, 3, 2, 2, 2, 477, 482, 7, 36, 2, 2, 478, 481, 5, 63, 30, 2, 479, 481, 5, 65, 31, 2, 480, 478, 3, 2, 2, 2, 480, 479, 3, 2, 2, 2, 481, 484, 3, 2, 2, 2, 482, 480, 3, 2, 2, 2, 482, 483, 3, 2, 2, 2, 483, 485, 3, 2, 2, 2, 484, 482, 3, 2, 2, 2, 485, 507, 7, 36, 2, 2, 486, 487, 7, 36, 2, 2, 487, 488, 7, 36, 2, 2, 488, 489, 7, 36, 2, 2, 489, 493, 3, 2, 2, 2, 490, 492, 10, 2, 2, 2, 491, 490, 3, 2, 2, 2, 492, 495, 3, 2, 2, 2, 493, 494, 3, 2, 2, 2, 493, 491, 3, 2, 2, 2, 494, 496, 3, 2, 2, 2, 495, 493, 3, 2, 2, 2, 496, 497, 7, 36, 2, 2, 497, 498, 7, 36, 2, 2, 498, 499, 7, 36, 2, 2, 499, 501, 3, 2, 2, 2, 500, 502, 7, 36, 2, 2, 501, 500, 3, 2, 2, 2, 501, 502, 3, 2, 2, 2, 502, 504, 3, 2, 2, 2, 503, 505, 7, 36, 2, 2, 504, 503, 3, 2, 2, 2, 504, 505, 3, 2, 2, 2, 505, 507, 3, 2, 2, 2, 506, 477, 3, 2, 2, 2, 506, 486, 3, 2, 2, 2, 507, 70, 3, 2, 2, 2, 508, 510, 5, 59, 28, 2, 509, 508, 3, 2, 2, 2, 510, 511, 3, 2, 2, 2, 511, 509, 3, 2, 2, 2, 511, 512, 3, 2, 2, 2, 512, 72, 3, 2, 2, 2, 513, 515, 5, 59, 28, 2, 514, 513, 3, 2, 2, 2, 515, 516, 3, 2, 2, 2, 516, 514, 3, 2, 2, 2, 516, 517, 3, 2, 2, 2, 517, 518, 3, 2, 2, 2, 518, 522, 5, 85, 41, 2, 519, 521, 5, 59, 28, 2, 520, 519, 3, 2, 2, 2, 521, 524, 3, 2, 2, 2, 522, 520, 3, 2, 2, 2, 522, 523, 3, 2, 2, 2, 523, 556, 3, 2, 2, 2, 524, 522, 3, 2, 2, 2, 525, 527, 5, 85, 41, 2, 526, 528, 5, 59, 28, 2, 527, 526, 3, 2, 2, 2, 528, 529, 3, 2, 2, 2, 529, 527, 3, 2, 2, 2, 529, 530, 3, 2, 2, 2, 530, 556, 3, 2, 2, 2, 531, 533, 5, 59, 28, 2, 532, 531, 3, 2, 2, 2, 533, 534, 3, 2, 2, 2, 534, 532, 3, 2, 2, 2, 534, 535, 3, 2, 2, 2, 535, 543, 3, 2, 2, 2, 536, 540, 5, 85, 41, 2, 537, 539, 5, 59, 28, 2, 538, 537, 3, 2, 2, 2, 539, 542, 3, 2, 2, 2, 540, 538, 3, 2, 2, 2, 540, 541, 3, 2, 2, 2, 541, 544, 3, 2, 2, 2, 542, 540, 3, 2, 2, 2, 543, 536, 3, 2, 2, 2, 543, 544, 3, 2, 2, 2, 544, 545, 3, 2, 2, 2, 545, 546, 5, 67, 32, 2, 546, 556, 3, 2, 2, 2, 547, 549, 5, 85, 41, 2, 548, 550, 5, 59, 28, 2, 549, 548, 3, 2, 2, 2, 550, 551, 3, 2, 2, 2, 551, 549, 3, 2, 2, 2, 551, 552, 3, 2, 2, 2, 552, 553, 3, 2, 2, 2, 553, 554, 5, 67, 32, 2, 554, 556, 3, 2, 2, 2, 555, 514, 3, 2, 2, 2, 555, 525, 3, 2, 2, 2, 555, 532, 3, 2, 2, 2, 555, 547, 3, 2, 2, 2, 556, 74, 3, 2, 2, 2, 557, 558, 7, 100, 2, 2, 558, 559, 7, 123, 2, 2, 559, 76, 3, 2, 2, 2, 560, 561, 7, 123, 2, 2, 561, 562, 7, 103, 2, 2, 562, 563, 7, 99, 2, 2, 563, 655, 7, 116, 2, 2, 564, 565, 7, 111, 2, 2, 565, 566, 7, 113, 2, 2, 566, 567, 7, 112, 2, 2, 567, 568, 7, 118, 2, 2, 568, 655, 7, 106, 2, 2, 569, 570, 7, 102, 2, 2, 570, 571, 7, 99, 2, 2, 571, 655, 7, 123, 2, 2, 572, 573, 7, 117, 2, 2, 573, 574, 7, 103, 2, 2, 574, 575, 7, 101, 2, 2, 575, 576, 7, 113, 2, 2, 576, 577, 7, 112, 2, 2, 577, 655, 7, 102, 2, 2, 578, 579, 7, 111, 2, 2, 579, 580, 7, 107, 2, 2, 580, 581, 7, 112, 2, 2, 581, 582, 7, 119, 2, 2, 582, 583, 7, 118, 2, 2, 583, 655, 7, 103, 2, 2, 584, 585, 7, 106, 2, 2, 585, 586, 7, 113, 2, 2, 586, 587, 7, 119, 2, 2, 587, 655, 7, 116, 2, 2, 588, 589, 7, 121, 2, 2, 589, 590, 7, 103, 2, 2, 590, 591, 7, 103, 2, 2, 591, 655, 7, 109, 2, 2, 592, 593, 7, 111, 2, 2, 593, 594, 7, 107, 2, 2, 594, 595, 7, 110, 2, 2, 595, 596, 7, 110, 2, 2, 596, 597, 7, 107, 2, 2, 597, 598, 7, 117, 2, 2, 598, 599, 7, 103, 2, 2, 599, 600, 7, 101, 2, 2, 600, 601, 7, 113, 2, 2, 601, 602, 7, 112, 2, 2, 602, 655, 7, 102, 2, 2, 603, 604, 7, 123, 2, 2, 604, 605, 7, 103, 2, 2, 605, 606, 7, 99, 2, 2, 606, 607, 7, 116, 2, 2, 607, 655, 7, 117, 2, 2, 608, 609, 7, 111, 2, 2, 609, 610, 7, 113, 2, 2, 610, 611, 7, 112, 2, 2, 611, 612, 7, 118, 2, 2, 612, 613, 7, 106, 2, 2, 613, 655, 7, 117, 2, 2, 614, 615, 7, 102, 2, 2, 615, 616, 7, 99, 2, 2, 616, 617, 7, 123, 2, 2, 617, 655, 7, 117, 2, 2, 618, 619, 7, 117, 2, 2, 619, 620, 7, 103, 2, 2, 620, 621, 7, 101, 2, 2, 621, 622, 7, 113, 2, 2, 622, 623, 7, 112, 2, 2, 623, 624, 7, 102, 2, 2, 624, 655, 7, 117, 2, 2, 625, 626, 7, 111, 2, 2, 626, 627, 7, 107, 2, 2, 627, 628, 7, 112, 2, 2, 628, 629, 7, 119, 2, 2, 629, 630, 7, 118, 2, 2, 630, 631, 7, 103, 2, 2, 631, 655, 7, 117, 2, 2, 632, 633, 7, 106, 2, 2, 633, 634, 7, 113, 2, 2, 634, 635, 7, 119, 2, 2, 635, 636, 7, 116, 2, 2, 636, 655, 7, 117, 2, 2, 637, 638, 7, 121, 2, 2, 638, 639, 7, 103, 2, 2, 639, 640, 7, 103, 2, 2, 640, 641, 7, 109, 2, 2, 641, 655, 7, 117, 2, 2, 642, 643, 7, 111, 2, 2, 643, 644, 7, 107, 2, 2, 644, 645, 7, 110, 2, 2, 645, 646, 7, 110, 2, 2, 646, 647, 7, 107, 2, 2, 647, 648, 7, 117, 2, 2, 648, 649, 7, 103, 2, 2, 649, 650, 7, 101, 2, 2, 650, 651, 7, 113, 2, 2, 651, 652, 7, 112, 2, 2, 652, 653, 7, 102, 2, 2, 653, 655, 7, 117, 2, 2, 654, 560, 3, 2, 2, 2, 654, 564, 3, 2, 2, 2, 654, 569, 3, 2, 2, 2, 654, 572, 3, 2, 2, 2, 654, 578, 3, 2, 2, 2, 654, 584, 3, 2, 2, 2, 654, 588, 3, 2, 2, 2, 654, 592, 3, 2, 2, 2, 654, 603, 3, 2, 2, 2, 654, 608, 3, 2, 2, 2, 654, 614, 3, 2, 2, 2, 654, 618, 3, 2, 2, 2, 654, 625, 3, 2, 2, 2, 654, 632, 3, 2, 2, 2, 654, 637, 3, 2, 2, 2, 654, 642, 3, 2, 2, 2, 655, 78, 3, 2, 2, 2, 656, 657, 7, 99, 2, 2, 657, 658, 7, 112, 2, 2, 658, 659, 7, 102, 2, 2, 659, 80, 3, 2, 2, 2, 660, 661, 7, 63, 2, 2, 661, 82, 3, 2, 2, 2, 662, 663, 7, 46, 2, 2, 663, 84, 3, 2, 2, 2, 664, 665, 7, 48, 2, 2, 665, 86, 3, 2, 2, 2, 666, 667, 7, 42, 2, 2, 667, 88, 3, 2, 2, 2, 668, 669, 7, 93, 2, 2, 669, 670, 3, 2, 2, 2, 670, 671, 8, 43, 2, 2, 671, 672, 8, 43, 2, 2, 672, 90, 3, 2, 2, 2, 673, 674, 7, 95, 2, 2, 674, 675, 3, 2, 2, 2, 675, 676, 8, 44, 10, 2, 676, 677, 8, 44, 10, 2, 677, 92, 3, 2, 2, 2, 678, 679, 5, 229, 113, 2, 679, 680, 5, 231, 114, 2, 680, 681, 5, 241, 119, 2, 681, 94, 3, 2, 2, 2, 682, 683, 5, 225, 111, 2, 683, 684, 5, 219, 108, 2, 684, 685, 5, 223, 110, 2, 685, 686, 5, 211, 104, 2, 686, 96, 3, 2, 2, 2, 687, 688, 5, 237, 117, 2, 688, 689, 5, 225, 111, 2, 689, 690, 5, 219, 108, 2, 690, 691, 5, 223, 110, 2, 691, 692, 5, 211, 104, 2, 692, 98, 3, 2, 2, 2, 693, 694, 5, 219, 108, 2, 694, 695, 5, 229, 113, 2, 695, 100, 3, 2, 2, 2, 696, 697, 5, 219, 108, 2, 697, 698, 5, 239, 118, 2, 698, 102, 3, 2, 2, 2, 699, 700, 5, 203, 100, 2, 700, 701, 5, 239, 118, 2, 701, 104, 3, 2, 2, 2, 702, 703, 5, 229, 113, 2, 703, 704, 5, 243, 120, 2, 704, 705, 5, 225, 111, 2, 705, 706, 5, 225, 111, 2, 706, 106, 3, 2, 2, 2, 707, 708, 7, 113, 2, 2, 708, 709, 7, 116, 2, 2, 709, 108, 3, 2, 2, 2, 710, 711, 7, 43, 2, 2, 711, 110, 3, 2, 2, 2, 712, 713, 7, 97, 2, 2, 713, 112, 3, 2, 2, 2, 714, 715, 7, 107, 2, 2, 715, 716, 7, 112, 2, 2, 716, 717, 7, 104, 2, 2, 717, 718, 7, 113, 2, 2, 718, 114, 3, 2, 2, 2, 719, 720, 7, 104, 2, 2, 720, 721, 7, 119, 2, 2, 721, 722, 7, 112, 2, 2, 722, 723, 7, 101, 2, 2, 723, 724, 7, 118, 2, 2, 724, 725, 7, 107, 2, 2, 725, 726, 7, 113, 2, 2, 726, 727, 7, 112, 2, 2, 727, 728, 7, 117, 2, 2, 728, 116, 3, 2, 2, 2, 729, 730, 7, 118, 2, 2, 730, 731, 7, 116, 2, 2, 731, 732, 7, 119, 2, 2, 732, 739, 7, 103, 2, 2, 733, 734, 7, 104, 2, 2, 734, 735, 7, 99, 2, 2, 735, 736, 7, 110, 2, 2, 736, 737, 7, 117, 2, 2, 737, 739, 7, 103, 2, 2, 738, 729, 3, 2, 2, 2, 738, 733, 3, 2, 2, 2, 739, 118, 3, 2, 2, 2, 740, 741, 7, 63, 2, 2, 741, 751, 7, 63, 2, 2, 742, 743, 7, 35, 2, 2, 743, 751, 7, 63, 2, 2, 744, 751, 7, 62, 2, 2, 745, 746, 7, 62, 2, 2, 746, 751, 7, 63, 2, 2, 747, 751, 7, 64, 2, 2, 748, 749, 7, 64, 2, 2, 749, 751, 7, 63, 2, 2, 750, 740, 3, 2, 2, 2, 750, 742, 3, 2, 2, 2, 750, 744, 3, 2, 2, 2, 750, 745, 3, 2, 2, 2, 750, 747, 3, 2, 2, 2, 750, 748, 3, 2, 2, 2, 751, 120, 3, 2, 2, 2, 752, 753, 7, 45, 2, 2, 753, 122, 3, 2, 2, 2, 754, 755, 7, 47, 2, 2, 755, 124, 3, 2, 2, 2, 756, 757, 7, 44, 2, 2, 757, 126, 3, 2, 2, 2, 758, 759, 7, 49, 2, 2, 759, 128, 3, 2, 2, 2, 760, 761, 7, 39, 2, 2, 761, 130, 3, 2, 2, 2, 762, 763, 7, 51, 2, 2, 763, 764, 7, 50, 2, 2, 764, 132, 3, 2, 2, 2, 765, 766, 7, 99, 2, 2, 766, 767, 7, 117, 2, 2, 767, 773, 7, 101, 2, 2, 768, 769, 7, 102, 2, 2, 769, 770, 7, 103, 2, 2, 770, 771, 7, 117, 2, 2, 771, 773, 7, 101, 2, 2, 772, 765, 3, 2, 2, 2, 772, 768, 3, 2, 2, 2, 773, 134, 3, 2, 2, 2, 774, 775, 7, 112, 2, 2, 775, 776, 7, 119, 2, 2, 776, 777, 7, 110, 2, 2, 777, 778, 7, 110, 2, 2, 778, 779, 7, 117, 2, 2, 779, 136, 3, 2, 2, 2, 780, 781, 7, 104, 2, 2, 781, 782, 7, 107, 2, 2, 782, 783, 7, 116, 2, 2, 783, 784, 7, 117, 2, 2, 784, 790, 7, 118, 2, 2, 785, 786, 7, 110, 2, 2, 786, 787, 7, 99, 2, 2, 787, 788, 7, 117, 2, 2, 788, 790, 7, 118, 2, 2, 789, 780, 3, 2, 2, 2, 789, 785, 3, 2, 2, 2, 790, 138, 3, 2, 2, 2, 791, 792, 5, 237, 117, 2, 792, 793, 5, 231, 114, 2, 793, 794, 5, 243, 120, 2, 794, 795, 5, 229, 113, 2, 795, 796, 5, 209, 103, 2, 796, 1222, 3, 2, 2, 2, 797, 798, 5, 203, 100, 2, 798, 799, 5, 205, 101, 2, 799, 800, 5, 239, 118, 2, 800, 1222, 3, 2, 2, 2, 801, 802, 5, 233, 115, 2, 802, 803, 5, 231, 114, 2, 803, 804, 5, 247, 122, 2, 804, 1222, 3, 2, 2, 2, 805, 806, 5, 225, 111, 2, 806, 807, 5, 231, 114, 2, 807, 808, 5, 215, 106, 2, 808, 809, 5, 131, 64, 2, 809, 1222, 3, 2, 2, 2, 810, 811, 5, 233, 115, 2, 811, 812, 5, 219, 108, 2, 812, 1222, 3, 2, 2, 2, 813, 814, 5, 241, 119, 2, 814, 815, 5, 203, 100, 2, 815, 816, 5, 243, 120, 2, 816, 1222, 3, 2, 2, 2, 817, 1222, 5, 211, 104, 2, 818, 819, 5, 239, 118, 2, 819, 820, 5, 243, 120, 2, 820, 821, 5, 205, 101, 2, 821, 822, 5, 239, 118, 2, 822, 823, 5, 241, 119, 2, 823, 824, 5, 237, 117, 2, 824, 825, 5, 219, 108, 2, 825, 826, 5, 229, 113, 2, 826, 827, 5, 215, 106, 2, 827, 1222, 3, 2, 2, 2, 828, 829, 5, 241, 119, 2, 829, 830, 5, 237, 117, 2, 830, 831, 5, 219, 108, 2, 831, 832, 5, 227, 112, 2, 832, 1222, 3, 2, 2, 2, 833, 834, 5, 207, 102, 2, 834, 835, 5, 231, 114, 2, 835, 836, 5, 229, 113, 2, 836, 837, 5, 207, 102, 2, 837, 838, 5, 203, 100, 2, 838, 839, 5, 241, 119, 2, 839, 1222, 3, 2, 2, 2, 840, 841, 5, 207, 102, 2, 841, 842, 5, 231, 114, 2, 842, 843, 5, 203, 100, 2, 843, 844, 5, 225, 111, 2, 844, 845, 5, 211, 104, 2, 845, 846, 5, 239, 118, 2, 846, 847, 5, 207, 102, 2, 847, 848, 5, 211, 104, 2, 848, 1222, 3, 2, 2, 2, 849, 850, 5, 215, 106, 2, 850, 851, 5, 237, 117, 2, 851, 852, 5, 211, 104, 2, 852, 853, 5, 203, 100, 2, 853, 854, 5, 241, 119, 2, 854, 855, 5, 211, 104, 2, 855, 856, 5, 239, 118, 2, 856, 857, 5, 241, 119, 2, 857, 1222, 3, 2, 2, 2, 858, 859, 5, 225, 111, 2, 859, 860, 5, 211, 104, 2, 860, 861, 5, 213, 105, 2, 861, 862, 5, 241, 119, 2, 862, 1222, 3, 2, 2, 2, 863, 864, 5, 229, 113, 2, 864, 865, 5, 231, 114, 2, 865, 866, 5, 247, 122, 2, 866, 1222, 3, 2, 2, 2, 867, 868, 5, 237, 117, 2, 868, 869, 5, 219, 108, 2, 869, 870, 5, 215, 106, 2, 870, 871, 5, 217, 107, 2, 871, 872, 5, 241, 119, 2, 872, 1222, 3, 2, 2, 2, 873, 874, 5, 239, 118, 2, 874, 875, 5, 241, 119, 2, 875, 876, 5, 203, 100, 2, 876, 877, 5, 237, 117, 2, 877, 878, 5, 241, 119, 2, 878, 879, 5, 239, 118, 2, 879, 880, 5, 111, 54, 2, 880, 881, 5, 247, 122, 2, 881, 882, 5, 219, 108, 2, 882, 883, 5, 241, 119, 2, 883, 884, 5, 217, 107, 2, 884, 1222, 3, 2, 2, 2, 885, 886, 5, 209, 103, 2, 886, 887, 5, 203, 100, 2, 887, 888, 5, 241, 119, 2, 888, 889, 5, 211, 104, 2, 889, 890, 5, 111, 54, 2, 890, 891, 5, 213, 105, 2, 891, 892, 5, 231, 114, 2, 892, 893, 5, 237, 117, 2, 893, 894, 5, 227, 112, 2, 894, 895, 5, 203, 100, 2, 895, 896, 5, 241, 119, 2, 896, 1222, 3, 2, 2, 2, 897, 898, 5, 209, 103, 2, 898, 899, 5, 203, 100, 2, 899, 900, 5, 241, 119, 2, 900, 901, 5, 211, 104, 2, 901, 902, 5, 111, 54, 2, 902, 903, 5, 241, 119, 2, 903, 904, 5, 237, 117, 2, 904, 905, 5, 243, 120, 2, 905, 906, 5, 229, 113, 2, 906, 907, 5, 207, 102, 2, 907, 1222, 3, 2, 2, 2, 908, 909, 5, 209, 103, 2, 909, 910, 5, 203, 100, 2, 910, 911, 5, 241, 119, 2, 911, 912, 5, 211, 104, 2, 912, 913, 5, 111, 54, 2, 913, 914, 5, 233, 115, 2, 914, 915, 5, 203, 100, 2, 915, 916, 5, 237, 117, 2, 916, 917, 5, 239, 118, 2, 917, 918, 5, 211, 104, 2, 918, 1222, 3, 2, 2, 2, 919, 920, 5, 203, 100, 2, 920, 921, 5, 243, 120, 2, 921, 922, 5, 241, 119, 2, 922, 923, 5, 231, 114, 2, 923, 924, 5, 111, 54, 2, 924, 925, 5, 205, 101, 2, 925, 926, 5, 243, 120, 2, 926, 927, 5, 207, 102, 2, 927, 928, 5, 223, 110, 2, 928, 929, 5, 211, 104, 2, 929, 930, 5, 241, 119, 2, 930, 1222, 3, 2, 2, 2, 931, 932, 5, 209, 103, 2, 932, 933, 5, 203, 100, 2, 933, 934, 5, 241, 119, 2, 934, 935, 5, 211, 104, 2, 935, 936, 5, 111, 54, 2, 936, 937, 5, 211, 104, 2, 937, 938, 5, 249, 123, 2, 938, 939, 5, 241, 119, 2, 939, 940, 5, 237, 117, 2, 940, 941, 5, 203, 100, 2, 941, 942, 5, 207, 102, 2, 942, 943, 5, 241, 119, 2, 943, 1222, 3, 2, 2, 2, 944, 945, 5, 219, 108, 2, 945, 946, 5, 239, 118, 2, 946, 947, 5, 111, 54, 2, 947, 948, 5, 213, 105, 2, 948, 949, 5, 219, 108, 2, 949, 950, 5, 229, 113, 2, 950, 951, 5, 219, 108, 2, 951, 952, 5, 241, 119, 2, 952, 953, 5, 211, 104, 2, 953, 1222, 3, 2, 2, 2, 954, 955, 5, 219, 108, 2, 955, 956, 5, 239, 118, 2, 956, 957, 5, 111, 54, 2, 957, 958, 5, 219, 108, 2, 958, 959, 5, 229, 113, 2, 959, 960, 5, 213, 105, 2, 960, 961, 5, 219, 108, 2, 961, 962, 5, 229, 113, 2, 962, 963, 5, 219, 108, 2, 963, 964, 5, 241, 119, 2, 964, 965, 5, 211, 104, 2, 965, 1222, 3, 2, 2, 2, 966, 967, 5, 207, 102, 2, 967, 968, 5, 203, 100, 2, 968, 969, 5, 239, 118, 2, 969, 970, 5, 211, 104, 2, 970, 1222, 3, 2, 2, 2, 971, 972, 5, 225, 111, 2, 972, 973, 5, 211, 104, 2, 973, 974, 5, 229, 113, 2, 974, 975, 5, 215, 106, 2, 975, 976, 5, 241, 119, 2, 976, 977, 5, 217, 107, 2, 977, 1222, 3, 2, 2, 2, 978, 979, 5, 227, 112, 2, 979, 980, 5, 245, 121, 2, 980, 981, 5, 111, 54, 2, 981, 982, 5, 227, 112, 2, 982, 983, 5, 203, 100, 2, 983, 984, 5, 249, 123, 2, 984, 1222, 3, 2, 2, 2, 985, 986, 5, 227, 112, 2, 986, 987, 5, 245, 121, 2, 987, 988, 5, 111, 54, 2, 988, 989, 5, 227, 112, 2, 989, 990, 5, 219, 108, 2, 990, 991, 5, 229, 113, 2, 991, 1222, 3, 2, 2, 2, 992, 993, 5, 227, 112, 2, 993, 994, 5, 245, 121, 2, 994, 995, 5, 111, 54, 2, 995, 996, 5, 203, 100, 2, 996, 997, 5, 245, 121, 2, 997, 998, 5, 215, 106, 2, 998, 1222, 3, 2, 2, 2, 999, 1000, 5, 227, 112, 2, 1000, 1001, 5, 245, 121, 2, 1001, 1002, 5, 111, 54, 2, 1002, 1003, 5, 239, 118, 2, 1003, 1004, 5, 243, 120, 2, 1004, 1005, 5, 227, 112, 2, 1005, 1222, 3, 2, 2, 2, 1006, 1007, 5, 227, 112, 2, 1007, 1008, 5, 245, 121, 2, 1008, 1009, 5, 111, 54, 2, 1009, 1010, 5, 207, 102, 2, 1010, 1011, 5, 231, 114, 2, 1011, 1012, 5, 243, 120, 2, 1012, 1013, 5, 229, 113, 2, 1013, 1014, 5, 241, 119, 2, 1014, 1222, 3, 2, 2, 2, 1015, 1016, 5, 227, 112, 2, 1016, 1017, 5, 245, 121, 2, 1017, 1018, 5, 111, 54, 2, 1018, 1019, 5, 207, 102, 2, 1019, 1020, 5, 231, 114, 2, 1020, 1021, 5, 229, 113, 2, 1021, 1022, 5, 207, 102, 2, 1022, 1023, 5, 203, 100, 2, 1023, 1024, 5, 241, 119, 2, 1024, 1222, 3, 2, 2, 2, 1025, 1026, 5, 227, 112, 2, 1026, 1027, 5, 245, 121, 2, 1027, 1028, 5, 111, 54, 2, 1028, 1029, 5, 221, 109, 2, 1029, 1030, 5, 231, 114, 2, 1030, 1031, 5, 219, 108, 2, 1031, 1032, 5, 229, 113, 2, 1032, 1222, 3, 2, 2, 2, 1033, 1034, 5, 227, 112, 2, 1034, 1035, 5, 245, 121, 2, 1035, 1036, 5, 111, 54, 2, 1036, 1037, 5, 227, 112, 2, 1037, 1038, 5, 211, 104, 2, 1038, 1039, 5, 209, 103, 2, 1039, 1040, 5, 219, 108, 2, 1040, 1041, 5, 203, 100, 2, 1041, 1042, 5, 229, 113, 2, 1042, 1222, 3, 2, 2, 2, 1043, 1044, 5, 227, 112, 2, 1044, 1045, 5, 245, 121, 2, 1045, 1046, 5, 111, 54, 2, 1046, 1047, 5, 209, 103, 2, 1047, 1048, 5, 211, 104, 2, 1048, 1049, 5, 209, 103, 2, 1049, 1050, 5, 243, 120, 2, 1050, 1051, 5, 233, 115, 2, 1051, 1052, 5, 211, 104, 2, 1052, 1222, 3, 2, 2, 2, 1053, 1054, 5, 227, 112, 2, 1054, 1055, 5, 211, 104, 2, 1055, 1056, 5, 241, 119, 2, 1056, 1057, 5, 203, 100, 2, 1057, 1058, 5, 209, 103, 2, 1058, 1059, 5, 203, 100, 2, 1059, 1060, 5, 241, 119, 2, 1060, 1061, 5, 203, 100, 2, 1061, 1222, 3, 2, 2, 2, 1062, 1063, 5, 239, 118, 2, 1063, 1064, 5, 233, 115, 2, 1064, 1065, 5, 225, 111, 2, 1065, 1066, 5, 219, 108, 2, 1066, 1067, 5, 241, 119, 2, 1067, 1222, 3, 2, 2, 2, 1068, 1069, 5, 241, 119, 2, 1069, 1070, 5, 231, 114, 2, 1070, 1071, 5, 111, 54, 2, 1071, 1072, 5, 239, 118, 2, 1072, 1073, 5, 241, 119, 2, 1073, 1074, 5, 237, 117, 2, 1074, 1075, 5, 219, 108, 2, 1075, 1076, 5, 229, 113, 2, 1076, 1077, 5, 215, 106, 2, 1077, 1222, 3, 2, 2, 2, 1078, 1079, 5, 241, 119, 2, 1079, 1080, 5, 231, 114, 2, 1080, 1081, 5, 111, 54, 2, 1081, 1082, 5, 239, 118, 2, 1082, 1083, 5, 241, 119, 2, 1083, 1084, 5, 237, 117, 2, 1084, 1222, 3, 2, 2, 2, 1085, 1086, 5, 241, 119, 2, 1086, 1087, 5, 231, 114, 2, 1087, 1088, 5, 111, 54, 2, 1088, 1089, 5, 205, 101, 2, 1089, 1090, 5, 231, 114, 2, 1090, 1091, 5, 231, 114, 2, 1091, 1092, 5, 225, 111, 2, 1092, 1222, 3, 2, 2, 2, 1093, 1094, 5, 241, 119, 2, 1094, 1095, 5, 231, 114, 2, 1095, 1096, 5, 111, 54, 2, 1096, 1097, 5, 205, 101, 2, 1097, 1098, 5, 231, 114, 2, 1098, 1099, 5, 231, 114, 2, 1099, 1100, 5, 225, 111, 2, 1100, 1101, 5, 211, 104, 2, 1101, 1102, 5, 203, 100, 2, 1102, 1103, 5, 229, 113, 2, 1103, 1222, 3, 2, 2, 2, 1104, 1105, 5, 241, 119, 2, 1105, 1106, 5, 231, 114, 2, 1106, 1107, 5, 111, 54, 2, 1107, 1108, 5, 209, 103, 2, 1108, 1109, 5, 203, 100, 2, 1109, 1110, 5, 241, 119, 2, 1110, 1111, 5, 211, 104, 2, 1111, 1112, 5, 241, 119, 2, 1112, 1113, 5, 219, 108, 2, 1113, 1114, 5, 227, 112, 2, 1114, 1115, 5, 211, 104, 2, 1115, 1222, 3, 2, 2, 2, 1116, 1117, 5, 241, 119, 2, 1117, 1118, 5, 231, 114, 2, 1118, 1119, 5, 111, 54, 2, 1119, 1120, 5, 209, 103, 2, 1120, 1121, 5, 241, 119, 2, 1121, 1222, 3, 2, 2, 2, 1122, 1123, 5, 241, 119, 2, 1123, 1124, 5, 231, 114, 2, 1124, 1125, 5, 111, 54, 2, 1125, 1126, 5, 209, 103, 2, 1126, 1127, 5, 205, 101, 2, 1127, 1128, 5, 225, 111, 2, 1128, 1222, 3, 2, 2, 2, 1129, 1130, 5, 241, 119, 2, 1130, 1131, 5, 231, 114, 2, 1131, 1132, 5, 111, 54, 2, 1132, 1133, 5, 209, 103, 2, 1133, 1134, 5, 231, 114, 2, 1134, 1135, 5, 243, 120, 2, 1135, 1136, 5, 205, 101, 2, 1136, 1137, 5, 225, 111, 2, 1137, 1138, 5, 211, 104, 2, 1138, 1222, 3, 2, 2, 2, 1139, 1140, 5, 241, 119, 2, 1140, 1141, 5, 231, 114, 2, 1141, 1142, 5, 111, 54, 2, 1142, 1143, 5, 209, 103, 2, 1143, 1144, 5, 211, 104, 2, 1144, 1145, 5, 215, 106, 2, 1145, 1146, 5, 237, 117, 2, 1146, 1147, 5, 211, 104, 2, 1147, 1148, 5, 211, 104, 2, 1148, 1149, 5, 239, 118, 2, 1149, 1222, 3, 2, 2, 2, 1150, 1151, 5, 241, 119, 2, 1151, 1152, 5, 231, 114, 2, 1152, 1153, 5, 111, 54, 2, 1153, 1154, 5, 219, 108, 2, 1154, 1155, 5, 229, 113, 2, 1155, 1156, 5, 241, 119, 2, 1156, 1222, 3, 2, 2, 2, 1157, 1158, 5, 241, 119, 2, 1158, 1159, 5, 231, 114, 2, 1159, 1160, 5, 111, 54, 2, 1160, 1161, 5, 219, 108, 2, 1161, 1162, 5, 229, 113, 2, 1162, 1163, 5, 241, 119, 2, 1163, 1164, 5, 211, 104, 2, 1164, 1165, 5, 215, 106, 2, 1165, 1166, 5, 211, 104, 2, 1166, 1167, 5, 237, 117, 2, 1167, 1222, 3, 2, 2, 2, 1168, 1169, 5, 241, 119, 2, 1169, 1170, 5, 231, 114, 2, 1170, 1171, 5, 111, 54, 2, 1171, 1172, 5, 219, 108, 2, 1172, 1173, 5, 233, 115, 2, 1173, 1222, 3, 2, 2, 2, 1174, 1175, 5, 241, 119, 2, 1175, 1176, 5, 231, 114, 2, 1176, 1177, 5, 111, 54, 2, 1177, 1178, 5, 225, 111, 2, 1178, 1179, 5, 231, 114, 2, 1179, 1180, 5, 229, 113, 2, 1180, 1181, 5, 215, 106, 2, 1181, 1222, 3, 2, 2, 2, 1182, 1183, 5, 241, 119, 2, 1183, 1184, 5, 231, 114, 2, 1184, 1185, 5, 111, 54, 2, 1185, 1186, 5, 237, 117, 2, 1186, 1187, 5, 203, 100, 2, 1187, 1188, 5, 209, 103, 2, 1188, 1189, 5, 219, 108, 2, 1189, 1190, 5, 203, 100, 2, 1190, 1191, 5, 229, 113, 2, 1191, 1192, 5, 239, 118, 2, 1192, 1222, 3, 2, 2, 2, 1193, 1194, 5, 241, 119, 2, 1194, 1195, 5, 231, 114, 2, 1195, 1196, 5, 111, 54, 2, 1196, 1197, 5, 245, 121, 2, 1197, 1198, 5, 211, 104, 2, 1198, 1199, 5, 237, 117, 2, 1199, 1200, 5, 239, 118, 2, 1200, 1201, 5, 219, 108, 2, 1201, 1202, 5, 231, 114, 2, 1202, 1203, 5, 229, 113, 2, 1203, 1222, 3, 2, 2, 2, 1204, 1205, 5, 241, 119, 2, 1205, 1206, 5, 231, 114, 2, 1206, 1207, 5, 111, 54, 2, 1207, 1208, 5, 243, 120, 2, 1208, 1209, 5, 229, 113, 2, 1209, 1210, 5, 239, 118, 2, 1210, 1211, 5, 219, 108, 2, 1211, 1212, 5, 215, 106, 2, 1212, 1213, 5, 229, 113, 2, 1213, 1214, 5, 211, 104, 2, 1214, 1215, 5, 209, 103, 2, 1215, 1216, 5, 111, 54, 2, 1216, 1217, 5, 225, 111, 2, 1217, 1218, 5, 231, 114, 2, 1218, 1219, 5, 229, 113, 2, 1219, 1220, 5, 215, 106, 2, 1220, 1222, 3, 2, 2, 2, 1221, 791, 3, 2, 2, 2, 1221, 797, 3, 2, 2, 2, 1221, 801, 3, 2, 2, 2, 1221, 805, 3, 2, 2, 2, 1221, 810, 3, 2, 2, 2, 1221, 813, 3, 2, 2, 2, 1221, 817, 3, 2, 2, 2, 1221, 818, 3, 2, 2, 2, 1221, 828, 3, 2, 2, 2, 1221, 833, 3, 2, 2, 2, 1221, 840, 3, 2, 2, 2, 1221, 849, 3, 2, 2, 2, 1221, 858, 3, 2, 2, 2, 1221, 863, 3, 2, 2, 2, 1221, 867, 3, 2, 2, 2, 1221, 873, 3, 2, 2, 2, 1221, 885, 3, 2, 2, 2, 1221, 897, 3, 2, 2, 2, 1221, 908, 3, 2, 2, 2, 1221, 919, 3, 2, 2, 2, 1221, 931, 3, 2, 2, 2, 1221, 944, 3, 2, 2, 2, 1221, 954, 3, 2, 2, 2, 1221, 966, 3, 2, 2, 2, 1221, 971, 3, 2, 2, 2, 1221, 978, 3, 2, 2, 2, 1221, 985, 3, 2, 2, 2, 1221, 992, 3, 2, 2, 2, 1221, 999, 3, 2, 2, 2, 1221, 1006, 3, 2, 2, 2, 1221, 1015, 3, 2, 2, 2, 1221, 1025, 3, 2, 2, 2, 1221, 1033, 3, 2, 2, 2, 1221, 1043, 3, 2, 2, 2, 1221, 1053, 3, 2, 2, 2, 1221, 1062, 3, 2, 2, 2, 1221, 1068, 3, 2, 2, 2, 1221, 1078, 3, 2, 2, 2, 1221, 1085, 3, 2, 2, 2, 1221, 1093, 3, 2, 2, 2, 1221, 1104, 3, 2, 2, 2, 1221, 1116, 3, 2, 2, 2, 1221, 1122, 3, 2, 2, 2, 1221, 1129, 3, 2, 2, 2, 1221, 1139, 3, 2, 2, 2, 1221, 1150, 3, 2, 2, 2, 1221, 1157, 3, 2, 2, 2, 1221, 1168, 3, 2, 2, 2, 1221, 1174, 3, 2, 2, 2, 1221, 1182, 3, 2, 2, 2, 1221, 1193, 3, 2, 2, 2, 1221, 1204, 3, 2, 2, 2, 1222, 140, 3, 2, 2, 2, 1223, 1224, 5, 203, 100, 2, 1224, 1225, 5, 245, 121, 2, 1225, 1226, 5, 215, 106, 2, 1226, 1375, 3, 2, 2, 2, 1227, 1228, 5, 227, 112, 2, 1228, 1229, 5, 219, 108, 2, 1229, 1230, 5, 229, 113, 2, 1230, 1375, 3, 2, 2, 2, 1231, 1232, 5, 227, 112, 2, 1232, 1233, 5, 203, 100, 2, 1233, 1234, 5, 249, 123, 2, 1234, 1375, 3, 2, 2, 2, 1235, 1236, 5, 239, 118, 2, 1236, 1237, 5, 243, 120, 2, 1237, 1238, 5, 227, 112, 2, 1238, 1375, 3, 2, 2, 2, 1239, 1240, 5, 207, 102, 2, 1240, 1241, 5, 231, 114, 2, 1241, 1242, 5, 243, 120, 2, 1242, 1243, 5, 229, 113, 2, 1243, 1244, 5, 241, 119, 2, 1244, 1375, 3, 2, 2, 2, 1245, 1246, 5, 207, 102, 2, 1246, 1247, 5, 231, 114, 2, 1247, 1248, 5, 243, 120, 2, 1248, 1249, 5, 229, 113, 2, 1249, 1250, 5, 241, 119, 2, 1250, 1251, 5, 111, 54, 2, 1251, 1252, 5, 209, 103, 2, 1252, 1253, 5, 219, 108, 2, 1253, 1254, 5, 239, 118, 2, 1254, 1255, 5, 241, 119, 2, 1255, 1256, 5, 219, 108, 2, 1256, 1257, 5, 229, 113, 2, 1257, 1258, 5, 207, 102, 2, 1258, 1259, 5, 241, 119, 2, 1259, 1375, 3, 2, 2, 2, 1260, 1261, 5, 233, 115, 2, 1261, 1262, 5, 211, 104, 2, 1262, 1263, 5, 237, 117, 2, 1263, 1264, 5, 207, 102, 2, 1264, 1265, 5, 211, 104, 2, 1265, 1266, 5, 229, 113, 2, 1266, 1267, 5, 241, 119, 2, 1267, 1268, 5, 219, 108, 2, 1268, 1269, 5, 225, 111, 2, 1269, 1270, 5, 211, 104, 2, 1270, 1375, 3, 2, 2, 2, 1271, 1272, 5, 227, 112, 2, 1272, 1273, 5, 211, 104, 2, 1273, 1274, 5, 209, 103, 2, 1274, 1275, 5, 219, 108, 2, 1275, 1276, 5, 203, 100, 2, 1276, 1277, 5, 229, 113, 2, 1277, 1375, 3, 2, 2, 2, 1278, 1279, 5, 227, 112, 2, 1279, 1280, 5, 211, 104, 2, 1280, 1281, 5, 209, 103, 2, 1281, 1282, 5, 219, 108, 2, 1282, 1283, 5, 203, 100, 2, 1283, 1284, 5, 229, 113, 2, 1284, 1285, 5, 111, 54, 2, 1285, 1286, 5, 203, 100, 2, 1286, 1287, 5, 205, 101, 2, 1287, 1288, 5, 239, 118, 2, 1288, 1289, 5, 231, 114, 2, 1289, 1290, 5, 225, 111, 2, 1290, 1291, 5, 243, 120, 2, 1291, 1292, 5, 241, 119, 2, 1292, 1293, 5, 211, 104, 2, 1293, 1294, 5, 111, 54, 2, 1294, 1295, 5, 209, 103, 2, 1295, 1296, 5, 211, 104, 2, 1296, 1297, 5, 245, 121, 2, 1297, 1298, 5, 219, 108, 2, 1298, 1299, 5, 203, 100, 2, 1299, 1300, 5, 241, 119, 2, 1300, 1301, 5, 219, 108, 2, 1301, 1302, 5, 231, 114, 2, 1302, 1303, 5, 229, 113, 2, 1303, 1375, 3, 2, 2, 2, 1304, 1305, 5, 203, 100, 2, 1305, 1306, 5, 207, 102, 2, 1306, 1307, 5, 231, 114, 2, 1307, 1308, 5, 239, 118, 2, 1308, 1375, 3, 2, 2, 2, 1309, 1310, 5, 203, 100, 2, 1310, 1311, 5, 239, 118, 2, 1311, 1312, 5, 219, 108, 2, 1312, 1313, 5, 229, 113, 2, 1313, 1375, 3, 2, 2, 2, 1314, 1315, 5, 203, 100, 2, 1315, 1316, 5, 241, 119, 2, 1316, 1317, 5, 203, 100, 2, 1317, 1318, 5, 229, 113, 2, 1318, 1375, 3, 2, 2, 2, 1319, 1320, 5, 203, 100, 2, 1320, 1321, 5, 241, 119, 2, 1321, 1322, 5, 203, 100, 2, 1322, 1323, 5, 229, 113, 2, 1323, 1324, 7, 52, 2, 2, 1324, 1375, 3, 2, 2, 2, 1325, 1326, 5, 207, 102, 2, 1326, 1327, 5, 211, 104, 2, 1327, 1328, 5, 219, 108, 2, 1328, 1329, 5, 225, 111, 2, 1329, 1375, 3, 2, 2, 2, 1330, 1331, 5, 207, 102, 2, 1331, 1332, 5, 231, 114, 2, 1332, 1333, 5, 239, 118, 2, 1333, 1375, 3, 2, 2, 2, 1334, 1335, 5, 207, 102, 2, 1335, 1336, 5, 231, 114, 2, 1336, 1337, 5, 239, 118, 2, 1337, 1338, 5, 217, 107, 2, 1338, 1375, 3, 2, 2, 2, 1339, 1340, 5, 213, 105, 2, 1340, 1341, 5, 225, 111, 2, 1341, 1342, 5, 231, 114, 2, 1342, 1343, 5, 231, 114, 2, 1343, 1344, 5, 237, 117, 2, 1344, 1375, 3, 2, 2, 2, 1345, 1346, 5, 225, 111, 2, 1346, 1347, 5, 241, 119, 2, 1347, 1348, 5, 237, 117, 2, 1348, 1349, 5, 219, 108, 2, 1349, 1350, 5, 227, 112, 2, 1350, 1375, 3, 2, 2, 2, 1351, 1352, 5, 239, 118, 2, 1352, 1353, 5, 219, 108, 2, 1353, 1354, 5, 229, 113, 2, 1354, 1375, 3, 2, 2, 2, 1355, 1356, 5, 239, 118, 2, 1356, 1357, 5, 219, 108, 2, 1357, 1358, 5, 229, 113, 2, 1358, 1359, 5, 217, 107, 2, 1359, 1375, 3, 2, 2, 2, 1360, 1361, 5, 239, 118, 2, 1361, 1362, 5, 235, 116, 2, 1362, 1363, 5, 237, 117, 2, 1363, 1364, 5, 241, 119, 2, 1364, 1375, 3, 2, 2, 2, 1365, 1366, 5, 241, 119, 2, 1366, 1367, 5, 203, 100, 2, 1367, 1368, 5, 229, 113, 2, 1368, 1375, 3, 2, 2, 2, 1369, 1370, 5, 241, 119, 2, 1370, 1371, 5, 203, 100, 2, 1371, 1372, 5, 229, 113, 2, 1372, 1373, 5, 217, 107, 2, 1373, 1375, 3, 2, 2, 2, 1374, 1223, 3, 2, 2, 2, 1374, 1227, 3, 2, 2, 2, 1374, 1231, 3, 2, 2, 2, 1374, 1235, 3, 2, 2, 2, 1374, 1239, 3, 2, 2, 2, 1374, 1245, 3, 2, 2, 2, 1374, 1260, 3, 2, 2, 2, 1374, 1271, 3, 2, 2, 2, 1374, 1278, 3, 2, 2, 2, 1374, 1304, 3, 2, 2, 2, 1374, 1309, 3, 2, 2, 2, 1374, 1314, 3, 2, 2, 2, 1374, 1319, 3, 2, 2, 2, 1374, 1325, 3, 2, 2, 2, 1374, 1330, 3, 2, 2, 2, 1374, 1334, 3, 2, 2, 2, 1374, 1339, 3, 2, 2, 2, 1374, 1345, 3, 2, 2, 2, 1374, 1351, 3, 2, 2, 2, 1374, 1355, 3, 2, 2, 2, 1374, 1360, 3, 2, 2, 2, 1374, 1365, 3, 2, 2, 2, 1374, 1369, 3, 2, 2, 2, 1375, 142, 3, 2, 2, 2, 1376, 1377, 5, 207, 102, 2, 1377, 1378, 5, 219, 108, 2, 1378, 1379, 5, 209, 103, 2, 1379, 1380, 5, 237, 117, 2, 1380, 1381, 5, 111, 54, 2, 1381, 1382, 5, 227, 112, 2, 1382, 1383, 5, 203, 100, 2, 1383, 1384, 5, 241, 119, 2, 1384, 1385, 5, 207, 102, 2, 1385, 1386, 5, 217, 107, 2, 1386, 144, 3, 2, 2, 2, 1387, 1394, 5, 61, 29, 2, 1388, 1393, 5, 61, 29, 2, 1389, 1393, 5, 59, 28, 2, 1390, 1393, 7, 97, 2, 2, 1391, 1393, 5, 125, 61, 2, 1392, 1388, 3, 2, 2, 2, 1392, 1389, 3, 2, 2, 2, 1392, 1390, 3, 2, 2, 2, 1392, 1391, 3, 2, 2, 2, 1393, 1396, 3, 2, 2, 2, 1394, 1392, 3, 2, 2, 2, 1394, 1395, 3, 2, 2, 2, 1395, 1407, 3, 2, 2, 2, 1396, 1394, 3, 2, 2, 2, 1397, 1402, 9, 10, 2, 2, 1398, 1403, 5, 61, 29, 2, 1399, 1403, 5, 59, 28, 2, 1400, 1403, 7, 97, 2, 2, 1401, 1403, 5, 125, 61, 2, 1402, 1398, 3, 2, 2, 2, 1402, 1399, 3, 2, 2, 2, 1402, 1400, 3, 2, 2, 2, 1402, 1401, 3, 2, 2, 2, 1403, 1404, 3, 2, 2, 2, 1404, 1402, 3, 2, 2, 2, 1404, 1405, 3, 2, 2, 2, 1405, 1407, 3, 2, 2, 2, 1406, 1387, 3, 2, 2, 2, 1406, 1397, 3, 2, 2, 2, 1407, 146, 3, 2, 2, 2, 1408, 1414, 7, 98, 2, 2, 1409, 1413, 10, 11, 2, 2, 1410, 1411, 7, 98, 2, 2, 1411, 1413, 7, 98, 2, 2, 1412, 1409, 3, 2, 2, 2, 1412, 1410, 3, 2, 2, 2, 1413, 1416, 3, 2, 2, 2, 1414, 1412, 3, 2, 2, 2, 1414, 1415, 3, 2, 2, 2, 1415, 1417, 3, 2, 2, 2, 1416, 1414, 3, 2, 2, 2, 1417, 1418, 7, 98, 2, 2, 1418, 148, 3, 2, 2, 2, 1419, 1420, 5, 41, 19, 2, 1420, 1421, 3, 2, 2, 2, 1421, 1422, 8, 73, 6, 2, 1422, 150, 3, 2, 2, 2, 1423, 1424, 5, 43, 20, 2, 1424, 1425, 3, 2, 2, 2, 1425, 1426, 8, 74, 6, 2, 1426, 152, 3, 2, 2, 2, 1427, 1428, 5, 45, 21, 2, 1428, 1429, 3, 2, 2, 2, 1429, 1430, 8, 75, 6, 2, 1430, 154, 3, 2, 2, 2, 1431, 1432, 7, 126, 2, 2, 1432, 1433, 3, 2, 2, 2, 1433, 1434, 8, 76, 9, 2, 1434, 1435, 8, 76, 10, 2, 1435, 156, 3, 2, 2, 2, 1436, 1437, 7, 93, 2, 2, 1437, 1438, 3, 2, 2, 2, 1438, 1439, 8, 77, 7, 2, 1439, 1440, 8, 77, 4, 2, 1440, 1441, 8, 77, 4, 2, 1441, 158, 3, 2, 2, 2, 1442, 1443, 7, 95, 2, 2, 1443, 1444, 3, 2, 2, 2, 1444, 1445, 8, 78, 10, 2, 1445, 1446, 8, 78, 10, 2, 1446, 1447, 8, 78, 11, 2, 1447, 160, 3, 2, 2, 2, 1448, 1449, 7, 46, 2, 2, 1449, 1450, 3, 2, 2, 2, 1450, 1451, 8, 79, 12, 2, 1451, 162, 3, 2, 2, 2, 1452, 1453, 7, 63, 2, 2, 1453, 1454, 3, 2, 2, 2, 1454, 1455, 8, 80, 13, 2, 1455, 164, 3, 2, 2, 2, 1456, 1457, 5, 227, 112, 2, 1457, 1458, 5, 211, 104, 2, 1458, 1459, 5, 241, 119, 2, 1459, 1460, 5, 203, 100, 2, 1460, 1461, 5, 209, 103, 2, 1461, 1462, 5, 203, 100, 2, 1462, 1463, 5, 241, 119, 2, 1463, 1464, 5, 203, 100, 2, 1464, 166, 3, 2, 2, 2, 1465, 1467, 5, 169, 83, 2, 1466, 1465, 3, 2, 2, 2, 1467, 1468, 3, 2, 2, 2, 1468, 1466, 3, 2, 2, 2, 1468, 1469, 3, 2, 2, 2, 1469, 168, 3, 2, 2, 2, 1470, 1472, 10, 12, 2, 2, 1471, 1470, 3, 2, 2, 2, 1472, 1473, 3, 2, 2, 2, 1473, 1471, 3, 2, 2, 2, 1473, 1474, 3, 2, 2, 2, 1474, 1478, 3, 2, 2, 2, 1475, 1476, 7, 49, 2, 2, 1476, 1478, 10, 13, 2, 2, 1477, 1471, 3, 2, 2, 2, 1477, 1475, 3, 2, 2, 2, 1478, 170, 3, 2, 2, 2, 1479, 1480, 5, 147, 72, 2, 1480, 172, 3, 2, 2, 2, 1481, 1482, 5, 41, 19, 2, 1482, 1483, 3, 2, 2, 2, 1483, 1484, 8, 85, 6, 2, 1484, 174, 3, 2, 2, 2, 1485, 1486, 5, 43, 20, 2, 1486, 1487, 3, 2, 2, 2, 1487, 1488, 8, 86, 6, 2, 1488, 176, 3, 2, 2, 2, 1489, 1490, 5, 45, 21, 2, 1490, 1491, 3, 2, 2, 2, 1491, 1492, 8, 87, 6, 2, 1492, 178, 3, 2, 2, 2, 1493, 1494, 5, 231, 114, 2, 1494, 1495, 5, 229, 113, 2, 1495, 180, 3, 2, 2, 2, 1496, 1497, 5, 247, 122, 2, 1497, 1498, 5, 219, 108, 2, 1498, 1499, 5, 241, 119, 2, 1499, 1500, 5, 217, 107, 2, 1500, 182, 3, 2, 2, 2, 1501, 1502, 7, 126, 2, 2, 1502, 1503, 3, 2, 2, 2, 1503, 1504, 8, 90, 9, 2, 1504, 1505, 8, 90, 10, 2, 1505, 184, 3, 2, 2, 2, 1506, 1507, 7, 95, 2, 2, 1507, 1508, 3, 2, 2, 2, 1508, 1509, 8, 91, 10, 2, 1509, 1510, 8, 91, 10, 2, 1510, 1511, 8, 91, 11, 2, 1511, 186, 3, 2, 2, 2, 1512, 1513, 7, 46, 2, 2, 1513, 1514, 3, 2, 2, 2, 1514, 1515, 8, 92, 12, 2, 1515, 188, 3, 2, 2, 2, 1516, 1517, 7, 63, 2, 2, 1517, 1518, 3, 2, 2, 2, 1518, 1519, 8, 93, 13, 2, 1519, 190, 3, 2, 2, 2, 1520, 1522, 5, 193, 95, 2, 1521, 1520, 3, 2, 2, 2, 1522, 1523, 3, 2, 2, 2, 1523, 1521, 3, 2, 2, 2, 1523, 1524, 3, 2, 2, 2, 1524, 192, 3, 2, 2, 2, 1525, 1527, 10, 12, 2, 2, 1526, 1525, 3, 2, 2, 2, 1527, 1528, 3, 2, 2, 2, 1528, 1526, 3, 2, 2, 2, 1528, 1529, 3, 2, 2, 2, 1529, 1533, 3, 2, 2, 2, 1530, 1531, 7, 49, 2, 2, 1531, 1533, 10, 13, 2, 2, 1532, 1526, 3, 2, 2, 2, 1532, 1530, 3, 2, 2, 2, 1533, 194, 3, 2, 2, 2, 1534, 1535, 5, 147, 72, 2, 1535, 196, 3, 2, 2, 2, 1536, 1537, 5, 41, 19, 2, 1537, 1538, 3, 2, 2, 2, 1538, 1539, 8, 97, 6, 2, 1539, 198, 3, 2, 2, 2, 1540, 1541, 5, 43, 20, 2, 1541, 1542, 3, 2, 2, 2, 1542, 1543, 8, 98, 6, 2, 1543, 200, 3, 2, 2, 2, 1544, 1545, 5, 45, 21, 2, 1545, 1546, 3, 2, 2, 2, 1546, 1547, 8, 99, 6, 2, 1547, 202, 3, 2, 2, 2, 1548, 1549, 9, 14, 2, 2, 1549, 204, 3, 2, 2, 2, 1550, 1551, 9, 15, 2, 2, 1551, 206, 3, 2, 2, 2, 1552, 1553, 9, 16, 2, 2, 1553, 208, 3, 2, 2, 2, 1554, 1555, 9, 17, 2, 2, 1555, 210, 3, 2, 2, 2, 1556, 1557, 9, 8, 2, 2, 1557, 212, 3, 2, 2, 2, 1558, 1559, 9, 18, 2, 2, 1559, 214, 3, 2, 2, 2, 1560, 1561, 9, 19, 2, 2, 1561, 216, 3, 2, 2, 2, 1562, 1563, 9, 20, 2, 2, 1563, 218, 3, 2, 2, 2, 1564, 1565, 9, 21, 2, 2, 1565, 220, 3, 2, 2, 2, 1566, 1567, 9, 22, 2, 2, 1567, 222, 3, 2, 2, 2, 1568, 1569, 9, 23, 2, 2, 1569, 224, 3, 2, 2, 2, 1570, 1571, 9, 24, 2, 2, 1571, 226, 3, 2, 2, 2, 1572, 1573, 9, 25, 2, 2, 1573, 228, 3, 2, 2, 2, 1574, 1575, 9, 26, 2, 2, 1575, 230, 3, 2, 2, 2, 1576, 1577, 9, 27, 2, 2, 1577, 232, 3, 2, 2, 2, 1578, 1579, 9, 28, 2, 2, 1579, 234, 3, 2, 2, 2, 1580, 1581, 9, 29, 2, 2, 1581, 236, 3, 2, 2, 2, 1582, 1583, 9, 30, 2, 2, 1583, 238, 3, 2, 2, 2, 1584, 1585, 9, 31, 2, 2, 1585, 240, 3, 2, 2, 2, 1586, 1587, 9, 32, 2, 2, 1587, 242, 3, 2, 2, 2, 1588, 1589, 9, 33, 2, 2, 1589, 244, 3, 2, 2, 2, 1590, 1591, 9, 34, 2, 2, 1591, 246, 3, 2, 2, 2, 1592, 1593, 9, 35, 2, 2, 1593, 248, 3, 2, 2, 2, 1594, 1595, 9, 36, 2, 2, 1595, 250, 3, 2, 2, 2, 1596, 1597, 9, 37, 2, 2, 1597, 252, 3, 2, 2, 2, 1598, 1599, 9, 38, 2, 2, 1599, 254, 3, 2, 2, 2, 50, 2, 3, 4, 5, 6, 400, 404, 407, 416, 418, 429, 470, 475, 480, 482, 493, 501, 504, 506, 511, 516, 522, 529, 534, 540, 543, 551, 555, 654, 738, 750, 772, 789, 1221, 1374, 1392, 1394, 1402, 1404, 1406, 1412, 1414, 1468, 1473, 1477, 1523, 1528, 1532, 14, 7, 4, 2, 7, 3, 2, 7, 5, 2, 7, 6, 2, 2, 3, 2, 9, 37, 2, 7, 2, 2, 9, 26, 2, 6, 2, 2, 9, 38, 2, 9, 34, 2, 9, 33, 2] \ No newline at end of file diff --git a/packages/kbn-monaco/src/esql/antlr/esql_lexer.ts b/packages/kbn-monaco/src/esql/antlr/esql_lexer.ts index 890be82c6bade..1c5fc5a918aa4 100644 --- a/packages/kbn-monaco/src/esql/antlr/esql_lexer.ts +++ b/packages/kbn-monaco/src/esql/antlr/esql_lexer.ts @@ -195,7 +195,7 @@ export class esql_lexer extends Lexer { private static readonly _serializedATNSegments: number = 3; private static readonly _serializedATNSegment0: string = - "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02S\u05B6\b\x01" + + "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02S\u0640\b\x01" + "\b\x01\b\x01\b\x01\b\x01\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04" + "\x05\t\x05\x04\x06\t\x06\x04\x07\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04" + "\v\t\v\x04\f\t\f\x04\r\t\r\x04\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04" + @@ -285,216 +285,226 @@ export class esql_lexer extends Lexer { "D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03" + "D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03" + "D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03" + - "D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x05D\u0482" + - "\nD\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03" + + "D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03" + + "D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03" + + "D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03" + + "D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03" + + "D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03" + + "D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x03D\x05D\u04C6\nD\x03" + + "E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03" + + "E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03" + + "E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03" + + "E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03" + + "E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03" + + "E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03" + "E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03" + "E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03" + "E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03" + "E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03" + - "E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x05E\u04D5\n" + - "E\x03F\x03F\x03F\x03F\x03F\x03F\x03F\x03F\x03F\x03F\x03F\x03G\x03G\x03" + - "G\x03G\x03G\x07G\u04E7\nG\fG\x0EG\u04EA\vG\x03G\x03G\x03G\x03G\x03G\x06" + - "G\u04F1\nG\rG\x0EG\u04F2\x05G\u04F5\nG\x03H\x03H\x03H\x03H\x07H\u04FB" + - "\nH\fH\x0EH\u04FE\vH\x03H\x03H\x03I\x03I\x03I\x03I\x03J\x03J\x03J\x03" + - "J\x03K\x03K\x03K\x03K\x03L\x03L\x03L\x03L\x03L\x03M\x03M\x03M\x03M\x03" + - "M\x03M\x03N\x03N\x03N\x03N\x03N\x03N\x03O\x03O\x03O\x03O\x03P\x03P\x03" + - "P\x03P\x03Q\x03Q\x03Q\x03Q\x03Q\x03Q\x03Q\x03Q\x03Q\x03R\x06R\u0531\n" + - "R\rR\x0ER\u0532\x03S\x06S\u0536\nS\rS\x0ES\u0537\x03S\x03S\x05S\u053C" + - "\nS\x03T\x03T\x03U\x03U\x03U\x03U\x03V\x03V\x03V\x03V\x03W\x03W\x03W\x03" + - "W\x03X\x03X\x03X\x03Y\x03Y\x03Y\x03Y\x03Y\x03Z\x03Z\x03Z\x03Z\x03Z\x03" + - "[\x03[\x03[\x03[\x03[\x03[\x03\\\x03\\\x03\\\x03\\\x03]\x03]\x03]\x03" + - "]\x03^\x06^\u0568\n^\r^\x0E^\u0569\x03_\x06_\u056D\n_\r_\x0E_\u056E\x03" + - "_\x03_\x05_\u0573\n_\x03`\x03`\x03a\x03a\x03a\x03a\x03b\x03b\x03b\x03" + - "b\x03c\x03c\x03c\x03c\x03d\x03d\x03e\x03e\x03f\x03f\x03g\x03g\x03h\x03" + - "h\x03i\x03i\x03j\x03j\x03k\x03k\x03l\x03l\x03m\x03m\x03n\x03n\x03o\x03" + - "o\x03p\x03p\x03q\x03q\x03r\x03r\x03s\x03s\x03t\x03t\x03u\x03u\x03v\x03" + - "v\x03w\x03w\x03x\x03x\x03y\x03y\x03z\x03z\x03{\x03{\x03|\x03|\x03}\x03" + - "}\x04\u01A2\u01ED\x02\x02~\x07\x02\x03\t\x02\x04\v\x02\x05\r\x02\x06\x0F" + - "\x02\x07\x11\x02\b\x13\x02\t\x15\x02\n\x17\x02\v\x19\x02\f\x1B\x02\r\x1D" + - "\x02\x0E\x1F\x02\x0F!\x02\x10#\x02\x11%\x02\x12\'\x02\x13)\x02\x14+\x02" + - "\x15-\x02\x16/\x02\x021\x02S3\x02\x175\x02\x187\x02\x199\x02\x1A;\x02" + - "\x02=\x02\x02?\x02\x02A\x02\x02C\x02\x02E\x02\x1BG\x02\x1CI\x02\x1DK\x02" + - "\x1EM\x02\x1FO\x02 Q\x02!S\x02\"U\x02#W\x02$Y\x02%[\x02&]\x02\'_\x02(" + - "a\x02)c\x02*e\x02+g\x02,i\x02-k\x02.m\x02/o\x020q\x021s\x022u\x023w\x02" + - "4y\x025{\x026}\x027\x7F\x028\x81\x029\x83\x02:\x85\x02;\x87\x02<\x89\x02" + - "=\x8B\x02>\x8D\x02?\x8F\x02@\x91\x02A\x93\x02B\x95\x02C\x97\x02D\x99\x02" + - "E\x9B\x02\x02\x9D\x02\x02\x9F\x02\x02\xA1\x02\x02\xA3\x02\x02\xA5\x02" + - "F\xA7\x02G\xA9\x02\x02\xAB\x02H\xAD\x02I\xAF\x02J\xB1\x02K\xB3\x02L\xB5" + - "\x02M\xB7\x02\x02\xB9\x02\x02\xBB\x02\x02\xBD\x02\x02\xBF\x02N\xC1\x02" + - "\x02\xC3\x02O\xC5\x02P\xC7\x02Q\xC9\x02R\xCB\x02\x02\xCD\x02\x02\xCF\x02" + - "\x02\xD1\x02\x02\xD3\x02\x02\xD5\x02\x02\xD7\x02\x02\xD9\x02\x02\xDB\x02" + - "\x02\xDD\x02\x02\xDF\x02\x02\xE1\x02\x02\xE3\x02\x02\xE5\x02\x02\xE7\x02" + - "\x02\xE9\x02\x02\xEB\x02\x02\xED\x02\x02\xEF\x02\x02\xF1\x02\x02\xF3\x02" + - "\x02\xF5\x02\x02\xF7\x02\x02\xF9\x02\x02\xFB\x02\x02\xFD\x02\x02\x07\x02" + - "\x03\x04\x05\x06\'\x04\x02\f\f\x0F\x0F\x05\x02\v\f\x0F\x0F\"\"\x03\x02" + - "2;\x04\x02C\\c|\x07\x02$$^^ppttvv\x06\x02\f\f\x0F\x0F$$^^\x04\x02GGgg" + - "\x04\x02--//\x04\x02BBaa\x03\x02bb\f\x02\v\f\x0F\x0F\"\"..11??]]__bb~" + - "~\x04\x02,,11\x04\x02CCcc\x04\x02DDdd\x04\x02EEee\x04\x02FFff\x04\x02" + - "HHhh\x04\x02IIii\x04\x02JJjj\x04\x02KKkk\x04\x02LLll\x04\x02MMmm\x04\x02" + - "NNnn\x04\x02OOoo\x04\x02PPpp\x04\x02QQqq\x04\x02RRrr\x04\x02SSss\x04\x02" + - "TTtt\x04\x02UUuu\x04\x02VVvv\x04\x02WWww\x04\x02XXxx\x04\x02YYyy\x04\x02" + - "ZZzz\x04\x02[[{{\x04\x02\\\\||\x02\u0604\x02\x07\x03\x02\x02\x02\x02\t" + - "\x03\x02\x02\x02\x02\v\x03\x02\x02\x02\x02\r\x03\x02\x02\x02\x02\x0F\x03" + - "\x02\x02\x02\x02\x11\x03\x02\x02\x02\x02\x13\x03\x02\x02\x02\x02\x15\x03" + - "\x02\x02\x02\x02\x17\x03\x02\x02\x02\x02\x19\x03\x02\x02\x02\x02\x1B\x03" + - "\x02\x02\x02\x02\x1D\x03\x02\x02\x02\x02\x1F\x03\x02\x02\x02\x02!\x03" + - "\x02\x02\x02\x02#\x03\x02\x02\x02\x02%\x03\x02\x02\x02\x02\'\x03\x02\x02" + - "\x02\x02)\x03\x02\x02\x02\x02+\x03\x02\x02\x02\x02-\x03\x02\x02\x02\x03" + - "/\x03\x02\x02\x02\x031\x03\x02\x02\x02\x033\x03\x02\x02\x02\x035\x03\x02" + - "\x02\x02\x037\x03\x02\x02\x02\x049\x03\x02\x02\x02\x04E\x03\x02\x02\x02" + - "\x04G\x03\x02\x02\x02\x04I\x03\x02\x02\x02\x04K\x03\x02\x02\x02\x04M\x03" + - "\x02\x02\x02\x04O\x03\x02\x02\x02\x04Q\x03\x02\x02\x02\x04S\x03\x02\x02" + - "\x02\x04U\x03\x02\x02\x02\x04W\x03\x02\x02\x02\x04Y\x03\x02\x02\x02\x04" + - "[\x03\x02\x02\x02\x04]\x03\x02\x02\x02\x04_\x03\x02\x02\x02\x04a\x03\x02" + - "\x02\x02\x04c\x03\x02\x02\x02\x04e\x03\x02\x02\x02\x04g\x03\x02\x02\x02" + - "\x04i\x03\x02\x02\x02\x04k\x03\x02\x02\x02\x04m\x03\x02\x02\x02\x04o\x03" + - "\x02\x02\x02\x04q\x03\x02\x02\x02\x04s\x03\x02\x02\x02\x04u\x03\x02\x02" + - "\x02\x04w\x03\x02\x02\x02\x04y\x03\x02\x02\x02\x04{\x03\x02\x02\x02\x04" + - "}\x03\x02\x02\x02\x04\x7F\x03\x02\x02\x02\x04\x81\x03\x02\x02\x02\x04" + - "\x83\x03\x02\x02\x02\x04\x85\x03\x02\x02\x02\x04\x87\x03\x02\x02\x02\x04" + - "\x89\x03\x02\x02\x02\x04\x8B\x03\x02\x02\x02\x04\x8D\x03\x02\x02\x02\x04" + - "\x8F\x03\x02\x02\x02\x04\x91\x03\x02\x02\x02\x04\x93\x03\x02\x02\x02\x04" + - "\x95\x03\x02\x02\x02\x04\x97\x03\x02\x02\x02\x04\x99\x03\x02\x02\x02\x05" + - "\x9B\x03\x02\x02\x02\x05\x9D\x03\x02\x02\x02\x05\x9F\x03\x02\x02\x02\x05" + - "\xA1\x03\x02\x02\x02\x05\xA3\x03\x02\x02\x02\x05\xA5\x03\x02\x02\x02\x05" + - "\xA7\x03\x02\x02\x02\x05\xAB\x03\x02\x02\x02\x05\xAD\x03\x02\x02\x02\x05" + - "\xAF\x03\x02\x02\x02\x05\xB1\x03\x02\x02\x02\x06\xB3\x03\x02\x02\x02\x06" + - "\xB5\x03\x02\x02\x02\x06\xB7\x03\x02\x02\x02\x06\xB9\x03\x02\x02\x02\x06" + - "\xBB\x03\x02\x02\x02\x06\xBD\x03\x02\x02\x02\x06\xBF\x03\x02\x02\x02\x06" + - "\xC3\x03\x02\x02\x02\x06\xC5\x03\x02\x02\x02\x06\xC7\x03\x02\x02\x02\x06" + - "\xC9\x03\x02\x02\x02\x07\xFF\x03\x02\x02\x02\t\u0109\x03\x02\x02\x02\v" + - "\u0110\x03\x02\x02\x02\r\u0117\x03\x02\x02\x02\x0F\u0121\x03\x02\x02\x02" + - "\x11\u0128\x03\x02\x02\x02\x13\u012E\x03\x02\x02\x02\x15\u0136\x03\x02" + - "\x02\x02\x17\u013E\x03\x02\x02\x02\x19\u0145\x03\x02\x02\x02\x1B\u0151" + - "\x03\x02\x02\x02\x1D\u0159\x03\x02\x02\x02\x1F\u0163\x03\x02\x02\x02!" + - "\u016A\x03\x02\x02\x02#\u0173\x03\x02\x02\x02%\u017A\x03\x02\x02\x02\'" + - "\u0183\x03\x02\x02\x02)\u018A\x03\x02\x02\x02+\u019B\x03\x02\x02\x02-" + - "\u01AB\x03\x02\x02\x02/\u01B1\x03\x02\x02\x021\u01B6\x03\x02\x02\x023" + - "\u01BB\x03\x02\x02\x025\u01BF\x03\x02\x02\x027\u01C3\x03\x02\x02\x029" + - "\u01C7\x03\x02\x02\x02;\u01CB\x03\x02\x02\x02=\u01CD\x03\x02\x02\x02?" + - "\u01CF\x03\x02\x02\x02A\u01D2\x03\x02\x02\x02C\u01D4\x03\x02\x02\x02E" + - "\u01FA\x03\x02\x02\x02G\u01FD\x03\x02\x02\x02I\u022B\x03\x02\x02\x02K" + - "\u022D\x03\x02\x02\x02M\u028E\x03\x02\x02\x02O\u0290\x03\x02\x02\x02Q" + - "\u0294\x03\x02\x02\x02S\u0296\x03\x02\x02\x02U\u0298\x03\x02\x02\x02W" + - "\u029A\x03\x02\x02\x02Y\u029C\x03\x02\x02\x02[\u02A1\x03\x02\x02\x02]" + - "\u02A6\x03\x02\x02\x02_\u02AA\x03\x02\x02\x02a\u02AF\x03\x02\x02\x02c" + - "\u02B5\x03\x02\x02\x02e\u02B8\x03\x02\x02\x02g\u02BB\x03\x02\x02\x02i" + - "\u02BE\x03\x02\x02\x02k\u02C3\x03\x02\x02\x02m\u02C6\x03\x02\x02\x02o" + - "\u02C8\x03\x02\x02\x02q\u02CA\x03\x02\x02\x02s\u02CF\x03\x02\x02\x02u" + - "\u02E2\x03\x02\x02\x02w\u02EE\x03\x02\x02\x02y\u02F0\x03\x02\x02\x02{" + - "\u02F2\x03\x02\x02\x02}\u02F4\x03\x02\x02\x02\x7F\u02F6\x03\x02\x02\x02" + - "\x81\u02F8\x03\x02\x02\x02\x83\u02FA\x03\x02\x02\x02\x85\u0304\x03\x02" + - "\x02\x02\x87\u0306\x03\x02\x02\x02\x89\u0315\x03\x02\x02\x02\x8B\u0481" + - "\x03\x02\x02\x02\x8D\u04D4\x03\x02\x02\x02\x8F\u04D6\x03\x02\x02\x02\x91" + - "\u04F4\x03\x02\x02\x02\x93\u04F6\x03\x02\x02\x02\x95\u0501\x03\x02\x02" + - "\x02\x97\u0505\x03\x02\x02\x02\x99\u0509\x03\x02\x02\x02\x9B\u050D\x03" + - "\x02\x02\x02\x9D\u0512\x03\x02\x02\x02\x9F\u0518\x03\x02\x02\x02\xA1\u051E" + - "\x03\x02\x02\x02\xA3\u0522\x03\x02\x02\x02\xA5\u0526\x03\x02\x02\x02\xA7" + - "\u0530\x03\x02\x02\x02\xA9\u053B\x03\x02\x02\x02\xAB\u053D\x03\x02\x02" + - "\x02\xAD\u053F\x03\x02\x02\x02\xAF\u0543\x03\x02\x02\x02\xB1\u0547\x03" + - "\x02\x02\x02\xB3\u054B\x03\x02\x02\x02\xB5\u054E\x03\x02\x02\x02\xB7\u0553" + - "\x03\x02\x02\x02\xB9\u0558\x03\x02\x02\x02\xBB\u055E\x03\x02\x02\x02\xBD" + - "\u0562\x03\x02\x02\x02\xBF\u0567\x03\x02\x02\x02\xC1\u0572\x03\x02\x02" + - "\x02\xC3\u0574\x03\x02\x02\x02\xC5\u0576\x03\x02\x02\x02\xC7\u057A\x03" + - "\x02\x02\x02\xC9\u057E\x03\x02\x02\x02\xCB\u0582\x03\x02\x02\x02\xCD\u0584" + - "\x03\x02\x02\x02\xCF\u0586\x03\x02\x02\x02\xD1\u0588\x03\x02\x02\x02\xD3" + - "\u058A\x03\x02\x02\x02\xD5\u058C\x03\x02\x02\x02\xD7\u058E\x03\x02\x02" + - "\x02\xD9\u0590\x03\x02\x02\x02\xDB\u0592\x03\x02\x02\x02\xDD\u0594\x03" + - "\x02\x02\x02\xDF\u0596\x03\x02\x02\x02\xE1\u0598\x03\x02\x02\x02\xE3\u059A" + - "\x03\x02\x02\x02\xE5\u059C\x03\x02\x02\x02\xE7\u059E\x03\x02\x02\x02\xE9" + - "\u05A0\x03\x02\x02\x02\xEB\u05A2\x03\x02\x02\x02\xED\u05A4\x03\x02\x02" + - "\x02\xEF\u05A6\x03\x02\x02\x02\xF1\u05A8\x03\x02\x02\x02\xF3\u05AA\x03" + - "\x02\x02\x02\xF5\u05AC\x03\x02\x02\x02\xF7\u05AE\x03\x02\x02\x02\xF9\u05B0" + - "\x03\x02\x02\x02\xFB\u05B2\x03\x02\x02\x02\xFD\u05B4\x03\x02\x02\x02\xFF" + - "\u0100\x05\xD1g\x02\u0100\u0101\x05\xDBl\x02\u0101\u0102\x05\xEFv\x02" + - "\u0102\u0103\x05\xEFv\x02\u0103\u0104\x05\xD3h\x02\u0104\u0105\x05\xCF" + - "f\x02\u0105\u0106\x05\xF1w\x02\u0106\u0107\x03\x02\x02\x02\u0107\u0108" + - "\b\x02\x02\x02\u0108\b\x03\x02\x02\x02\u0109\u010A\x05\xD7j\x02\u010A" + - "\u010B\x05\xEDu\x02\u010B\u010C\x05\xE7r\x02\u010C\u010D\x05\xDFn\x02" + - "\u010D\u010E\x03"; + "E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x05E\u055F\nE\x03" + + "F\x03F\x03F\x03F\x03F\x03F\x03F\x03F\x03F\x03F\x03F\x03G\x03G\x03G\x03" + + "G\x03G\x07G\u0571\nG\fG\x0EG\u0574\vG\x03G\x03G\x03G\x03G\x03G\x06G\u057B" + + "\nG\rG\x0EG\u057C\x05G\u057F\nG\x03H\x03H\x03H\x03H\x07H\u0585\nH\fH\x0E" + + "H\u0588\vH\x03H\x03H\x03I\x03I\x03I\x03I\x03J\x03J\x03J\x03J\x03K\x03" + + "K\x03K\x03K\x03L\x03L\x03L\x03L\x03L\x03M\x03M\x03M\x03M\x03M\x03M\x03" + + "N\x03N\x03N\x03N\x03N\x03N\x03O\x03O\x03O\x03O\x03P\x03P\x03P\x03P\x03" + + "Q\x03Q\x03Q\x03Q\x03Q\x03Q\x03Q\x03Q\x03Q\x03R\x06R\u05BB\nR\rR\x0ER\u05BC" + + "\x03S\x06S\u05C0\nS\rS\x0ES\u05C1\x03S\x03S\x05S\u05C6\nS\x03T\x03T\x03" + + "U\x03U\x03U\x03U\x03V\x03V\x03V\x03V\x03W\x03W\x03W\x03W\x03X\x03X\x03" + + "X\x03Y\x03Y\x03Y\x03Y\x03Y\x03Z\x03Z\x03Z\x03Z\x03Z\x03[\x03[\x03[\x03" + + "[\x03[\x03[\x03\\\x03\\\x03\\\x03\\\x03]\x03]\x03]\x03]\x03^\x06^\u05F2" + + "\n^\r^\x0E^\u05F3\x03_\x06_\u05F7\n_\r_\x0E_\u05F8\x03_\x03_\x05_\u05FD" + + "\n_\x03`\x03`\x03a\x03a\x03a\x03a\x03b\x03b\x03b\x03b\x03c\x03c\x03c\x03" + + "c\x03d\x03d\x03e\x03e\x03f\x03f\x03g\x03g\x03h\x03h\x03i\x03i\x03j\x03" + + "j\x03k\x03k\x03l\x03l\x03m\x03m\x03n\x03n\x03o\x03o\x03p\x03p\x03q\x03" + + "q\x03r\x03r\x03s\x03s\x03t\x03t\x03u\x03u\x03v\x03v\x03w\x03w\x03x\x03" + + "x\x03y\x03y\x03z\x03z\x03{\x03{\x03|\x03|\x03}\x03}\x04\u01A2\u01ED\x02" + + "\x02~\x07\x02\x03\t\x02\x04\v\x02\x05\r\x02\x06\x0F\x02\x07\x11\x02\b" + + "\x13\x02\t\x15\x02\n\x17\x02\v\x19\x02\f\x1B\x02\r\x1D\x02\x0E\x1F\x02" + + "\x0F!\x02\x10#\x02\x11%\x02\x12\'\x02\x13)\x02\x14+\x02\x15-\x02\x16/" + + "\x02\x021\x02S3\x02\x175\x02\x187\x02\x199\x02\x1A;\x02\x02=\x02\x02?" + + "\x02\x02A\x02\x02C\x02\x02E\x02\x1BG\x02\x1CI\x02\x1DK\x02\x1EM\x02\x1F" + + "O\x02 Q\x02!S\x02\"U\x02#W\x02$Y\x02%[\x02&]\x02\'_\x02(a\x02)c\x02*e" + + "\x02+g\x02,i\x02-k\x02.m\x02/o\x020q\x021s\x022u\x023w\x024y\x025{\x02" + + "6}\x027\x7F\x028\x81\x029\x83\x02:\x85\x02;\x87\x02<\x89\x02=\x8B\x02" + + ">\x8D\x02?\x8F\x02@\x91\x02A\x93\x02B\x95\x02C\x97\x02D\x99\x02E\x9B\x02" + + "\x02\x9D\x02\x02\x9F\x02\x02\xA1\x02\x02\xA3\x02\x02\xA5\x02F\xA7\x02" + + "G\xA9\x02\x02\xAB\x02H\xAD\x02I\xAF\x02J\xB1\x02K\xB3\x02L\xB5\x02M\xB7" + + "\x02\x02\xB9\x02\x02\xBB\x02\x02\xBD\x02\x02\xBF\x02N\xC1\x02\x02\xC3" + + "\x02O\xC5\x02P\xC7\x02Q\xC9\x02R\xCB\x02\x02\xCD\x02\x02\xCF\x02\x02\xD1" + + "\x02\x02\xD3\x02\x02\xD5\x02\x02\xD7\x02\x02\xD9\x02\x02\xDB\x02\x02\xDD" + + "\x02\x02\xDF\x02\x02\xE1\x02\x02\xE3\x02\x02\xE5\x02\x02\xE7\x02\x02\xE9" + + "\x02\x02\xEB\x02\x02\xED\x02\x02\xEF\x02\x02\xF1\x02\x02\xF3\x02\x02\xF5" + + "\x02\x02\xF7\x02\x02\xF9\x02\x02\xFB\x02\x02\xFD\x02\x02\x07\x02\x03\x04" + + "\x05\x06\'\x04\x02\f\f\x0F\x0F\x05\x02\v\f\x0F\x0F\"\"\x03\x022;\x04\x02" + + "C\\c|\x07\x02$$^^ppttvv\x06\x02\f\f\x0F\x0F$$^^\x04\x02GGgg\x04\x02--" + + "//\x04\x02BBaa\x03\x02bb\f\x02\v\f\x0F\x0F\"\"..11??]]__bb~~\x04\x02," + + ",11\x04\x02CCcc\x04\x02DDdd\x04\x02EEee\x04\x02FFff\x04\x02HHhh\x04\x02" + + "IIii\x04\x02JJjj\x04\x02KKkk\x04\x02LLll\x04\x02MMmm\x04\x02NNnn\x04\x02" + + "OOoo\x04\x02PPpp\x04\x02QQqq\x04\x02RRrr\x04\x02SSss\x04\x02TTtt\x04\x02" + + "UUuu\x04\x02VVvv\x04\x02WWww\x04\x02XXxx\x04\x02YYyy\x04\x02ZZzz\x04\x02" + + "[[{{\x04\x02\\\\||\x02\u06A4\x02\x07\x03\x02\x02\x02\x02\t\x03\x02\x02" + + "\x02\x02\v\x03\x02\x02\x02\x02\r\x03\x02\x02\x02\x02\x0F\x03\x02\x02\x02" + + "\x02\x11\x03\x02\x02\x02\x02\x13\x03\x02\x02\x02\x02\x15\x03\x02\x02\x02" + + "\x02\x17\x03\x02\x02\x02\x02\x19\x03\x02\x02\x02\x02\x1B\x03\x02\x02\x02" + + "\x02\x1D\x03\x02\x02\x02\x02\x1F\x03\x02\x02\x02\x02!\x03\x02\x02\x02" + + "\x02#\x03\x02\x02\x02\x02%\x03\x02\x02\x02\x02\'\x03\x02\x02\x02\x02)" + + "\x03\x02\x02\x02\x02+\x03\x02\x02\x02\x02-\x03\x02\x02\x02\x03/\x03\x02" + + "\x02\x02\x031\x03\x02\x02\x02\x033\x03\x02\x02\x02\x035\x03\x02\x02\x02" + + "\x037\x03\x02\x02\x02\x049\x03\x02\x02\x02\x04E\x03\x02\x02\x02\x04G\x03" + + "\x02\x02\x02\x04I\x03\x02\x02\x02\x04K\x03\x02\x02\x02\x04M\x03\x02\x02" + + "\x02\x04O\x03\x02\x02\x02\x04Q\x03\x02\x02\x02\x04S\x03\x02\x02\x02\x04" + + "U\x03\x02\x02\x02\x04W\x03\x02\x02\x02\x04Y\x03\x02\x02\x02\x04[\x03\x02" + + "\x02\x02\x04]\x03\x02\x02\x02\x04_\x03\x02\x02\x02\x04a\x03\x02\x02\x02" + + "\x04c\x03\x02\x02\x02\x04e\x03\x02\x02\x02\x04g\x03\x02\x02\x02\x04i\x03" + + "\x02\x02\x02\x04k\x03\x02\x02\x02\x04m\x03\x02\x02\x02\x04o\x03\x02\x02" + + "\x02\x04q\x03\x02\x02\x02\x04s\x03\x02\x02\x02\x04u\x03\x02\x02\x02\x04" + + "w\x03\x02\x02\x02\x04y\x03\x02\x02\x02\x04{\x03\x02\x02\x02\x04}\x03\x02" + + "\x02\x02\x04\x7F\x03\x02\x02\x02\x04\x81\x03\x02\x02\x02\x04\x83\x03\x02" + + "\x02\x02\x04\x85\x03\x02\x02\x02\x04\x87\x03\x02\x02\x02\x04\x89\x03\x02" + + "\x02\x02\x04\x8B\x03\x02\x02\x02\x04\x8D\x03\x02\x02\x02\x04\x8F\x03\x02" + + "\x02\x02\x04\x91\x03\x02\x02\x02\x04\x93\x03\x02\x02\x02\x04\x95\x03\x02" + + "\x02\x02\x04\x97\x03\x02\x02\x02\x04\x99\x03\x02\x02\x02\x05\x9B\x03\x02" + + "\x02\x02\x05\x9D\x03\x02\x02\x02\x05\x9F\x03\x02\x02\x02\x05\xA1\x03\x02" + + "\x02\x02\x05\xA3\x03\x02\x02\x02\x05\xA5\x03\x02\x02\x02\x05\xA7\x03\x02" + + "\x02\x02\x05\xAB\x03\x02\x02\x02\x05\xAD\x03\x02\x02\x02\x05\xAF\x03\x02" + + "\x02\x02\x05\xB1\x03\x02\x02\x02\x06\xB3\x03\x02\x02\x02\x06\xB5\x03\x02" + + "\x02\x02\x06\xB7\x03\x02\x02\x02\x06\xB9\x03\x02\x02\x02\x06\xBB\x03\x02" + + "\x02\x02\x06\xBD\x03\x02\x02\x02\x06\xBF\x03\x02\x02\x02\x06\xC3\x03\x02" + + "\x02\x02\x06\xC5\x03\x02\x02\x02\x06\xC7\x03\x02\x02\x02\x06\xC9\x03\x02" + + "\x02\x02\x07\xFF\x03\x02\x02\x02\t\u0109\x03\x02\x02\x02\v\u0110\x03\x02" + + "\x02\x02\r\u0117\x03\x02\x02\x02\x0F\u0121\x03\x02\x02\x02\x11\u0128\x03" + + "\x02\x02\x02\x13\u012E\x03\x02\x02\x02\x15\u0136\x03\x02\x02\x02\x17\u013E" + + "\x03\x02\x02\x02\x19\u0145\x03\x02\x02\x02\x1B\u0151\x03\x02\x02\x02\x1D" + + "\u0159\x03\x02\x02\x02\x1F\u0163\x03\x02\x02\x02!\u016A\x03\x02\x02\x02" + + "#\u0173\x03\x02\x02\x02%\u017A\x03\x02\x02\x02\'\u0183\x03\x02\x02\x02" + + ")\u018A\x03\x02\x02\x02+\u019B\x03\x02\x02\x02-\u01AB\x03\x02\x02\x02" + + "/\u01B1\x03\x02\x02\x021\u01B6\x03\x02\x02\x023\u01BB\x03\x02\x02\x02" + + "5\u01BF\x03\x02\x02\x027\u01C3\x03\x02\x02\x029\u01C7\x03\x02\x02\x02" + + ";\u01CB\x03\x02\x02\x02=\u01CD\x03\x02\x02\x02?\u01CF\x03\x02\x02\x02" + + "A\u01D2\x03\x02\x02\x02C\u01D4\x03\x02\x02\x02E\u01FA\x03\x02\x02\x02" + + "G\u01FD\x03\x02\x02\x02I\u022B\x03\x02\x02\x02K\u022D\x03\x02\x02\x02" + + "M\u028E\x03\x02\x02\x02O\u0290\x03\x02\x02\x02Q\u0294\x03\x02\x02\x02" + + "S\u0296\x03\x02\x02\x02U\u0298\x03\x02\x02\x02W\u029A\x03\x02\x02\x02" + + "Y\u029C\x03\x02\x02\x02[\u02A1\x03\x02\x02\x02]\u02A6\x03\x02\x02\x02" + + "_\u02AA\x03\x02\x02\x02a\u02AF\x03\x02\x02\x02c\u02B5\x03\x02\x02\x02" + + "e\u02B8\x03\x02\x02\x02g\u02BB\x03\x02\x02\x02i\u02BE\x03\x02\x02\x02" + + "k\u02C3\x03\x02\x02\x02m\u02C6\x03\x02\x02\x02o\u02C8\x03\x02\x02\x02" + + "q\u02CA\x03\x02\x02\x02s\u02CF\x03\x02\x02\x02u\u02E2\x03\x02\x02\x02" + + "w\u02EE\x03\x02\x02\x02y\u02F0\x03\x02\x02\x02{\u02F2\x03\x02\x02\x02" + + "}\u02F4\x03\x02\x02\x02\x7F\u02F6\x03\x02\x02\x02\x81\u02F8\x03\x02\x02" + + "\x02\x83\u02FA\x03\x02\x02\x02\x85\u0304\x03\x02\x02\x02\x87\u0306\x03" + + "\x02\x02\x02\x89\u0315\x03\x02\x02\x02\x8B\u04C5\x03\x02\x02\x02\x8D\u055E" + + "\x03\x02\x02\x02\x8F\u0560\x03\x02\x02\x02\x91\u057E\x03\x02\x02\x02\x93" + + "\u0580\x03\x02\x02\x02\x95\u058B\x03\x02\x02\x02\x97\u058F\x03\x02\x02" + + "\x02\x99\u0593\x03\x02\x02\x02\x9B\u0597\x03\x02\x02\x02\x9D\u059C\x03" + + "\x02\x02\x02\x9F\u05A2\x03\x02\x02\x02\xA1\u05A8\x03\x02\x02\x02\xA3\u05AC" + + "\x03\x02\x02\x02\xA5\u05B0\x03\x02\x02\x02\xA7\u05BA\x03\x02\x02\x02\xA9" + + "\u05C5\x03\x02\x02\x02\xAB\u05C7\x03\x02\x02\x02\xAD\u05C9\x03\x02\x02" + + "\x02\xAF\u05CD\x03\x02\x02\x02\xB1\u05D1\x03\x02\x02\x02\xB3\u05D5\x03" + + "\x02\x02\x02\xB5\u05D8\x03\x02\x02\x02\xB7\u05DD\x03\x02\x02\x02\xB9\u05E2" + + "\x03\x02\x02\x02\xBB\u05E8\x03\x02\x02\x02\xBD\u05EC\x03\x02\x02\x02\xBF" + + "\u05F1\x03"; private static readonly _serializedATNSegment1: string = - "\x02\x02\x02\u010E\u010F\b\x03\x02\x02\u010F\n\x03\x02\x02\x02\u0110\u0111" + - "\x05\xD3h\x02\u0111\u0112\x05\xF5y\x02\u0112\u0113\x05\xCBd\x02\u0113" + - "\u0114\x05\xE1o\x02\u0114\u0115\x03\x02\x02\x02\u0115\u0116\b\x04\x02" + - "\x02\u0116\f\x03\x02\x02\x02\u0117\u0118\x05\xD3h\x02\u0118\u0119\x05" + - "\xF9{\x02\u0119\u011A\x05\xE9s\x02\u011A\u011B\x05\xE1o\x02\u011B\u011C" + - "\x05\xCBd\x02\u011C\u011D\x05\xDBl\x02\u011D\u011E\x05\xE5q\x02\u011E" + - "\u011F\x03\x02\x02\x02\u011F\u0120\b\x05\x03\x02\u0120\x0E\x03\x02\x02" + - "\x02\u0121\u0122\x05\xD5i\x02\u0122\u0123\x05\xEDu\x02\u0123\u0124\x05" + - "\xE7r\x02\u0124\u0125\x05\xE3p\x02\u0125\u0126\x03\x02\x02\x02\u0126\u0127" + - "\b\x06\x04\x02\u0127\x10\x03\x02\x02\x02\u0128\u0129\x05\xEDu\x02\u0129" + - "\u012A\x05\xE7r\x02\u012A\u012B\x05\xF7z\x02\u012B\u012C\x03\x02\x02\x02" + - "\u012C\u012D\b\x07\x02\x02\u012D\x12\x03\x02\x02\x02\u012E\u012F\x05\xEF" + - "v\x02\u012F\u0130\x05\xF1w\x02\u0130\u0131\x05\xCBd\x02\u0131\u0132\x05" + - "\xF1w\x02\u0132\u0133\x05\xEFv\x02\u0133\u0134\x03\x02\x02\x02\u0134\u0135" + - "\b\b\x02\x02\u0135\x14\x03\x02\x02\x02\u0136\u0137\x05\xF7z\x02\u0137" + - "\u0138\x05\xD9k\x02\u0138\u0139\x05\xD3h\x02\u0139\u013A\x05\xEDu\x02" + - "\u013A\u013B\x05\xD3h\x02\u013B\u013C\x03\x02\x02\x02\u013C\u013D\b\t" + - "\x02\x02\u013D\x16\x03\x02\x02\x02\u013E\u013F\x05\xEFv\x02\u013F\u0140" + - "\x05\xE7r\x02\u0140\u0141\x05\xEDu\x02\u0141\u0142\x05\xF1w\x02\u0142" + - "\u0143\x03\x02\x02\x02\u0143\u0144\b\n\x02\x02\u0144\x18\x03\x02\x02\x02" + - "\u0145\u0146\x05\xE3p\x02\u0146\u0147\x05\xF5y\x02\u0147\u0148\x05o6\x02" + - "\u0148\u0149\x05\xD3h\x02\u0149\u014A\x05\xF9{\x02\u014A\u014B\x05\xE9" + - "s\x02\u014B\u014C\x05\xCBd\x02\u014C\u014D\x05\xE5q\x02\u014D\u014E\x05" + - "\xD1g\x02\u014E\u014F\x03\x02\x02\x02\u014F\u0150\b\v\x02\x02\u0150\x1A" + - "\x03\x02\x02\x02\u0151\u0152\x05\xE1o\x02\u0152\u0153\x05\xDBl\x02\u0153" + - "\u0154\x05\xE3p\x02\u0154\u0155\x05\xDBl\x02\u0155\u0156\x05\xF1w\x02" + - "\u0156\u0157\x03\x02\x02\x02\u0157\u0158\b\f\x02\x02\u0158\x1C\x03\x02" + - "\x02\x02\u0159\u015A\x05\xE9s\x02\u015A\u015B\x05\xEDu\x02\u015B\u015C" + - "\x05\xE7r\x02\u015C\u015D\x05\xDDm\x02\u015D\u015E\x05\xD3h\x02\u015E" + - "\u015F\x05\xCFf\x02\u015F\u0160\x05\xF1w\x02\u0160\u0161\x03\x02\x02\x02" + - "\u0161\u0162\b\r\x02\x02\u0162\x1E\x03\x02\x02\x02\u0163\u0164\x05\xD1" + - "g\x02\u0164\u0165\x05\xEDu\x02\u0165\u0166\x05\xE7r\x02\u0166\u0167\x05" + - "\xE9s\x02\u0167\u0168\x03\x02\x02\x02\u0168\u0169\b\x0E\x02\x02\u0169" + - " \x03\x02\x02\x02\u016A\u016B\x05\xEDu\x02\u016B\u016C\x05\xD3h\x02\u016C" + - "\u016D\x05\xE5q\x02\u016D\u016E\x05\xCBd\x02\u016E\u016F\x05\xE3p\x02" + - "\u016F\u0170\x05\xD3h\x02\u0170\u0171\x03\x02\x02\x02\u0171\u0172\b\x0F" + - "\x02\x02\u0172\"\x03\x02\x02\x02\u0173\u0174\x05\xEFv\x02\u0174\u0175" + - "\x05\xD9k\x02\u0175\u0176\x05\xE7r\x02\u0176\u0177\x05\xF7z\x02\u0177" + - "\u0178\x03\x02\x02\x02\u0178\u0179\b\x10\x02\x02\u0179$\x03\x02\x02\x02" + - "\u017A\u017B\x05\xD3h\x02\u017B\u017C\x05\xE5q\x02\u017C\u017D\x05\xED" + - "u\x02\u017D\u017E\x05\xDBl\x02\u017E\u017F\x05\xCFf\x02\u017F\u0180\x05" + - "\xD9k\x02\u0180\u0181\x03\x02\x02\x02\u0181\u0182\b\x11\x05\x02\u0182" + - "&\x03\x02\x02\x02\u0183\u0184\x05\xDFn\x02\u0184\u0185\x05\xD3h\x02\u0185" + - "\u0186\x05\xD3h\x02\u0186\u0187\x05\xE9s\x02\u0187\u0188\x03\x02\x02\x02" + - "\u0188\u0189\b\x12\x02\x02\u0189(\x03\x02\x02\x02\u018A\u018B\x071\x02" + - "\x02\u018B\u018C\x071\x02\x02\u018C\u0190\x03\x02\x02\x02\u018D\u018F" + - "\n\x02\x02\x02\u018E\u018D\x03\x02\x02\x02\u018F\u0192\x03\x02\x02\x02" + - "\u0190\u018E\x03\x02\x02\x02\u0190\u0191\x03\x02\x02\x02\u0191\u0194\x03" + - "\x02\x02\x02\u0192\u0190\x03\x02\x02\x02\u0193\u0195\x07\x0F\x02\x02\u0194" + - "\u0193\x03\x02\x02\x02\u0194\u0195\x03\x02\x02\x02\u0195\u0197\x03\x02" + - "\x02\x02\u0196\u0198\x07\f\x02\x02\u0197\u0196\x03\x02\x02\x02\u0197\u0198" + - "\x03\x02\x02\x02\u0198\u0199\x03\x02\x02\x02\u0199\u019A\b\x13\x06\x02" + - "\u019A*\x03\x02\x02\x02\u019B\u019C\x071\x02\x02\u019C\u019D\x07,\x02" + - "\x02\u019D\u01A2\x03\x02\x02\x02\u019E\u01A1\x05+\x14\x02\u019F\u01A1" + - "\v\x02\x02\x02\u01A0\u019E\x03\x02\x02\x02\u01A0\u019F\x03\x02\x02\x02" + - "\u01A1\u01A4\x03\x02\x02\x02\u01A2\u01A3\x03\x02\x02\x02\u01A2\u01A0\x03" + - "\x02\x02\x02\u01A3\u01A5\x03\x02\x02\x02\u01A4\u01A2\x03\x02\x02\x02\u01A5" + - "\u01A6\x07,\x02\x02\u01A6\u01A7\x071\x02\x02\u01A7\u01A8\x03\x02\x02\x02" + - "\u01A8\u01A9\b\x14\x06\x02\u01A9,\x03\x02\x02\x02\u01AA\u01AC\t\x03\x02" + - "\x02\u01AB\u01AA\x03\x02\x02\x02\u01AC\u01AD\x03\x02\x02\x02\u01AD\u01AB" + - "\x03\x02\x02\x02\u01AD\u01AE\x03\x02\x02\x02\u01AE\u01AF\x03\x02\x02\x02" + - "\u01AF\u01B0\b\x15\x06\x02\u01B0.\x03\x02\x02\x02\u01B1\u01B2\x07]\x02" + - "\x02\u01B2\u01B3\x03\x02\x02\x02\u01B3\u01B4\b\x16\x07\x02\u01B4\u01B5" + - "\b\x16\b\x02\u01B50\x03\x02\x02\x02\u01B6\u01B7\x07~\x02\x02\u01B7\u01B8" + - "\x03\x02\x02\x02\u01B8\u01B9\b\x17\t\x02\u01B9\u01BA\b\x17\n\x02\u01BA" + - "2\x03\x02\x02\x02\u01BB\u01BC\x05-\x15\x02\u01BC\u01BD\x03\x02\x02\x02" + - "\u01BD\u01BE\b\x18\x06\x02\u01BE4\x03\x02\x02\x02\u01BF\u01C0\x05)\x13" + - "\x02\u01C0\u01C1\x03\x02\x02\x02\u01C1\u01C2\b\x19\x06\x02\u01C26\x03" + - "\x02\x02\x02\u01C3\u01C4\x05+\x14\x02\u01C4\u01C5\x03\x02\x02\x02\u01C5" + - "\u01C6\b\x1A\x06\x02\u01C68\x03\x02\x02\x02\u01C7\u01C8\x07~\x02\x02\u01C8" + - "\u01C9\x03\x02\x02\x02\u01C9\u01CA\b\x1B\n\x02\u01CA:\x03\x02\x02\x02" + - "\u01CB\u01CC\t\x04\x02\x02\u01CC<\x03\x02\x02\x02\u01CD\u01CE\t\x05\x02" + - "\x02\u01CE>\x03\x02\x02\x02\u01CF\u01D0\x07^\x02\x02\u01D0\u01D1\t\x06" + - "\x02\x02\u01D1@\x03\x02\x02\x02\u01D2\u01D3\n\x07\x02\x02\u01D3B\x03\x02" + - "\x02\x02\u01D4\u01D6\t\b\x02\x02\u01D5\u01D7\t\t\x02\x02\u01D6\u01D5\x03" + - "\x02\x02\x02\u01D6\u01D7\x03\x02\x02\x02\u01D7\u01D9\x03\x02\x02\x02\u01D8" + - "\u01DA\x05;\x1C\x02\u01D9\u01D8\x03\x02\x02\x02\u01DA\u01DB\x03\x02\x02" + - "\x02\u01DB\u01D9\x03\x02\x02\x02\u01DB\u01DC\x03\x02\x02\x02\u01DCD\x03" + - "\x02\x02\x02\u01DD\u01E2\x07$\x02\x02\u01DE\u01E1\x05?\x1E\x02\u01DF\u01E1" + - "\x05A\x1F\x02\u01E0\u01DE\x03\x02\x02\x02\u01E0\u01DF\x03\x02\x02\x02" + - "\u01E1\u01E4\x03\x02\x02\x02\u01E2\u01E0\x03\x02\x02\x02\u01E2\u01E3\x03" + - "\x02\x02\x02\u01E3\u01E5\x03\x02\x02\x02\u01E4\u01E2\x03\x02\x02\x02\u01E5" + + "\x02\x02\x02\xC1\u05FC\x03\x02\x02\x02\xC3\u05FE\x03\x02\x02\x02\xC5\u0600" + + "\x03\x02\x02\x02\xC7\u0604\x03\x02\x02\x02\xC9\u0608\x03\x02\x02\x02\xCB" + + "\u060C\x03\x02\x02\x02\xCD\u060E\x03\x02\x02\x02\xCF\u0610\x03\x02\x02" + + "\x02\xD1\u0612\x03\x02\x02\x02\xD3\u0614\x03\x02\x02\x02\xD5\u0616\x03" + + "\x02\x02\x02\xD7\u0618\x03\x02\x02\x02\xD9\u061A\x03\x02\x02\x02\xDB\u061C" + + "\x03\x02\x02\x02\xDD\u061E\x03\x02\x02\x02\xDF\u0620\x03\x02\x02\x02\xE1" + + "\u0622\x03\x02\x02\x02\xE3\u0624\x03\x02\x02\x02\xE5\u0626\x03\x02\x02" + + "\x02\xE7\u0628\x03\x02\x02\x02\xE9\u062A\x03\x02\x02\x02\xEB\u062C\x03" + + "\x02\x02\x02\xED\u062E\x03\x02\x02\x02\xEF\u0630\x03\x02\x02\x02\xF1\u0632" + + "\x03\x02\x02\x02\xF3\u0634\x03\x02\x02\x02\xF5\u0636\x03\x02\x02\x02\xF7" + + "\u0638\x03\x02\x02\x02\xF9\u063A\x03\x02\x02\x02\xFB\u063C\x03\x02\x02" + + "\x02\xFD\u063E\x03\x02\x02\x02\xFF\u0100\x05\xD1g\x02\u0100\u0101\x05" + + "\xDBl\x02\u0101\u0102\x05\xEFv\x02\u0102\u0103\x05\xEFv\x02\u0103\u0104" + + "\x05\xD3h\x02\u0104\u0105\x05\xCFf\x02\u0105\u0106\x05\xF1w\x02\u0106" + + "\u0107\x03\x02\x02\x02\u0107\u0108\b\x02\x02\x02\u0108\b\x03\x02\x02\x02" + + "\u0109\u010A\x05\xD7j\x02\u010A\u010B\x05\xEDu\x02\u010B\u010C\x05\xE7" + + "r\x02\u010C\u010D\x05\xDFn\x02\u010D\u010E\x03\x02\x02\x02\u010E\u010F" + + "\b\x03\x02\x02\u010F\n\x03\x02\x02\x02\u0110\u0111\x05\xD3h\x02\u0111" + + "\u0112\x05\xF5y\x02\u0112\u0113\x05\xCBd\x02\u0113\u0114\x05\xE1o\x02" + + "\u0114\u0115\x03\x02\x02\x02\u0115\u0116\b\x04\x02\x02\u0116\f\x03\x02" + + "\x02\x02\u0117\u0118\x05\xD3h\x02\u0118\u0119\x05\xF9{\x02\u0119\u011A" + + "\x05\xE9s\x02\u011A\u011B\x05\xE1o\x02\u011B\u011C\x05\xCBd\x02\u011C" + + "\u011D\x05\xDBl\x02\u011D\u011E\x05\xE5q\x02\u011E\u011F\x03\x02\x02\x02" + + "\u011F\u0120\b\x05\x03\x02\u0120\x0E\x03\x02\x02\x02\u0121\u0122\x05\xD5" + + "i\x02\u0122\u0123\x05\xEDu\x02\u0123\u0124\x05\xE7r\x02\u0124\u0125\x05" + + "\xE3p\x02\u0125\u0126\x03\x02\x02\x02\u0126\u0127\b\x06\x04\x02\u0127" + + "\x10\x03\x02\x02\x02\u0128\u0129\x05\xEDu\x02\u0129\u012A\x05\xE7r\x02" + + "\u012A\u012B\x05\xF7z\x02\u012B\u012C\x03\x02\x02\x02\u012C\u012D\b\x07" + + "\x02\x02\u012D\x12\x03\x02\x02\x02\u012E\u012F\x05\xEFv\x02\u012F\u0130" + + "\x05\xF1w\x02\u0130\u0131\x05\xCBd\x02\u0131\u0132\x05\xF1w\x02\u0132" + + "\u0133\x05\xEFv\x02\u0133\u0134\x03\x02\x02\x02\u0134\u0135\b\b\x02\x02" + + "\u0135\x14\x03\x02\x02\x02\u0136\u0137\x05\xF7z\x02\u0137\u0138\x05\xD9" + + "k\x02\u0138\u0139\x05\xD3h\x02\u0139\u013A\x05\xEDu\x02\u013A\u013B\x05" + + "\xD3h\x02\u013B\u013C\x03\x02\x02\x02\u013C\u013D\b\t\x02\x02\u013D\x16" + + "\x03\x02\x02\x02\u013E\u013F\x05\xEFv\x02\u013F\u0140\x05\xE7r\x02\u0140" + + "\u0141\x05\xEDu\x02\u0141\u0142\x05\xF1w\x02\u0142\u0143\x03\x02\x02\x02" + + "\u0143\u0144\b\n\x02\x02\u0144\x18\x03\x02\x02\x02\u0145\u0146\x05\xE3" + + "p\x02\u0146\u0147\x05\xF5y\x02\u0147\u0148\x05o6\x02\u0148\u0149\x05\xD3" + + "h\x02\u0149\u014A\x05\xF9{\x02\u014A\u014B\x05\xE9s\x02\u014B\u014C\x05" + + "\xCBd\x02\u014C\u014D\x05\xE5q\x02\u014D\u014E\x05\xD1g\x02\u014E\u014F" + + "\x03\x02\x02\x02\u014F\u0150\b\v\x02\x02\u0150\x1A\x03\x02\x02\x02\u0151" + + "\u0152\x05\xE1o\x02\u0152\u0153\x05\xDBl\x02\u0153\u0154\x05\xE3p\x02" + + "\u0154\u0155\x05\xDBl\x02\u0155\u0156\x05\xF1w\x02\u0156\u0157\x03\x02" + + "\x02\x02\u0157\u0158\b\f\x02\x02\u0158\x1C\x03\x02\x02\x02\u0159\u015A" + + "\x05\xE9s\x02\u015A\u015B\x05\xEDu\x02\u015B\u015C\x05\xE7r\x02\u015C" + + "\u015D\x05\xDDm\x02\u015D\u015E\x05\xD3h\x02\u015E\u015F\x05\xCFf\x02" + + "\u015F\u0160\x05\xF1w\x02\u0160\u0161\x03\x02\x02\x02\u0161\u0162\b\r" + + "\x02\x02\u0162\x1E\x03\x02\x02\x02\u0163\u0164\x05\xD1g\x02\u0164\u0165" + + "\x05\xEDu\x02\u0165\u0166\x05\xE7r\x02\u0166\u0167\x05\xE9s\x02\u0167" + + "\u0168\x03\x02\x02\x02\u0168\u0169\b\x0E\x02\x02\u0169 \x03\x02\x02\x02" + + "\u016A\u016B\x05\xEDu\x02\u016B\u016C\x05\xD3h\x02\u016C\u016D\x05\xE5" + + "q\x02\u016D\u016E\x05\xCBd\x02\u016E\u016F\x05\xE3p\x02\u016F\u0170\x05" + + "\xD3h\x02\u0170\u0171\x03\x02\x02\x02\u0171\u0172\b\x0F\x02\x02\u0172" + + "\"\x03\x02\x02\x02\u0173\u0174\x05\xEFv\x02\u0174\u0175\x05\xD9k\x02\u0175" + + "\u0176\x05\xE7r\x02\u0176\u0177\x05\xF7z\x02\u0177\u0178\x03\x02\x02\x02" + + "\u0178\u0179\b\x10\x02\x02\u0179$\x03\x02\x02\x02\u017A\u017B\x05\xD3" + + "h\x02\u017B\u017C\x05\xE5q\x02\u017C\u017D\x05\xEDu\x02\u017D\u017E\x05" + + "\xDBl\x02\u017E\u017F\x05\xCFf\x02\u017F\u0180\x05\xD9k\x02\u0180\u0181" + + "\x03\x02\x02\x02\u0181\u0182\b\x11\x05\x02\u0182&\x03\x02\x02\x02\u0183" + + "\u0184\x05\xDFn\x02\u0184\u0185\x05\xD3h\x02\u0185\u0186\x05\xD3h\x02" + + "\u0186\u0187\x05\xE9s\x02\u0187\u0188\x03\x02\x02\x02\u0188\u0189\b\x12" + + "\x02\x02\u0189(\x03\x02\x02\x02\u018A\u018B\x071\x02\x02\u018B\u018C\x07" + + "1\x02\x02\u018C\u0190\x03\x02\x02\x02\u018D\u018F\n\x02\x02\x02\u018E" + + "\u018D\x03\x02\x02\x02\u018F\u0192\x03\x02\x02\x02\u0190\u018E\x03\x02" + + "\x02\x02\u0190\u0191\x03\x02\x02\x02\u0191\u0194\x03\x02\x02\x02\u0192" + + "\u0190\x03\x02\x02\x02\u0193\u0195\x07\x0F\x02\x02\u0194\u0193\x03\x02" + + "\x02\x02\u0194\u0195\x03\x02\x02\x02\u0195\u0197\x03\x02\x02\x02\u0196" + + "\u0198\x07\f\x02\x02\u0197\u0196\x03\x02\x02\x02\u0197\u0198\x03\x02\x02" + + "\x02\u0198\u0199\x03\x02\x02\x02\u0199\u019A\b\x13\x06\x02\u019A*\x03" + + "\x02\x02\x02\u019B\u019C\x071\x02\x02\u019C\u019D\x07,\x02\x02\u019D\u01A2" + + "\x03\x02\x02\x02\u019E\u01A1\x05+\x14\x02\u019F\u01A1\v\x02\x02\x02\u01A0" + + "\u019E\x03\x02\x02\x02\u01A0\u019F\x03\x02\x02\x02\u01A1\u01A4\x03\x02" + + "\x02\x02\u01A2\u01A3\x03\x02\x02\x02\u01A2\u01A0\x03\x02\x02\x02\u01A3" + + "\u01A5\x03\x02\x02\x02\u01A4\u01A2\x03\x02\x02\x02\u01A5\u01A6\x07,\x02" + + "\x02\u01A6\u01A7\x071\x02\x02\u01A7\u01A8\x03\x02\x02\x02\u01A8\u01A9" + + "\b\x14\x06\x02\u01A9,\x03\x02\x02\x02\u01AA\u01AC\t\x03\x02\x02\u01AB" + + "\u01AA\x03\x02\x02\x02\u01AC\u01AD\x03\x02\x02\x02\u01AD\u01AB\x03\x02" + + "\x02\x02\u01AD\u01AE\x03\x02\x02\x02\u01AE\u01AF\x03\x02\x02\x02\u01AF" + + "\u01B0\b\x15\x06\x02\u01B0.\x03\x02\x02\x02\u01B1\u01B2\x07]\x02\x02\u01B2" + + "\u01B3\x03\x02\x02\x02\u01B3\u01B4\b\x16\x07\x02\u01B4\u01B5\b\x16\b\x02" + + "\u01B50\x03\x02\x02\x02\u01B6\u01B7\x07~\x02\x02\u01B7\u01B8\x03\x02\x02" + + "\x02\u01B8\u01B9\b\x17\t\x02\u01B9\u01BA\b\x17\n\x02\u01BA2\x03\x02\x02" + + "\x02\u01BB\u01BC\x05-\x15\x02\u01BC\u01BD\x03\x02\x02\x02\u01BD\u01BE" + + "\b\x18\x06\x02\u01BE4\x03\x02\x02\x02\u01BF\u01C0\x05)\x13\x02\u01C0\u01C1" + + "\x03\x02\x02\x02\u01C1\u01C2\b\x19\x06\x02\u01C26\x03\x02\x02\x02\u01C3" + + "\u01C4\x05+\x14\x02\u01C4\u01C5\x03\x02\x02\x02\u01C5\u01C6\b\x1A\x06" + + "\x02\u01C68\x03\x02\x02\x02\u01C7\u01C8\x07~\x02\x02\u01C8\u01C9\x03\x02" + + "\x02\x02\u01C9\u01CA\b\x1B\n\x02\u01CA:\x03\x02\x02\x02\u01CB\u01CC\t" + + "\x04\x02\x02\u01CC<\x03\x02\x02\x02\u01CD\u01CE\t\x05\x02\x02\u01CE>\x03" + + "\x02\x02\x02\u01CF\u01D0\x07^\x02\x02\u01D0\u01D1\t\x06\x02\x02\u01D1" + + "@\x03\x02\x02\x02\u01D2\u01D3\n\x07\x02\x02\u01D3B\x03\x02\x02\x02\u01D4" + + "\u01D6\t\b\x02\x02\u01D5\u01D7\t\t\x02\x02\u01D6\u01D5\x03\x02\x02\x02" + + "\u01D6\u01D7\x03\x02\x02\x02\u01D7\u01D9\x03\x02\x02\x02\u01D8\u01DA\x05" + + ";\x1C\x02\u01D9\u01D8\x03\x02\x02\x02\u01DA\u01DB\x03\x02\x02\x02\u01DB" + + "\u01D9\x03\x02\x02\x02\u01DB\u01DC\x03\x02\x02\x02\u01DCD\x03\x02\x02" + + "\x02\u01DD\u01E2\x07$\x02\x02\u01DE\u01E1\x05?\x1E\x02\u01DF\u01E1\x05" + + "A\x1F\x02\u01E0\u01DE\x03\x02\x02\x02\u01E0\u01DF\x03\x02\x02\x02\u01E1" + + "\u01E4\x03\x02\x02\x02\u01E2\u01E0\x03\x02\x02\x02\u01E2\u01E3\x03\x02" + + "\x02\x02\u01E3\u01E5\x03\x02\x02\x02\u01E4\u01E2\x03\x02\x02\x02\u01E5" + "\u01FB\x07$\x02\x02\u01E6\u01E7\x07$\x02\x02\u01E7\u01E8\x07$\x02\x02" + "\u01E8\u01E9\x07$\x02\x02\u01E9\u01ED\x03\x02\x02\x02\u01EA\u01EC\n\x02" + "\x02\x02\u01EB\u01EA\x03\x02\x02\x02\u01EC\u01EF\x03\x02\x02\x02\u01ED" + @@ -621,277 +631,335 @@ export class esql_lexer extends Lexer { "\x07v\x02\x02\u0315\u030C\x03\x02\x02\x02\u0315\u0311\x03\x02\x02\x02" + "\u0316\x8A\x03\x02\x02\x02\u0317\u0318\x05\xEDu\x02\u0318\u0319\x05\xE7" + "r\x02\u0319\u031A\x05\xF3x\x02\u031A\u031B\x05\xE5q\x02\u031B\u031C\x05" + - "\xD1g\x02\u031C\u0482\x03\x02\x02\x02\u031D\u031E\x05\xCBd\x02\u031E\u031F" + - "\x05\xCDe\x02\u031F\u0320\x05\xEFv\x02\u0320\u0482\x03\x02\x02\x02\u0321" + + "\xD1g\x02\u031C\u04C6\x03\x02\x02\x02\u031D\u031E\x05\xCBd\x02\u031E\u031F" + + "\x05\xCDe\x02\u031F\u0320\x05\xEFv\x02\u0320\u04C6\x03\x02\x02\x02\u0321" + "\u0322\x05\xE9s\x02\u0322\u0323\x05\xE7r\x02\u0323\u0324\x05\xF7z\x02" + - "\u0324\u0482\x03\x02\x02\x02\u0325\u0326\x05\xE1o\x02\u0326\u0327\x05" + - "\xE7r\x02\u0327\u0328\x05\xD7j\x02\u0328\u0329\x05\x83@\x02\u0329\u0482" + + "\u0324\u04C6\x03\x02\x02\x02\u0325\u0326\x05\xE1o\x02\u0326\u0327\x05" + + "\xE7r\x02\u0327\u0328\x05\xD7j\x02\u0328\u0329\x05\x83@\x02\u0329\u04C6" + "\x03\x02\x02\x02\u032A\u032B\x05\xE9s\x02\u032B\u032C\x05\xDBl\x02\u032C" + - "\u0482\x03\x02\x02\x02\u032D\u032E\x05\xF1w\x02\u032E\u032F\x05\xCBd\x02" + - "\u032F\u0330\x05\xF3x\x02\u0330\u0482\x03\x02\x02\x02\u0331\u0482\x05" + + "\u04C6\x03\x02\x02\x02\u032D\u032E\x05\xF1w\x02\u032E\u032F\x05\xCBd\x02" + + "\u032F\u0330\x05\xF3x\x02\u0330\u04C6\x03\x02\x02\x02\u0331\u04C6\x05" + "\xD3h\x02\u0332\u0333\x05\xEFv\x02\u0333\u0334\x05\xF3x\x02\u0334\u0335" + "\x05\xCDe\x02\u0335\u0336\x05\xEFv\x02\u0336\u0337\x05\xF1w\x02\u0337" + "\u0338\x05\xEDu\x02\u0338\u0339\x05\xDBl\x02\u0339\u033A\x05\xE5q\x02" + - "\u033A\u033B\x05\xD7j\x02\u033B\u0482\x03\x02\x02\x02\u033C\u033D\x05" + + "\u033A\u033B\x05\xD7j\x02\u033B\u04C6\x03\x02\x02\x02\u033C\u033D\x05" + "\xF1w\x02\u033D\u033E\x05\xEDu\x02\u033E\u033F\x05\xDBl\x02\u033F\u0340" + - "\x05\xE3p\x02\u0340\u0482\x03\x02\x02\x02\u0341\u0342\x05\xCFf\x02\u0342" + + "\x05\xE3p\x02\u0340\u04C6\x03\x02\x02\x02\u0341\u0342\x05\xCFf\x02\u0342" + "\u0343\x05\xE7r\x02\u0343\u0344\x05\xE5q\x02\u0344\u0345\x05\xCFf\x02" + - "\u0345\u0346\x05\xCBd\x02\u0346\u0347\x05\xF1w\x02\u0347\u0482\x03\x02" + - "\x02\x02\u0348\u0349\x05\xEFv\x02\u0349\u034A\x05\xF1w\x02\u034A\u034B" + - "\x05\xCBd\x02\u034B\u034C\x05\xEDu\x02\u034C\u034D\x05\xF1w\x02\u034D" + - "\u034E\x05\xEFv\x02\u034E\u034F\x05o6\x02\u034F\u0350\x05\xF7z\x02\u0350" + - "\u0351\x05\xDBl\x02\u0351\u0352\x05\xF1w\x02\u0352\u0353\x05\xD9k\x02" + - "\u0353\u0482\x03\x02\x02\x02\u0354\u0355\x05\xD1g\x02\u0355\u0356\x05" + - "\xCBd\x02\u0356\u0357\x05\xF1w\x02\u0357\u0358\x05\xD3h\x02\u0358\u0359" + - "\x05o6\x02\u0359\u035A\x05\xD5i\x02\u035A\u035B\x05\xE7r\x02\u035B\u035C" + - "\x05\xEDu\x02\u035C\u035D\x05\xE3p\x02\u035D\u035E\x05\xCBd\x02\u035E" + - "\u035F\x05\xF1w\x02\u035F\u0482\x03\x02\x02\x02\u0360\u0361\x05\xD1g\x02" + - "\u0361\u0362\x05\xCBd\x02\u0362\u0363\x05\xF1w\x02\u0363\u0364\x05\xD3" + - "h\x02\u0364\u0365\x05o6\x02\u0365\u0366\x05\xF1w\x02\u0366\u0367\x05\xED" + - "u\x02\u0367\u0368\x05\xF3x\x02\u0368\u0369\x05\xE5q\x02\u0369\u036A\x05" + - "\xCFf\x02\u036A\u0482\x03\x02\x02\x02\u036B\u036C\x05\xD1g\x02\u036C\u036D" + - "\x05\xCBd\x02\u036D\u036E\x05\xF1w\x02\u036E\u036F\x05\xD3h\x02\u036F" + - "\u0370\x05o6\x02\u0370\u0371\x05\xE9s\x02\u0371\u0372\x05\xCBd\x02\u0372" + - "\u0373\x05\xEDu\x02\u0373\u0374\x05\xEFv\x02\u0374\u0375\x05\xD3h\x02" + - "\u0375\u0482\x03\x02\x02\x02\u0376\u0377\x05\xCBd\x02\u0377\u0378\x05" + - "\xF3x\x02\u0378\u0379\x05\xF1w\x02\u0379\u037A\x05\xE7r\x02\u037A\u037B" + - "\x05o6\x02\u037B\u037C\x05\xCDe\x02\u037C\u037D\x05\xF3x\x02\u037D\u037E" + - "\x05\xCFf\x02\u037E\u037F\x05\xDFn\x02\u037F\u0380\x05\xD3h\x02\u0380" + - "\u0381\x05\xF1w\x02\u0381\u0482\x03\x02\x02\x02\u0382\u0383\x05\xDBl\x02" + - "\u0383\u0384\x05\xEFv\x02\u0384\u0385\x05o6\x02\u0385\u0386\x05\xD5i\x02" + - "\u0386\u0387\x05\xDBl\x02\u0387\u0388\x05\xE5q\x02\u0388\u0389\x05\xDB" + - "l\x02\u0389\u038A\x05\xF1w\x02\u038A\u038B\x05\xD3h\x02\u038B\u0482\x03" + - "\x02\x02\x02\u038C\u038D\x05\xDBl\x02\u038D\u038E\x05\xEFv\x02\u038E\u038F" + - "\x05o6\x02\u038F\u0390\x05\xDBl\x02\u0390\u0391\x05\xE5q\x02\u0391\u0392" + - "\x05\xD5i\x02\u0392\u0393\x05\xDBl\x02\u0393\u0394\x05\xE5q\x02\u0394" + - "\u0395\x05\xDBl\x02\u0395\u0396\x05\xF1w\x02\u0396\u0397\x05\xD3h\x02" + - "\u0397\u0482\x03\x02\x02\x02\u0398\u0399\x05\xCFf\x02\u0399\u039A\x05" + - "\xCBd\x02\u039A\u039B\x05\xEFv\x02\u039B\u039C\x05\xD3h\x02\u039C\u0482" + - "\x03\x02\x02\x02\u039D\u039E\x05\xE1o\x02\u039E\u039F\x05\xD3h\x02\u039F" + - "\u03A0\x05\xE5q\x02\u03A0\u03A1\x05\xD7j\x02\u03A1\u03A2\x05\xF1w\x02" + - "\u03A2\u03A3\x05\xD9k\x02\u03A3\u0482\x03\x02\x02\x02\u03A4\u03A5\x05" + - "\xE3p\x02\u03A5\u03A6\x05\xF5y\x02\u03A6\u03A7\x05o6\x02\u03A7\u03A8\x05" + - "\xE3p\x02\u03A8\u03A9\x05\xCBd\x02\u03A9\u03AA\x05\xF9{\x02\u03AA\u0482" + - "\x03\x02\x02\x02\u03AB\u03AC\x05\xE3p\x02\u03AC\u03AD\x05\xF5y\x02\u03AD" + - "\u03AE\x05o6\x02\u03AE\u03AF\x05\xE3p\x02\u03AF\u03B0\x05\xDBl\x02\u03B0" + - "\u03B1\x05\xE5q\x02\u03B1\u0482\x03\x02\x02\x02\u03B2\u03B3\x05\xE3p\x02" + - "\u03B3\u03B4\x05\xF5y\x02\u03B4\u03B5\x05o6\x02\u03B5\u03B6\x05\xCBd\x02" + - "\u03B6\u03B7\x05\xF5y\x02\u03B7\u03B8\x05\xD7j\x02\u03B8\u0482\x03\x02" + - "\x02\x02\u03B9\u03BA\x05\xE3p\x02\u03BA\u03BB\x05\xF5y\x02\u03BB\u03BC" + - "\x05o6\x02\u03BC\u03BD\x05\xEFv\x02\u03BD\u03BE\x05\xF3x\x02\u03BE\u03BF" + - "\x05\xE3p\x02\u03BF\u0482\x03\x02\x02\x02\u03C0\u03C1\x05\xE3p\x02\u03C1" + - "\u03C2\x05\xF5y\x02\u03C2\u03C3\x05o6\x02\u03C3\u03C4\x05\xCFf\x02\u03C4" + - "\u03C5\x05\xE7r\x02\u03C5\u03C6\x05\xF3x\x02\u03C6\u03C7\x05\xE5q\x02" + - "\u03C7\u03C8\x05\xF1w\x02\u03C8\u0482\x03\x02\x02\x02\u03C9\u03CA\x05" + - "\xE3p\x02\u03CA\u03CB\x05\xF5y\x02\u03CB\u03CC\x05o6\x02\u03CC\u03CD\x05" + - "\xCFf\x02\u03CD\u03CE\x05\xE7r\x02\u03CE\u03CF\x05\xE5q\x02\u03CF\u03D0" + - "\x05\xCFf\x02\u03D0\u03D1\x05\xCBd\x02\u03D1\u03D2\x05\xF1w\x02\u03D2" + - "\u0482\x03\x02\x02\x02\u03D3\u03D4\x05\xE3p\x02\u03D4\u03D5\x05\xF5y\x02" + - "\u03D5\u03D6\x05o6\x02\u03D6\u03D7\x05\xDDm\x02\u03D7\u03D8\x05\xE7r\x02" + - "\u03D8\u03D9\x05\xDBl\x02\u03D9\u03DA\x05\xE5q\x02\u03DA\u0482\x03\x02" + - "\x02\x02\u03DB\u03DC\x05\xE3p\x02\u03DC\u03DD\x05\xF5y\x02\u03DD\u03DE" + - "\x05o6\x02\u03DE\u03DF\x05\xE3p\x02\u03DF\u03E0\x05\xD3h\x02\u03E0\u03E1" + - "\x05\xD1g\x02\u03E1\u03E2\x05\xDBl\x02\u03E2\u03E3\x05\xCBd\x02\u03E3" + - "\u03E4\x05\xE5q\x02\u03E4\u0482\x03\x02\x02\x02\u03E5\u03E6\x05\xE3p\x02" + - "\u03E6\u03E7\x05\xF5y\x02\u03E7\u03E8\x05o6\x02\u03E8\u03E9\x05\xD1g\x02" + - "\u03E9\u03EA\x05\xD3h\x02\u03EA\u03EB\x05\xD1g\x02\u03EB\u03EC\x05\xF3" + - "x\x02\u03EC\u03ED\x05\xE9s\x02\u03ED\u03EE\x05\xD3h\x02\u03EE\u0482\x03" + - "\x02\x02\x02\u03EF\u03F0\x05\xE3p\x02\u03F0\u03F1\x05\xD3h\x02\u03F1\u03F2" + - "\x05\xF1w\x02\u03F2\u03F3\x05\xCBd\x02\u03F3\u03F4\x05\xD1g\x02\u03F4" + - "\u03F5\x05\xCBd\x02\u03F5\u03F6\x05\xF1w\x02\u03F6\u03F7\x05\xCBd\x02" + - "\u03F7\u0482\x03\x02\x02\x02\u03F8\u03F9\x05\xEFv\x02\u03F9\u03FA\x05" + - "\xE9s\x02\u03FA\u03FB\x05\xE1o\x02\u03FB\u03FC\x05\xDBl\x02\u03FC\u03FD" + - "\x05\xF1w\x02\u03FD\u0482\x03\x02\x02\x02\u03FE\u03FF\x05\xF1w\x02\u03FF" + - "\u0400\x05\xE7r\x02\u0400\u0401\x05o6\x02\u0401\u0402\x05\xEFv\x02\u0402" + - "\u0403\x05\xF1w\x02\u0403\u0404\x05\xEDu\x02\u0404\u0405\x05\xDBl\x02" + - "\u0405\u0406\x05\xE5q\x02\u0406\u0407\x05\xD7j\x02\u0407\u0482\x03\x02" + - "\x02\x02\u0408\u0409\x05\xF1w\x02\u0409\u040A\x05\xE7r\x02\u040A\u040B" + - "\x05o6\x02\u040B\u040C\x05\xEFv\x02\u040C\u040D\x05\xF1w\x02\u040D\u040E" + - "\x05\xEDu\x02\u040E\u0482\x03\x02\x02\x02\u040F\u0410\x05\xF1w\x02\u0410" + - "\u0411\x05\xE7r\x02\u0411\u0412\x05o6\x02\u0412\u0413\x05\xCDe\x02\u0413" + - "\u0414\x05\xE7r\x02\u0414\u0415\x05\xE7r\x02\u0415\u0416\x05\xE1o\x02" + - "\u0416\u0482\x03\x02\x02\x02\u0417\u0418\x05\xF1w\x02\u0418\u0419\x05" + - "\xE7r\x02\u0419\u041A\x05o6\x02\u041A\u041B\x05\xCDe\x02\u041B\u041C\x05" + - "\xE7r\x02\u041C\u041D\x05\xE7r\x02\u041D\u041E\x05\xE1o\x02\u041E\u041F" + - "\x05\xD3h"; + "\u0345\u0346\x05\xCBd\x02\u0346\u0347\x05\xF1w\x02\u0347\u04C6\x03\x02" + + "\x02\x02\u0348\u0349\x05\xCFf\x02\u0349\u034A\x05\xE7r\x02\u034A\u034B" + + "\x05\xCBd\x02\u034B\u034C\x05\xE1o\x02\u034C\u034D\x05\xD3h\x02\u034D" + + "\u034E\x05\xEFv\x02\u034E\u034F\x05\xCFf\x02\u034F\u0350\x05\xD3h\x02" + + "\u0350\u04C6\x03\x02\x02\x02\u0351\u0352\x05\xD7j\x02\u0352\u0353\x05" + + "\xEDu\x02\u0353\u0354\x05\xD3h\x02\u0354\u0355\x05\xCBd\x02\u0355\u0356" + + "\x05\xF1w\x02\u0356\u0357\x05\xD3h\x02\u0357\u0358\x05\xEFv\x02\u0358" + + "\u0359\x05\xF1w\x02\u0359\u04C6\x03\x02\x02\x02\u035A\u035B\x05\xE1o\x02" + + "\u035B\u035C\x05\xD3h\x02\u035C\u035D\x05\xD5i\x02\u035D\u035E\x05\xF1" + + "w\x02\u035E\u04C6\x03\x02\x02\x02\u035F\u0360\x05\xE5q\x02\u0360\u0361" + + "\x05\xE7r\x02\u0361\u0362\x05\xF7z\x02\u0362\u04C6\x03\x02\x02\x02\u0363" + + "\u0364\x05\xEDu\x02\u0364\u0365\x05\xDBl\x02\u0365\u0366\x05\xD7j\x02" + + "\u0366\u0367\x05\xD9k\x02\u0367\u0368\x05\xF1w\x02\u0368\u04C6\x03\x02" + + "\x02\x02\u0369\u036A\x05\xEFv\x02\u036A\u036B\x05\xF1w\x02\u036B\u036C" + + "\x05\xCBd\x02\u036C\u036D\x05\xEDu\x02\u036D\u036E\x05\xF1w\x02\u036E" + + "\u036F\x05\xEFv\x02\u036F\u0370\x05o6\x02\u0370\u0371\x05\xF7z\x02\u0371" + + "\u0372\x05\xDBl\x02\u0372\u0373\x05\xF1w\x02\u0373\u0374\x05\xD9k\x02" + + "\u0374\u04C6\x03\x02\x02\x02\u0375\u0376\x05\xD1g\x02\u0376\u0377\x05" + + "\xCBd\x02\u0377\u0378\x05\xF1w\x02\u0378\u0379\x05\xD3h\x02\u0379\u037A" + + "\x05o6\x02\u037A\u037B\x05\xD5i\x02\u037B\u037C\x05\xE7r\x02\u037C\u037D" + + "\x05\xEDu\x02\u037D\u037E\x05\xE3p\x02\u037E\u037F\x05\xCBd\x02\u037F" + + "\u0380\x05\xF1w\x02\u0380\u04C6\x03\x02\x02\x02\u0381\u0382\x05\xD1g\x02" + + "\u0382\u0383\x05\xCBd\x02\u0383\u0384\x05\xF1w\x02\u0384\u0385\x05\xD3" + + "h\x02\u0385\u0386\x05o6\x02\u0386\u0387\x05\xF1w\x02\u0387\u0388\x05\xED" + + "u\x02\u0388\u0389\x05\xF3x\x02\u0389\u038A\x05\xE5q\x02\u038A\u038B\x05" + + "\xCFf\x02\u038B\u04C6\x03\x02\x02\x02\u038C\u038D\x05\xD1g\x02\u038D\u038E" + + "\x05\xCBd\x02\u038E\u038F\x05\xF1w\x02\u038F\u0390\x05\xD3h\x02\u0390" + + "\u0391\x05o6\x02\u0391\u0392\x05\xE9s\x02\u0392\u0393\x05\xCBd\x02\u0393" + + "\u0394\x05\xEDu\x02\u0394\u0395\x05\xEFv\x02\u0395\u0396\x05\xD3h\x02" + + "\u0396\u04C6\x03\x02\x02\x02\u0397\u0398\x05\xCBd\x02\u0398\u0399\x05" + + "\xF3x\x02\u0399\u039A\x05\xF1w\x02\u039A\u039B\x05\xE7r\x02\u039B\u039C" + + "\x05o6\x02\u039C\u039D\x05\xCDe\x02\u039D\u039E\x05\xF3x\x02\u039E\u039F" + + "\x05\xCFf\x02\u039F\u03A0\x05\xDFn\x02\u03A0\u03A1\x05\xD3h\x02\u03A1" + + "\u03A2\x05\xF1w\x02\u03A2\u04C6\x03\x02\x02\x02\u03A3\u03A4\x05\xD1g\x02" + + "\u03A4\u03A5\x05\xCBd\x02\u03A5\u03A6\x05\xF1w\x02\u03A6\u03A7\x05\xD3" + + "h\x02\u03A7\u03A8\x05o6\x02\u03A8\u03A9\x05\xD3h\x02\u03A9\u03AA\x05\xF9" + + "{\x02\u03AA\u03AB\x05\xF1w\x02\u03AB\u03AC\x05\xEDu\x02\u03AC\u03AD\x05" + + "\xCBd\x02\u03AD\u03AE\x05\xCFf\x02\u03AE\u03AF\x05\xF1w\x02\u03AF\u04C6" + + "\x03\x02\x02\x02\u03B0\u03B1\x05\xDBl\x02\u03B1\u03B2\x05\xEFv\x02\u03B2" + + "\u03B3\x05o6\x02\u03B3\u03B4\x05\xD5i\x02\u03B4\u03B5\x05\xDBl\x02\u03B5" + + "\u03B6\x05\xE5q\x02\u03B6\u03B7\x05\xDBl\x02\u03B7\u03B8\x05\xF1w\x02" + + "\u03B8\u03B9\x05\xD3h\x02\u03B9\u04C6\x03\x02\x02\x02\u03BA\u03BB\x05" + + "\xDBl\x02\u03BB\u03BC\x05\xEFv\x02\u03BC\u03BD\x05o6\x02\u03BD\u03BE\x05" + + "\xDBl\x02\u03BE\u03BF\x05\xE5q\x02\u03BF\u03C0\x05\xD5i\x02\u03C0\u03C1" + + "\x05\xDBl\x02\u03C1\u03C2\x05\xE5q\x02\u03C2\u03C3\x05\xDBl\x02\u03C3" + + "\u03C4\x05\xF1w\x02\u03C4\u03C5\x05\xD3h\x02\u03C5\u04C6\x03\x02\x02\x02" + + "\u03C6\u03C7\x05\xCFf\x02\u03C7\u03C8\x05\xCBd\x02\u03C8\u03C9\x05\xEF" + + "v\x02\u03C9\u03CA\x05\xD3h\x02\u03CA\u04C6\x03\x02\x02\x02\u03CB\u03CC" + + "\x05\xE1o\x02\u03CC\u03CD\x05\xD3h\x02\u03CD\u03CE\x05\xE5q\x02\u03CE" + + "\u03CF\x05\xD7j\x02\u03CF\u03D0\x05\xF1w\x02\u03D0\u03D1\x05\xD9k\x02" + + "\u03D1\u04C6\x03\x02\x02\x02\u03D2\u03D3\x05\xE3p\x02\u03D3\u03D4\x05" + + "\xF5y\x02\u03D4\u03D5\x05o6\x02\u03D5\u03D6\x05\xE3p\x02\u03D6\u03D7\x05" + + "\xCBd\x02\u03D7\u03D8\x05\xF9{\x02\u03D8\u04C6\x03\x02\x02\x02\u03D9\u03DA" + + "\x05\xE3p\x02\u03DA\u03DB\x05\xF5y\x02\u03DB\u03DC\x05o6\x02\u03DC\u03DD" + + "\x05\xE3p\x02\u03DD\u03DE\x05\xDBl\x02\u03DE\u03DF\x05\xE5q\x02\u03DF" + + "\u04C6\x03\x02\x02\x02\u03E0\u03E1\x05\xE3p\x02\u03E1\u03E2\x05\xF5y\x02" + + "\u03E2\u03E3\x05o6\x02\u03E3\u03E4\x05\xCBd\x02\u03E4\u03E5\x05\xF5y\x02" + + "\u03E5\u03E6\x05\xD7j\x02\u03E6\u04C6\x03\x02\x02\x02\u03E7\u03E8\x05" + + "\xE3p\x02\u03E8\u03E9\x05\xF5y\x02\u03E9\u03EA\x05o6\x02\u03EA\u03EB\x05" + + "\xEFv\x02\u03EB\u03EC\x05\xF3x\x02\u03EC\u03ED\x05\xE3p\x02\u03ED\u04C6" + + "\x03\x02\x02\x02\u03EE\u03EF\x05\xE3p\x02\u03EF\u03F0\x05\xF5y\x02\u03F0" + + "\u03F1\x05o6"; private static readonly _serializedATNSegment2: string = - "\x02\u041F\u0420\x05\xCBd\x02\u0420\u0421\x05\xE5q\x02\u0421\u0482\x03" + - "\x02\x02\x02\u0422\u0423\x05\xF1w\x02\u0423\u0424\x05\xE7r\x02\u0424\u0425" + - "\x05o6\x02\u0425\u0426\x05\xD1g\x02\u0426\u0427\x05\xCBd\x02\u0427\u0428" + - "\x05\xF1w\x02\u0428\u0429\x05\xD3h\x02\u0429\u042A\x05\xF1w\x02\u042A" + - "\u042B\x05\xDBl\x02\u042B\u042C\x05\xE3p\x02\u042C\u042D\x05\xD3h\x02" + - "\u042D\u0482\x03\x02\x02\x02\u042E\u042F\x05\xF1w\x02\u042F\u0430\x05" + - "\xE7r\x02\u0430\u0431\x05o6\x02\u0431\u0432\x05\xD1g\x02\u0432\u0433\x05" + - "\xF1w\x02\u0433\u0482\x03\x02\x02\x02\u0434\u0435\x05\xF1w\x02\u0435\u0436" + - "\x05\xE7r\x02\u0436\u0437\x05o6\x02\u0437\u0438\x05\xD1g\x02\u0438\u0439" + - "\x05\xCDe\x02\u0439\u043A\x05\xE1o\x02\u043A\u0482\x03\x02\x02\x02\u043B" + - "\u043C\x05\xF1w\x02\u043C\u043D\x05\xE7r\x02\u043D\u043E\x05o6\x02\u043E" + - "\u043F\x05\xD1g\x02\u043F\u0440\x05\xE7r\x02\u0440\u0441\x05\xF3x\x02" + - "\u0441\u0442\x05\xCDe\x02\u0442\u0443\x05\xE1o\x02\u0443\u0444\x05\xD3" + - "h\x02\u0444\u0482\x03\x02\x02\x02\u0445\u0446\x05\xF1w\x02\u0446\u0447" + - "\x05\xE7r\x02\u0447\u0448\x05o6\x02\u0448\u0449\x05\xDBl\x02\u0449\u044A" + - "\x05\xE5q\x02\u044A\u044B\x05\xF1w\x02\u044B\u0482\x03\x02\x02\x02\u044C" + - "\u044D\x05\xF1w\x02\u044D\u044E\x05\xE7r\x02\u044E\u044F\x05o6\x02\u044F" + - "\u0450\x05\xDBl\x02\u0450\u0451\x05\xE5q\x02\u0451\u0452\x05\xF1w\x02" + - "\u0452\u0453\x05\xD3h\x02\u0453\u0454\x05\xD7j\x02\u0454\u0455\x05\xD3" + - "h\x02\u0455\u0456\x05\xEDu\x02\u0456\u0482\x03\x02\x02\x02\u0457\u0458" + - "\x05\xF1w\x02\u0458\u0459\x05\xE7r\x02\u0459\u045A\x05o6\x02\u045A\u045B" + - "\x05\xE1o\x02\u045B\u045C\x05\xE7r\x02\u045C\u045D\x05\xE5q\x02\u045D" + - "\u045E\x05\xD7j\x02\u045E\u0482\x03\x02\x02\x02\u045F\u0460\x05\xF1w\x02" + - "\u0460\u0461\x05\xE7r\x02\u0461\u0462\x05o6\x02\u0462\u0463\x05\xDBl\x02" + - "\u0463\u0464\x05\xE9s\x02\u0464\u0482\x03\x02\x02\x02\u0465\u0466\x05" + - "\xF1w\x02\u0466\u0467\x05\xE7r\x02\u0467\u0468\x05o6\x02\u0468\u0469\x05" + - "\xF5y\x02\u0469\u046A\x05\xD3h\x02\u046A\u046B\x05\xEDu\x02\u046B\u046C" + - "\x05\xEFv\x02\u046C\u046D\x05\xDBl\x02\u046D\u046E\x05\xE7r\x02\u046E" + - "\u046F\x05\xE5q\x02\u046F\u0482\x03\x02\x02\x02\u0470\u0471\x05\xF1w\x02" + - "\u0471\u0472\x05\xE7r\x02\u0472\u0473\x05o6\x02\u0473\u0474\x05\xF3x\x02" + - "\u0474\u0475\x05\xE5q\x02\u0475\u0476\x05\xEFv\x02\u0476\u0477\x05\xDB" + - "l\x02\u0477\u0478\x05\xD7j\x02\u0478\u0479\x05\xE5q\x02\u0479\u047A\x05" + - "\xD3h\x02\u047A\u047B\x05\xD1g\x02\u047B\u047C\x05o6\x02\u047C\u047D\x05" + - "\xE1o\x02\u047D\u047E\x05\xE7r\x02\u047E\u047F\x05\xE5q\x02\u047F\u0480" + - "\x05\xD7j\x02\u0480\u0482\x03\x02\x02\x02\u0481\u0317\x03\x02\x02\x02" + - "\u0481\u031D\x03\x02\x02\x02\u0481\u0321\x03\x02\x02\x02\u0481\u0325\x03" + - "\x02\x02\x02\u0481\u032A\x03\x02\x02\x02\u0481\u032D\x03\x02\x02\x02\u0481" + - "\u0331\x03\x02\x02\x02\u0481\u0332\x03\x02\x02\x02\u0481\u033C\x03\x02" + - "\x02\x02\u0481\u0341\x03\x02\x02\x02\u0481\u0348\x03\x02\x02\x02\u0481" + - "\u0354\x03\x02\x02\x02\u0481\u0360\x03\x02\x02\x02\u0481\u036B\x03\x02" + - "\x02\x02\u0481\u0376\x03\x02\x02\x02\u0481\u0382\x03\x02\x02\x02\u0481" + - "\u038C\x03\x02\x02\x02\u0481\u0398\x03\x02\x02\x02\u0481\u039D\x03\x02" + - "\x02\x02\u0481\u03A4\x03\x02\x02\x02\u0481\u03AB\x03\x02\x02\x02\u0481" + - "\u03B2\x03\x02\x02\x02\u0481\u03B9\x03\x02\x02\x02\u0481\u03C0\x03\x02" + - "\x02\x02\u0481\u03C9\x03\x02\x02\x02\u0481\u03D3\x03\x02\x02\x02\u0481" + - "\u03DB\x03\x02\x02\x02\u0481\u03E5\x03\x02\x02\x02\u0481\u03EF\x03\x02" + - "\x02\x02\u0481\u03F8\x03\x02\x02\x02\u0481\u03FE\x03\x02\x02\x02\u0481" + - "\u0408\x03\x02\x02\x02\u0481\u040F\x03\x02\x02\x02\u0481\u0417\x03\x02" + - "\x02\x02\u0481\u0422\x03\x02\x02\x02\u0481\u042E\x03\x02\x02\x02\u0481" + - "\u0434\x03\x02\x02\x02\u0481\u043B\x03\x02\x02\x02\u0481\u0445\x03\x02" + - "\x02\x02\u0481\u044C\x03\x02\x02\x02\u0481\u0457\x03\x02\x02\x02\u0481" + - "\u045F\x03\x02\x02\x02\u0481\u0465\x03\x02\x02\x02\u0481\u0470\x03\x02" + - "\x02\x02\u0482\x8C\x03\x02\x02\x02\u0483\u0484\x05\xCBd\x02\u0484\u0485" + - "\x05\xF5y\x02\u0485\u0486\x05\xD7j\x02\u0486\u04D5\x03\x02\x02\x02\u0487" + - "\u0488\x05\xE3p\x02\u0488\u0489\x05\xDBl\x02\u0489\u048A\x05\xE5q\x02" + - "\u048A\u04D5\x03\x02\x02\x02\u048B\u048C\x05\xE3p\x02\u048C\u048D\x05" + - "\xCBd\x02\u048D\u048E\x05\xF9{\x02\u048E\u04D5\x03\x02\x02\x02\u048F\u0490" + - "\x05\xEFv\x02\u0490\u0491\x05\xF3x\x02\u0491\u0492\x05\xE3p\x02\u0492" + - "\u04D5\x03\x02\x02\x02\u0493\u0494\x05\xCFf\x02\u0494\u0495\x05\xE7r\x02" + - "\u0495\u0496\x05\xF3x\x02\u0496\u0497\x05\xE5q\x02\u0497\u0498\x05\xF1" + - "w\x02\u0498\u04D5\x03\x02\x02\x02\u0499\u049A\x05\xCFf\x02\u049A\u049B" + - "\x05\xE7r\x02\u049B\u049C\x05\xF3x\x02\u049C\u049D\x05\xE5q\x02\u049D" + - "\u049E\x05\xF1w\x02\u049E\u049F\x05o6\x02\u049F\u04A0\x05\xD1g\x02\u04A0" + - "\u04A1\x05\xDBl\x02\u04A1\u04A2\x05\xEFv\x02\u04A2\u04A3\x05\xF1w\x02" + - "\u04A3\u04A4\x05\xDBl\x02\u04A4\u04A5\x05\xE5q\x02\u04A5\u04A6\x05\xCF" + - "f\x02\u04A6\u04A7\x05\xF1w\x02\u04A7\u04D5\x03\x02\x02\x02\u04A8\u04A9" + - "\x05\xE9s\x02\u04A9\u04AA\x05\xD3h\x02\u04AA\u04AB\x05\xEDu\x02\u04AB" + - "\u04AC\x05\xCFf\x02\u04AC\u04AD\x05\xD3h\x02\u04AD\u04AE\x05\xE5q\x02" + - "\u04AE\u04AF\x05\xF1w\x02\u04AF\u04B0\x05\xDBl\x02\u04B0\u04B1\x05\xE1" + - "o\x02\u04B1\u04B2\x05\xD3h\x02\u04B2\u04D5\x03\x02\x02\x02\u04B3\u04B4" + - "\x05\xE3p\x02\u04B4\u04B5\x05\xD3h\x02\u04B5\u04B6\x05\xD1g\x02\u04B6" + - "\u04B7\x05\xDBl\x02\u04B7\u04B8\x05\xCBd\x02\u04B8\u04B9\x05\xE5q\x02" + - "\u04B9\u04D5\x03\x02\x02\x02\u04BA\u04BB\x05\xE3p\x02\u04BB\u04BC\x05" + - "\xD3h\x02\u04BC\u04BD\x05\xD1g\x02\u04BD\u04BE\x05\xDBl\x02\u04BE\u04BF" + - "\x05\xCBd\x02\u04BF\u04C0\x05\xE5q\x02\u04C0\u04C1\x05o6\x02\u04C1\u04C2" + - "\x05\xCBd\x02\u04C2\u04C3\x05\xCDe\x02\u04C3\u04C4\x05\xEFv\x02\u04C4" + - "\u04C5\x05\xE7r\x02\u04C5\u04C6\x05\xE1o\x02\u04C6\u04C7\x05\xF3x\x02" + - "\u04C7\u04C8\x05\xF1w\x02\u04C8\u04C9\x05\xD3h\x02\u04C9\u04CA\x05o6\x02" + - "\u04CA\u04CB\x05\xD1g\x02\u04CB\u04CC\x05\xD3h\x02\u04CC\u04CD\x05\xF5" + - "y\x02\u04CD\u04CE\x05\xDBl\x02\u04CE\u04CF\x05\xCBd\x02\u04CF\u04D0\x05" + - "\xF1w\x02\u04D0\u04D1\x05\xDBl\x02\u04D1\u04D2\x05\xE7r\x02\u04D2\u04D3" + - "\x05\xE5q\x02\u04D3\u04D5\x03\x02\x02\x02\u04D4\u0483\x03\x02\x02\x02" + - "\u04D4\u0487\x03\x02\x02\x02\u04D4\u048B\x03\x02\x02\x02\u04D4\u048F\x03" + - "\x02\x02\x02\u04D4\u0493\x03\x02\x02\x02\u04D4\u0499\x03\x02\x02\x02\u04D4" + - "\u04A8\x03\x02\x02\x02\u04D4\u04B3\x03\x02\x02\x02\u04D4\u04BA\x03\x02" + - "\x02\x02\u04D5\x8E\x03\x02\x02\x02\u04D6\u04D7\x05\xCFf\x02\u04D7\u04D8" + - "\x05\xDBl\x02\u04D8\u04D9\x05\xD1g\x02\u04D9\u04DA\x05\xEDu\x02\u04DA" + - "\u04DB\x05o6\x02\u04DB\u04DC\x05\xE3p\x02\u04DC\u04DD\x05\xCBd\x02\u04DD" + - "\u04DE\x05\xF1w\x02\u04DE\u04DF\x05\xCFf\x02\u04DF\u04E0\x05\xD9k\x02" + - "\u04E0\x90\x03\x02\x02\x02\u04E1\u04E8\x05=\x1D\x02\u04E2\u04E7\x05=\x1D" + - "\x02\u04E3\u04E7\x05;\x1C\x02\u04E4\u04E7\x07a\x02\x02\u04E5\u04E7\x05" + - "}=\x02\u04E6\u04E2\x03\x02\x02\x02\u04E6\u04E3\x03\x02\x02\x02\u04E6\u04E4" + - "\x03\x02\x02\x02\u04E6\u04E5\x03\x02\x02\x02\u04E7\u04EA\x03\x02\x02\x02" + - "\u04E8\u04E6\x03\x02\x02\x02\u04E8\u04E9\x03\x02\x02\x02\u04E9\u04F5\x03" + - "\x02\x02\x02\u04EA\u04E8\x03\x02\x02\x02\u04EB\u04F0\t\n\x02\x02\u04EC" + - "\u04F1\x05=\x1D\x02\u04ED\u04F1\x05;\x1C\x02\u04EE\u04F1\x07a\x02\x02" + - "\u04EF\u04F1\x05}=\x02\u04F0\u04EC\x03\x02\x02\x02\u04F0\u04ED\x03\x02" + - "\x02\x02\u04F0\u04EE\x03\x02\x02\x02\u04F0\u04EF\x03\x02\x02\x02\u04F1" + - "\u04F2\x03\x02\x02\x02\u04F2\u04F0\x03\x02\x02\x02\u04F2\u04F3\x03\x02" + - "\x02\x02\u04F3\u04F5\x03\x02\x02\x02\u04F4\u04E1\x03\x02\x02\x02\u04F4" + - "\u04EB\x03\x02\x02\x02\u04F5\x92\x03\x02\x02\x02\u04F6\u04FC\x07b\x02" + - "\x02\u04F7\u04FB\n\v\x02\x02\u04F8\u04F9\x07b\x02\x02\u04F9\u04FB\x07" + - "b\x02\x02\u04FA\u04F7\x03\x02\x02\x02\u04FA\u04F8\x03\x02\x02\x02\u04FB" + - "\u04FE\x03\x02\x02\x02\u04FC\u04FA\x03\x02\x02\x02\u04FC\u04FD\x03\x02" + - "\x02\x02\u04FD\u04FF\x03\x02\x02\x02\u04FE\u04FC\x03\x02\x02\x02\u04FF" + - "\u0500\x07b\x02\x02\u0500\x94\x03\x02\x02\x02\u0501\u0502\x05)\x13\x02" + - "\u0502\u0503\x03\x02\x02\x02\u0503\u0504\bI\x06\x02\u0504\x96\x03\x02" + - "\x02\x02\u0505\u0506\x05+\x14\x02\u0506\u0507\x03\x02\x02\x02\u0507\u0508" + - "\bJ\x06\x02\u0508\x98\x03\x02\x02\x02\u0509\u050A\x05-\x15\x02\u050A\u050B" + - "\x03\x02\x02\x02\u050B\u050C\bK\x06\x02\u050C\x9A\x03\x02\x02\x02\u050D" + - "\u050E\x07~\x02\x02\u050E\u050F\x03\x02\x02\x02\u050F\u0510\bL\t\x02\u0510" + - "\u0511\bL\n\x02\u0511\x9C\x03\x02\x02\x02\u0512\u0513\x07]\x02\x02\u0513" + - "\u0514\x03\x02\x02\x02\u0514\u0515\bM\x07\x02\u0515\u0516\bM\x04\x02\u0516" + - "\u0517\bM\x04\x02\u0517\x9E\x03\x02\x02\x02\u0518\u0519\x07_\x02\x02\u0519" + - "\u051A\x03\x02\x02\x02\u051A\u051B\bN\n\x02\u051B\u051C\bN\n\x02\u051C" + - "\u051D\bN\v\x02\u051D\xA0\x03\x02\x02\x02\u051E\u051F\x07.\x02\x02\u051F" + - "\u0520\x03\x02\x02\x02\u0520\u0521\bO\f\x02\u0521\xA2\x03\x02\x02\x02" + - "\u0522\u0523\x07?\x02\x02\u0523\u0524\x03\x02\x02\x02\u0524\u0525\bP\r" + - "\x02\u0525\xA4\x03\x02\x02\x02\u0526\u0527\x05\xE3p\x02\u0527\u0528\x05" + - "\xD3h\x02\u0528\u0529\x05\xF1w\x02\u0529\u052A\x05\xCBd\x02\u052A\u052B" + - "\x05\xD1g\x02\u052B\u052C\x05\xCBd\x02\u052C\u052D\x05\xF1w\x02\u052D" + - "\u052E\x05\xCBd\x02\u052E\xA6\x03\x02\x02\x02\u052F\u0531\x05\xA9S\x02" + - "\u0530\u052F\x03\x02\x02\x02\u0531\u0532\x03\x02\x02\x02\u0532\u0530\x03" + - "\x02\x02\x02\u0532\u0533\x03\x02\x02\x02\u0533\xA8\x03\x02\x02\x02\u0534" + - "\u0536\n\f\x02\x02\u0535\u0534\x03\x02\x02\x02\u0536\u0537\x03\x02\x02" + - "\x02\u0537\u0535\x03\x02\x02\x02\u0537\u0538\x03\x02\x02\x02\u0538\u053C" + - "\x03\x02\x02\x02\u0539\u053A\x071\x02\x02\u053A\u053C\n\r\x02\x02\u053B" + - "\u0535\x03\x02\x02\x02\u053B\u0539\x03\x02\x02\x02\u053C\xAA\x03\x02\x02" + - "\x02\u053D\u053E\x05\x93H\x02\u053E\xAC\x03\x02\x02\x02\u053F\u0540\x05" + - ")\x13\x02\u0540\u0541\x03\x02\x02\x02\u0541\u0542\bU\x06\x02\u0542\xAE" + - "\x03\x02\x02\x02\u0543\u0544\x05+\x14\x02\u0544\u0545\x03\x02\x02\x02" + - "\u0545\u0546\bV\x06\x02\u0546\xB0\x03\x02\x02\x02\u0547\u0548\x05-\x15" + - "\x02\u0548\u0549\x03\x02\x02\x02\u0549\u054A\bW\x06\x02\u054A\xB2\x03" + - "\x02\x02\x02\u054B\u054C\x05\xE7r\x02\u054C\u054D\x05\xE5q\x02\u054D\xB4" + - "\x03\x02\x02\x02\u054E\u054F\x05\xF7z\x02\u054F\u0550\x05\xDBl\x02\u0550" + - "\u0551\x05\xF1w\x02\u0551\u0552\x05\xD9k\x02\u0552\xB6\x03\x02\x02\x02" + - "\u0553\u0554\x07~\x02\x02\u0554\u0555\x03\x02\x02\x02\u0555\u0556\bZ\t" + - "\x02\u0556\u0557\bZ\n\x02\u0557\xB8\x03\x02\x02\x02\u0558\u0559\x07_\x02" + - "\x02\u0559\u055A\x03\x02\x02\x02\u055A\u055B\b[\n\x02\u055B\u055C\b[\n" + - "\x02\u055C\u055D\b[\v\x02\u055D\xBA\x03\x02\x02\x02\u055E\u055F\x07.\x02" + - "\x02\u055F\u0560\x03\x02\x02\x02\u0560\u0561\b\\\f\x02\u0561\xBC\x03\x02" + - "\x02\x02\u0562\u0563\x07?\x02\x02\u0563\u0564\x03\x02\x02\x02\u0564\u0565" + - "\b]\r\x02\u0565\xBE\x03\x02\x02\x02\u0566\u0568\x05\xC1_\x02\u0567\u0566" + - "\x03\x02\x02\x02\u0568\u0569\x03\x02\x02\x02\u0569\u0567\x03\x02\x02\x02" + - "\u0569\u056A\x03\x02\x02\x02\u056A\xC0\x03\x02\x02\x02\u056B\u056D\n\f" + - "\x02\x02\u056C\u056B\x03\x02\x02\x02\u056D\u056E\x03\x02\x02\x02\u056E" + - "\u056C\x03\x02\x02\x02\u056E\u056F\x03\x02\x02\x02\u056F\u0573\x03\x02" + - "\x02\x02\u0570\u0571\x071\x02\x02\u0571\u0573\n\r\x02\x02\u0572\u056C" + - "\x03\x02\x02\x02\u0572\u0570\x03\x02\x02\x02\u0573\xC2\x03\x02\x02\x02" + - "\u0574\u0575\x05\x93H\x02\u0575\xC4\x03\x02\x02\x02\u0576\u0577\x05)\x13" + - "\x02\u0577\u0578\x03\x02\x02\x02\u0578\u0579\ba\x06\x02\u0579\xC6\x03" + - "\x02\x02\x02\u057A\u057B\x05+\x14\x02\u057B\u057C\x03\x02\x02\x02\u057C" + - "\u057D\bb\x06\x02\u057D\xC8\x03\x02\x02\x02\u057E\u057F\x05-\x15\x02\u057F" + - "\u0580\x03\x02\x02\x02\u0580\u0581\bc\x06\x02\u0581\xCA\x03\x02\x02\x02" + - "\u0582\u0583\t\x0E\x02\x02\u0583\xCC\x03\x02\x02\x02\u0584\u0585\t\x0F" + - "\x02\x02\u0585\xCE\x03\x02\x02\x02\u0586\u0587\t\x10\x02\x02\u0587\xD0" + - "\x03\x02\x02\x02\u0588\u0589\t\x11\x02\x02\u0589\xD2\x03\x02\x02\x02\u058A" + - "\u058B\t\b\x02\x02\u058B\xD4\x03\x02\x02\x02\u058C\u058D\t\x12\x02\x02" + - "\u058D\xD6\x03\x02\x02\x02\u058E\u058F\t\x13\x02\x02\u058F\xD8\x03\x02" + - "\x02\x02\u0590\u0591\t\x14\x02\x02\u0591\xDA\x03\x02\x02\x02\u0592\u0593" + - "\t\x15\x02\x02\u0593\xDC\x03\x02\x02\x02\u0594\u0595\t\x16\x02\x02\u0595" + - "\xDE\x03\x02\x02\x02\u0596\u0597\t\x17\x02\x02\u0597\xE0\x03\x02\x02\x02" + - "\u0598\u0599\t\x18\x02\x02\u0599\xE2\x03\x02\x02\x02\u059A\u059B\t\x19" + - "\x02\x02\u059B\xE4\x03\x02\x02\x02\u059C\u059D\t\x1A\x02\x02\u059D\xE6" + - "\x03\x02\x02\x02\u059E\u059F\t\x1B\x02\x02\u059F\xE8\x03\x02\x02\x02\u05A0" + - "\u05A1\t\x1C\x02\x02\u05A1\xEA\x03\x02\x02\x02\u05A2\u05A3\t\x1D\x02\x02" + - "\u05A3\xEC\x03\x02\x02\x02\u05A4\u05A5\t\x1E\x02\x02\u05A5\xEE\x03\x02" + - "\x02\x02\u05A6\u05A7\t\x1F\x02\x02\u05A7\xF0\x03\x02\x02\x02\u05A8\u05A9" + - "\t \x02\x02\u05A9\xF2\x03\x02\x02\x02\u05AA\u05AB\t!\x02\x02\u05AB\xF4" + - "\x03\x02\x02\x02\u05AC\u05AD\t\"\x02\x02\u05AD\xF6\x03\x02\x02\x02\u05AE" + - "\u05AF\t#\x02\x02\u05AF\xF8\x03\x02\x02\x02\u05B0\u05B1\t$\x02\x02\u05B1" + - "\xFA\x03\x02\x02\x02\u05B2\u05B3\t%\x02\x02\u05B3\xFC\x03\x02\x02\x02" + - "\u05B4\u05B5\t&\x02\x02\u05B5\xFE\x03\x02\x02\x022\x02\x03\x04\x05\x06" + + "\x02\u03F1\u03F2\x05\xCFf\x02\u03F2\u03F3\x05\xE7r\x02\u03F3\u03F4\x05" + + "\xF3x\x02\u03F4\u03F5\x05\xE5q\x02\u03F5\u03F6\x05\xF1w\x02\u03F6\u04C6" + + "\x03\x02\x02\x02\u03F7\u03F8\x05\xE3p\x02\u03F8\u03F9\x05\xF5y\x02\u03F9" + + "\u03FA\x05o6\x02\u03FA\u03FB\x05\xCFf\x02\u03FB\u03FC\x05\xE7r\x02\u03FC" + + "\u03FD\x05\xE5q\x02\u03FD\u03FE\x05\xCFf\x02\u03FE\u03FF\x05\xCBd\x02" + + "\u03FF\u0400\x05\xF1w\x02\u0400\u04C6\x03\x02\x02\x02\u0401\u0402\x05" + + "\xE3p\x02\u0402\u0403\x05\xF5y\x02\u0403\u0404\x05o6\x02\u0404\u0405\x05" + + "\xDDm\x02\u0405\u0406\x05\xE7r\x02\u0406\u0407\x05\xDBl\x02\u0407\u0408" + + "\x05\xE5q\x02\u0408\u04C6\x03\x02\x02\x02\u0409\u040A\x05\xE3p\x02\u040A" + + "\u040B\x05\xF5y\x02\u040B\u040C\x05o6\x02\u040C\u040D\x05\xE3p\x02\u040D" + + "\u040E\x05\xD3h\x02\u040E\u040F\x05\xD1g\x02\u040F\u0410\x05\xDBl\x02" + + "\u0410\u0411\x05\xCBd\x02\u0411\u0412\x05\xE5q\x02\u0412\u04C6\x03\x02" + + "\x02\x02\u0413\u0414\x05\xE3p\x02\u0414\u0415\x05\xF5y\x02\u0415\u0416" + + "\x05o6\x02\u0416\u0417\x05\xD1g\x02\u0417\u0418\x05\xD3h\x02\u0418\u0419" + + "\x05\xD1g\x02\u0419\u041A\x05\xF3x\x02\u041A\u041B\x05\xE9s\x02\u041B" + + "\u041C\x05\xD3h\x02\u041C\u04C6\x03\x02\x02\x02\u041D\u041E\x05\xE3p\x02" + + "\u041E\u041F\x05\xD3h\x02\u041F\u0420\x05\xF1w\x02\u0420\u0421\x05\xCB" + + "d\x02\u0421\u0422\x05\xD1g\x02\u0422\u0423\x05\xCBd\x02\u0423\u0424\x05" + + "\xF1w\x02\u0424\u0425\x05\xCBd\x02\u0425\u04C6\x03\x02\x02\x02\u0426\u0427" + + "\x05\xEFv\x02\u0427\u0428\x05\xE9s\x02\u0428\u0429\x05\xE1o\x02\u0429" + + "\u042A\x05\xDBl\x02\u042A\u042B\x05\xF1w\x02\u042B\u04C6\x03\x02\x02\x02" + + "\u042C\u042D\x05\xF1w\x02\u042D\u042E\x05\xE7r\x02\u042E\u042F\x05o6\x02" + + "\u042F\u0430\x05\xEFv\x02\u0430\u0431\x05\xF1w\x02\u0431\u0432\x05\xED" + + "u\x02\u0432\u0433\x05\xDBl\x02\u0433\u0434\x05\xE5q\x02\u0434\u0435\x05" + + "\xD7j\x02\u0435\u04C6\x03\x02\x02\x02\u0436\u0437\x05\xF1w\x02\u0437\u0438" + + "\x05\xE7r\x02\u0438\u0439\x05o6\x02\u0439\u043A\x05\xEFv\x02\u043A\u043B" + + "\x05\xF1w\x02\u043B\u043C\x05\xEDu\x02\u043C\u04C6\x03\x02\x02\x02\u043D" + + "\u043E\x05\xF1w\x02\u043E\u043F\x05\xE7r\x02\u043F\u0440\x05o6\x02\u0440" + + "\u0441\x05\xCDe\x02\u0441\u0442\x05\xE7r\x02\u0442\u0443\x05\xE7r\x02" + + "\u0443\u0444\x05\xE1o\x02\u0444\u04C6\x03\x02\x02\x02\u0445\u0446\x05" + + "\xF1w\x02\u0446\u0447\x05\xE7r\x02\u0447\u0448\x05o6\x02\u0448\u0449\x05" + + "\xCDe\x02\u0449\u044A\x05\xE7r\x02\u044A\u044B\x05\xE7r\x02\u044B\u044C" + + "\x05\xE1o\x02\u044C\u044D\x05\xD3h\x02\u044D\u044E\x05\xCBd\x02\u044E" + + "\u044F\x05\xE5q\x02\u044F\u04C6\x03\x02\x02\x02\u0450\u0451\x05\xF1w\x02" + + "\u0451\u0452\x05\xE7r\x02\u0452\u0453\x05o6\x02\u0453\u0454\x05\xD1g\x02" + + "\u0454\u0455\x05\xCBd\x02\u0455\u0456\x05\xF1w\x02\u0456\u0457\x05\xD3" + + "h\x02\u0457\u0458\x05\xF1w\x02\u0458\u0459\x05\xDBl\x02\u0459\u045A\x05" + + "\xE3p\x02\u045A\u045B\x05\xD3h\x02\u045B\u04C6\x03\x02\x02\x02\u045C\u045D" + + "\x05\xF1w\x02\u045D\u045E\x05\xE7r\x02\u045E\u045F\x05o6\x02\u045F\u0460" + + "\x05\xD1g\x02\u0460\u0461\x05\xF1w\x02\u0461\u04C6\x03\x02\x02\x02\u0462" + + "\u0463\x05\xF1w\x02\u0463\u0464\x05\xE7r\x02\u0464\u0465\x05o6\x02\u0465" + + "\u0466\x05\xD1g\x02\u0466\u0467\x05\xCDe\x02\u0467\u0468\x05\xE1o\x02" + + "\u0468\u04C6\x03\x02\x02\x02\u0469\u046A\x05\xF1w\x02\u046A\u046B\x05" + + "\xE7r\x02\u046B\u046C\x05o6\x02\u046C\u046D\x05\xD1g\x02\u046D\u046E\x05" + + "\xE7r\x02\u046E\u046F\x05\xF3x\x02\u046F\u0470\x05\xCDe\x02\u0470\u0471" + + "\x05\xE1o\x02\u0471\u0472\x05\xD3h\x02\u0472\u04C6\x03\x02\x02\x02\u0473" + + "\u0474\x05\xF1w\x02\u0474\u0475\x05\xE7r\x02\u0475\u0476\x05o6\x02\u0476" + + "\u0477\x05\xD1g\x02\u0477\u0478\x05\xD3h\x02\u0478\u0479\x05\xD7j\x02" + + "\u0479\u047A\x05\xEDu\x02\u047A\u047B\x05\xD3h\x02\u047B\u047C\x05\xD3" + + "h\x02\u047C\u047D\x05\xEFv\x02\u047D\u04C6\x03\x02\x02\x02\u047E\u047F" + + "\x05\xF1w\x02\u047F\u0480\x05\xE7r\x02\u0480\u0481\x05o6\x02\u0481\u0482" + + "\x05\xDBl\x02\u0482\u0483\x05\xE5q\x02\u0483\u0484\x05\xF1w\x02\u0484" + + "\u04C6\x03\x02\x02\x02\u0485\u0486\x05\xF1w\x02\u0486\u0487\x05\xE7r\x02" + + "\u0487\u0488\x05o6\x02\u0488\u0489\x05\xDBl\x02\u0489\u048A\x05\xE5q\x02" + + "\u048A\u048B\x05\xF1w\x02\u048B\u048C\x05\xD3h\x02\u048C\u048D\x05\xD7" + + "j\x02\u048D\u048E\x05\xD3h\x02\u048E\u048F\x05\xEDu\x02\u048F\u04C6\x03" + + "\x02\x02\x02\u0490\u0491\x05\xF1w\x02\u0491\u0492\x05\xE7r\x02\u0492\u0493" + + "\x05o6\x02\u0493\u0494\x05\xDBl\x02\u0494\u0495\x05\xE9s\x02\u0495\u04C6" + + "\x03\x02\x02\x02\u0496\u0497\x05\xF1w\x02\u0497\u0498\x05\xE7r\x02\u0498" + + "\u0499\x05o6\x02\u0499\u049A\x05\xE1o\x02\u049A\u049B\x05\xE7r\x02\u049B" + + "\u049C\x05\xE5q\x02\u049C\u049D\x05\xD7j\x02\u049D\u04C6\x03\x02\x02\x02" + + "\u049E\u049F\x05\xF1w\x02\u049F\u04A0\x05\xE7r\x02\u04A0\u04A1\x05o6\x02" + + "\u04A1\u04A2\x05\xEDu\x02\u04A2\u04A3\x05\xCBd\x02\u04A3\u04A4\x05\xD1" + + "g\x02\u04A4\u04A5\x05\xDBl\x02\u04A5\u04A6\x05\xCBd\x02\u04A6\u04A7\x05" + + "\xE5q\x02\u04A7\u04A8\x05\xEFv\x02\u04A8\u04C6\x03\x02\x02\x02\u04A9\u04AA" + + "\x05\xF1w\x02\u04AA\u04AB\x05\xE7r\x02\u04AB\u04AC\x05o6\x02\u04AC\u04AD" + + "\x05\xF5y\x02\u04AD\u04AE\x05\xD3h\x02\u04AE\u04AF\x05\xEDu\x02\u04AF" + + "\u04B0\x05\xEFv\x02\u04B0\u04B1\x05\xDBl\x02\u04B1\u04B2\x05\xE7r\x02" + + "\u04B2\u04B3\x05\xE5q\x02\u04B3\u04C6\x03\x02\x02\x02\u04B4\u04B5\x05" + + "\xF1w\x02\u04B5\u04B6\x05\xE7r\x02\u04B6\u04B7\x05o6\x02\u04B7\u04B8\x05" + + "\xF3x\x02\u04B8\u04B9\x05\xE5q\x02\u04B9\u04BA\x05\xEFv\x02\u04BA\u04BB" + + "\x05\xDBl\x02\u04BB\u04BC\x05\xD7j\x02\u04BC\u04BD\x05\xE5q\x02\u04BD" + + "\u04BE\x05\xD3h\x02\u04BE\u04BF\x05\xD1g\x02\u04BF\u04C0\x05o6\x02\u04C0" + + "\u04C1\x05\xE1o\x02\u04C1\u04C2\x05\xE7r\x02\u04C2\u04C3\x05\xE5q\x02" + + "\u04C3\u04C4\x05\xD7j\x02\u04C4\u04C6\x03\x02\x02\x02\u04C5\u0317\x03" + + "\x02\x02\x02\u04C5\u031D\x03\x02\x02\x02\u04C5\u0321\x03\x02\x02\x02\u04C5" + + "\u0325\x03\x02\x02\x02\u04C5\u032A\x03\x02\x02\x02\u04C5\u032D\x03\x02" + + "\x02\x02\u04C5\u0331\x03\x02\x02\x02\u04C5\u0332\x03\x02\x02\x02\u04C5" + + "\u033C\x03\x02\x02\x02\u04C5\u0341\x03\x02\x02\x02\u04C5\u0348\x03\x02" + + "\x02\x02\u04C5\u0351\x03\x02\x02\x02\u04C5\u035A\x03\x02\x02\x02\u04C5" + + "\u035F\x03\x02\x02\x02\u04C5\u0363\x03\x02\x02\x02\u04C5\u0369\x03\x02" + + "\x02\x02\u04C5\u0375\x03\x02\x02\x02\u04C5\u0381\x03\x02\x02\x02\u04C5" + + "\u038C\x03\x02\x02\x02\u04C5\u0397\x03\x02\x02\x02\u04C5\u03A3\x03\x02" + + "\x02\x02\u04C5\u03B0\x03\x02\x02\x02\u04C5\u03BA\x03\x02\x02\x02\u04C5" + + "\u03C6\x03\x02\x02\x02\u04C5\u03CB\x03\x02\x02\x02\u04C5\u03D2\x03\x02" + + "\x02\x02\u04C5\u03D9\x03\x02\x02\x02\u04C5\u03E0\x03\x02\x02\x02\u04C5" + + "\u03E7\x03\x02\x02\x02\u04C5\u03EE\x03\x02\x02\x02\u04C5\u03F7\x03\x02" + + "\x02\x02\u04C5\u0401\x03\x02\x02\x02\u04C5\u0409\x03\x02\x02\x02\u04C5" + + "\u0413\x03\x02\x02\x02\u04C5\u041D\x03\x02\x02\x02\u04C5\u0426\x03\x02" + + "\x02\x02\u04C5\u042C\x03\x02\x02\x02\u04C5\u0436\x03\x02\x02\x02\u04C5" + + "\u043D\x03\x02\x02\x02\u04C5\u0445\x03\x02\x02\x02\u04C5\u0450\x03\x02" + + "\x02\x02\u04C5\u045C\x03\x02\x02\x02\u04C5\u0462\x03\x02\x02\x02\u04C5" + + "\u0469\x03\x02\x02\x02\u04C5\u0473\x03\x02\x02\x02\u04C5\u047E\x03\x02" + + "\x02\x02\u04C5\u0485\x03\x02\x02\x02\u04C5\u0490\x03\x02\x02\x02\u04C5" + + "\u0496\x03\x02\x02\x02\u04C5\u049E\x03\x02\x02\x02\u04C5\u04A9\x03\x02" + + "\x02\x02\u04C5\u04B4\x03\x02\x02\x02\u04C6\x8C\x03\x02\x02\x02\u04C7\u04C8" + + "\x05\xCBd\x02\u04C8\u04C9\x05\xF5y\x02\u04C9\u04CA\x05\xD7j\x02\u04CA" + + "\u055F\x03\x02\x02\x02\u04CB\u04CC\x05\xE3p\x02\u04CC\u04CD\x05\xDBl\x02" + + "\u04CD\u04CE\x05\xE5q\x02\u04CE\u055F\x03\x02\x02\x02\u04CF\u04D0\x05" + + "\xE3p\x02\u04D0\u04D1\x05\xCBd\x02\u04D1\u04D2\x05\xF9{\x02\u04D2\u055F" + + "\x03\x02\x02\x02\u04D3\u04D4\x05\xEFv\x02\u04D4\u04D5\x05\xF3x\x02\u04D5" + + "\u04D6\x05\xE3p\x02\u04D6\u055F\x03\x02\x02\x02\u04D7\u04D8\x05\xCFf\x02" + + "\u04D8\u04D9\x05\xE7r\x02\u04D9\u04DA\x05\xF3x\x02\u04DA\u04DB\x05\xE5" + + "q\x02\u04DB\u04DC\x05\xF1w\x02\u04DC\u055F\x03\x02\x02\x02\u04DD\u04DE" + + "\x05\xCFf\x02\u04DE\u04DF\x05\xE7r\x02\u04DF\u04E0\x05\xF3x\x02\u04E0" + + "\u04E1\x05\xE5q\x02\u04E1\u04E2\x05\xF1w\x02\u04E2\u04E3\x05o6\x02\u04E3" + + "\u04E4\x05\xD1g\x02\u04E4\u04E5\x05\xDBl\x02\u04E5\u04E6\x05\xEFv\x02" + + "\u04E6\u04E7\x05\xF1w\x02\u04E7\u04E8\x05\xDBl\x02\u04E8\u04E9\x05\xE5" + + "q\x02\u04E9\u04EA\x05\xCFf\x02\u04EA\u04EB\x05\xF1w\x02\u04EB\u055F\x03" + + "\x02\x02\x02\u04EC\u04ED\x05\xE9s\x02\u04ED\u04EE\x05\xD3h\x02\u04EE\u04EF" + + "\x05\xEDu\x02\u04EF\u04F0\x05\xCFf\x02\u04F0\u04F1\x05\xD3h\x02\u04F1" + + "\u04F2\x05\xE5q\x02\u04F2\u04F3\x05\xF1w\x02\u04F3\u04F4\x05\xDBl\x02" + + "\u04F4\u04F5\x05\xE1o\x02\u04F5\u04F6\x05\xD3h\x02\u04F6\u055F\x03\x02" + + "\x02\x02\u04F7\u04F8\x05\xE3p\x02\u04F8\u04F9\x05\xD3h\x02\u04F9\u04FA" + + "\x05\xD1g\x02\u04FA\u04FB\x05\xDBl\x02\u04FB\u04FC\x05\xCBd\x02\u04FC" + + "\u04FD\x05\xE5q\x02\u04FD\u055F\x03\x02\x02\x02\u04FE\u04FF\x05\xE3p\x02" + + "\u04FF\u0500\x05\xD3h\x02\u0500\u0501\x05\xD1g\x02\u0501\u0502\x05\xDB" + + "l\x02\u0502\u0503\x05\xCBd\x02\u0503\u0504\x05\xE5q\x02\u0504\u0505\x05" + + "o6\x02\u0505\u0506\x05\xCBd\x02\u0506\u0507\x05\xCDe\x02\u0507\u0508\x05" + + "\xEFv\x02\u0508\u0509\x05\xE7r\x02\u0509\u050A\x05\xE1o\x02\u050A\u050B" + + "\x05\xF3x\x02\u050B\u050C\x05\xF1w\x02\u050C\u050D\x05\xD3h\x02\u050D" + + "\u050E\x05o6\x02\u050E\u050F\x05\xD1g\x02\u050F\u0510\x05\xD3h\x02\u0510" + + "\u0511\x05\xF5y\x02\u0511\u0512\x05\xDBl\x02\u0512\u0513\x05\xCBd\x02" + + "\u0513\u0514\x05\xF1w\x02\u0514\u0515\x05\xDBl\x02\u0515\u0516\x05\xE7" + + "r\x02\u0516\u0517\x05\xE5q\x02\u0517\u055F\x03\x02\x02\x02\u0518\u0519" + + "\x05\xCBd\x02\u0519\u051A\x05\xCFf\x02\u051A\u051B\x05\xE7r\x02\u051B" + + "\u051C\x05\xEFv\x02\u051C\u055F\x03\x02\x02\x02\u051D\u051E\x05\xCBd\x02" + + "\u051E\u051F\x05\xEFv\x02\u051F\u0520\x05\xDBl\x02\u0520\u0521\x05\xE5" + + "q\x02\u0521\u055F\x03\x02\x02\x02\u0522\u0523\x05\xCBd\x02\u0523\u0524" + + "\x05\xF1w\x02\u0524\u0525\x05\xCBd\x02\u0525\u0526\x05\xE5q\x02\u0526" + + "\u055F\x03\x02\x02\x02\u0527\u0528\x05\xCBd\x02\u0528\u0529\x05\xF1w\x02" + + "\u0529\u052A\x05\xCBd\x02\u052A\u052B\x05\xE5q\x02\u052B\u052C\x074\x02" + + "\x02\u052C\u055F\x03\x02\x02\x02\u052D\u052E\x05\xCFf\x02\u052E\u052F" + + "\x05\xD3h\x02\u052F\u0530\x05\xDBl\x02\u0530\u0531\x05\xE1o\x02\u0531" + + "\u055F\x03\x02\x02\x02\u0532\u0533\x05\xCFf\x02\u0533\u0534\x05\xE7r\x02" + + "\u0534\u0535\x05\xEFv\x02\u0535\u055F\x03\x02\x02\x02\u0536\u0537\x05" + + "\xCFf\x02\u0537\u0538\x05\xE7r\x02\u0538\u0539\x05\xEFv\x02\u0539\u053A" + + "\x05\xD9k\x02\u053A\u055F\x03\x02\x02\x02\u053B\u053C\x05\xD5i\x02\u053C" + + "\u053D\x05\xE1o\x02\u053D\u053E\x05\xE7r\x02\u053E\u053F\x05\xE7r\x02" + + "\u053F\u0540\x05\xEDu\x02\u0540\u055F\x03\x02\x02\x02\u0541\u0542\x05" + + "\xE1o\x02\u0542\u0543\x05\xF1w\x02\u0543\u0544\x05\xEDu\x02\u0544\u0545" + + "\x05\xDBl\x02\u0545\u0546\x05\xE3p\x02\u0546\u055F\x03\x02\x02\x02\u0547" + + "\u0548\x05\xEFv\x02\u0548\u0549\x05\xDBl\x02\u0549\u054A\x05\xE5q\x02" + + "\u054A\u055F\x03\x02\x02\x02\u054B\u054C\x05\xEFv\x02\u054C\u054D\x05" + + "\xDBl\x02\u054D\u054E\x05\xE5q\x02\u054E\u054F\x05\xD9k\x02\u054F\u055F" + + "\x03\x02\x02\x02\u0550\u0551\x05\xEFv\x02\u0551\u0552\x05\xEBt\x02\u0552" + + "\u0553\x05\xEDu\x02\u0553\u0554\x05\xF1w\x02\u0554\u055F\x03\x02\x02\x02" + + "\u0555\u0556\x05\xF1w\x02\u0556\u0557\x05\xCBd\x02\u0557\u0558\x05\xE5" + + "q\x02\u0558\u055F\x03\x02\x02\x02\u0559\u055A\x05\xF1w\x02\u055A\u055B" + + "\x05\xCBd\x02\u055B\u055C\x05\xE5q\x02\u055C\u055D\x05\xD9k\x02\u055D" + + "\u055F\x03\x02\x02\x02\u055E\u04C7\x03\x02\x02\x02\u055E\u04CB\x03\x02" + + "\x02\x02\u055E\u04CF\x03\x02\x02\x02\u055E\u04D3\x03\x02\x02\x02\u055E" + + "\u04D7\x03\x02\x02\x02\u055E\u04DD\x03\x02\x02\x02\u055E\u04EC\x03\x02" + + "\x02\x02\u055E\u04F7\x03\x02\x02\x02\u055E\u04FE\x03\x02\x02\x02\u055E" + + "\u0518\x03\x02\x02\x02\u055E\u051D\x03\x02\x02\x02\u055E\u0522\x03\x02" + + "\x02\x02\u055E\u0527\x03\x02\x02\x02\u055E\u052D\x03\x02\x02\x02\u055E" + + "\u0532\x03\x02\x02\x02\u055E\u0536\x03\x02\x02\x02\u055E\u053B\x03\x02" + + "\x02\x02\u055E\u0541\x03\x02\x02\x02\u055E\u0547\x03\x02\x02\x02\u055E" + + "\u054B\x03\x02\x02\x02\u055E\u0550\x03\x02\x02\x02\u055E\u0555\x03\x02" + + "\x02\x02\u055E\u0559\x03\x02\x02\x02\u055F\x8E\x03\x02\x02\x02\u0560\u0561" + + "\x05\xCFf\x02\u0561\u0562\x05\xDBl\x02\u0562\u0563\x05\xD1g\x02\u0563" + + "\u0564\x05\xEDu\x02\u0564\u0565\x05o6\x02\u0565\u0566\x05\xE3p\x02\u0566" + + "\u0567\x05\xCBd\x02\u0567\u0568\x05\xF1w\x02\u0568\u0569\x05\xCFf\x02" + + "\u0569\u056A\x05\xD9k\x02\u056A\x90\x03\x02\x02\x02\u056B\u0572\x05=\x1D" + + "\x02\u056C\u0571\x05=\x1D\x02\u056D\u0571\x05;\x1C\x02\u056E\u0571\x07" + + "a\x02\x02\u056F\u0571\x05}=\x02\u0570\u056C\x03\x02\x02\x02\u0570\u056D" + + "\x03\x02\x02\x02\u0570\u056E\x03\x02\x02\x02\u0570\u056F\x03\x02\x02\x02" + + "\u0571\u0574\x03\x02\x02\x02\u0572\u0570\x03\x02\x02\x02\u0572\u0573\x03" + + "\x02\x02\x02\u0573\u057F\x03\x02\x02\x02\u0574\u0572\x03\x02\x02\x02\u0575" + + "\u057A\t\n\x02\x02\u0576\u057B\x05=\x1D\x02\u0577\u057B\x05;\x1C\x02\u0578" + + "\u057B\x07a\x02\x02\u0579\u057B\x05}=\x02\u057A\u0576\x03\x02\x02\x02" + + "\u057A\u0577\x03\x02\x02\x02\u057A\u0578\x03\x02\x02\x02\u057A\u0579\x03" + + "\x02\x02\x02\u057B\u057C\x03\x02\x02\x02\u057C\u057A\x03\x02\x02\x02\u057C" + + "\u057D\x03\x02\x02\x02\u057D\u057F\x03\x02\x02\x02\u057E\u056B\x03\x02" + + "\x02\x02\u057E\u0575\x03\x02\x02\x02\u057F\x92\x03\x02\x02\x02\u0580\u0586" + + "\x07b\x02\x02\u0581\u0585\n\v\x02\x02\u0582\u0583\x07b\x02\x02\u0583\u0585" + + "\x07b\x02\x02\u0584\u0581\x03\x02\x02\x02\u0584\u0582\x03\x02\x02\x02" + + "\u0585\u0588\x03\x02\x02\x02\u0586\u0584\x03\x02\x02\x02\u0586\u0587\x03" + + "\x02\x02\x02\u0587\u0589\x03\x02\x02\x02\u0588\u0586\x03\x02\x02\x02\u0589" + + "\u058A\x07b\x02\x02\u058A\x94\x03\x02\x02\x02\u058B\u058C\x05)\x13\x02" + + "\u058C\u058D\x03\x02\x02\x02\u058D\u058E\bI\x06\x02\u058E\x96\x03\x02" + + "\x02\x02\u058F\u0590\x05+\x14\x02\u0590\u0591\x03\x02\x02\x02\u0591\u0592" + + "\bJ\x06\x02\u0592\x98\x03\x02\x02\x02\u0593\u0594\x05-\x15\x02\u0594\u0595" + + "\x03\x02\x02\x02\u0595\u0596\bK\x06\x02\u0596\x9A\x03\x02\x02\x02\u0597" + + "\u0598\x07~\x02\x02\u0598\u0599\x03\x02\x02\x02\u0599\u059A\bL\t\x02\u059A" + + "\u059B\bL\n\x02\u059B\x9C\x03\x02\x02\x02\u059C\u059D\x07]\x02\x02\u059D" + + "\u059E\x03\x02\x02\x02\u059E\u059F\bM\x07\x02\u059F\u05A0\bM\x04\x02\u05A0" + + "\u05A1\bM\x04\x02\u05A1\x9E\x03\x02\x02\x02\u05A2\u05A3\x07_\x02\x02\u05A3" + + "\u05A4\x03\x02\x02\x02\u05A4\u05A5\bN\n\x02\u05A5\u05A6\bN\n\x02\u05A6" + + "\u05A7\bN\v\x02\u05A7\xA0\x03\x02\x02\x02\u05A8\u05A9\x07.\x02\x02\u05A9" + + "\u05AA\x03\x02\x02\x02\u05AA\u05AB\bO\f\x02\u05AB\xA2\x03\x02\x02\x02" + + "\u05AC\u05AD\x07?\x02\x02\u05AD\u05AE\x03\x02\x02\x02\u05AE\u05AF\bP\r" + + "\x02\u05AF\xA4\x03\x02\x02\x02\u05B0\u05B1\x05\xE3p\x02\u05B1\u05B2\x05" + + "\xD3h\x02\u05B2\u05B3\x05\xF1w\x02\u05B3\u05B4\x05\xCBd\x02\u05B4\u05B5" + + "\x05\xD1g\x02\u05B5\u05B6\x05\xCBd\x02\u05B6\u05B7\x05\xF1w\x02\u05B7" + + "\u05B8\x05\xCBd\x02\u05B8\xA6\x03\x02\x02\x02\u05B9\u05BB\x05\xA9S\x02" + + "\u05BA\u05B9\x03\x02\x02\x02\u05BB\u05BC\x03\x02\x02\x02\u05BC\u05BA\x03" + + "\x02\x02\x02\u05BC\u05BD\x03\x02\x02\x02\u05BD\xA8\x03\x02\x02\x02\u05BE" + + "\u05C0\n\f\x02\x02\u05BF\u05BE\x03\x02\x02\x02\u05C0\u05C1\x03\x02\x02" + + "\x02\u05C1\u05BF\x03\x02\x02\x02\u05C1\u05C2\x03\x02\x02\x02\u05C2\u05C6" + + "\x03\x02\x02\x02\u05C3\u05C4\x071\x02\x02\u05C4\u05C6\n\r\x02\x02\u05C5" + + "\u05BF\x03\x02\x02\x02\u05C5\u05C3\x03\x02\x02\x02\u05C6\xAA\x03\x02\x02" + + "\x02\u05C7\u05C8\x05\x93H\x02\u05C8\xAC\x03\x02\x02\x02\u05C9\u05CA\x05" + + ")\x13\x02\u05CA\u05CB\x03\x02\x02\x02\u05CB\u05CC\bU\x06\x02\u05CC\xAE" + + "\x03\x02\x02\x02\u05CD\u05CE\x05+\x14\x02\u05CE\u05CF\x03\x02\x02\x02" + + "\u05CF\u05D0\bV\x06\x02\u05D0\xB0\x03\x02\x02\x02\u05D1\u05D2\x05-\x15" + + "\x02\u05D2\u05D3\x03\x02\x02\x02\u05D3\u05D4\bW\x06\x02\u05D4\xB2\x03" + + "\x02\x02\x02\u05D5\u05D6\x05\xE7r\x02\u05D6\u05D7\x05\xE5q\x02\u05D7\xB4" + + "\x03\x02\x02\x02\u05D8\u05D9\x05\xF7z\x02\u05D9\u05DA\x05\xDBl\x02\u05DA" + + "\u05DB\x05\xF1w\x02\u05DB\u05DC\x05\xD9k\x02\u05DC\xB6\x03\x02\x02\x02" + + "\u05DD\u05DE\x07~\x02\x02\u05DE\u05DF\x03\x02\x02\x02\u05DF\u05E0\bZ\t" + + "\x02\u05E0\u05E1\bZ\n\x02\u05E1\xB8\x03\x02\x02\x02\u05E2\u05E3\x07_\x02" + + "\x02\u05E3\u05E4\x03\x02\x02\x02\u05E4\u05E5\b[\n\x02\u05E5\u05E6\b[\n" + + "\x02\u05E6\u05E7\b[\v\x02\u05E7\xBA\x03\x02\x02\x02\u05E8\u05E9\x07.\x02" + + "\x02\u05E9\u05EA\x03\x02\x02\x02\u05EA\u05EB\b\\\f\x02\u05EB\xBC\x03\x02" + + "\x02\x02\u05EC\u05ED\x07?\x02\x02\u05ED\u05EE\x03\x02\x02\x02\u05EE\u05EF" + + "\b]\r\x02\u05EF\xBE\x03\x02\x02\x02\u05F0\u05F2\x05\xC1_\x02\u05F1\u05F0" + + "\x03\x02\x02\x02\u05F2\u05F3\x03\x02\x02\x02\u05F3\u05F1\x03\x02\x02\x02" + + "\u05F3\u05F4\x03\x02\x02\x02\u05F4\xC0\x03\x02\x02\x02\u05F5\u05F7\n\f" + + "\x02\x02\u05F6\u05F5\x03\x02\x02\x02\u05F7\u05F8\x03\x02\x02\x02\u05F8" + + "\u05F6\x03\x02\x02\x02\u05F8\u05F9\x03\x02\x02\x02\u05F9\u05FD\x03\x02" + + "\x02\x02\u05FA\u05FB\x071\x02\x02\u05FB\u05FD\n\r\x02\x02\u05FC\u05F6" + + "\x03\x02\x02\x02\u05FC\u05FA\x03\x02\x02\x02\u05FD\xC2\x03\x02\x02\x02" + + "\u05FE\u05FF\x05\x93H\x02\u05FF\xC4\x03\x02\x02\x02\u0600\u0601\x05)\x13" + + "\x02\u0601\u0602\x03\x02\x02\x02\u0602\u0603\ba\x06\x02\u0603\xC6\x03" + + "\x02\x02\x02\u0604\u0605\x05+\x14\x02\u0605\u0606\x03\x02\x02\x02\u0606" + + "\u0607\bb\x06\x02\u0607\xC8\x03\x02\x02\x02\u0608\u0609\x05-\x15\x02\u0609" + + "\u060A\x03\x02\x02\x02\u060A\u060B\bc\x06\x02\u060B\xCA\x03\x02\x02\x02" + + "\u060C\u060D\t\x0E\x02\x02\u060D\xCC\x03\x02\x02\x02\u060E\u060F\t\x0F" + + "\x02\x02\u060F\xCE\x03\x02\x02\x02\u0610\u0611\t\x10\x02\x02\u0611\xD0" + + "\x03\x02\x02\x02\u0612\u0613\t\x11\x02\x02\u0613\xD2\x03\x02\x02\x02\u0614" + + "\u0615\t\b\x02\x02\u0615\xD4\x03\x02\x02\x02\u0616\u0617\t\x12\x02\x02" + + "\u0617\xD6\x03\x02\x02\x02\u0618\u0619\t\x13\x02\x02\u0619\xD8\x03\x02" + + "\x02\x02\u061A\u061B\t\x14\x02\x02\u061B\xDA\x03\x02\x02\x02\u061C\u061D" + + "\t\x15\x02\x02\u061D\xDC\x03\x02\x02\x02\u061E\u061F\t\x16\x02\x02\u061F" + + "\xDE\x03\x02\x02\x02\u0620\u0621\t\x17\x02\x02\u0621\xE0\x03\x02\x02\x02" + + "\u0622\u0623\t\x18\x02\x02\u0623\xE2\x03\x02\x02\x02\u0624\u0625\t\x19" + + "\x02\x02\u0625\xE4\x03\x02\x02\x02\u0626\u0627\t\x1A\x02\x02\u0627\xE6" + + "\x03\x02\x02\x02\u0628\u0629\t\x1B\x02\x02\u0629\xE8\x03\x02\x02\x02\u062A" + + "\u062B\t\x1C\x02\x02\u062B\xEA\x03\x02\x02\x02\u062C\u062D\t\x1D\x02\x02" + + "\u062D\xEC\x03\x02\x02\x02\u062E\u062F\t\x1E\x02\x02\u062F\xEE\x03\x02" + + "\x02\x02\u0630\u0631\t\x1F\x02\x02\u0631\xF0\x03\x02\x02\x02\u0632\u0633" + + "\t \x02\x02\u0633\xF2\x03\x02\x02\x02\u0634\u0635\t!\x02\x02\u0635\xF4" + + "\x03\x02\x02\x02\u0636\u0637\t\"\x02\x02\u0637\xF6\x03\x02\x02\x02\u0638" + + "\u0639\t#\x02\x02\u0639\xF8\x03\x02\x02\x02\u063A\u063B\t$\x02\x02\u063B" + + "\xFA\x03\x02\x02\x02\u063C\u063D\t%\x02\x02\u063D\xFC\x03\x02\x02\x02" + + "\u063E\u063F\t&\x02\x02\u063F\xFE\x03\x02\x02\x022\x02\x03\x04\x05\x06" + "\u0190\u0194\u0197\u01A0\u01A2\u01AD\u01D6\u01DB\u01E0\u01E2\u01ED\u01F5" + "\u01F8\u01FA\u01FF\u0204\u020A\u0211\u0216\u021C\u021F\u0227\u022B\u028E" + - "\u02E2\u02EE\u0304\u0315\u0481\u04D4\u04E6\u04E8\u04F0\u04F2\u04F4\u04FA" + - "\u04FC\u0532\u0537\u053B\u0569\u056E\u0572\x0E\x07\x04\x02\x07\x03\x02" + + "\u02E2\u02EE\u0304\u0315\u04C5\u055E\u0570\u0572\u057A\u057C\u057E\u0584" + + "\u0586\u05BC\u05C1\u05C5\u05F3\u05F8\u05FC\x0E\x07\x04\x02\x07\x03\x02" + "\x07\x05\x02\x07\x06\x02\x02\x03\x02\t%\x02\x07\x02\x02\t\x1A\x02\x06" + "\x02\x02\t&\x02\t\"\x02\t!\x02"; public static readonly _serializedATN: string = Utils.join( diff --git a/packages/kbn-monaco/src/esql/lib/autocomplete/autocomplete_definitions/functions_commands.ts b/packages/kbn-monaco/src/esql/lib/autocomplete/autocomplete_definitions/functions_commands.ts index aa85eee2e3d44..12056ee784695 100644 --- a/packages/kbn-monaco/src/esql/lib/autocomplete/autocomplete_definitions/functions_commands.ts +++ b/packages/kbn-monaco/src/esql/lib/autocomplete/autocomplete_definitions/functions_commands.ts @@ -7,7 +7,7 @@ */ import { i18n } from '@kbn/i18n'; -import { buildDocumentation } from './utils'; +import { buildDocumentation, buildFunctionDocumentation } from './utils'; import type { AutocompleteCommandDefinition } from '../types'; @@ -29,390 +29,765 @@ export const whereCommandDefinition: AutocompleteCommandDefinition[] = [ }, ]; -export const mathCommandDefinition: AutocompleteCommandDefinition[] = [ +interface FunctionDefinition { + name: string; + description: string; + signatures: Array<{ + params: Array<{ + name: string; + type: string | string[]; + optional?: boolean; + }>; + infiniteParams?: boolean; + returnType: string; + examples?: string[]; + }>; +} + +const mathCommandFullDefinitions: FunctionDefinition[] = [ { - label: 'round', - insertText: 'round', - kind: 1, - detail: i18n.translate('monaco.esql.autocomplete.roundDoc', { + name: 'round', + description: i18n.translate('monaco.esql.autocomplete.roundDoc', { defaultMessage: 'Returns a number rounded to the decimal, specified by he closest integer value. The default is to round to an integer.', }), - documentation: { - value: buildDocumentation('round(grouped[T]): aggregated[T]', [ - 'from index where field="value" | eval rounded = round(field)', - ]), - }, - sortText: 'C', + signatures: [ + { + params: [{ name: 'field', type: 'number' }], + returnType: 'number', + examples: [`from index where field="value" | eval round_value = round(field)`], + }, + ], }, { - label: 'abs', - insertText: 'abs', - kind: 1, - detail: i18n.translate('monaco.esql.autocomplete.absDoc', { + name: 'abs', + description: i18n.translate('monaco.esql.autocomplete.absDoc', { defaultMessage: 'Returns the absolute value.', }), - documentation: { - value: buildDocumentation('abs(grouped[T]): aggregated[T]', [ - 'from index where field="value" | eval abs_value = abs(field)', - ]), - }, - sortText: 'C', + signatures: [ + { + params: [{ name: 'field', type: 'number' }], + returnType: 'number', + examples: [`from index where field="value" | eval abs_value = abs(field)`], + }, + ], }, { - label: 'pow', - insertText: 'pow', - kind: 1, - detail: i18n.translate('monaco.esql.autocomplete.powDoc', { - defaultMessage: - 'Returns the the value of a base (first argument) raised to a power (second argument).', + name: 'log10', + description: i18n.translate('monaco.esql.autocomplete.log10Doc', { + defaultMessage: 'Returns the log base 10.', }), - documentation: { - value: buildDocumentation('pow(grouped[T]): aggregated[T]', [ - 'from index where field="value" | eval s = POW(field, exponent)', - ]), - }, - sortText: 'C', + signatures: [ + { + params: [{ name: 'field', type: 'number' }], + returnType: 'number', + examples: [`from index where field="value" | eval log10_value = log10(field)`], + }, + ], }, { - label: 'log10', - insertText: 'log10', - kind: 1, - detail: i18n.translate('monaco.esql.autocomplete.log10Doc', { - defaultMessage: 'Returns the log base 10.', + name: 'pow', + description: i18n.translate('monaco.esql.autocomplete.powDoc', { + defaultMessage: + 'Returns the the value of a base (first argument) raised to a power (second argument).', }), - documentation: { - value: buildDocumentation('log10(grouped[T]): aggregated[T]', [ - 'from index where field="value" | eval s = log10(field)', - ]), - }, - sortText: 'C', + signatures: [ + { + params: [ + { name: 'field', type: 'number' }, + { name: 'exponent', type: 'number' }, + ], + returnType: 'number', + examples: ['from index where field="value" | eval s = POW(field, exponent)'], + }, + ], }, { - label: 'concat', - insertText: 'concat', - kind: 1, - detail: i18n.translate('monaco.esql.autocomplete.concatDoc', { + name: 'concat', + description: i18n.translate('monaco.esql.autocomplete.concatDoc', { defaultMessage: 'Concatenates two or more strings.', }), - documentation: { - value: buildDocumentation('concat(grouped[T]): aggregated[T]', [ - 'from index where field="value" | eval concatenated = concat(field1, "-", field2)', - ]), - }, - sortText: 'C', + signatures: [ + { + params: [{ name: 'field', type: 'string' }], + infiniteParams: true, + returnType: 'string', + examples: [ + 'from index where field="value" | eval concatenated = concat(field1, "-", field2)', + ], + }, + ], }, { - label: 'substring', - insertText: 'substring', - kind: 1, - detail: i18n.translate('monaco.esql.autocomplete.substringDoc', { + name: 'substring', + description: i18n.translate('monaco.esql.autocomplete.substringDoc', { defaultMessage: 'Returns a substring of a string, specified by a start position and an optional length. This example returns the first three characters of every last name.', }), - documentation: { - value: buildDocumentation('substring(grouped[T]): aggregated[T]', [ - 'from index where field="value" | eval new_string = substring(field, 1, 3)', - ]), - }, - sortText: 'C', - }, - { - label: 'trim', - insertText: 'trim', - kind: 1, - detail: i18n.translate('monaco.esql.autocomplete.trimDoc', { + signatures: [ + { + params: [ + { name: 'field', type: 'string' }, + { name: 'startIndex', type: 'number' }, + { name: 'endIndex', type: 'number' }, + ], + returnType: 'string', + examples: ['from index where field="value" | eval new_string = substring(field, 1, 3)'], + }, + ], + }, + { + name: 'trim', + description: i18n.translate('monaco.esql.autocomplete.trimDoc', { defaultMessage: 'Removes leading and trailing whitespaces from strings.', }), - documentation: { - value: buildDocumentation('trim(grouped[T]): aggregated[T]', [ - 'from index where field="value" | eval new_string = trim(field)', - ]), - }, - sortText: 'C', + signatures: [ + { + params: [{ name: 'field', type: 'string' }], + returnType: 'string', + examples: ['from index where field="value" | eval new_string = trim(field)'], + }, + ], }, { - label: 'starts_with', - insertText: 'starts_with', - kind: 1, - detail: i18n.translate('monaco.esql.autocomplete.startsWithDoc', { + name: 'starts_with', + description: i18n.translate('monaco.esql.autocomplete.startsWithDoc', { defaultMessage: 'Returns a boolean that indicates whether a keyword string starts with another string.', }), - documentation: { - value: buildDocumentation('substring(grouped[T]): aggregated[T]', [ - 'from index where field="value" | eval new_string = starts_with(field, "a")', - ]), - }, - sortText: 'C', + signatures: [ + { + params: [ + { name: 'field', type: 'string' }, + { name: 'prefix', type: 'string' }, + ], + returnType: 'boolean', + examples: ['from index where field="value" | eval new_string = starts_with(field, "a")'], + }, + ], }, { - label: 'split', - insertText: 'split', - kind: 1, - detail: i18n.translate('monaco.esql.autocomplete.splitDoc', { + name: 'split', + description: i18n.translate('monaco.esql.autocomplete.splitDoc', { defaultMessage: 'Splits a single valued string into multiple strings.', }), - documentation: { - value: buildDocumentation('substring(grouped[T]): aggregated[T]', [ - `ROW words="foo;bar;baz;qux;quux;corge" - | EVAL word = SPLIT(words, ";")`, - ]), - }, - sortText: 'C', + signatures: [ + { + params: [ + { name: 'words', type: 'string' }, + { name: 'separator', type: 'string' }, + ], + returnType: 'string[]', + examples: [`ROW words="foo;bar;baz;qux;quux;corge" | EVAL word = SPLIT(words, ";")`], + }, + ], }, { - label: 'to_string', - insertText: 'to_string', - kind: 1, - detail: i18n.translate('monaco.esql.autocomplete.toStringDoc', { + name: 'to_string', + description: i18n.translate('monaco.esql.autocomplete.toStringDoc', { defaultMessage: 'Converts to string.', }), - documentation: { - value: buildDocumentation('substring(grouped[T]): aggregated[T]', [ - `from index where field="value"" - | EVAL string = to_string(field)`, - ]), - }, - sortText: 'C', + signatures: [ + { + params: [{ name: 'field', type: 'any' }], + returnType: 'string', + examples: [`from index where field="value"" | EVAL string = to_string(field)`], + }, + ], }, { - label: 'to_boolean', - insertText: 'to_boolean', - kind: 1, - detail: i18n.translate('monaco.esql.autocomplete.toBooleanDoc', { + name: 'to_boolean', + description: i18n.translate('monaco.esql.autocomplete.toBooleanDoc', { defaultMessage: 'Converts to boolean.', }), - documentation: { - value: buildDocumentation('substring(grouped[T]): aggregated[T]', [ - `from index where field="value"" - | EVAL bool = to_boolean(field)`, - ]), - }, - sortText: 'C', + signatures: [ + { + params: [{ name: 'field', type: 'any' }], + returnType: 'boolean', + examples: [`from index where field="value"" | EVAL bool = to_boolean(field)`], + }, + ], }, { - label: 'to_datetime', - insertText: 'to_datetime', - kind: 1, - detail: i18n.translate('monaco.esql.autocomplete.toDateTimeDoc', { + name: 'to_datetime', + description: i18n.translate('monaco.esql.autocomplete.toDateTimeDoc', { defaultMessage: 'Converts to date.', }), - documentation: { - value: buildDocumentation('substring(grouped[T]): aggregated[T]', [ - `from index where field="value"" - | EVAL datetime = to_datetime(field)`, - ]), - }, - sortText: 'C', + signatures: [ + { + params: [{ name: 'field', type: 'any' }], + returnType: 'date', + examples: [`from index where field="value"" | EVAL datetime = to_datetime(field)`], + }, + ], }, { - label: 'to_double', - insertText: 'to_double', - kind: 1, - detail: i18n.translate('monaco.esql.autocomplete.toDoubleDoc', { + name: 'to_degrees', + description: i18n.translate('monaco.esql.autocomplete.toDegreesDoc', { + defaultMessage: 'Coverts to degrees', + }), + signatures: [ + { + params: [{ name: 'field', type: 'number' }], + returnType: 'number', + examples: [`from index where field="value" | eval degrees = to_degrees(field)`], + }, + ], + }, + { + name: 'to_double', + description: i18n.translate('monaco.esql.autocomplete.toDoubleDoc', { defaultMessage: 'Converts to double.', }), - documentation: { - value: buildDocumentation('substring(grouped[T]): aggregated[T]', [ - `from index where field="value"" - | EVAL double = to_double(field)`, - ]), - }, - sortText: 'C', + signatures: [ + { + params: [{ name: 'field', type: 'any' }], + returnType: 'number', + examples: [`from index where field="value"" | EVAL double = to_double(field)`], + }, + ], }, { - label: 'to_integer', - insertText: 'to_integer', - kind: 1, - detail: i18n.translate('monaco.esql.autocomplete.toIntegerDoc', { + name: 'to_integer', + description: i18n.translate('monaco.esql.autocomplete.toIntegerDoc', { defaultMessage: 'Converts to integer.', }), - documentation: { - value: buildDocumentation('substring(grouped[T]): aggregated[T]', [ - `from index where field="value"" - | EVAL int = to_integer(field)`, - ]), - }, - sortText: 'C', + signatures: [ + { + params: [{ name: 'field', type: 'any' }], + returnType: 'number', + examples: [`from index where field="value"" | EVAL integer = to_integer(field)`], + }, + ], }, { - label: 'to_long', - insertText: 'to_long', - kind: 1, - detail: i18n.translate('monaco.esql.autocomplete.toLongDoc', { + name: 'to_long', + description: i18n.translate('monaco.esql.autocomplete.toLongDoc', { defaultMessage: 'Converts to long.', }), - documentation: { - value: buildDocumentation('substring(grouped[T]): aggregated[T]', [ - `from index where field="value"" - | EVAL long = to_long(field)`, - ]), - }, - sortText: 'C', + signatures: [ + { + params: [{ name: 'field', type: 'any' }], + returnType: 'number', + examples: [`from index where field="value"" | EVAL long = to_long(field)`], + }, + ], }, { - label: 'to_unsigned_long', - insertText: 'to_unsigned_long', - kind: 1, - detail: i18n.translate('monaco.esql.autocomplete.toUnsignedLongDoc', { + name: 'to_radians', + description: i18n.translate('monaco.esql.autocomplete.toRadiansDoc', { + defaultMessage: 'Converts to radians', + }), + signatures: [ + { + params: [{ name: 'field', type: 'number' }], + returnType: 'number', + examples: [`from index where field="value" | eval radians = to_radians(field)`], + }, + ], + }, + { + name: 'to_unsigned_long', + description: i18n.translate('monaco.esql.autocomplete.toUnsignedLongDoc', { defaultMessage: 'Converts to unsigned long.', }), - documentation: { - value: buildDocumentation('substring(grouped[T]): aggregated[T]', [ - `from index where field="value"" - | EVAL long = to_unsigned_long(field)`, - ]), - }, - sortText: 'C', + signatures: [ + { + params: [{ name: 'field', type: 'any' }], + returnType: 'number', + examples: [ + `from index where field="value"" | EVAL unsigned_long = to_unsigned_long(field)`, + ], + }, + ], }, { - label: 'to_ip', - insertText: 'to_ip', - kind: 1, - detail: i18n.translate('monaco.esql.autocomplete.toIpDoc', { + name: 'to_ip', + description: i18n.translate('monaco.esql.autocomplete.toIpDoc', { defaultMessage: 'Converts to ip.', }), - documentation: { - value: buildDocumentation('substring(grouped[T]): aggregated[T]', [ - `from index where field="value"" - | EVAL ip = to_ip(field)`, - ]), - }, - sortText: 'C', + signatures: [ + { + params: [{ name: 'field', type: 'any' }], + returnType: 'string[]', + examples: [`from index where field="value"" | EVAL ip = to_ip(field)`], + }, + ], }, { - label: 'to_version', - insertText: 'to_version', - kind: 1, - detail: i18n.translate('monaco.esql.autocomplete.toVersionDoc', { + name: 'to_version', + description: i18n.translate('monaco.esql.autocomplete.toVersionDoc', { defaultMessage: 'Converts to version.', }), - documentation: { - value: buildDocumentation('substring(grouped[T]): aggregated[T]', [ - `from index where field="value"" - | EVAL version = to_version(field)`, - ]), - }, - sortText: 'C', - }, - { - label: 'date_format', - insertText: 'date_format', - kind: 1, - detail: i18n.translate('monaco.esql.autocomplete.dateFormatDoc', { + signatures: [ + { + params: [{ name: 'field', type: ['string', 'version'] }], + returnType: 'version', + examples: [`from index where field="value"" | EVAL version = to_version(field)`], + }, + ], + }, + { + name: 'date_extract', + description: i18n.translate('monaco.esql.autocomplete.dateExtractDoc', { + defaultMessage: `Extracts parts of a date, like year, month, day, hour. The supported field types are those provided by java.time.temporal.ChronoField`, + }), + signatures: [ + { + params: [ + { name: 'field', type: 'date' }, + { + name: 'date_part', + type: 'string', + }, + ], + returnType: 'number', + examples: [ + `ROW date = DATE_PARSE("2022-05-06", "yyyy-MM-dd") | EVAL year = DATE_EXTRACT(date, "year")`, + ], + }, + ], + }, + { + name: 'date_format', + description: i18n.translate('monaco.esql.autocomplete.dateFormatDoc', { defaultMessage: `Returns a string representation of a date in the provided format. If no format is specified, the "yyyy-MM-dd'T'HH:mm:ss.SSSZ" format is used.`, }), - documentation: { - value: buildDocumentation('substring(grouped[T]): aggregated[T]', [ - 'from index where field="value" | eval hired = date_format(hire_date, "YYYY-MM-dd")', - ]), - }, - sortText: 'C', - }, - { - label: 'date_trunc', - insertText: 'date_trunc', - kind: 1, - detail: i18n.translate('monaco.esql.autocomplete.dateTruncDoc', { + signatures: [ + { + params: [ + { name: 'field', type: 'date' }, + { name: 'format_string', type: 'string', optional: true }, + ], + returnType: 'string', + examples: [ + 'from index where field="value" | eval hired = date_format(hire_date, "YYYY-MM-dd")', + ], + }, + ], + }, + { + name: 'date_trunc', + description: i18n.translate('monaco.esql.autocomplete.dateTruncDoc', { defaultMessage: `Rounds down a date to the closest interval. Intervals can be expressed using the timespan literal syntax.`, }), - documentation: { - value: buildDocumentation('date_trunc(time_literal, grouped[T]): aggregated[T]', [ - 'from index where field="value" | eval year_hired = DATE_TRUNC(1 year, hire_date)', - ]), - }, - sortText: 'C', - }, - { - label: 'date_parse', - insertText: 'date_parse', - kind: 1, - detail: i18n.translate('monaco.esql.autocomplete.dateParseDoc', { + signatures: [ + { + params: [ + { name: 'time', type: 'time_literal' }, + { name: 'field', type: 'date' }, + ], + returnType: 'date', + examples: [ + `from index where field="value" | eval year_hired = DATE_TRUNC(1 year, hire_date)`, + ], + }, + ], + }, + { + name: 'date_parse', + description: i18n.translate('monaco.esql.autocomplete.dateParseDoc', { defaultMessage: `Parse dates from strings.`, }), - documentation: { - value: buildDocumentation('date_parse(grouped[T]): aggregated[T]', [ - `from index where field="value" | eval year_hired = date_parse(hire_date, yyyy-MM-dd'T'HH:mm:ss.SSS'Z')`, - ]), - }, - sortText: 'C', - }, - { - label: 'auto_bucket', - insertText: 'auto_bucket', - kind: 1, - detail: i18n.translate('monaco.esql.autocomplete.autoBucketDoc', { + signatures: [ + { + params: [ + { name: 'field', type: 'string' }, + { name: 'format_string', type: 'string' }, + ], + returnType: 'date', + examples: [ + `from index where field="value" | eval year_hired = date_parse(hire_date, yyyy-MM-dd'T'HH:mm:ss.SSS'Z')`, + ], + }, + ], + }, + { + name: 'auto_bucket', + description: i18n.translate('monaco.esql.autocomplete.autoBucketDoc', { defaultMessage: `Automatically bucket dates based on a given range and bucket target.`, }), - documentation: { - value: buildDocumentation('substring(grouped[T]): aggregated[T]', [ - 'from index where field="value" | eval hd = auto_bucket(hire_date, 20, "1985-01-01T00:00:00Z", "1986-01-01T00:00:00Z")', - ]), - }, - sortText: 'C', - }, - { - label: 'is_finite', - insertText: 'is_finite', - kind: 1, - detail: i18n.translate('monaco.esql.autocomplete.isFiniteDoc', { + signatures: [ + { + params: [ + { name: 'field', type: 'date' }, + { name: 'buckets', type: 'number' }, + { name: 'startDate', type: 'string' }, + { name: 'endDate', type: 'string' }, + ], + returnType: 'date', + examples: [ + 'from index where field="value" | eval hd = auto_bucket(hire_date, 20, "1985-01-01T00:00:00Z", "1986-01-01T00:00:00Z")', + ], + }, + { + params: [ + { name: 'field', type: 'date' }, + { name: 'buckets', type: 'number' }, + { name: 'startValue', type: 'number' }, + { name: 'endValue', type: 'number' }, + ], + returnType: 'number', + examples: [ + 'from index where field="value" | eval bs = auto_bucket(salary, 20, 25324, 74999)', + ], + }, + ], + }, + { + name: 'is_finite', + description: i18n.translate('monaco.esql.autocomplete.isFiniteDoc', { defaultMessage: 'Returns a boolean that indicates whether its input is a finite number.', }), - documentation: { - value: buildDocumentation('substring(grouped[T]): aggregated[T]', [ - 'from index where field="value" | eval s = is_finite(field/0)', - ]), - }, - sortText: 'C', + signatures: [ + { + params: [{ name: 'field', type: 'number' }], + returnType: 'boolean', + examples: ['from index where field="value" | eval s = is_finite(field/0)'], + }, + ], }, { - label: 'is_infinite', - insertText: 'is_infinite', - kind: 1, - detail: i18n.translate('monaco.esql.autocomplete.isInfiniteDoc', { + name: 'is_infinite', + description: i18n.translate('monaco.esql.autocomplete.isInfiniteDoc', { defaultMessage: 'Returns a boolean that indicates whether its input is infinite.', }), - documentation: { - value: buildDocumentation('substring(grouped[T]): aggregated[T]', [ - 'from index where field="value" | eval s = is_infinite(field/0)', - ]), - }, - sortText: 'C', + signatures: [ + { + params: [{ name: 'field', type: 'number' }], + returnType: 'boolean', + examples: ['from index where field="value" | eval s = is_infinite(field/0)'], + }, + ], }, { - label: 'case', - insertText: 'case', - kind: 1, - detail: i18n.translate('monaco.esql.autocomplete.caseDoc', { + name: 'case', + description: i18n.translate('monaco.esql.autocomplete.caseDoc', { defaultMessage: 'Accepts pairs of conditions and values. The function returns the value that belongs to the first condition that evaluates to `true`. If the number of arguments is odd, the last argument is the default value which is returned when no condition matches.', }), - documentation: { - value: buildDocumentation('substring(grouped[T]): aggregated[T]', [ - `from index where field="value" | eval type = case( - languages <= 1, "monolingual", - languages <= 2, "bilingual", - "polyglot")`, - ]), - }, - sortText: 'C', + signatures: [ + { + params: [ + { name: 'condition', type: 'booleanExpression' }, + { name: 'value', type: 'any' }, + ], + infiniteParams: true, + returnType: 'any', + examples: [ + `from index where field="value" | eval type = case(languages <= 1, "monolingual", languages <= 2, "bilingual", "polyglot")`, + ], + }, + ], + }, + { + name: 'length', + description: i18n.translate('monaco.esql.autocomplete.lengthDoc', { + defaultMessage: 'Returns the character length of a string.', + }), + signatures: [ + { + params: [{ name: 'field', type: 'string' }], + returnType: 'number', + examples: [`from index where field="value" | eval fn_length = length(field)`], + }, + ], }, { - label: 'length', - insertText: 'length', - kind: 1, - detail: i18n.translate('monaco.esql.autocomplete.lengthDoc', { - defaultMessage: 'Returns the character length of a string.', + name: 'acos', + description: i18n.translate('monaco.esql.autocomplete.acosDoc', { + defaultMessage: 'Inverse cosine trigonometric function', }), + signatures: [ + { + params: [{ name: 'field', type: 'number' }], + returnType: 'number', + examples: [`from index where field="value" | eval acos = acos(field)`], + }, + ], + }, + { + name: 'asin', + description: i18n.translate('monaco.esql.autocomplete.asinDoc', { + defaultMessage: 'Inverse sine trigonometric function', + }), + signatures: [ + { + params: [{ name: 'field', type: 'number' }], + returnType: 'number', + examples: [`from index where field="value" | eval asin = asin(field)`], + }, + ], + }, + { + name: 'atan', + description: i18n.translate('monaco.esql.autocomplete.atanDoc', { + defaultMessage: 'Inverse tangent trigonometric function', + }), + signatures: [ + { + params: [{ name: 'field', type: 'number' }], + returnType: 'number', + examples: [`from index where field="value" | eval atan = atan(field)`], + }, + ], + }, + { + name: 'atan2', + description: i18n.translate('monaco.esql.autocomplete.atan2Doc', { + defaultMessage: + 'The angle between the positive x-axis and the ray from the origin to the point (x , y) in the Cartesian plane', + }), + signatures: [ + { + params: [ + { name: 'x', type: 'number' }, + { name: 'y', type: 'number' }, + ], + returnType: 'number', + examples: [`from index where field="value" | eval atan2 = atan2(x, y)`], + }, + ], + }, + { + name: 'coalesce', + description: i18n.translate('monaco.esql.autocomplete.coalesceDoc', { + defaultMessage: 'Returns the first non-null value.', + }), + signatures: [ + { + params: [{ name: 'field', type: 'any' }], + infiniteParams: true, + returnType: 'any', + examples: [`ROW a=null, b="b" | EVAL COALESCE(a, b)`], + }, + ], + }, + { + name: 'cos', + description: i18n.translate('monaco.esql.autocomplete.cosDoc', { + defaultMessage: 'Cosine trigonometric function', + }), + signatures: [ + { + params: [{ name: 'field', type: 'number' }], + returnType: 'number', + examples: [`from index where field="value" | eval cos = cos(field)`], + }, + ], + }, + { + name: 'cosh', + description: i18n.translate('monaco.esql.autocomplete.coshDoc', { + defaultMessage: 'Cosine hyperbolic function', + }), + signatures: [ + { + params: [{ name: 'field', type: 'number' }], + returnType: 'number', + examples: [`from index where field="value" | eval cosh = cosh(field)`], + }, + ], + }, + { + name: 'floor', + description: i18n.translate('monaco.esql.autocomplete.floorDoc', { + defaultMessage: 'Round a number down to the nearest integer.', + }), + signatures: [ + { + params: [{ name: 'field', type: 'number' }], + returnType: 'number', + examples: [`from index where field="value" | eval a = floor(field)`], + }, + ], + }, + { + name: 'greatest', + description: i18n.translate('monaco.esql.autocomplete.greatestDoc', { + defaultMessage: 'Returns the maximum value from many columns.', + }), + signatures: [ + { + params: [{ name: 'field', type: 'number' }], + infiniteParams: true, + returnType: 'number', + examples: [`ROW a = 10, b = 20 | EVAL g = GREATEST(a, b)`], + }, + ], + }, + { + name: 'left', + description: i18n.translate('monaco.esql.autocomplete.leftDoc', { + defaultMessage: + 'Return the substring that extracts length chars from the string starting from the left.', + }), + signatures: [ + { + params: [ + { name: 'field', type: 'string' }, + { name: 'length', type: 'number' }, + ], + returnType: 'string', + examples: [`from index where field="value" | eval substr = left(field, 3)`], + }, + ], + }, + { + name: 'ltrim', + description: i18n.translate('monaco.esql.autocomplete.ltrimDoc', { + defaultMessage: 'Removes leading whitespaces from strings.', + }), + signatures: [ + { + params: [{ name: 'field', type: 'string' }], + returnType: 'string', + examples: [`ROW message = " some text "| EVAL message = LTRIM(message)`], + }, + ], + }, + { + name: 'now', + description: i18n.translate('monaco.esql.autocomplete.nowDoc', { + defaultMessage: 'Returns current date and time.', + }), + signatures: [ + { + params: [], + returnType: 'date', + examples: [`ROW current_date = NOW()`], + }, + ], + }, + { + name: 'right', + description: i18n.translate('monaco.esql.autocomplete.rightDoc', { + defaultMessage: + 'Return the substring that extracts length chars from the string starting from the right.', + }), + signatures: [ + { + params: [ + { name: 'field', type: 'string' }, + { name: 'length', type: 'number' }, + ], + returnType: 'string', + examples: [`from index where field="value" | eval string = right(field, 3)`], + }, + ], + }, + { + name: 'rtrim', + description: i18n.translate('monaco.esql.autocomplete.rtrimDoc', { + defaultMessage: 'Removes trailing whitespaces from strings.', + }), + signatures: [ + { + params: [{ name: 'field', type: 'string' }], + returnType: 'string', + examples: [`ROW message = " some text " | EVAL message = RTRIM(message)`], + }, + ], + }, + { + name: 'sin', + description: i18n.translate('monaco.esql.autocomplete.sinDoc', { + defaultMessage: 'Sine trigonometric function.', + }), + signatures: [ + { + params: [{ name: 'field', type: 'number' }], + returnType: 'number', + examples: [`ROW a=1.8 | EVAL sin=SIN(a)`], + }, + ], + }, + { + name: 'sinh', + description: i18n.translate('monaco.esql.autocomplete.sinhDoc', { + defaultMessage: 'Sine hyperbolic function.', + }), + signatures: [ + { + params: [{ name: 'field', type: 'number' }], + returnType: 'number', + examples: [`ROW a=1.8 | EVAL sinh=SINH(a)`], + }, + ], + }, + { + name: 'sqrt', + description: i18n.translate('monaco.esql.autocomplete.sqrtDoc', { + defaultMessage: 'Returns the square root of a number. ', + }), + signatures: [ + { + params: [{ name: 'field', type: 'number' }], + returnType: 'number', + examples: [`ROW d = 100.0 | EVAL s = SQRT(d)`], + }, + ], + }, + { + name: 'tan', + description: i18n.translate('monaco.esql.autocomplete.tanDoc', { + defaultMessage: 'Tangent trigonometric function.', + }), + signatures: [ + { + params: [{ name: 'field', type: 'number' }], + returnType: 'number', + examples: [`ROW a=1.8 | EVAL tan=TAN(a)`], + }, + ], + }, + { + name: 'tanh', + description: i18n.translate('monaco.esql.autocomplete.tanhDoc', { + defaultMessage: 'Tangent hyperbolic function.', + }), + signatures: [ + { + params: [{ name: 'field', type: 'number' }], + returnType: 'number', + examples: [`ROW a=1.8 | EVAL tanh=TANH(a)`], + }, + ], + }, +].sort(({ name: a }, { name: b }) => a.localeCompare(b)); + +function printArguments({ + name, + type, + optional, + reference, +}: { + name: string; + type: string | string[]; + optional?: boolean; + reference?: string; +}): string { + return `${name}${optional ? ':?' : ':'} ${Array.isArray(type) ? type.join(' | ') : type}`; +} + +export const mathCommandDefinition: AutocompleteCommandDefinition[] = + mathCommandFullDefinitions.map(({ name, description, signatures }) => ({ + label: name, + insertText: name, + kind: 1, + detail: description, documentation: { - value: buildDocumentation('substring(grouped[T]): aggregated[T]', [ - `from index where field="value" | eval fn_length = length(field)`, - ]), + value: buildFunctionDocumentation( + signatures.map(({ params, returnType, infiniteParams, examples }) => ({ + declaration: `${name}(${params.map(printArguments).join(', ')}${ + infiniteParams ? ` ,[... ${params.map(printArguments)}]` : '' + }): ${returnType}`, + examples, + })) + ), }, sortText: 'C', - }, -]; + })); export const aggregationFunctionsDefinitions: AutocompleteCommandDefinition[] = [ { diff --git a/packages/kbn-monaco/src/esql/lib/autocomplete/autocomplete_definitions/utils.ts b/packages/kbn-monaco/src/esql/lib/autocomplete/autocomplete_definitions/utils.ts index 87b0c6dc087aa..0166c94210f8d 100644 --- a/packages/kbn-monaco/src/esql/lib/autocomplete/autocomplete_definitions/utils.ts +++ b/packages/kbn-monaco/src/esql/lib/autocomplete/autocomplete_definitions/utils.ts @@ -16,6 +16,48 @@ const examplesLabel = i18n.translate('monaco.esql.autocomplete.examplesLabel', { defaultMessage: 'Examples:', }); +/** @internal */ +export const buildFunctionDocumentation = ( + signatures: Array<{ + declaration: string; + examples?: string[]; + }> +) => ` +--- +\ +***${declarationLabel}*** +${signatures + .map( + ({ declaration }) => ` +\ + - \`\`${declaration}\`\` +\ +` + ) + .join('\n\n')} +--- +${ + signatures.some((examples) => examples) + ? `\ +***${examplesLabel}*** +\ +${signatures + .filter(({ examples }) => examples) + .map( + ({ examples }) => ` + ${examples! + .map( + (i) => ` + - \`\`${i}\`\`) +` + ) + .join('')} + +` + )}` + : '' +}`; + /** @internal **/ export const buildDocumentation = (declaration: string, examples?: string[]) => ` --- diff --git a/packages/kbn-monaco/src/esql/lib/autocomplete/autocomplete_listener.test.ts b/packages/kbn-monaco/src/esql/lib/autocomplete/autocomplete_listener.test.ts index cbc20564b13da..a33c9f99f6f9e 100644 --- a/packages/kbn-monaco/src/esql/lib/autocomplete/autocomplete_listener.test.ts +++ b/packages/kbn-monaco/src/esql/lib/autocomplete/autocomplete_listener.test.ts @@ -14,6 +14,7 @@ import { getParser, ROOT_STATEMENT } from '../antlr_facade'; import { isDynamicAutocompleteItem } from './dymanic_item'; import { getDurationItemsWithQuantifier } from './helpers'; +import { mathCommandDefinition } from './autocomplete_definitions/functions_commands'; describe('autocomplete_listener', () => { const getAutocompleteSuggestions = (text: string) => { @@ -177,34 +178,7 @@ describe('autocomplete_listener', () => { }); describe('eval', () => { - const functionSuggestions = [ - 'round', - 'abs', - 'pow', - 'log10', - 'concat', - 'substring', - 'trim', - 'starts_with', - 'split', - 'to_string', - 'to_boolean', - 'to_datetime', - 'to_double', - 'to_integer', - 'to_long', - 'to_unsigned_long', - 'to_ip', - 'to_version', - 'date_format', - 'date_trunc', - 'date_parse', - 'auto_bucket', - 'is_finite', - 'is_infinite', - 'case', - 'length', - ]; + const functionSuggestions = mathCommandDefinition.map(({ label }) => String(label)); testSuggestions('from a | eval ', ['var0']); testSuggestions('from a | eval a ', ['=']); diff --git a/packages/kbn-securitysolution-exception-list-components/src/exception_item_card/comments/__snapshots__/comments.test.tsx.snap b/packages/kbn-securitysolution-exception-list-components/src/exception_item_card/comments/__snapshots__/comments.test.tsx.snap index f194c0af3908a..770a862dd4ce5 100644 --- a/packages/kbn-securitysolution-exception-list-components/src/exception_item_card/comments/__snapshots__/comments.test.tsx.snap +++ b/packages/kbn-securitysolution-exception-list-components/src/exception_item_card/comments/__snapshots__/comments.test.tsx.snap @@ -71,7 +71,7 @@ Object { data-test-subj="ExceptionItemCardCommentsContainer" >
    - +

    {title}

    diff --git a/packages/kbn-test/src/es/test_es_cluster.ts b/packages/kbn-test/src/es/test_es_cluster.ts index b7b58b88d53d9..e6763822cd54e 100644 --- a/packages/kbn-test/src/es/test_es_cluster.ts +++ b/packages/kbn-test/src/es/test_es_cluster.ts @@ -18,7 +18,7 @@ import { Cluster } from '@kbn/es'; import { Client, HttpConnection } from '@elastic/elasticsearch'; import type { ToolingLog } from '@kbn/tooling-log'; import { REPO_ROOT } from '@kbn/repo-info'; - +import type { ArtifactLicense } from '@kbn/es'; import { CI_PARALLEL_PROCESS_PREFIX } from '../ci_parallel_process_prefix'; import { esTestConfig } from './es_test_config'; @@ -77,7 +77,7 @@ export interface CreateTestEsClusterOptions { * you'll likely need to use `basic` or `gold` to prevent the test from failing * when the license expires. */ - license?: 'basic' | 'gold' | 'trial'; // | 'oss' + license?: ArtifactLicense; log: ToolingLog; writeLogsToPath?: string; /** @@ -224,7 +224,15 @@ export function createTestEsCluster< // multiple nodes, they'll all share the same ESinstallation. const firstNode = this.nodes[0]; if (esFrom === 'source') { - installPath = (await firstNode.installSource(config)).installPath; + installPath = ( + await firstNode.installSource({ + sourcePath: config.sourcePath, + license: config.license, + password: config.password, + basePath: config.basePath, + esArgs: config.esArgs, + }) + ).installPath; } else if (esFrom === 'snapshot') { installPath = (await firstNode.installSnapshot(config)).installPath; } else if (esFrom === 'serverless') { 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 09e251d70a25b..f9c83161b521b 100644 --- a/packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts +++ b/packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts @@ -10,6 +10,7 @@ import { resolve } from 'path'; import type { ToolingLog } from '@kbn/tooling-log'; import getPort from 'get-port'; import { REPO_ROOT } from '@kbn/repo-info'; +import type { ArtifactLicense } from '@kbn/es'; import type { Config } from '../../functional_test_runner'; import { createTestEsCluster } from '../../es'; @@ -33,7 +34,7 @@ function getEsConfig({ esFrom = config.get('esTestCluster.from'), }: RunElasticsearchOptions) { const ssl = !!config.get('esTestCluster.ssl'); - const license: 'basic' | 'trial' | 'gold' = config.get('esTestCluster.license'); + const license: ArtifactLicense = config.get('esTestCluster.license'); const esArgs: string[] = config.get('esTestCluster.serverArgs'); const esJavaOpts: string | undefined = config.get('esTestCluster.esJavaOpts'); const isSecurityEnabled = esArgs.includes('xpack.security.enabled=true'); diff --git a/packages/kbn-test/src/jest/mocks/apm_agent_mock.ts b/packages/kbn-test/src/jest/mocks/apm_agent_mock.ts index e12b95340ff4f..17bb9f190646d 100644 --- a/packages/kbn-test/src/jest/mocks/apm_agent_mock.ts +++ b/packages/kbn-test/src/jest/mocks/apm_agent_mock.ts @@ -6,7 +6,28 @@ * Side Public License, v 1. */ -import type { Agent } from 'elastic-apm-node'; +import type { Agent, Transaction } from 'elastic-apm-node'; + +const transaction: jest.Mocked = { + addLabels: jest.fn().mockReturnValue(true), + ensureParentId: jest.fn().mockReturnValue(''), + setLabel: jest.fn().mockReturnValue(true), + setOutcome: jest.fn(), + setType: jest.fn(), + startSpan: jest.fn().mockReturnValue(null), + end: jest.fn(), + // Following OTel convention + // https://github.com/open-telemetry/opentelemetry-js/blob/27897d6c34839ee722d92b12c1d55d8bdab5a0c1/api/src/trace/invalid-span-constants.ts + ids: { + 'trace.id': '00000000000000000000000000000000', + 'transaction.id': '0000000000000000', + }, + traceparent: '00-00000000000000000000000000000-0000000000000000-00', + name: 'Mock Transaction', + result: '', + outcome: 'unknown', + type: null, +}; /** * `elastic-apm-node` patches the runtime at import time @@ -26,7 +47,7 @@ const agent: jest.Mocked = { captureError: jest.fn(), currentTraceparent: null, currentTraceIds: {}, - startTransaction: jest.fn().mockReturnValue(null), + startTransaction: jest.fn().mockReturnValue(transaction), setTransactionName: jest.fn(), endTransaction: jest.fn(), currentTransaction: null, @@ -43,7 +64,7 @@ const agent: jest.Mocked = { addTransactionFilter: jest.fn(), addMetadataFilter: jest.fn(), flush: jest.fn(), - destroy: jest.fn(), + destroy: jest.fn().mockResolvedValue(undefined), registerMetric: jest.fn(), setTransactionOutcome: jest.fn(), setSpanOutcome: jest.fn(), diff --git a/packages/kbn-unified-data-table/src/constants.ts b/packages/kbn-unified-data-table/src/constants.ts index c1272cf00c8a3..6b5dda5ca54b8 100644 --- a/packages/kbn-unified-data-table/src/constants.ts +++ b/packages/kbn-unified-data-table/src/constants.ts @@ -20,7 +20,7 @@ export const ROWS_PER_PAGE_OPTIONS = [10, 25, 50, DEFAULT_ROWS_PER_PAGE, 250, 50 export const ROWS_HEIGHT_OPTIONS = { auto: -1, single: 0, - default: 3, + default: -1, }; export const defaultMonacoEditorWidth = 370; diff --git a/packages/kbn-unified-data-table/src/hooks/use_row_heights_options.test.tsx b/packages/kbn-unified-data-table/src/hooks/use_row_heights_options.test.tsx index 2da08c178720a..1ef0d9c70d139 100644 --- a/packages/kbn-unified-data-table/src/hooks/use_row_heights_options.test.tsx +++ b/packages/kbn-unified-data-table/src/hooks/use_row_heights_options.test.tsx @@ -11,8 +11,6 @@ import { Storage } from '@kbn/kibana-utils-plugin/public'; import { LocalStorageMock } from '../../__mocks__/local_storage_mock'; import { useRowHeightsOptions } from './use_row_heights_options'; -const CONFIG_ROW_HEIGHT = 3; - describe('useRowHeightsOptions', () => { test('should apply rowHeight from savedSearch', () => { const { result } = renderHook(() => { @@ -32,7 +30,7 @@ describe('useRowHeightsOptions', () => { storage: new LocalStorageMock({ ['discover:dataGridRowHeight']: { previousRowHeight: 5, - previousConfigRowHeight: 3, + previousConfigRowHeight: -1, }, }) as unknown as Storage, consumer: 'discover', @@ -52,7 +50,7 @@ describe('useRowHeightsOptions', () => { }); expect(result.current.defaultHeight).toEqual({ - lineCount: CONFIG_ROW_HEIGHT, + lineCount: 3, }); }); @@ -61,8 +59,8 @@ describe('useRowHeightsOptions', () => { return useRowHeightsOptions({ storage: new LocalStorageMock({ ['discover:dataGridRowHeight']: { - previousRowHeight: 4, - // different from uiSettings (config), now user changed it to 3, but prev was 4 + previousRowHeight: 5, + // different from uiSettings (config), now user changed it to -1, but prev was 4 previousConfigRowHeight: 4, }, }) as unknown as Storage, @@ -70,8 +68,6 @@ describe('useRowHeightsOptions', () => { }); }); - expect(result.current.defaultHeight).toEqual({ - lineCount: CONFIG_ROW_HEIGHT, - }); + expect(result.current.defaultHeight).toEqual('auto'); }); }); diff --git a/packages/kbn-unified-data-table/src/hooks/use_row_heights_options.ts b/packages/kbn-unified-data-table/src/hooks/use_row_heights_options.ts index 4be574db9e396..727677a42e7df 100644 --- a/packages/kbn-unified-data-table/src/hooks/use_row_heights_options.ts +++ b/packages/kbn-unified-data-table/src/hooks/use_row_heights_options.ts @@ -29,7 +29,7 @@ interface UseRowHeightProps { * Converts rowHeight of EuiDataGrid to rowHeight number (-1 to 20) */ const serializeRowHeight = (rowHeight?: EuiDataGridRowHeightOption): number => { - if (rowHeight === 'auto') { + if (rowHeight === 'auto' || rowHeight === ROWS_HEIGHT_OPTIONS.auto) { return ROWS_HEIGHT_OPTIONS.auto; } else if (typeof rowHeight === 'object' && rowHeight.lineCount) { return rowHeight.lineCount; // custom @@ -75,11 +75,16 @@ export const useRowHeightsOptions = ({ rowHeight = configRowHeight; } + const defaultHeight = deserializeRowHeight(rowHeight); + return { - defaultHeight: deserializeRowHeight(rowHeight), + defaultHeight, lineHeight: '1.6em', onChange: ({ defaultHeight: newRowHeight }: EuiDataGridRowHeightsOptions) => { - const newSerializedRowHeight = serializeRowHeight(newRowHeight); + const newSerializedRowHeight = serializeRowHeight( + // pressing "Reset to default" triggers onChange with the same value + newRowHeight === defaultHeight ? configRowHeight : newRowHeight + ); updateStoredRowHeight(newSerializedRowHeight, configRowHeight, storage, consumer); onUpdateRowHeight?.(newSerializedRowHeight); }, diff --git a/packages/kbn-xstate-utils/README.md b/packages/kbn-xstate-utils/README.md new file mode 100644 index 0000000000000..ba185e1b466a3 --- /dev/null +++ b/packages/kbn-xstate-utils/README.md @@ -0,0 +1,3 @@ +# @kbn/xstate-utils + +Utilities to assist with development using the xstate library. diff --git a/packages/kbn-xstate-utils/index.ts b/packages/kbn-xstate-utils/index.ts new file mode 100644 index 0000000000000..de0577ee3ed83 --- /dev/null +++ b/packages/kbn-xstate-utils/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 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 or the Server + * Side Public License, v 1. + */ + +export * from './src'; diff --git a/packages/kbn-xstate-utils/jest.config.js b/packages/kbn-xstate-utils/jest.config.js new file mode 100644 index 0000000000000..9c747a6a128c3 --- /dev/null +++ b/packages/kbn-xstate-utils/jest.config.js @@ -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 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 or the Server + * Side Public License, v 1. + */ + +module.exports = { + preset: '@kbn/test/jest_node', + rootDir: '../..', + roots: ['/packages/kbn-xstate-utils'], +}; diff --git a/packages/kbn-xstate-utils/kibana.jsonc b/packages/kbn-xstate-utils/kibana.jsonc new file mode 100644 index 0000000000000..086bce23401aa --- /dev/null +++ b/packages/kbn-xstate-utils/kibana.jsonc @@ -0,0 +1,5 @@ +{ + "type": "shared-common", + "id": "@kbn/xstate-utils", + "owner": "@elastic/infra-monitoring-ui" +} diff --git a/packages/kbn-xstate-utils/package.json b/packages/kbn-xstate-utils/package.json new file mode 100644 index 0000000000000..373931bd41c22 --- /dev/null +++ b/packages/kbn-xstate-utils/package.json @@ -0,0 +1,6 @@ +{ + "name": "@kbn/xstate-utils", + "private": true, + "version": "1.0.0", + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-xstate-utils/src/actions.ts b/packages/kbn-xstate-utils/src/actions.ts new file mode 100644 index 0000000000000..178f6499102ad --- /dev/null +++ b/packages/kbn-xstate-utils/src/actions.ts @@ -0,0 +1,31 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 or the Server + * Side Public License, v 1. + */ + +import { + actions, + ActorRef, + AnyEventObject, + EventObject, + Expr, + PureAction, + SendActionOptions, +} from 'xstate'; + +export const sendIfDefined = + (target: string | ActorRef) => + ( + eventExpr: Expr, + options?: SendActionOptions + ): PureAction => { + return actions.pure((context, event) => { + const targetEvent = eventExpr(context, event); + return targetEvent != null && targetEvent !== undefined + ? [actions.sendTo(target, targetEvent, options)] + : undefined; + }); + }; diff --git a/packages/kbn-xstate-utils/src/dev_tools.ts b/packages/kbn-xstate-utils/src/dev_tools.ts new file mode 100644 index 0000000000000..fa16b808b3aec --- /dev/null +++ b/packages/kbn-xstate-utils/src/dev_tools.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 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 or the Server + * Side Public License, v 1. + */ + +export const isDevMode = () => process.env.NODE_ENV !== 'production'; diff --git a/packages/kbn-xstate-utils/src/index.ts b/packages/kbn-xstate-utils/src/index.ts new file mode 100644 index 0000000000000..2cf5853db6e08 --- /dev/null +++ b/packages/kbn-xstate-utils/src/index.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 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 or the Server + * Side Public License, v 1. + */ + +export * from './actions'; +export * from './notification_channel'; +export * from './types'; +export * from './dev_tools'; diff --git a/packages/kbn-xstate-utils/src/notification_channel.ts b/packages/kbn-xstate-utils/src/notification_channel.ts new file mode 100644 index 0000000000000..86f9c7f64f518 --- /dev/null +++ b/packages/kbn-xstate-utils/src/notification_channel.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 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 or the Server + * Side Public License, v 1. + */ + +import { ReplaySubject, Subject } from 'rxjs'; +import { ActionFunction, EventObject, Expr, Subscribable } from 'xstate'; + +export interface NotificationChannel { + createService: () => Subscribable; + notify: ( + eventExpr: Expr + ) => ActionFunction; +} + +export const createNotificationChannel = ( + shouldReplayLastEvent = true +): NotificationChannel => { + const eventsSubject = shouldReplayLastEvent + ? new ReplaySubject(1) + : new Subject(); + + const createService = () => eventsSubject.asObservable(); + + const notify = + (eventExpr: Expr) => + (context: TContext, event: TEvent) => { + const eventToSend = eventExpr(context, event); + + if (eventToSend != null) { + eventsSubject.next(eventToSend); + } + }; + + return { + createService, + notify, + }; +}; diff --git a/packages/kbn-xstate-utils/src/types.ts b/packages/kbn-xstate-utils/src/types.ts new file mode 100644 index 0000000000000..10d21697cdd28 --- /dev/null +++ b/packages/kbn-xstate-utils/src/types.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 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 or the Server + * Side Public License, v 1. + */ + +import type { ActorRef, ActorRefWithDeprecatedState, EmittedFrom, State, StateValue } from 'xstate'; + +export type OmitDeprecatedState> = Omit< + T, + 'state' +>; + +export type MatchedState< + TState extends State, + TStateValue extends StateValue +> = TState extends State< + any, + infer TEvent, + infer TStateSchema, + infer TTypestate, + infer TResolvedTypesMeta +> + ? State< + (TTypestate extends any + ? { value: TStateValue; context: any } extends TTypestate + ? TTypestate + : never + : never)['context'], + TEvent, + TStateSchema, + TTypestate, + TResolvedTypesMeta + > & { + value: TStateValue; + } + : never; + +export type MatchedStateFromActor< + TActorRef extends ActorRef, + TStateValue extends StateValue +> = MatchedState, TStateValue>; diff --git a/packages/kbn-xstate-utils/tsconfig.json b/packages/kbn-xstate-utils/tsconfig.json new file mode 100644 index 0000000000000..2f9ddddbeea23 --- /dev/null +++ b/packages/kbn-xstate-utils/tsconfig.json @@ -0,0 +1,17 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": [ + "jest", + "node" + ] + }, + "include": [ + "**/*.ts", + ], + "exclude": [ + "target/**/*" + ], + "kbn_references": [] +} diff --git a/packages/shared-ux/page/kibana_template/impl/src/__snapshots__/page_template_inner.test.tsx.snap b/packages/shared-ux/page/kibana_template/impl/src/__snapshots__/page_template_inner.test.tsx.snap index 0588fbfae152d..7a238b54533dd 100644 --- a/packages/shared-ux/page/kibana_template/impl/src/__snapshots__/page_template_inner.test.tsx.snap +++ b/packages/shared-ux/page/kibana_template/impl/src/__snapshots__/page_template_inner.test.tsx.snap @@ -66,7 +66,9 @@ exports[`KibanaPageTemplateInner page sidebar 1`] = ` minHeight={0} offset={0} > - + Test diff --git a/packages/shared-ux/page/kibana_template/impl/src/page_template_inner.tsx b/packages/shared-ux/page/kibana_template/impl/src/page_template_inner.tsx index 607b8fbd1776b..f9b9dcd247de6 100644 --- a/packages/shared-ux/page/kibana_template/impl/src/page_template_inner.tsx +++ b/packages/shared-ux/page/kibana_template/impl/src/page_template_inner.tsx @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import React, { FC, useEffect, useState } from 'react'; +import React, { FC } from 'react'; import classNames from 'classnames'; import { EuiPageTemplate } from '@elastic/eui'; @@ -21,9 +21,6 @@ const getClasses = (template?: string, className?: string) => { ); }; -const KIBANA_CHROME_SELECTOR = '[data-test-subj="kibanaChrome"]'; -const HEADER_GLOBAL_NAV_SELECTOR = '[data-test-subj="headerGlobalNav"]'; - /** * A thin wrapper around EuiPageTemplate with a few Kibana specific additions */ @@ -38,18 +35,6 @@ export const KibanaPageTemplateInner: FC = ({ }) => { let header; - const [offset, setOffset] = useState(); - - useEffect(() => { - const kibanaChrome = document.querySelector(KIBANA_CHROME_SELECTOR) as HTMLElement; - if (kibanaChrome) { - const kibanaChromeHeader = kibanaChrome.querySelector( - HEADER_GLOBAL_NAV_SELECTOR - ) as HTMLElement; - setOffset(kibanaChromeHeader?.offsetTop + kibanaChromeHeader?.offsetHeight); - } - }, []); - if (isEmptyState && pageHeader && !children) { const { iconType, pageTitle, description, rightSideItems } = pageHeader; const title = pageTitle ?

    {pageTitle}

    : undefined; @@ -70,9 +55,7 @@ export const KibanaPageTemplateInner: FC = ({ let sideBar; if (pageSideBar) { const sideBarProps = { ...pageSideBarProps }; - if (offset) { - sideBarProps.sticky = { offset }; - } + sideBarProps.sticky = true; sideBar = {pageSideBar}; } diff --git a/packages/shared-ux/page/solution_nav/src/__snapshots__/with_solution_nav.test.tsx.snap b/packages/shared-ux/page/solution_nav/src/__snapshots__/with_solution_nav.test.tsx.snap index d31d61c4b8129..f55fc4c110b11 100644 --- a/packages/shared-ux/page/solution_nav/src/__snapshots__/with_solution_nav.test.tsx.snap +++ b/packages/shared-ux/page/solution_nav/src/__snapshots__/with_solution_nav.test.tsx.snap @@ -52,7 +52,7 @@ exports[`WithSolutionNav renders wrapped component 1`] = ` } pageSideBarProps={ Object { - "className": "css-c34ez9", + "className": "kbnSolutionNav__sidebar css-c34ez9", "minWidth": undefined, "paddingSize": "none", } @@ -112,7 +112,7 @@ exports[`WithSolutionNav with children 1`] = ` } pageSideBarProps={ Object { - "className": "css-c34ez9", + "className": "kbnSolutionNav__sidebar css-c34ez9", "minWidth": undefined, "paddingSize": "none", } diff --git a/packages/shared-ux/page/solution_nav/src/with_solution_nav.tsx b/packages/shared-ux/page/solution_nav/src/with_solution_nav.tsx index da73befdf519e..2e4879a4093cb 100644 --- a/packages/shared-ux/page/solution_nav/src/with_solution_nav.tsx +++ b/packages/shared-ux/page/solution_nav/src/with_solution_nav.tsx @@ -57,9 +57,8 @@ export const withSolutionNav =

    (WrappedComponent: Compo isMediumBreakpoint || (canBeCollapsed && isLargerBreakpoint && !isSideNavOpenOnDesktop); const withSolutionNavStyles = WithSolutionNavStyles(euiTheme); const sideBarClasses = classNames( - { - 'kbnSolutionNav__sidebar--shrink': isSidebarShrunk, - }, + 'kbnSolutionNav__sidebar', + { 'kbnSolutionNav__sidebar--shrink': isSidebarShrunk }, props.pageSideBarProps?.className, withSolutionNavStyles ); diff --git a/src/core/public/_css_variables.scss b/src/core/public/_css_variables.scss new file mode 100644 index 0000000000000..cef1be40d1239 --- /dev/null +++ b/src/core/public/_css_variables.scss @@ -0,0 +1,11 @@ +:root { + // height of the header banner + --kbnHeaderBannerHeight: #{$euiSizeXL}; + // total height of all fixed headers (when the banner is *not* present) inherited from EUI + --kbnHeaderOffset: var(--euiFixedHeadersOffset, 0); + // total height of everything when the banner is present + --kbnHeaderOffsetWithBanner: calc(var(--kbnHeaderBannerHeight) + var(--kbnHeaderOffset)); +} + +// Quick note: This shouldn't be mixed with Sass variable declarations, +// as each import will cause :root to be re-declared unnecessarily diff --git a/src/core/public/_mixins.scss b/src/core/public/_mixins.scss index 2dbef465e074e..9d533a87d1843 100644 --- a/src/core/public/_mixins.scss +++ b/src/core/public/_mixins.scss @@ -1,43 +1,6 @@ -@import './variables'; - -/* stylelint-disable-next-line length-zero-no-unit -- need consistent unit to sum them */ -@mixin kibanaFullBodyHeight($additionalOffset: 0px) { - // default - header, no banner - height: calc(100vh - #{$kbnHeaderOffset + $additionalOffset}); - - @at-root { - // no header, no banner - .kbnBody--chromeHidden & { - height: calc(100vh - #{$additionalOffset}); - } - // header, banner - .kbnBody--hasHeaderBanner & { - height: calc(100vh - #{$kbnHeaderOffsetWithBanner + $additionalOffset}); - } - // no header, banner - .kbnBody--chromeHidden.kbnBody--hasHeaderBanner & { - height: calc(100vh - #{$kbnHeaderBannerHeight + $additionalOffset}); - } - } -} - -/* stylelint-disable-next-line length-zero-no-unit -- need consistent unit to sum them */ -@mixin kibanaFullBodyMinHeight($additionalOffset: 0px) { - // default - header, no banner - min-height: calc(100vh - #{$kbnHeaderOffset + $additionalOffset}); - - @at-root { - // no header, no banner - .kbnBody--chromeHidden & { - min-height: calc(100vh - #{$additionalOffset}); - } - // header, banner - .kbnBody--hasHeaderBanner & { - min-height: calc(100vh - #{$kbnHeaderOffsetWithBanner + $additionalOffset}); - } - // no header, banner - .kbnBody--chromeHidden.kbnBody--hasHeaderBanner & { - min-height: calc(100vh - #{$kbnHeaderBannerHeight + $additionalOffset}); - } - } +@mixin kibanaFullBodyHeight($additionalOffset: 0) { + // The `--euiFixedHeadersOffset` CSS variable is automatically updated by + // styles/rendering/_base.scss, based on whether the Kibana chrome has a + // header banner, and is visible or hidden + height: calc(100vh - var(--euiFixedHeadersOffset, 0) - #{$additionalOffset}); } diff --git a/src/core/public/_variables.scss b/src/core/public/_variables.scss deleted file mode 100644 index 6c21c9760be97..0000000000000 --- a/src/core/public/_variables.scss +++ /dev/null @@ -1,8 +0,0 @@ -@import '@elastic/eui/src/global_styling/variables/header'; - -// height of the header banner -$kbnHeaderBannerHeight: $euiSizeXL; // This value is also declared in `/x-pack/plugins/canvas/common/lib/constants.ts` -// total height of the header (when the banner is *not* present) -$kbnHeaderOffset: $euiHeaderHeightCompensation * 2; -// total height of the header when the banner is present -$kbnHeaderOffsetWithBanner: $kbnHeaderOffset + $kbnHeaderBannerHeight; diff --git a/src/core/public/index.scss b/src/core/public/index.scss index c056b0f851801..db05def14bc0c 100644 --- a/src/core/public/index.scss +++ b/src/core/public/index.scss @@ -1,3 +1,3 @@ -@import './variables'; +@import './css_variables'; @import './mixins'; @import './styles/index'; diff --git a/src/core/public/styles/chrome/_banner.scss b/src/core/public/styles/chrome/_banner.scss index 9c521da3f30ca..feb69e54a911f 100644 --- a/src/core/public/styles/chrome/_banner.scss +++ b/src/core/public/styles/chrome/_banner.scss @@ -2,7 +2,7 @@ position: fixed; top: 0; left: 0; - height: $kbnHeaderBannerHeight; + height: var(--kbnHeaderBannerHeight); width: 100%; z-index: $euiZHeader; } @@ -11,32 +11,3 @@ height: 100%; width: 100%; } - -// overriding `top` positioning of the chrome headers -.kbnBody--hasHeaderBanner .header__bars { - .header__firstBar { - top: $kbnHeaderBannerHeight; - } - .header__secondBar { - top: $kbnHeaderBannerHeight + $euiHeaderHeightCompensation; - } -} - -// overriding padding on the body element added by EUI -.kbnBody.kbnBody--hasHeaderBanner.kbnBody--projectLayout.euiBody--headerIsFixed { - padding-top: $kbnHeaderBannerHeight + $euiHeaderHeightCompensation; - - // overriding `top` positioning of the project side nav, and flyouts - // overriding `top` positioning of the project app menu toolbar - &.euiBody--headerIsFixed .euiCollapsibleNav, - &.euiBody--headerIsFixed:not(.euiDataGrid__restrictBody) .euiFlyout, - .header__actionMenu { - top: $kbnHeaderBannerHeight + $euiHeaderHeightCompensation; - } - - // overriding `height` calculation of the project side nav, and flyouts - &.euiBody--headerIsFixed .euiCollapsibleNav, - &.euiBody--headerIsFixed:not(.euiDataGrid__restrictBody) .euiFlyout { - height: calc(100% - #{$kbnHeaderBannerHeight + $euiHeaderHeightCompensation}); - } -} diff --git a/src/core/public/styles/core_app/_mixins.scss b/src/core/public/styles/core_app/_mixins.scss index a801ffd7a2cae..78691f71fe87d 100644 --- a/src/core/public/styles/core_app/_mixins.scss +++ b/src/core/public/styles/core_app/_mixins.scss @@ -1,5 +1,3 @@ -@import '../../variables'; - @mixin flexParent($grow: 1, $shrink: 1, $basis: auto, $direction: column) { flex: $grow $shrink $basis; display: flex; @@ -86,7 +84,7 @@ @at-root { .kbnBody--hasHeaderBanner & { - top: $kbnHeaderBannerHeight; + top: var(--kbnHeaderBannerHeight); } } diff --git a/src/core/public/styles/rendering/_base.scss b/src/core/public/styles/rendering/_base.scss index a9ece9955e6ca..8a7b14242f8bf 100644 --- a/src/core/public/styles/rendering/_base.scss +++ b/src/core/public/styles/rendering/_base.scss @@ -19,7 +19,7 @@ pointer-events: none; visibility: hidden; position: fixed; - top: 0; + top: var(--euiFixedHeadersOffset, 0); right: 0; bottom: 0; left: 0; @@ -35,50 +35,30 @@ position: relative; // This is temporary for apps that relied on this being present on `.application` } -@mixin kbnAffordForHeader($headerHeight) { - @include euiHeaderAffordForFixed($headerHeight); - - #securitySolutionStickyKQL, - #app-fixed-viewport { - top: $headerHeight; - } - - @include euiBreakpoint('xl', 'l') { - .kbnStickyMenu { - position: sticky; - max-height: calc(100vh - #{$headerHeight + $euiSize}); - top: $headerHeight + $euiSize; - } - - .kbnSolutionNav__sidebar { - position: sticky; - max-height: calc(100vh - #{$headerHeight}); - top: $headerHeight; - } - } -} - .kbnBody { - @include kbnAffordForHeader($kbnHeaderOffset); + padding-top: var(--euiFixedHeadersOffset, 0); +} - &.kbnBody--hasHeaderBanner { - padding-top: $kbnHeaderBannerHeight; +// Conditionally override :root CSS fixed header variable. Updating `--euiFixedHeadersOffset` +// on the body will cause all child EUI components to automatically update their offsets - @include kbnAffordForHeader($kbnHeaderOffsetWithBanner); +.kbnBody--hasHeaderBanner { + --euiFixedHeadersOffset: var(--kbnHeaderOffsetWithBanner); - // Prevents banners from covering full screen data grids - .euiDataGrid--fullScreen { - height: calc(100vh - #{$kbnHeaderBannerHeight}); - top: $kbnHeaderBannerHeight; - } - } - &.kbnBody--chromeHidden { - @include kbnAffordForHeader(0); - } - &.kbnBody--projectLayout { - @include kbnAffordForHeader($euiHeaderHeightCompensation); + // Offset fixed EuiHeaders by the top banner + .euiHeader[data-fixed-header] { + margin-top: var(--kbnHeaderBannerHeight); } - &.kbnBody--chromeHidden.kbnBody--hasHeaderBanner { - @include kbnAffordForHeader($kbnHeaderBannerHeight); + + // Prevent banners from covering full screen data grids + .euiDataGrid--fullScreen { + height: calc(100vh - var(--kbnHeaderBannerHeight)); + top: var(--kbnHeaderBannerHeight); } } +.kbnBody--chromeHidden { + --euiFixedHeadersOffset: 0; +} +.kbnBody--chromeHidden.kbnBody--hasHeaderBanner { + --euiFixedHeadersOffset: var(--kbnHeaderBannerHeight); +} diff --git a/src/dev/license_checker/config.ts b/src/dev/license_checker/config.ts index 448c7f900ffd1..ff0296ec9777b 100644 --- a/src/dev/license_checker/config.ts +++ b/src/dev/license_checker/config.ts @@ -85,7 +85,7 @@ export const LICENSE_OVERRIDES = { 'jsts@1.6.2': ['Eclipse Distribution License - v 1.0'], // cf. https://github.com/bjornharrtell/jsts '@mapbox/jsonlint-lines-primitives@2.0.2': ['MIT'], // license in readme https://github.com/tmcw/jsonlint '@elastic/ems-client@8.4.0': ['Elastic License 2.0'], - '@elastic/eui@88.1.0': ['SSPL-1.0 OR Elastic License 2.0'], + '@elastic/eui@88.2.0': ['SSPL-1.0 OR Elastic License 2.0'], 'language-subtag-registry@0.3.21': ['CC-BY-4.0'], // retired ODC‑By license https://github.com/mattcg/language-subtag-registry 'buffers@0.1.1': ['MIT'], // license in importing module https://www.npmjs.com/package/binary }; diff --git a/src/plugins/dashboard/public/dashboard_app/top_nav/_dashboard_top_nav.scss b/src/plugins/dashboard/public/dashboard_app/top_nav/_dashboard_top_nav.scss index 1cc815d05e71a..e73de35dfc41d 100644 --- a/src/plugins/dashboard/public/dashboard_app/top_nav/_dashboard_top_nav.scss +++ b/src/plugins/dashboard/public/dashboard_app/top_nav/_dashboard_top_nav.scss @@ -3,24 +3,7 @@ width: 100%; position: sticky; z-index: $euiZLevel2; + top: var(--euiFixedHeadersOffset, 0); background: $euiPageBackgroundColor; } - - &.kbnBody--noHeaderBanner { - &.kbnBody--chromeVisible .dashboardTopNav { - top: $kbnHeaderOffset; - } - &.kbnBody--chromeHidden .dashboardTopNav { - top: 0; - } - } - - &.kbnBody--hasHeaderBanner { - &.kbnBody--chromeVisible .dashboardTopNav { - top: $kbnHeaderOffsetWithBanner; - } - &.kbnBody--chromeHidden .dashboardTopNav { - top: $kbnHeaderBannerHeight; - } - } -} \ No newline at end of file +} diff --git a/src/plugins/dashboard/public/dashboard_container/component/empty_screen/__snapshots__/dashboard_empty_screen.test.tsx.snap b/src/plugins/dashboard/public/dashboard_container/component/empty_screen/__snapshots__/dashboard_empty_screen.test.tsx.snap index 46d3b77578b3b..6863540ad4a71 100644 --- a/src/plugins/dashboard/public/dashboard_container/component/empty_screen/__snapshots__/dashboard_empty_screen.test.tsx.snap +++ b/src/plugins/dashboard/public/dashboard_container/component/empty_screen/__snapshots__/dashboard_empty_screen.test.tsx.snap @@ -7,7 +7,7 @@ exports[`DashboardEmptyScreen renders correctly with edit mode 1`] = `

    Record ({ - getFieldNameFromField: jest.fn(() => mockGetFieldNameFromField()), - getLabel: jest.fn(() => mockGetLabel()), - getLabelForPercentile: jest.fn(() => mockGetLabelForPercentile()), -})); +jest.mock('../utils', () => { + const utils = jest.requireActual('../utils'); + return { + ...utils, + getFieldNameFromField: jest.fn(() => mockGetFieldNameFromField()), + getLabel: jest.fn(() => mockGetLabel()), + getLabelForPercentile: jest.fn(() => mockGetLabelForPercentile()), + }; +}); describe('convertToPercentileColumn', () => { const visType = 'heatmap'; diff --git a/src/plugins/visualizations/common/convert_to_lens/lib/convert/percentile.ts b/src/plugins/visualizations/common/convert_to_lens/lib/convert/percentile.ts index 9989db1c5dda7..43229a610b041 100644 --- a/src/plugins/visualizations/common/convert_to_lens/lib/convert/percentile.ts +++ b/src/plugins/visualizations/common/convert_to_lens/lib/convert/percentile.ts @@ -9,7 +9,7 @@ import { METRIC_TYPES } from '@kbn/data-plugin/common'; import { SchemaConfig } from '../../..'; import { isFieldValid, PercentileParams } from '../..'; -import { getFieldNameFromField, getLabelForPercentile } from '../utils'; +import { getAggIdAndValue, getFieldNameFromField, getLabelForPercentile } from '../utils'; import { createColumn, getFormat } from './column'; import { PercentileColumn, CommonColumnConverterArgs } from './types'; import { SUPPORTED_METRICS } from './supported_metrics'; @@ -40,7 +40,7 @@ const getPercent = ( const { percents } = aggParams; - const [, percentStr] = aggId.split('.'); + const [, percentStr] = getAggIdAndValue(aggId); const percent = Number(percentStr); if (!percents || !percents.length || percentStr === '' || isNaN(percent)) { diff --git a/src/plugins/visualizations/common/convert_to_lens/lib/metrics/formula.test.ts b/src/plugins/visualizations/common/convert_to_lens/lib/metrics/formula.test.ts index 72cd07ba03f7c..2c36925b74d3b 100644 --- a/src/plugins/visualizations/common/convert_to_lens/lib/metrics/formula.test.ts +++ b/src/plugins/visualizations/common/convert_to_lens/lib/metrics/formula.test.ts @@ -19,14 +19,18 @@ const mockIsStdDevAgg = jest.fn(); const mockGetFieldByName = jest.fn(); const originalGetFieldByName = stubLogstashDataView.getFieldByName; -jest.mock('../utils', () => ({ - getFieldNameFromField: jest.fn((field) => field), - getMetricFromParentPipelineAgg: jest.fn(() => mockGetMetricFromParentPipelineAgg()), - isPercentileAgg: jest.fn(() => mockIsPercentileAgg()), - isPercentileRankAgg: jest.fn(() => mockIsPercentileRankAgg()), - isPipeline: jest.fn(() => mockIsPipeline()), - isStdDevAgg: jest.fn(() => mockIsStdDevAgg()), -})); +jest.mock('../utils', () => { + const utils = jest.requireActual('../utils'); + return { + ...utils, + getFieldNameFromField: jest.fn((field) => field), + getMetricFromParentPipelineAgg: jest.fn(() => mockGetMetricFromParentPipelineAgg()), + isPercentileAgg: jest.fn(() => mockIsPercentileAgg()), + isPercentileRankAgg: jest.fn(() => mockIsPercentileRankAgg()), + isPipeline: jest.fn(() => mockIsPipeline()), + isStdDevAgg: jest.fn(() => mockIsStdDevAgg()), + }; +}); const dataView = stubLogstashDataView; const visType = 'heatmap'; diff --git a/src/plugins/visualizations/common/convert_to_lens/lib/metrics/formula.ts b/src/plugins/visualizations/common/convert_to_lens/lib/metrics/formula.ts index 4492cd58ac230..c2e30425e9488 100644 --- a/src/plugins/visualizations/common/convert_to_lens/lib/metrics/formula.ts +++ b/src/plugins/visualizations/common/convert_to_lens/lib/metrics/formula.ts @@ -12,6 +12,7 @@ import { Operations } from '../../constants'; import { isMetricWithField, getStdDeviationFormula, ExtendedColumnConverterArgs } from '../convert'; import { getFormulaFromMetric, SUPPORTED_METRICS } from '../convert/supported_metrics'; import { + getAggIdAndValue, getFieldNameFromField, getMetricFromParentPipelineAgg, isPercentileAgg, @@ -125,7 +126,7 @@ const getFormulaForPercentile = ( selector: string, reducedTimeRange?: string ) => { - const percentile = Number(agg.aggId?.split('.')[1]); + const percentile = Number(getAggIdAndValue(agg.aggId)[1]); const op = SUPPORTED_METRICS[agg.aggType]; if (!isValidAgg(visType, agg, dataView) || !op) { return null; diff --git a/src/plugins/visualizations/common/convert_to_lens/lib/utils.ts b/src/plugins/visualizations/common/convert_to_lens/lib/utils.ts index ce50312d92cf3..e323b2169f519 100644 --- a/src/plugins/visualizations/common/convert_to_lens/lib/utils.ts +++ b/src/plugins/visualizations/common/convert_to_lens/lib/utils.ts @@ -199,3 +199,17 @@ export const getMetricFromParentPipelineAgg = ( return metric as SchemaConfig; }; + +const aggIdWithDecimalsRegexp = /^(\w)+\['([0-9]+\.[0-9]+)'\]$/; + +export const getAggIdAndValue = (aggId?: string) => { + if (!aggId) { + return []; + } + // agg value contains decimals + if (/\['/.test(aggId)) { + const [_, id, value] = aggId.match(aggIdWithDecimalsRegexp) || []; + return [id, value]; + } + return aggId.split('.'); +}; diff --git a/src/plugins/visualizations/public/convert_to_lens/schemas.test.ts b/src/plugins/visualizations/public/convert_to_lens/schemas.test.ts index aa338db367988..9b4f9d718804c 100644 --- a/src/plugins/visualizations/public/convert_to_lens/schemas.test.ts +++ b/src/plugins/visualizations/public/convert_to_lens/schemas.test.ts @@ -40,9 +40,13 @@ jest.mock('../../common/convert_to_lens/lib/buckets', () => ({ convertBucketToColumns: jest.fn(() => mockConvertBucketToColumns()), })); -jest.mock('../../common/convert_to_lens/lib/utils', () => ({ - getCustomBucketsFromSiblingAggs: jest.fn(() => mockGetCutomBucketsFromSiblingAggs()), -})); +jest.mock('../../common/convert_to_lens/lib/utils', () => { + const utils = jest.requireActual('../../common/convert_to_lens/lib/utils'); + return { + ...utils, + getCustomBucketsFromSiblingAggs: jest.fn(() => mockGetCutomBucketsFromSiblingAggs()), + }; +}); jest.mock('../vis_schemas', () => ({ getVisSchemas: jest.fn(() => mockGetVisSchemas()), diff --git a/src/plugins/visualizations/public/convert_to_lens/schemas.ts b/src/plugins/visualizations/public/convert_to_lens/schemas.ts index 1b44f7cdffda1..886be04bb654a 100644 --- a/src/plugins/visualizations/public/convert_to_lens/schemas.ts +++ b/src/plugins/visualizations/public/convert_to_lens/schemas.ts @@ -10,7 +10,10 @@ import type { DataView } from '@kbn/data-views-plugin/common'; import { IAggConfig, METRIC_TYPES, TimefilterContract } from '@kbn/data-plugin/public'; import { AggBasedColumn, PercentageModeConfig, SchemaConfig } from '../../common'; import { convertMetricToColumns } from '../../common/convert_to_lens/lib/metrics'; -import { getCustomBucketsFromSiblingAggs } from '../../common/convert_to_lens/lib/utils'; +import { + getAggIdAndValue, + getCustomBucketsFromSiblingAggs, +} from '../../common/convert_to_lens/lib/utils'; import { BucketColumn } from '../../common/convert_to_lens/lib'; import type { Vis } from '../types'; import { getVisSchemas, Schemas } from '../vis_schemas'; @@ -178,11 +181,12 @@ export const getColumnsFromVis = ( if (series && series.length) { for (const { metrics: metricAggIds } of series) { + const metricAggIdsLookup = new Set(metricAggIds); const metrics = aggs.filter( - (agg) => agg.aggId && metricAggIds.includes(agg.aggId.split('.')[0]) + (agg) => agg.aggId && metricAggIdsLookup.has(getAggIdAndValue(agg.aggId)[0]) ); const customBucketsForLayer = customBucketsWithMetricIds.filter((c) => - c.metricIds.some((m) => metricAggIds.includes(m)) + c.metricIds.some((m) => metricAggIdsLookup.has(m)) ); const layer = createLayer( vis.type.name, diff --git a/test/api_integration/apis/home/sample_data.ts b/test/api_integration/apis/home/sample_data.ts index b26fe638e1224..6037773c577b0 100644 --- a/test/api_integration/apis/home/sample_data.ts +++ b/test/api_integration/apis/home/sample_data.ts @@ -17,7 +17,11 @@ export default function ({ getService }: FtrProviderContext) { const MILLISECOND_IN_WEEK = 1000 * 60 * 60 * 24 * 7; const SPACES = ['default', 'other']; - const FLIGHTS_OVERVIEW_DASHBOARD_ID = '7adfa750-4c81-11e8-b3d7-01146121b73d'; // default ID of the flights overview dashboard + /** + * default ID of the flights overview dashboard + * @see src/plugins/home/server/services/sample_data/data_sets/flights/index.ts + */ + const FLIGHTS_OVERVIEW_DASHBOARD_ID = '7adfa750-4c81-11e8-b3d7-01146121b73d'; const FLIGHTS_CANVAS_APPLINK_PATH = '/app/canvas#/workpad/workpad-a474e74b-aedc-47c3-894a-db77e62c41e0'; // includes default ID of the flights canvas applink path @@ -25,8 +29,7 @@ export default function ({ getService }: FtrProviderContext) { return appLinks.some((item) => item.path === path); }; - // Failing: See https://github.com/elastic/kibana/issues/164568 - describe.skip('sample data apis', () => { + describe('sample data apis', () => { before(async () => { await esArchiver.emptyKibanaIndex(); }); @@ -64,7 +67,7 @@ export default function ({ getService }: FtrProviderContext) { .expect(200); expect(resp.body).to.eql({ - elasticsearchIndicesCreated: { kibana_sample_data_flights: 13059 }, + elasticsearchIndicesCreated: { kibana_sample_data_flights: 13014 }, kibanaSavedObjectsLoaded: 8, }); }); @@ -73,9 +76,7 @@ export default function ({ getService }: FtrProviderContext) { it('should load elasticsearch index containing sample data with dates relative to current time', async () => { const resp = await es.search<{ timestamp: string }>({ index: 'kibana_sample_data_flights', - body: { - sort: [{ timestamp: { order: 'desc' } }], - }, + sort: [{ timestamp: { order: 'desc' } }], }); const doc = resp.hits.hits[0]; @@ -91,9 +92,7 @@ export default function ({ getService }: FtrProviderContext) { const resp = await es.search<{ timestamp: string }>({ index: 'kibana_sample_data_flights', - body: { - sort: [{ timestamp: { order: 'desc' } }], - }, + sort: [{ timestamp: { order: 'desc' } }], }); const doc = resp.hits.hits[0]; diff --git a/test/functional/apps/discover/classic/_doc_table.ts b/test/functional/apps/discover/classic/_doc_table.ts index 2a0fbebe8cf13..7ab640cf42ee1 100644 --- a/test/functional/apps/discover/classic/_doc_table.ts +++ b/test/functional/apps/discover/classic/_doc_table.ts @@ -28,6 +28,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const defaultSettings = { defaultIndex: 'logstash-*', hideAnnouncements: true, + 'doc_table:legacy': true, }; const testSubjects = getService('testSubjects'); @@ -75,7 +76,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('classic table in window 900x700', async function () { before(async () => { - await kibanaServer.uiSettings.update({ 'doc_table:legacy': true }); await browser.setWindowSize(900, 700); await PageObjects.common.navigateToApp('discover'); await PageObjects.discover.waitUntilSearchingHasFinished(); @@ -95,7 +95,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('classic table in window 600x700', async function () { before(async () => { - await kibanaServer.uiSettings.update({ 'doc_table:legacy': true }); await browser.setWindowSize(600, 700); await PageObjects.common.navigateToApp('discover'); await PageObjects.discover.waitUntilSearchingHasFinished(); @@ -115,7 +114,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('legacy', async function () { before(async () => { - await kibanaServer.uiSettings.update({ 'doc_table:legacy': true }); await PageObjects.common.navigateToApp('discover'); await PageObjects.discover.waitUntilSearchingHasFinished(); }); diff --git a/test/functional/apps/discover/group2/_data_grid_context.ts b/test/functional/apps/discover/group2/_data_grid_context.ts index 1b43de8a72353..4d90acab5eebb 100644 --- a/test/functional/apps/discover/group2/_data_grid_context.ts +++ b/test/functional/apps/discover/group2/_data_grid_context.ts @@ -30,7 +30,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'header', 'unifiedFieldList', ]); - const defaultSettings = { defaultIndex: 'logstash-*' }; + const defaultSettings = { + defaultIndex: 'logstash-*', + 'discover:rowHeightOption': 0, // single line + }; const kibanaServer = getService('kibanaServer'); const esArchiver = getService('esArchiver'); const dashboardAddPanel = getService('dashboardAddPanel'); diff --git a/test/functional/apps/discover/group2/_data_grid_doc_table.ts b/test/functional/apps/discover/group2/_data_grid_doc_table.ts index dd2481b13ad9f..5a60d6cf1f98c 100644 --- a/test/functional/apps/discover/group2/_data_grid_doc_table.ts +++ b/test/functional/apps/discover/group2/_data_grid_doc_table.ts @@ -28,6 +28,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ]); const defaultSettings = { defaultIndex: 'logstash-*', + 'discover:rowHeightOption': 0, // single line }; const testSubjects = getService('testSubjects'); const security = getService('security'); diff --git a/test/functional/apps/discover/group2/_data_grid_pagination.ts b/test/functional/apps/discover/group2/_data_grid_pagination.ts index 4d0c81c4cfebc..4c0a3aa53759e 100644 --- a/test/functional/apps/discover/group2/_data_grid_pagination.ts +++ b/test/functional/apps/discover/group2/_data_grid_pagination.ts @@ -15,7 +15,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const dataGrid = getService('dataGrid'); const PageObjects = getPageObjects(['settings', 'common', 'discover', 'header', 'timePicker']); - const defaultSettings = { defaultIndex: 'logstash-*' }; + const defaultSettings = { + defaultIndex: 'logstash-*', + 'discover:rowHeightOption': 0, // single line + }; const testSubjects = getService('testSubjects'); const retry = getService('retry'); const security = getService('security'); diff --git a/test/functional/apps/discover/group2/_data_grid_row_height.ts b/test/functional/apps/discover/group2/_data_grid_row_height.ts new file mode 100644 index 0000000000000..2c385b67aaa02 --- /dev/null +++ b/test/functional/apps/discover/group2/_data_grid_row_height.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 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 or the Server + * Side Public License, v 1. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../ftr_provider_context'; + +export default function ({ getService, getPageObjects }: FtrProviderContext) { + const browser = getService('browser'); + const esArchiver = getService('esArchiver'); + const kibanaServer = getService('kibanaServer'); + const dataGrid = getService('dataGrid'); + const PageObjects = getPageObjects(['settings', 'common', 'discover', 'header', 'timePicker']); + const defaultSettings = { defaultIndex: 'logstash-*' }; + const security = getService('security'); + + describe('discover data grid row height', function describeIndexTests() { + before(async () => { + await security.testUser.setRoles(['kibana_admin', 'test_logstash_reader']); + await browser.setWindowSize(1200, 2000); + await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); + await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover'); + }); + + after(async () => { + await kibanaServer.importExport.unload('test/functional/fixtures/kbn_archiver/discover'); + await kibanaServer.uiSettings.replace({}); + await kibanaServer.savedObjects.cleanStandardList(); + }); + + beforeEach(async function () { + await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await kibanaServer.uiSettings.update(defaultSettings); + await PageObjects.common.navigateToApp('discover'); + await PageObjects.discover.waitUntilSearchingHasFinished(); + }); + + it('should use the default row height', async () => { + const rows = await dataGrid.getDocTableRows(); + expect(rows.length).to.be.above(0); + + await dataGrid.clickGridSettings(); + expect(await dataGrid.getCurrentRowHeightValue()).to.be('Auto fit'); + }); + + it('should allow to change row height and reset it', async () => { + await dataGrid.clickGridSettings(); + expect(await dataGrid.getCurrentRowHeightValue()).to.be('Auto fit'); + + await dataGrid.changeRowHeightValue('Single'); + + // toggle the popover + await dataGrid.clickGridSettings(); + await dataGrid.clickGridSettings(); + + expect(await dataGrid.getCurrentRowHeightValue()).to.be('Single'); + + await dataGrid.resetRowHeightValue(); + + expect(await dataGrid.getCurrentRowHeightValue()).to.be('Auto fit'); + + await dataGrid.changeRowHeightValue('Custom'); + + await dataGrid.resetRowHeightValue(); + + expect(await dataGrid.getCurrentRowHeightValue()).to.be('Auto fit'); + }); + + it('should persist the selection after reloading the page', async () => { + await dataGrid.clickGridSettings(); + expect(await dataGrid.getCurrentRowHeightValue()).to.be('Auto fit'); + + await dataGrid.changeRowHeightValue('Single'); + + expect(await dataGrid.getCurrentRowHeightValue()).to.be('Single'); + + await browser.refresh(); + + await PageObjects.discover.waitUntilSearchingHasFinished(); + await dataGrid.clickGridSettings(); + + expect(await dataGrid.getCurrentRowHeightValue()).to.be('Single'); + }); + }); +} diff --git a/test/functional/apps/discover/group2/index.ts b/test/functional/apps/discover/group2/index.ts index 163c6b1a9f205..3d4103c6de85b 100644 --- a/test/functional/apps/discover/group2/index.ts +++ b/test/functional/apps/discover/group2/index.ts @@ -29,6 +29,7 @@ export default function ({ getService, loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./_data_grid_row_navigation')); loadTestFile(require.resolve('./_data_grid_doc_table')); loadTestFile(require.resolve('./_data_grid_copy_to_clipboard')); + loadTestFile(require.resolve('./_data_grid_row_height')); loadTestFile(require.resolve('./_data_grid_pagination')); loadTestFile(require.resolve('./_data_grid_footer')); loadTestFile(require.resolve('./_adhoc_data_views')); diff --git a/test/functional/page_objects/visualize_editor_page.ts b/test/functional/page_objects/visualize_editor_page.ts index e85f560fec909..f6f4f121ad11a 100644 --- a/test/functional/page_objects/visualize_editor_page.ts +++ b/test/functional/page_objects/visualize_editor_page.ts @@ -211,10 +211,21 @@ export class VisualizeEditorPageObject extends FtrService { const input = await this.find.byCssSelector( '[data-test-subj="visEditorPercentileRanks"] input' ); + this.log.debug(`Setting percentile rank value of ${newValue}`); await input.clearValue(); await input.type(newValue); } + public async setPercentileValue(newValue: string, index: number = 0) { + const correctIndex = index * 2 + 1; + const input = await this.find.byCssSelector( + `[data-test-subj="visEditorPercentile"]>div:nth-child(2)>div:nth-child(${correctIndex}) input` + ); + this.log.debug(`Setting percentile value at ${index}th input of ${newValue}`); + await input.clearValueWithKeyboard(); + await input.type(newValue, { charByChar: true }); + } + public async clickEditorSidebarCollapse() { await this.testSubjects.click('collapseSideBarButton'); } diff --git a/test/functional/services/data_grid.ts b/test/functional/services/data_grid.ts index 1f022c890b724..1bdc1b070dc33 100644 --- a/test/functional/services/data_grid.ts +++ b/test/functional/services/data_grid.ts @@ -304,6 +304,27 @@ export class DataGridService extends FtrService { await this.testSubjects.click('gridEditFieldButton'); } + public async clickGridSettings() { + await this.testSubjects.click('dataGridDisplaySelectorButton'); + } + + public async getCurrentRowHeightValue() { + const buttonGroup = await this.testSubjects.find('rowHeightButtonGroup'); + return ( + await buttonGroup.findByCssSelector('.euiButtonGroupButton-isSelected') + ).getVisibleText(); + } + + public async changeRowHeightValue(newValue: string) { + const buttonGroup = await this.testSubjects.find('rowHeightButtonGroup'); + const option = await buttonGroup.findByCssSelector(`[data-text="${newValue}"]`); + await option.click(); + } + + public async resetRowHeightValue() { + await this.testSubjects.click('resetDisplaySelector'); + } + public async getDetailsRow(): Promise { const detailRows = await this.getDetailsRows(); return detailRows[0]; diff --git a/tsconfig.base.json b/tsconfig.base.json index c345a5232b726..2c1168feaf0c5 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -588,6 +588,8 @@ "@kbn/crypto-browser/*": ["packages/kbn-crypto-browser/*"], "@kbn/custom-branding-plugin": ["x-pack/plugins/custom_branding"], "@kbn/custom-branding-plugin/*": ["x-pack/plugins/custom_branding/*"], + "@kbn/custom-integrations": ["packages/kbn-custom-integrations"], + "@kbn/custom-integrations/*": ["packages/kbn-custom-integrations/*"], "@kbn/custom-integrations-plugin": ["src/plugins/custom_integrations"], "@kbn/custom-integrations-plugin/*": ["src/plugins/custom_integrations/*"], "@kbn/cypress-config": ["packages/kbn-cypress-config"], @@ -1606,6 +1608,8 @@ "@kbn/web-worker-stub/*": ["packages/kbn-web-worker-stub/*"], "@kbn/whereis-pkg-cli": ["packages/kbn-whereis-pkg-cli"], "@kbn/whereis-pkg-cli/*": ["packages/kbn-whereis-pkg-cli/*"], + "@kbn/xstate-utils": ["packages/kbn-xstate-utils"], + "@kbn/xstate-utils/*": ["packages/kbn-xstate-utils/*"], "@kbn/yarn-lock-validator": ["packages/kbn-yarn-lock-validator"], "@kbn/yarn-lock-validator/*": ["packages/kbn-yarn-lock-validator/*"], // END AUTOMATED PACKAGE LISTING diff --git a/versions.json b/versions.json index ba9e6cc338097..60225e16760f9 100644 --- a/versions.json +++ b/versions.json @@ -8,17 +8,11 @@ "currentMinor": true }, { - "version": "8.10.0", + "version": "8.10.1", "branch": "8.10", "currentMajor": true, "previousMinor": true }, - { - "version": "8.9.3", - "branch": "8.9", - "currentMajor": true, - "previousMinor": false - }, { "version": "7.17.14", "branch": "7.17", diff --git a/x-pack/examples/alerting_example/public/components/page.tsx b/x-pack/examples/alerting_example/public/components/page.tsx index 2e27e6db00014..da20349a2a879 100644 --- a/x-pack/examples/alerting_example/public/components/page.tsx +++ b/x-pack/examples/alerting_example/public/components/page.tsx @@ -10,13 +10,12 @@ import { withRouter, RouteComponentProps } from 'react-router-dom'; import { EuiPageBody, - EuiPageContent_Deprecated as EuiPageContent, - EuiPageContentBody_Deprecated as EuiPageContentBody, EuiPageHeader, EuiPageHeaderSection, EuiTitle, EuiBreadcrumbs, EuiSpacer, + EuiPageSection, } from '@elastic/eui'; type PageProps = RouteComponentProps & { @@ -54,9 +53,7 @@ export const Page = withRouter(({ title, crumb, children, isHome = false, histor - - {children} - + {children} ); }); diff --git a/x-pack/examples/triggers_actions_ui_example/public/components/page.tsx b/x-pack/examples/triggers_actions_ui_example/public/components/page.tsx index e59d04ffe085e..4a16528bc2d06 100644 --- a/x-pack/examples/triggers_actions_ui_example/public/components/page.tsx +++ b/x-pack/examples/triggers_actions_ui_example/public/components/page.tsx @@ -8,16 +8,7 @@ import React from 'react'; import { useHistory } from 'react-router-dom'; -import { - EuiPageContent_Deprecated as EuiPageContent, - EuiPageContentBody_Deprecated as EuiPageContentBody, - EuiPageBody, - EuiPageHeader, - EuiPageHeaderSection, - EuiTitle, - EuiBreadcrumbs, - EuiSpacer, -} from '@elastic/eui'; +import { EuiPageTemplate, EuiTitle, EuiBreadcrumbs } from '@elastic/eui'; interface PageProps { title: string; @@ -48,19 +39,14 @@ export const Page: React.FC = (props) => { } return ( - - - - -

    {title}

    -
    -
    -
    - - - - {children} - -
    + + + +

    {title}

    +
    + +
    + {children} +
    ); }; diff --git a/x-pack/plugins/actions/docs/openapi/bundled.json b/x-pack/plugins/actions/docs/openapi/bundled.json index 6027a53092de1..000205bddfebd 100644 --- a/x-pack/plugins/actions/docs/openapi/bundled.json +++ b/x-pack/plugins/actions/docs/openapi/bundled.json @@ -60,6 +60,9 @@ { "$ref": "#/components/schemas/create_connector_request_cases_webhook" }, + { + "$ref": "#/components/schemas/create_connector_request_d3security" + }, { "$ref": "#/components/schemas/create_connector_request_email" }, @@ -329,6 +332,9 @@ { "$ref": "#/components/schemas/create_connector_request_cases_webhook" }, + { + "$ref": "#/components/schemas/create_connector_request_d3security" + }, { "$ref": "#/components/schemas/create_connector_request_email" }, @@ -451,6 +457,9 @@ { "$ref": "#/components/schemas/update_connector_request_cases_webhook" }, + { + "$ref": "#/components/schemas/update_connector_request_d3security" + }, { "$ref": "#/components/schemas/update_connector_request_index" }, @@ -1563,6 +1572,66 @@ } } }, + "config_properties_d3security": { + "title": "Connector request properties for a D3 Security connector", + "description": "Defines properties for connectors when type is `.d3security`.", + "type": "object", + "required": [ + "url" + ], + "properties": { + "url": { + "type": "string", + "description": "The D3 Security API request URL. If you are using the `xpack.actions.allowedHosts` setting, add the hostname to the allowed hosts.\n" + } + } + }, + "secrets_properties_d3security": { + "title": "Connector secrets properties for a D3 Security connector", + "description": "Defines secrets for connectors when type is `.d3security`.", + "required": [ + "token" + ], + "type": "object", + "properties": { + "token": { + "type": "string", + "description": "The D3 Security token." + } + } + }, + "create_connector_request_d3security": { + "title": "Create D3 Security connector request", + "description": "The connector uses axios to send a POST request to a D3 Security endpoint.\n", + "type": "object", + "required": [ + "config", + "connector_type_id", + "name", + "secrets" + ], + "properties": { + "config": { + "$ref": "#/components/schemas/config_properties_d3security" + }, + "connector_type_id": { + "type": "string", + "description": "The type of connector.", + "enum": [ + ".d3security" + ], + "example": ".d3security" + }, + "name": { + "type": "string", + "description": "The display name for the connector.", + "example": "my-connector" + }, + "secrets": { + "$ref": "#/components/schemas/secrets_properties_d3security" + } + } + }, "config_properties_email": { "title": "Connector request properties for an email connector", "description": "Defines properties for connectors when type is `.email`.", @@ -2894,6 +2963,50 @@ } } }, + "connector_response_properties_d3security": { + "title": "Connector response properties for a D3 Security connector", + "type": "object", + "required": [ + "config", + "connector_type_id", + "id", + "is_deprecated", + "is_preconfigured", + "name" + ], + "properties": { + "config": { + "$ref": "#/components/schemas/config_properties_d3security" + }, + "connector_type_id": { + "type": "string", + "description": "The type of connector.", + "enum": [ + ".d3security" + ] + }, + "id": { + "type": "string", + "description": "The identifier for the connector." + }, + "is_deprecated": { + "$ref": "#/components/schemas/is_deprecated" + }, + "is_missing_secrets": { + "$ref": "#/components/schemas/is_missing_secrets" + }, + "is_preconfigured": { + "$ref": "#/components/schemas/is_preconfigured" + }, + "is_system_action": { + "$ref": "#/components/schemas/is_system_action" + }, + "name": { + "type": "string", + "description": "The display name for the connector." + } + } + }, "connector_response_properties_email": { "title": "Connector response properties for an email connector", "type": "object", @@ -3641,6 +3754,9 @@ { "$ref": "#/components/schemas/connector_response_properties_cases_webhook" }, + { + "$ref": "#/components/schemas/connector_response_properties_d3security" + }, { "$ref": "#/components/schemas/connector_response_properties_email" }, @@ -3718,6 +3834,27 @@ } } }, + "update_connector_request_d3security": { + "title": "Update D3 Security connector request", + "type": "object", + "required": [ + "config", + "name", + "secrets" + ], + "properties": { + "config": { + "$ref": "#/components/schemas/config_properties_d3security" + }, + "name": { + "type": "string", + "description": "The display name for the connector." + }, + "secrets": { + "$ref": "#/components/schemas/secrets_properties_d3security" + } + } + }, "update_connector_request_index": { "title": "Update index connector request", "type": "object", @@ -3974,6 +4111,7 @@ "description": "The type of connector. For example, `.email`, `.index`, `.jira`, `.opsgenie`, or `.server-log`.", "enum": [ ".cases-webhook", + ".d3security", ".email", ".gen-ai", ".index", @@ -3986,6 +4124,7 @@ ".servicenow-sir", ".server-log", ".slack", + ".slack_api", ".swimlane", ".teams", ".tines", diff --git a/x-pack/plugins/actions/docs/openapi/bundled.yaml b/x-pack/plugins/actions/docs/openapi/bundled.yaml index ee987ebed1568..c2baa9a365adf 100644 --- a/x-pack/plugins/actions/docs/openapi/bundled.yaml +++ b/x-pack/plugins/actions/docs/openapi/bundled.yaml @@ -38,6 +38,7 @@ paths: description: The properties vary depending on the connector type. oneOf: - $ref: '#/components/schemas/create_connector_request_cases_webhook' + - $ref: '#/components/schemas/create_connector_request_d3security' - $ref: '#/components/schemas/create_connector_request_email' - $ref: '#/components/schemas/create_connector_request_genai' - $ref: '#/components/schemas/create_connector_request_index' @@ -186,6 +187,7 @@ paths: description: The properties vary depending on the connector type. oneOf: - $ref: '#/components/schemas/create_connector_request_cases_webhook' + - $ref: '#/components/schemas/create_connector_request_d3security' - $ref: '#/components/schemas/create_connector_request_email' - $ref: '#/components/schemas/create_connector_request_genai' - $ref: '#/components/schemas/create_connector_request_index' @@ -243,6 +245,7 @@ paths: description: The properties vary depending on the connector type. oneOf: - $ref: '#/components/schemas/update_connector_request_cases_webhook' + - $ref: '#/components/schemas/update_connector_request_d3security' - $ref: '#/components/schemas/update_connector_request_index' - $ref: '#/components/schemas/update_connector_request_jira' - $ref: '#/components/schemas/update_connector_request_opsgenie' @@ -948,6 +951,52 @@ components: example: my-connector secrets: $ref: '#/components/schemas/secrets_properties_cases_webhook' + config_properties_d3security: + title: Connector request properties for a D3 Security connector + description: Defines properties for connectors when type is `.d3security`. + type: object + required: + - url + properties: + url: + type: string + description: | + The D3 Security API request URL. If you are using the `xpack.actions.allowedHosts` setting, add the hostname to the allowed hosts. + secrets_properties_d3security: + title: Connector secrets properties for a D3 Security connector + description: Defines secrets for connectors when type is `.d3security`. + required: + - token + type: object + properties: + token: + type: string + description: The D3 Security token. + create_connector_request_d3security: + title: Create D3 Security connector request + description: | + The connector uses axios to send a POST request to a D3 Security endpoint. + type: object + required: + - config + - connector_type_id + - name + - secrets + properties: + config: + $ref: '#/components/schemas/config_properties_d3security' + connector_type_id: + type: string + description: The type of connector. + enum: + - .d3security + example: .d3security + name: + type: string + description: The display name for the connector. + example: my-connector + secrets: + $ref: '#/components/schemas/secrets_properties_d3security' config_properties_email: title: Connector request properties for an email connector description: Defines properties for connectors when type is `.email`. @@ -1981,6 +2030,38 @@ components: name: type: string description: The display name for the connector. + connector_response_properties_d3security: + title: Connector response properties for a D3 Security connector + type: object + required: + - config + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + properties: + config: + $ref: '#/components/schemas/config_properties_d3security' + connector_type_id: + type: string + description: The type of connector. + enum: + - .d3security + id: + type: string + description: The identifier for the connector. + is_deprecated: + $ref: '#/components/schemas/is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/is_preconfigured' + is_system_action: + $ref: '#/components/schemas/is_system_action' + name: + type: string + description: The display name for the connector. connector_response_properties_email: title: Connector response properties for an email connector type: object @@ -2524,6 +2605,7 @@ components: description: The properties vary depending on the connector type. oneOf: - $ref: '#/components/schemas/connector_response_properties_cases_webhook' + - $ref: '#/components/schemas/connector_response_properties_d3security' - $ref: '#/components/schemas/connector_response_properties_email' - $ref: '#/components/schemas/connector_response_properties_index' - $ref: '#/components/schemas/connector_response_properties_jira' @@ -2558,6 +2640,21 @@ components: example: my-connector secrets: $ref: '#/components/schemas/secrets_properties_cases_webhook' + update_connector_request_d3security: + title: Update D3 Security connector request + type: object + required: + - config + - name + - secrets + properties: + config: + $ref: '#/components/schemas/config_properties_d3security' + name: + type: string + description: The display name for the connector. + secrets: + $ref: '#/components/schemas/secrets_properties_d3security' update_connector_request_index: title: Update index connector request type: object @@ -2742,6 +2839,7 @@ components: description: The type of connector. For example, `.email`, `.index`, `.jira`, `.opsgenie`, or `.server-log`. enum: - .cases-webhook + - .d3security - .email - .gen-ai - .index @@ -2754,6 +2852,7 @@ components: - .servicenow-sir - .server-log - .slack + - .slack_api - .swimlane - .teams - .tines diff --git a/x-pack/plugins/actions/docs/openapi/components/schemas/config_properties_d3security.yaml b/x-pack/plugins/actions/docs/openapi/components/schemas/config_properties_d3security.yaml new file mode 100644 index 0000000000000..770e052783118 --- /dev/null +++ b/x-pack/plugins/actions/docs/openapi/components/schemas/config_properties_d3security.yaml @@ -0,0 +1,11 @@ +title: Connector request properties for a D3 Security connector +description: Defines properties for connectors when type is `.d3security`. +type: object +required: + - url +properties: + url: + type: string + description: > + The D3 Security API request URL. + If you are using the `xpack.actions.allowedHosts` setting, add the hostname to the allowed hosts. \ No newline at end of file diff --git a/x-pack/plugins/actions/docs/openapi/components/schemas/connector_response_properties.yaml b/x-pack/plugins/actions/docs/openapi/components/schemas/connector_response_properties.yaml index ef72d88e31480..334fe3fa5cdb3 100644 --- a/x-pack/plugins/actions/docs/openapi/components/schemas/connector_response_properties.yaml +++ b/x-pack/plugins/actions/docs/openapi/components/schemas/connector_response_properties.yaml @@ -2,6 +2,7 @@ title: Connector response properties description: The properties vary depending on the connector type. oneOf: - $ref: 'connector_response_properties_cases_webhook.yaml' + - $ref: 'connector_response_properties_d3security.yaml' - $ref: 'connector_response_properties_email.yaml' - $ref: 'connector_response_properties_index.yaml' - $ref: 'connector_response_properties_jira.yaml' diff --git a/x-pack/plugins/actions/docs/openapi/components/schemas/connector_response_properties_d3security.yaml b/x-pack/plugins/actions/docs/openapi/components/schemas/connector_response_properties_d3security.yaml new file mode 100644 index 0000000000000..694b7c011b84a --- /dev/null +++ b/x-pack/plugins/actions/docs/openapi/components/schemas/connector_response_properties_d3security.yaml @@ -0,0 +1,31 @@ +title: Connector response properties for a D3 Security connector +type: object +required: + - config + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name +properties: + config: + $ref: 'config_properties_d3security.yaml' + connector_type_id: + type: string + description: The type of connector. + enum: + - .d3security + id: + type: string + description: The identifier for the connector. + is_deprecated: + $ref: 'is_deprecated.yaml' + is_missing_secrets: + $ref: 'is_missing_secrets.yaml' + is_preconfigured: + $ref: 'is_preconfigured.yaml' + is_system_action: + $ref: 'is_system_action.yaml' + name: + type: string + description: The display name for the connector. diff --git a/x-pack/plugins/actions/docs/openapi/components/schemas/connector_types.yaml b/x-pack/plugins/actions/docs/openapi/components/schemas/connector_types.yaml index 8b08285f9a0e8..2bbc9f5dabac4 100644 --- a/x-pack/plugins/actions/docs/openapi/components/schemas/connector_types.yaml +++ b/x-pack/plugins/actions/docs/openapi/components/schemas/connector_types.yaml @@ -3,6 +3,7 @@ type: string description: The type of connector. For example, `.email`, `.index`, `.jira`, `.opsgenie`, or `.server-log`. enum: - .cases-webhook + - .d3security - .email - .gen-ai - .index @@ -15,6 +16,7 @@ enum: - .servicenow-sir - .server-log - .slack + - .slack_api - .swimlane - .teams - .tines diff --git a/x-pack/plugins/actions/docs/openapi/components/schemas/create_connector_request_d3security.yaml b/x-pack/plugins/actions/docs/openapi/components/schemas/create_connector_request_d3security.yaml new file mode 100644 index 0000000000000..39cdda80b7dd2 --- /dev/null +++ b/x-pack/plugins/actions/docs/openapi/components/schemas/create_connector_request_d3security.yaml @@ -0,0 +1,24 @@ +title: Create D3 Security connector request +description: > + The connector uses axios to send a POST request to a D3 Security endpoint. +type: object +required: + - config + - connector_type_id + - name + - secrets +properties: + config: + $ref: 'config_properties_d3security.yaml' + connector_type_id: + type: string + description: The type of connector. + enum: + - .d3security + example: .d3security + name: + type: string + description: The display name for the connector. + example: my-connector + secrets: + $ref: 'secrets_properties_d3security.yaml' diff --git a/x-pack/plugins/actions/docs/openapi/components/schemas/secrets_properties_d3security.yaml b/x-pack/plugins/actions/docs/openapi/components/schemas/secrets_properties_d3security.yaml new file mode 100644 index 0000000000000..136d393e7970d --- /dev/null +++ b/x-pack/plugins/actions/docs/openapi/components/schemas/secrets_properties_d3security.yaml @@ -0,0 +1,9 @@ +title: Connector secrets properties for a D3 Security connector +description: Defines secrets for connectors when type is `.d3security`. +required: + - token +type: object +properties: + token: + type: string + description: The D3 Security token. diff --git a/x-pack/plugins/actions/docs/openapi/components/schemas/update_connector_request_d3security.yaml b/x-pack/plugins/actions/docs/openapi/components/schemas/update_connector_request_d3security.yaml new file mode 100644 index 0000000000000..a79a6b4e541dd --- /dev/null +++ b/x-pack/plugins/actions/docs/openapi/components/schemas/update_connector_request_d3security.yaml @@ -0,0 +1,14 @@ +title: Update D3 Security connector request +type: object +required: + - config + - name + - secrets +properties: + config: + $ref: 'config_properties_d3security.yaml' + name: + type: string + description: The display name for the connector. + secrets: + $ref: 'secrets_properties_d3security.yaml' \ No newline at end of file diff --git a/x-pack/plugins/actions/docs/openapi/paths/s@{spaceid}@api@actions@connector.yaml b/x-pack/plugins/actions/docs/openapi/paths/s@{spaceid}@api@actions@connector.yaml index 33786a0871c54..052852471d865 100644 --- a/x-pack/plugins/actions/docs/openapi/paths/s@{spaceid}@api@actions@connector.yaml +++ b/x-pack/plugins/actions/docs/openapi/paths/s@{spaceid}@api@actions@connector.yaml @@ -17,6 +17,7 @@ post: description: The properties vary depending on the connector type. oneOf: - $ref: '../components/schemas/create_connector_request_cases_webhook.yaml' + - $ref: '../components/schemas/create_connector_request_d3security.yaml' - $ref: '../components/schemas/create_connector_request_email.yaml' - $ref: '../components/schemas/create_connector_request_genai.yaml' - $ref: '../components/schemas/create_connector_request_index.yaml' diff --git a/x-pack/plugins/actions/docs/openapi/paths/s@{spaceid}@api@actions@connector@{connectorid}.yaml b/x-pack/plugins/actions/docs/openapi/paths/s@{spaceid}@api@actions@connector@{connectorid}.yaml index f4c1cd3dda868..96ddfa168a270 100644 --- a/x-pack/plugins/actions/docs/openapi/paths/s@{spaceid}@api@actions@connector@{connectorid}.yaml +++ b/x-pack/plugins/actions/docs/openapi/paths/s@{spaceid}@api@actions@connector@{connectorid}.yaml @@ -101,6 +101,7 @@ post: description: The properties vary depending on the connector type. oneOf: - $ref: '../components/schemas/create_connector_request_cases_webhook.yaml' + - $ref: '../components/schemas/create_connector_request_d3security.yaml' - $ref: '../components/schemas/create_connector_request_email.yaml' - $ref: '../components/schemas/create_connector_request_genai.yaml' - $ref: '../components/schemas/create_connector_request_index.yaml' @@ -159,6 +160,7 @@ put: description: The properties vary depending on the connector type. oneOf: - $ref: '../components/schemas/update_connector_request_cases_webhook.yaml' + - $ref: '../components/schemas/update_connector_request_d3security.yaml' # - $ref: '../components/schemas/update_connector_request_email.yaml' # - $ref: '../components/schemas/create_connector_request_genai.yaml' - $ref: '../components/schemas/update_connector_request_index.yaml' diff --git a/x-pack/plugins/alerting/server/alerts_client/alerts_client.test.ts b/x-pack/plugins/alerting/server/alerts_client/alerts_client.test.ts index 2c0e6e0cbf03c..16eaec0889ed4 100644 --- a/x-pack/plugins/alerting/server/alerts_client/alerts_client.test.ts +++ b/x-pack/plugins/alerting/server/alerts_client/alerts_client.test.ts @@ -11,7 +11,6 @@ import { DEFAULT_FLAPPING_SETTINGS, RecoveredActionGroup, RuleAlertData, - RuleNotifyWhen, } from '../types'; import * as LegacyAlertsClientModule from './legacy_alerts_client'; import { LegacyAlertsClient } from './legacy_alerts_client'; @@ -114,7 +113,7 @@ describe('Alerts Client', () => { ruleRunMetricsStore, shouldLogAlerts: false, flappingSettings: DEFAULT_FLAPPING_SETTINGS, - notifyWhen: RuleNotifyWhen.CHANGE, + notifyOnActionGroupChange: true, maintenanceWindowIds: [], }; }); diff --git a/x-pack/plugins/alerting/server/alerts_client/legacy_alerts_client.test.ts b/x-pack/plugins/alerting/server/alerts_client/legacy_alerts_client.test.ts index f8c341e132e51..d723f0d0b64fc 100644 --- a/x-pack/plugins/alerting/server/alerts_client/legacy_alerts_client.test.ts +++ b/x-pack/plugins/alerting/server/alerts_client/legacy_alerts_client.test.ts @@ -6,7 +6,7 @@ */ import { loggingSystemMock } from '@kbn/core/server/mocks'; import { UntypedNormalizedRuleType } from '../rule_type_registry'; -import { AlertInstanceContext, RecoveredActionGroup, RuleNotifyWhen } from '../types'; +import { AlertInstanceContext, RecoveredActionGroup } from '../types'; import { LegacyAlertsClient } from './legacy_alerts_client'; import { createAlertFactory, getPublicAlertFactory } from '../alert/create_alert_factory'; import { Alert } from '../alert/alert'; @@ -283,7 +283,7 @@ describe('Legacy Alerts Client', () => { ruleRunMetricsStore, shouldLogAlerts: true, flappingSettings: DEFAULT_FLAPPING_SETTINGS, - notifyWhen: RuleNotifyWhen.CHANGE, + notifyOnActionGroupChange: true, maintenanceWindowIds: ['window-id1', 'window-id2'], }); @@ -312,7 +312,7 @@ describe('Legacy Alerts Client', () => { lookBackWindow: 20, statusChangeThreshold: 4, }, - RuleNotifyWhen.CHANGE, + true, 'default', {}, { diff --git a/x-pack/plugins/alerting/server/alerts_client/legacy_alerts_client.ts b/x-pack/plugins/alerting/server/alerts_client/legacy_alerts_client.ts index 0375c1bf6867b..b7c17ee9579a8 100644 --- a/x-pack/plugins/alerting/server/alerts_client/legacy_alerts_client.ts +++ b/x-pack/plugins/alerting/server/alerts_client/legacy_alerts_client.ts @@ -136,7 +136,7 @@ export class LegacyAlertsClient< ruleRunMetricsStore, shouldLogAlerts, flappingSettings, - notifyWhen, + notifyOnActionGroupChange, maintenanceWindowIds, }: ProcessAndLogAlertsOpts) { const { @@ -163,7 +163,7 @@ export class LegacyAlertsClient< const alerts = getAlertsForNotification( flappingSettings, - notifyWhen, + notifyOnActionGroupChange, this.options.ruleType.defaultActionGroupId, processedAlertsNew, processedAlertsActive, diff --git a/x-pack/plugins/alerting/server/alerts_client/types.ts b/x-pack/plugins/alerting/server/alerts_client/types.ts index daaaab6add1c9..eccd381bc2a5c 100644 --- a/x-pack/plugins/alerting/server/alerts_client/types.ts +++ b/x-pack/plugins/alerting/server/alerts_client/types.ts @@ -16,7 +16,6 @@ import { SummarizedAlerts, RawAlertInstance, RuleAlertData, - RuleNotifyWhenType, WithoutReservedActionGroups, } from '../types'; import { AlertingEventLogger } from '../lib/alerting_event_logger/alerting_event_logger'; @@ -82,7 +81,7 @@ export interface ProcessAndLogAlertsOpts { shouldLogAlerts: boolean; ruleRunMetricsStore: RuleRunMetricsStore; flappingSettings: RulesSettingsFlappingProperties; - notifyWhen: RuleNotifyWhenType | null; + notifyOnActionGroupChange: boolean; maintenanceWindowIds: string[]; } diff --git a/x-pack/plugins/alerting/server/lib/get_alerts_for_notification.test.ts b/x-pack/plugins/alerting/server/lib/get_alerts_for_notification.test.ts index 2cb820fabed39..04f732426cff5 100644 --- a/x-pack/plugins/alerting/server/lib/get_alerts_for_notification.test.ts +++ b/x-pack/plugins/alerting/server/lib/get_alerts_for_notification.test.ts @@ -9,7 +9,6 @@ import { DEFAULT_FLAPPING_SETTINGS, DISABLE_FLAPPING_SETTINGS } from '../../comm import { getAlertsForNotification } from '.'; import { Alert } from '../alert'; import { alertsWithAnyUUID } from '../test_utils'; -import { RuleNotifyWhen } from '../types'; describe('getAlertsForNotification', () => { test('should set pendingRecoveredCount to zero for all active alerts', () => { @@ -20,7 +19,7 @@ describe('getAlertsForNotification', () => { const { newAlerts, activeAlerts } = getAlertsForNotification( DEFAULT_FLAPPING_SETTINGS, - RuleNotifyWhen.CHANGE, + true, 'default', { '1': alert1, @@ -85,7 +84,7 @@ describe('getAlertsForNotification', () => { currentRecoveredAlerts, } = getAlertsForNotification( DEFAULT_FLAPPING_SETTINGS, - RuleNotifyWhen.CHANGE, + true, 'default', {}, {}, @@ -212,7 +211,7 @@ describe('getAlertsForNotification', () => { const { newAlerts, activeAlerts, recoveredAlerts, currentRecoveredAlerts } = getAlertsForNotification( DISABLE_FLAPPING_SETTINGS, - RuleNotifyWhen.CHANGE, + true, 'default', {}, {}, @@ -337,7 +336,7 @@ describe('getAlertsForNotification', () => { currentRecoveredAlerts, } = getAlertsForNotification( DEFAULT_FLAPPING_SETTINGS, - RuleNotifyWhen.ACTIVE, + false, 'default', {}, {}, diff --git a/x-pack/plugins/alerting/server/lib/get_alerts_for_notification.ts b/x-pack/plugins/alerting/server/lib/get_alerts_for_notification.ts index e25752c4b7b37..4ff8408d67e11 100644 --- a/x-pack/plugins/alerting/server/lib/get_alerts_for_notification.ts +++ b/x-pack/plugins/alerting/server/lib/get_alerts_for_notification.ts @@ -8,12 +8,7 @@ import { keys } from 'lodash'; import { RulesSettingsFlappingProperties } from '../../common/rules_settings'; import { Alert } from '../alert'; -import { - AlertInstanceState, - AlertInstanceContext, - RuleNotifyWhenType, - RuleNotifyWhen, -} from '../types'; +import { AlertInstanceState, AlertInstanceContext } from '../types'; export function getAlertsForNotification< State extends AlertInstanceState, @@ -22,7 +17,7 @@ export function getAlertsForNotification< RecoveryActionGroupId extends string >( flappingSettings: RulesSettingsFlappingProperties, - notifyWhen: RuleNotifyWhenType | null, + notifyOnActionGroupChange: boolean, actionGroupId: string, newAlerts: Record> = {}, activeAlerts: Record> = {}, @@ -62,8 +57,9 @@ export function getAlertsForNotification< ); activeAlerts[id] = newAlert; - // rules with "on status change" should return notifications - if (notifyWhen === RuleNotifyWhen.CHANGE) { + // rule with "on status change" or rule with at least one + // action with "on status change" should return notifications + if (notifyOnActionGroupChange) { currentActiveAlerts[id] = newAlert; } diff --git a/x-pack/plugins/alerting/server/task_runner/execution_handler.test.ts b/x-pack/plugins/alerting/server/task_runner/execution_handler.test.ts index 5125bc67b90ef..22d056f489104 100644 --- a/x-pack/plugins/alerting/server/task_runner/execution_handler.test.ts +++ b/x-pack/plugins/alerting/server/task_runner/execution_handler.test.ts @@ -28,7 +28,7 @@ import { alertingEventLoggerMock } from '../lib/alerting_event_logger/alerting_e import { TaskRunnerContext } from './task_runner_factory'; import { ConcreteTaskInstance } from '@kbn/task-manager-plugin/server'; import { Alert } from '../alert'; -import { AlertInstanceState, AlertInstanceContext } from '../../common'; +import { AlertInstanceState, AlertInstanceContext, RuleNotifyWhen } from '../../common'; import { asSavedObjectExecutionSource } from '@kbn/actions-plugin/server'; import sinon from 'sinon'; import { mockAAD } from './fixtures'; @@ -155,6 +155,7 @@ const generateAlert = ({ throttledActions = {}, lastScheduledActionsGroup = 'default', maintenanceWindowIds, + pendingRecoveredCount, }: { id: number; group?: ActiveActionGroup | 'recovered'; @@ -164,6 +165,7 @@ const generateAlert = ({ throttledActions?: ThrottledActions; lastScheduledActionsGroup?: string; maintenanceWindowIds?: string[]; + pendingRecoveredCount?: number; }) => { const alert = new Alert( String(id), @@ -176,6 +178,7 @@ const generateAlert = ({ group: lastScheduledActionsGroup, actions: throttledActions, }, + pendingRecoveredCount, }, } ); @@ -1778,6 +1781,157 @@ describe('Execution Handler', () => { ); }); + test('does not schedule actions with notifyWhen not set to "on status change" for alerts that are flapping', async () => { + const executionHandler = new ExecutionHandler( + generateExecutionParams({ + ...defaultExecutionParams, + rule: { + ...defaultExecutionParams.rule, + actions: [ + { + ...defaultExecutionParams.rule.actions[0], + frequency: { + summary: false, + notifyWhen: RuleNotifyWhen.ACTIVE, + throttle: null, + }, + }, + ], + }, + }) + ); + + await executionHandler.run({ + ...generateAlert({ id: 1, pendingRecoveredCount: 1, lastScheduledActionsGroup: 'recovered' }), + ...generateAlert({ id: 2, pendingRecoveredCount: 1, lastScheduledActionsGroup: 'recovered' }), + ...generateAlert({ id: 3, pendingRecoveredCount: 1, lastScheduledActionsGroup: 'recovered' }), + }); + + expect(actionsClient.bulkEnqueueExecution).not.toHaveBeenCalled(); + }); + + test('does schedule actions with notifyWhen is set to "on status change" for alerts that are flapping', async () => { + const executionHandler = new ExecutionHandler( + generateExecutionParams({ + ...defaultExecutionParams, + rule: { + ...defaultExecutionParams.rule, + actions: [ + { + ...defaultExecutionParams.rule.actions[0], + frequency: { + summary: false, + notifyWhen: RuleNotifyWhen.CHANGE, + throttle: null, + }, + }, + ], + }, + }) + ); + + await executionHandler.run({ + ...generateAlert({ id: 1, pendingRecoveredCount: 1, lastScheduledActionsGroup: 'recovered' }), + ...generateAlert({ id: 2, pendingRecoveredCount: 1, lastScheduledActionsGroup: 'recovered' }), + ...generateAlert({ id: 3, pendingRecoveredCount: 1, lastScheduledActionsGroup: 'recovered' }), + }); + + expect(actionsClient.bulkEnqueueExecution).toHaveBeenCalledTimes(1); + expect(actionsClient.bulkEnqueueExecution.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + Array [ + Object { + "actionTypeId": "test", + "apiKey": "MTIzOmFiYw==", + "consumer": "rule-consumer", + "executionId": "5f6aa57d-3e22-484e-bae8-cbed868f4d28", + "id": "1", + "params": Object { + "alertVal": "My 1 name-of-alert test1 tag-A,tag-B 1 goes here", + "contextVal": "My goes here", + "foo": true, + "stateVal": "My goes here", + }, + "relatedSavedObjects": Array [ + Object { + "id": "1", + "namespace": "test1", + "type": "alert", + "typeId": "test", + }, + ], + "source": Object { + "source": Object { + "id": "1", + "type": "alert", + }, + "type": "SAVED_OBJECT", + }, + "spaceId": "test1", + }, + Object { + "actionTypeId": "test", + "apiKey": "MTIzOmFiYw==", + "consumer": "rule-consumer", + "executionId": "5f6aa57d-3e22-484e-bae8-cbed868f4d28", + "id": "1", + "params": Object { + "alertVal": "My 1 name-of-alert test1 tag-A,tag-B 2 goes here", + "contextVal": "My goes here", + "foo": true, + "stateVal": "My goes here", + }, + "relatedSavedObjects": Array [ + Object { + "id": "1", + "namespace": "test1", + "type": "alert", + "typeId": "test", + }, + ], + "source": Object { + "source": Object { + "id": "1", + "type": "alert", + }, + "type": "SAVED_OBJECT", + }, + "spaceId": "test1", + }, + Object { + "actionTypeId": "test", + "apiKey": "MTIzOmFiYw==", + "consumer": "rule-consumer", + "executionId": "5f6aa57d-3e22-484e-bae8-cbed868f4d28", + "id": "1", + "params": Object { + "alertVal": "My 1 name-of-alert test1 tag-A,tag-B 3 goes here", + "contextVal": "My goes here", + "foo": true, + "stateVal": "My goes here", + }, + "relatedSavedObjects": Array [ + Object { + "id": "1", + "namespace": "test1", + "type": "alert", + "typeId": "test", + }, + ], + "source": Object { + "source": Object { + "id": "1", + "type": "alert", + }, + "type": "SAVED_OBJECT", + }, + "spaceId": "test1", + }, + ], + ] + `); + }); + describe('rule url', () => { const ruleWithUrl = { ...rule, diff --git a/x-pack/plugins/alerting/server/task_runner/execution_handler.ts b/x-pack/plugins/alerting/server/task_runner/execution_handler.ts index c3002b7efe67a..33c4c93abe111 100644 --- a/x-pack/plugins/alerting/server/task_runner/execution_handler.ts +++ b/x-pack/plugins/alerting/server/task_runner/execution_handler.ts @@ -36,6 +36,7 @@ import { RuleTypeState, SanitizedRule, RuleAlertData, + RuleNotifyWhen, } from '../../common'; import { generateActionHash, @@ -621,6 +622,16 @@ export class ExecutionHandler< ); continue; } + + // only actions with notifyWhen set to "on status change" should return + // notifications for flapping pending recovered alerts + if ( + alert.getPendingRecoveredCount() > 0 && + action.frequency?.notifyWhen !== RuleNotifyWhen.CHANGE + ) { + continue; + } + if (action.group === actionGroup && !this.isAlertMuted(alertId)) { if ( this.isRecoveredAlert(action.group) || diff --git a/x-pack/plugins/alerting/server/task_runner/task_runner.ts b/x-pack/plugins/alerting/server/task_runner/task_runner.ts index 6c871f63065a9..6d3be52cf2e62 100644 --- a/x-pack/plugins/alerting/server/task_runner/task_runner.ts +++ b/x-pack/plugins/alerting/server/task_runner/task_runner.ts @@ -6,7 +6,7 @@ */ import apm from 'elastic-apm-node'; -import { omit } from 'lodash'; +import { omit, some } from 'lodash'; import { UsageCounter } from '@kbn/usage-collection-plugin/server'; import { v4 as uuidv4 } from 'uuid'; import { Logger } from '@kbn/core/server'; @@ -50,6 +50,7 @@ import { MaintenanceWindow, RuleAlertData, SanitizedRule, + RuleNotifyWhen, } from '../../common'; import { NormalizedRuleType, UntypedNormalizedRuleType } from '../rule_type_registry'; import { getEsErrorMessage } from '../lib/errors'; @@ -546,7 +547,9 @@ export class TaskRunner< ruleRunMetricsStore, shouldLogAlerts: this.shouldLogAndScheduleActionsForAlerts(), flappingSettings, - notifyWhen, + notifyOnActionGroupChange: + notifyWhen === RuleNotifyWhen.CHANGE || + some(actions, (action) => action.frequency?.notifyWhen === RuleNotifyWhen.CHANGE), maintenanceWindowIds, }); }); diff --git a/x-pack/plugins/alerting/server/task_runner/task_runner_alerts_client.test.ts b/x-pack/plugins/alerting/server/task_runner/task_runner_alerts_client.test.ts index 98e0643abfd50..cc1d162a1ecc7 100644 --- a/x-pack/plugins/alerting/server/task_runner/task_runner_alerts_client.test.ts +++ b/x-pack/plugins/alerting/server/task_runner/task_runner_alerts_client.test.ts @@ -14,7 +14,6 @@ import { AlertInstanceState, AlertInstanceContext, Rule, - RuleNotifyWhen, RuleAlertData, } from '../types'; import { ConcreteTaskInstance } from '@kbn/task-manager-plugin/server'; @@ -772,7 +771,7 @@ describe('Task Runner', () => { lookBackWindow: 20, statusChangeThreshold: 4, }, - notifyWhen: RuleNotifyWhen.ACTIVE, + notifyOnActionGroupChange: false, maintenanceWindowIds: [], }); expect(alertsClientNotToUse.processAndLogAlerts).not.toHaveBeenCalled(); diff --git a/x-pack/plugins/canvas/common/lib/constants.ts b/x-pack/plugins/canvas/common/lib/constants.ts index fdc6df4c60193..187dfc9f15f8d 100644 --- a/x-pack/plugins/canvas/common/lib/constants.ts +++ b/x-pack/plugins/canvas/common/lib/constants.ts @@ -49,4 +49,3 @@ export const API_ROUTE_SHAREABLE_RUNTIME_DOWNLOAD = `/public/canvas/${SHAREABLE_ export const CANVAS_EMBEDDABLE_CLASSNAME = `canvasEmbeddable`; export const CONTEXT_MENU_TOP_BORDER_CLASSNAME = 'canvasContextMenu--topBorder'; export const API_ROUTE_FUNCTIONS = `${INTERNAL_API_ROUTE}/fns`; -export const HEADER_BANNER_HEIGHT = 32; // This value is also declared in `/src/core/public/_variables.scss` diff --git a/x-pack/plugins/canvas/public/components/workpad/workpad.component.tsx b/x-pack/plugins/canvas/public/components/workpad/workpad.component.tsx index 0d403ec960c80..c5a4f7e1ef60d 100644 --- a/x-pack/plugins/canvas/public/components/workpad/workpad.component.tsx +++ b/x-pack/plugins/canvas/public/components/workpad/workpad.component.tsx @@ -5,16 +5,12 @@ * 2.0. */ -import React, { FC } from 'react'; +import React, { FC, useMemo } from 'react'; import { css } from '@emotion/react'; // @ts-expect-error import { WorkpadPage } from '../workpad_page'; import { Fullscreen } from '../fullscreen'; -import { - HEADER_BANNER_HEIGHT, - WORKPAD_CANVAS_BUFFER, - DEFAULT_WORKPAD_CSS, -} from '../../../common/lib/constants'; +import { WORKPAD_CANVAS_BUFFER, DEFAULT_WORKPAD_CSS } from '../../../common/lib/constants'; import { CommitFn, CanvasPage } from '../../../types'; import { WorkpadShortcuts } from './workpad_shortcuts.component'; @@ -71,7 +67,17 @@ export const Workpad: FC = ({ zoomOut, zoomScale, }) => { - const headerBannerOffset = hasHeaderBanner ? HEADER_BANNER_HEIGHT : 0; + const headerBannerOffset = useMemo(() => { + if (!hasHeaderBanner) return 0; + if (typeof document === 'undefined') return 0; + + // Get the banner height from the CSS variable value + const headerHeightFromCSS = getComputedStyle(document.documentElement).getPropertyValue( + '--kbnHeaderBannerHeight' + ); + // Remove the CSS unit + return parseInt(headerHeightFromCSS, 10); + }, [hasHeaderBanner]); const bufferStyle = { height: isFullscreen ? height : (height + 2 * WORKPAD_CANVAS_BUFFER) * zoomScale, diff --git a/x-pack/plugins/cloud/common/constants.ts b/x-pack/plugins/cloud/common/constants.ts index fc37906299d14..f2009223f8ac1 100644 --- a/x-pack/plugins/cloud/common/constants.ts +++ b/x-pack/plugins/cloud/common/constants.ts @@ -5,7 +5,7 @@ * 2.0. */ -export const ELASTIC_SUPPORT_LINK = 'https://cloud.elastic.co/support'; +export const ELASTIC_SUPPORT_LINK = 'https://support.elastic.co/'; /** * This is the page for managing your snapshots on Cloud. diff --git a/x-pack/plugins/cloud/public/plugin.test.ts b/x-pack/plugins/cloud/public/plugin.test.ts index f7cf7cb527580..9dd0ec9664ba5 100644 --- a/x-pack/plugins/cloud/public/plugin.test.ts +++ b/x-pack/plugins/cloud/public/plugin.test.ts @@ -185,7 +185,7 @@ describe('Cloud Plugin', () => { expect(coreStart.chrome.setHelpSupportUrl).toHaveBeenCalledTimes(1); expect(coreStart.chrome.setHelpSupportUrl.mock.calls[0]).toMatchInlineSnapshot(` Array [ - "https://cloud.elastic.co/support", + "https://support.elastic.co/", ] `); }); diff --git a/x-pack/plugins/cloud_security_posture/public/common/utils/get_vulnerability_reference_url.ts b/x-pack/plugins/cloud_security_posture/public/common/utils/get_vulnerability_reference_url.ts deleted file mode 100644 index b8c6adf2063a7..0000000000000 --- a/x-pack/plugins/cloud_security_posture/public/common/utils/get_vulnerability_reference_url.ts +++ /dev/null @@ -1,17 +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 { Vulnerability } from '../../../common/schemas'; - -export const getVulnerabilityReferenceUrl = (vulnerability: Vulnerability): string | undefined => { - const nvdDomain = 'https://nvd'; - const nvdWebsite = `${nvdDomain}.nist.gov/vuln/detail/${vulnerability?.id}`; - - const vulnerabilityReference = vulnerability?.cvss?.nvd ? nvdWebsite : vulnerability?.reference; - - return vulnerabilityReference; -}; diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/aws_credentials_form/aws_credentials_form.tsx b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/aws_credentials_form/aws_credentials_form.tsx index dc2b46dd364fe..b1774547a6e6d 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/aws_credentials_form/aws_credentials_form.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/aws_credentials_form/aws_credentials_form.tsx @@ -44,8 +44,8 @@ interface AWSSetupInfoContentProps { const AWSSetupInfoContent = ({ integrationLink }: AWSSetupInfoContentProps) => { return ( <> - - + +

    ( <> - - + +

    ( <> - - - + +

    @@ -227,7 +227,6 @@ const AwsAccountTypeSelect = ({ )} - ); }; @@ -248,7 +247,7 @@ const GcpAccountTypeSelect = ({ @@ -274,7 +273,6 @@ const GcpAccountTypeSelect = ({ defaultMessage="Deploying to a single account is suitable for an initial POC. To ensure complete coverage, it is strongly recommended to deploy CSPM at the organization-level, which automatically connects all accounts (both current and future)." /> - ); }; @@ -436,6 +434,13 @@ export const CspPolicyTemplateForm = memo + {/* Defines the name/description */} + updatePolicy({ ...newPolicy, [field]: value })} + /> + + {/* AWS account type selection box */} {input.type === 'cloudbeat/cis_aws' && ( )} - {/* Defines the name/description */} - updatePolicy({ ...newPolicy, [field]: value })} - /> {/* Defines the vars of the enabled input of the active policy template */} { - const referenceUrl = getVulnerabilityReferenceUrl(vulnerability); - return await createDetectionRule({ http, rule: { @@ -144,7 +141,7 @@ export const createDetectionRuleFromVulnerabilityFinding = async ( }, index: [VULNERABILITIES_INDEX_PATTERN], query: generateVulnerabilitiesRuleQuery(vulnerability), - references: referenceUrl ? [referenceUrl] : [], + references: vulnerability.reference ? [vulnerability.reference] : [], name: getVulnerabilityRuleName(vulnerability), description: vulnerability.description, tags: generateVulnerabilitiesTags(vulnerability), diff --git a/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/vulnerabilities_finding_flyout/vulnerability_finding_flyout.tsx b/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/vulnerabilities_finding_flyout/vulnerability_finding_flyout.tsx index 5b26029968e5a..ce5101bc57181 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/vulnerabilities_finding_flyout/vulnerability_finding_flyout.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/vulnerabilities_finding_flyout/vulnerability_finding_flyout.tsx @@ -28,7 +28,6 @@ import { euiThemeVars } from '@kbn/ui-theme'; import { css } from '@emotion/react'; import { HttpSetup } from '@kbn/core-http-browser'; import { TakeAction } from '../../../components/take_action'; -import { getVulnerabilityReferenceUrl } from '../../../common/utils/get_vulnerability_reference_url'; import { truthy } from '../../../../common/utils/helpers'; import { CspInlineDescriptionList } from '../../../components/csp_inline_description_list'; import { VulnerabilityOverviewTab } from './vulnerability_overview_tab'; @@ -158,7 +157,7 @@ export const VulnerabilityFindingFlyout = ({ { defaultMessage: 'Loading' } ); - const vulnerabilityReference = getVulnerabilityReferenceUrl(vulnerabilityRecord.vulnerability); + const vulnerabilityReference = vulnerability?.reference; const createVulnerabilityRuleFn = async (http: HttpSetup) => await createDetectionRuleFromVulnerabilityFinding(http, vulnerabilityRecord.vulnerability); diff --git a/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/installation_stats_collector.ts b/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/installation_stats_collector.ts index 09b197245cd5a..038ed35abac97 100644 --- a/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/installation_stats_collector.ts +++ b/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/installation_stats_collector.ts @@ -25,7 +25,7 @@ const getEnabledInputStreamVars = (packagePolicy: PackagePolicy) => { const getAccountTypeField = ( packagePolicy: PackagePolicy ): CloudSecurityInstallationStats['account_type'] => { - if (packagePolicy.vars?.posture.value !== 'cspm') return; + if (packagePolicy.vars?.posture?.value !== 'cspm') return; const inputStreamVars = getEnabledInputStreamVars(packagePolicy); const cloudProvider = packagePolicy.vars?.deployment?.value; diff --git a/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/register.ts b/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/register.ts index c9495c03eccdb..f41497cd80bb4 100644 --- a/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/register.ts +++ b/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/register.ts @@ -11,7 +11,7 @@ import { CspServerPluginStart, CspServerPluginStartDeps } from '../../../types'; import { getIndicesStats } from './indices_stats_collector'; import { getResourcesStats } from './resources_stats_collector'; import { cspmUsageSchema } from './schema'; -import { CspmUsage } from './types'; +import { CspmUsage, type CloudSecurityUsageCollectorType } from './types'; import { getAccountsStats } from './accounts_stats_collector'; import { getRulesStats } from './rules_stats_collector'; import { getInstallationStats } from './installation_stats_collector'; @@ -35,6 +35,22 @@ export function registerCspmUsageCollector( return true; }, fetch: async (collectorFetchContext: CollectorFetchContext) => { + const awaitPromiseSafe = async ( + taskName: CloudSecurityUsageCollectorType, + promise: Promise + ) => { + try { + const val = await promise; + return val; + } catch (error) { + logger.error(`${taskName} task failed: ${error.message}`); + logger.error(error.stack); + return error; + } + }; + + const esClient = collectorFetchContext.esClient; + const soClient = collectorFetchContext.soClient; const [ indicesStats, accountsStats, @@ -43,24 +59,16 @@ export function registerCspmUsageCollector( installationStats, alertsStats, ] = await Promise.all([ - getIndicesStats( - collectorFetchContext.esClient, - collectorFetchContext.soClient, - coreServices, - logger + awaitPromiseSafe('Indices', getIndicesStats(esClient, soClient, coreServices, logger)), + awaitPromiseSafe('Accounts', getAccountsStats(esClient, logger)), + awaitPromiseSafe('Resources', getResourcesStats(esClient, logger)), + awaitPromiseSafe('Rules', getRulesStats(esClient, logger)), + awaitPromiseSafe( + 'Installation', + getInstallationStats(esClient, soClient, coreServices, logger) ), - getAccountsStats(collectorFetchContext.esClient, logger), - getResourcesStats(collectorFetchContext.esClient, logger), - getRulesStats(collectorFetchContext.esClient, logger), - getInstallationStats( - collectorFetchContext.esClient, - collectorFetchContext.soClient, - coreServices, - logger - ), - getAlertsStats(collectorFetchContext.esClient, logger), + awaitPromiseSafe('Alerts', getAlertsStats(esClient, logger)), ]); - return { indices: indicesStats, accounts_stats: accountsStats, diff --git a/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/types.ts b/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/types.ts index 0c04de498509a..f1162e24d3168 100644 --- a/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/types.ts +++ b/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/types.ts @@ -7,6 +7,14 @@ import { CspStatusCode } from '../../../../common/types'; +export type CloudSecurityUsageCollectorType = + | 'Indices' + | 'Accounts' + | 'Resources' + | 'Rules' + | 'Installation' + | 'Alerts'; + export interface CspmUsage { indices: CspmIndicesStats; resources_stats: CspmResourcesStats[]; diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/schema/errors_accordion/index.tsx b/x-pack/plugins/enterprise_search/public/applications/shared/schema/errors_accordion/index.tsx index 99f3d30c6caae..6b4bcba14fd1d 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/schema/errors_accordion/index.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/shared/schema/errors_accordion/index.tsx @@ -77,8 +77,9 @@ export const SchemaErrorsAccordion: React.FC = ({ diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/components/package_policy_input_stream.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/components/package_policy_input_stream.tsx index 1a13bbcf25367..6b1bfaaaa0961 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/components/package_policy_input_stream.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/components/package_policy_input_stream.tsx @@ -53,7 +53,7 @@ import { sortDatastreamsByDataset } from './sort_datastreams'; const ScrollAnchor = styled.div` display: none; - scroll-margin-top: ${(props) => parseFloat(props.theme.eui.euiHeaderHeightCompensation) * 2}px; + scroll-margin-top: var(--euiFixedHeadersOffset, 0); `; interface Props { diff --git a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/components/package_list_grid/controls.tsx b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/components/package_list_grid/controls.tsx index 08004cadeb46d..cb5c61ff57a14 100644 --- a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/components/package_list_grid/controls.tsx +++ b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/components/package_list_grid/controls.tsx @@ -27,7 +27,7 @@ export const ControlsColumn = ({ controls, title }: ControlsColumnProps) => { ); } return ( - + {titleContent} {controls} diff --git a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/components/package_list_grid/index.tsx b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/components/package_list_grid/index.tsx index 97adcaa7e40a6..19e267d3c2aee 100644 --- a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/components/package_list_grid/index.tsx +++ b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/components/package_list_grid/index.tsx @@ -168,7 +168,7 @@ export const PackageListGrid: FunctionComponent = ({ gutterSize="xl" data-test-subj="epmList.integrationCards" > - + diff --git a/x-pack/plugins/fleet/public/layouts/without_header.tsx b/x-pack/plugins/fleet/public/layouts/without_header.tsx index d9481d44359c2..0f60cb28814a7 100644 --- a/x-pack/plugins/fleet/public/layouts/without_header.tsx +++ b/x-pack/plugins/fleet/public/layouts/without_header.tsx @@ -12,12 +12,8 @@ import { EuiPage, EuiPageBody, EuiSpacer } from '@elastic/eui'; export const Wrapper = styled.div` background-color: ${(props) => props.theme.eui.euiColorEmptyShade}; - // HACK: Kibana introduces a div element around the app component that results in us - // being unable to stretch this Wrapper to full height via flex: 1. This calc sets - // the min height to the viewport size minus the height of the two global Kibana headers. - min-height: calc( - 100vh - ${(props) => parseFloat(props.theme.eui.euiHeaderHeightCompensation) * 2}px - ); + // Set the min height to the viewport size minus the height of any global Kibana headers + min-height: calc(100vh - var(--euiFixedHeadersOffset, 0)); `; export const Page = styled(EuiPage)` diff --git a/x-pack/plugins/infra/public/components/asset_details/components/metadata_explanation.tsx b/x-pack/plugins/infra/public/components/asset_details/components/metadata_explanation.tsx index bdd77916db02f..857dc493041c1 100644 --- a/x-pack/plugins/infra/public/components/asset_details/components/metadata_explanation.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/components/metadata_explanation.tsx @@ -21,7 +21,7 @@ const MetadataExplanationTooltipContent = React.memo(() => { }; return ( - + { iconSize="s" iconColor="subdued" icon="iInCircle" - panelPaddingSize="m" data-test-subj="infraAssetDetailsMetadataPopoverButton" > diff --git a/x-pack/plugins/infra/public/components/asset_details/components/processes_explanation.tsx b/x-pack/plugins/infra/public/components/asset_details/components/processes_explanation.tsx index 5f1af3f9f8a26..5d3f181a85ac1 100644 --- a/x-pack/plugins/infra/public/components/asset_details/components/processes_explanation.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/components/processes_explanation.tsx @@ -6,106 +6,32 @@ */ import React from 'react'; -import { EuiText, EuiLink } from '@elastic/eui'; +import { EuiText } from '@elastic/eui'; import { FormattedDate, FormattedMessage, FormattedTime } from '@kbn/i18n-react'; -import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { useDateRangeProviderContext } from '../hooks/use_date_range'; -import { Popover } from '../tabs/common/popover'; - -const DOCUMENTATION_LINK = - 'https://www.elastic.co/guide/en/observability/current/view-infrastructure-metrics.html'; -const SYSTEM_INTEGRATION_DOCS_LINK = 'https://docs.elastic.co/en/integrations/system'; - -const ProcessesExplanationTooltipContent = React.memo(() => { - const onClick = (e: React.MouseEvent) => { - e.stopPropagation(); - }; - - return ( - -

    - - - - ), - }} - /> -

    -

    - - - - ), - }} - /> -

    -
    - ); -}); export const ProcessesExplanationMessage = () => { const { getDateRangeInTimestamp } = useDateRangeProviderContext(); const dateFromRange = new Date(getDateRangeInTimestamp().to); return ( - - - - - ), - time: ( - - ), - }} - /> - - - - - - - - + + , + time: ( + + ), + }} + /> + ); }; diff --git a/x-pack/plugins/infra/public/components/asset_details/components/top_processes_tooltip.tsx b/x-pack/plugins/infra/public/components/asset_details/components/top_processes_tooltip.tsx new file mode 100644 index 0000000000000..15ca71c79ef52 --- /dev/null +++ b/x-pack/plugins/infra/public/components/asset_details/components/top_processes_tooltip.tsx @@ -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 React from 'react'; +import { i18n } from '@kbn/i18n'; +import { EuiText, EuiLink } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { Popover } from '../tabs/common/popover'; + +const DOCUMENTATION_LINK = + 'https://www.elastic.co/guide/en/observability/current/view-infrastructure-metrics.html'; +const SYSTEM_INTEGRATION_DOCS_LINK = 'https://docs.elastic.co/en/integrations/system'; + +export const TopProcessesTooltip = React.memo(() => { + return ( + + +

    + +

    +

    + + + + ), + }} + /> +

    +

    + + + + ), + }} + /> +

    +
    +
    + ); +}); diff --git a/x-pack/plugins/infra/public/components/asset_details/constants.ts b/x-pack/plugins/infra/public/components/asset_details/constants.ts index cdd5b95082158..a689efe20d5e3 100644 --- a/x-pack/plugins/infra/public/components/asset_details/constants.ts +++ b/x-pack/plugins/infra/public/components/asset_details/constants.ts @@ -5,8 +5,17 @@ * 2.0. */ +import { INTEGRATION_NAME } from './types'; + export const ASSET_DETAILS_FLYOUT_COMPONENT_NAME = 'infraAssetDetailsFlyout'; +export const ASSET_DETAILS_PAGE_COMPONENT_NAME = 'infraAssetDetailsPage'; + export const METRIC_CHART_HEIGHT = 300; export const APM_HOST_FILTER_FIELD = 'host.hostname'; export const ASSET_DETAILS_URL_STATE_KEY = 'assetDetails'; + +export const INTEGRATIONS = { + [INTEGRATION_NAME.nginx]: ['nginx.stubstatus', 'nginx.access'], + [INTEGRATION_NAME.kubernetes]: ['kubernetes.node'], +}; diff --git a/x-pack/plugins/infra/public/components/asset_details/tabs/common/popover.tsx b/x-pack/plugins/infra/public/components/asset_details/tabs/common/popover.tsx index 823f330e742a7..cec9826d00cf7 100644 --- a/x-pack/plugins/infra/public/components/asset_details/tabs/common/popover.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/tabs/common/popover.tsx @@ -5,7 +5,6 @@ * 2.0. */ -import { PanelPaddingSize } from '@elastic/eui'; import { EuiPopover, EuiIcon, type IconType, type IconColor, type IconSize } from '@elastic/eui'; import { css } from '@emotion/react'; import React from 'react'; @@ -16,20 +15,18 @@ export const Popover = ({ icon, iconColor, iconSize, - panelPaddingSize, ...props }: { children: React.ReactNode; icon: IconType; iconColor?: IconColor; iconSize?: IconSize; - panelPaddingSize?: PanelPaddingSize; 'data-test-subj'?: string; }) => { const [isPopoverOpen, { off: closePopover, toggle: togglePopover }] = useBoolean(false); return ( ({ value, @@ -119,23 +119,7 @@ export const Processes = () => {
    - +
    diff --git a/x-pack/plugins/infra/public/components/asset_details/template/page.tsx b/x-pack/plugins/infra/public/components/asset_details/template/page.tsx index b08458731d813..f0a141d393f3f 100644 --- a/x-pack/plugins/infra/public/components/asset_details/template/page.tsx +++ b/x-pack/plugins/infra/public/components/asset_details/template/page.tsx @@ -8,18 +8,55 @@ import { EuiFlexGroup, EuiPageTemplate } from '@elastic/eui'; import { css } from '@emotion/react'; import { i18n } from '@kbn/i18n'; -import React from 'react'; +import React, { useEffect } from 'react'; +import { useKibanaContextForPlugin } from '../../../hooks/use_kibana'; import { useKibanaHeader } from '../../../hooks/use_kibana_header'; import { InfraLoadingPanel } from '../../loading'; +import { ASSET_DETAILS_PAGE_COMPONENT_NAME } from '../constants'; import { Content } from '../content/content'; import { useAssetDetailsRenderPropsContext } from '../hooks/use_asset_details_render_props'; +import { useMetadataStateProviderContext } from '../hooks/use_metadata_state'; import { usePageHeader } from '../hooks/use_page_header'; -import type { ContentTemplateProps } from '../types'; +import { useTabSwitcherContext } from '../hooks/use_tab_switcher'; +import { ContentTemplateProps } from '../types'; +import { getIntegrationsAvailable } from '../utils'; export const Page = ({ header: { tabs = [], links = [] } }: ContentTemplateProps) => { - const { asset, loading } = useAssetDetailsRenderPropsContext(); + const { loading } = useAssetDetailsRenderPropsContext(); + const { metadata, loading: metadataLoading } = useMetadataStateProviderContext(); const { rightSideItems, tabEntries, breadcrumbs } = usePageHeader(tabs, links); + const { asset, assetType } = useAssetDetailsRenderPropsContext(); const { headerHeight } = useKibanaHeader(); + const trackOnlyOnce = React.useRef(false); + + const { activeTabId } = useTabSwitcherContext(); + const { + services: { telemetry }, + } = useKibanaContextForPlugin(); + + useEffect(() => { + if (trackOnlyOnce.current) { + return; + } + if (!metadataLoading && metadata) { + const integrations = getIntegrationsAvailable(metadata); + const telemetryParams = { + componentName: ASSET_DETAILS_PAGE_COMPONENT_NAME, + assetType, + tabId: activeTabId, + }; + + telemetry.reportAssetDetailsPageViewed( + integrations.length > 0 + ? { + ...telemetryParams, + integrations, + } + : telemetryParams + ); + trackOnlyOnce.current = true; + } + }, [activeTabId, assetType, metadata, metadataLoading, telemetry]); return loading ? ( { const fromTs = new Date(from).getTime(); const toTs = new Date(to).getTime(); @@ -21,3 +24,13 @@ export const getDefaultDateRange = () => { to: new Date(now).toISOString(), }; }; + +export const getIntegrationsAvailable = (metadata?: InfraMetadata | null) => { + if (!metadata) { + return []; + } + + return Object.entries(INTEGRATIONS) + .filter(([_, fields]) => metadata?.features?.some((f) => fields.includes(f.name))) + .map(([name]) => name); +}; diff --git a/x-pack/plugins/infra/public/services/telemetry/telemetry_client.mock.ts b/x-pack/plugins/infra/public/services/telemetry/telemetry_client.mock.ts index 604fdcc272493..1f354ecd1670f 100644 --- a/x-pack/plugins/infra/public/services/telemetry/telemetry_client.mock.ts +++ b/x-pack/plugins/infra/public/services/telemetry/telemetry_client.mock.ts @@ -14,4 +14,5 @@ export const createTelemetryClientMock = (): jest.Mocked => ({ reportHostFlyoutFilterAdded: jest.fn(), reportHostsViewTotalHostCountRetrieved: jest.fn(), reportAssetDetailsFlyoutViewed: jest.fn(), + reportAssetDetailsPageViewed: jest.fn(), }); diff --git a/x-pack/plugins/infra/public/services/telemetry/telemetry_client.ts b/x-pack/plugins/infra/public/services/telemetry/telemetry_client.ts index 9107157c9835d..d4acc0a8bd96d 100644 --- a/x-pack/plugins/infra/public/services/telemetry/telemetry_client.ts +++ b/x-pack/plugins/infra/public/services/telemetry/telemetry_client.ts @@ -5,9 +5,10 @@ * 2.0. */ -import { AnalyticsServiceSetup } from '@kbn/core-analytics-server'; +import type { AnalyticsServiceSetup } from '@kbn/core-analytics-server'; import { AssetDetailsFlyoutViewedParams, + AssetDetailsPageViewedParams, HostEntryClickedParams, HostFlyoutFilterActionParams, HostsViewQueryHostsCountRetrievedParams, @@ -65,4 +66,8 @@ export class TelemetryClient implements ITelemetryClient { public reportAssetDetailsFlyoutViewed = (params: AssetDetailsFlyoutViewedParams) => { this.analytics.reportEvent(InfraTelemetryEventTypes.ASSET_DETAILS_FLYOUT_VIEWED, params); }; + + public reportAssetDetailsPageViewed = (params: AssetDetailsPageViewedParams) => { + this.analytics.reportEvent(InfraTelemetryEventTypes.ASSET_DETAILS_PAGE_VIEWED, params); + }; } diff --git a/x-pack/plugins/infra/public/services/telemetry/telemetry_events.ts b/x-pack/plugins/infra/public/services/telemetry/telemetry_events.ts index 56cce313ec219..6ce2d2b827623 100644 --- a/x-pack/plugins/infra/public/services/telemetry/telemetry_events.ts +++ b/x-pack/plugins/infra/public/services/telemetry/telemetry_events.ts @@ -118,21 +118,55 @@ const assetDetailsFlyoutViewed: InfraTelemetryEvent = { componentName: { type: 'keyword', _meta: { - description: 'Hostname for the clicked host.', + description: 'Name of the parent react component for the clicked asset.', optional: false, }, }, assetType: { type: 'keyword', _meta: { - description: 'Cloud provider for the clicked host.', + description: 'Asset type for the clicked asset.', optional: false, }, }, tabId: { type: 'keyword', _meta: { - description: 'Cloud provider for the clicked host.', + description: 'Tab id for the clicked asset.', + optional: true, + }, + }, + }, +}; + +const assetDetailsPageViewed: InfraTelemetryEvent = { + eventType: InfraTelemetryEventTypes.ASSET_DETAILS_PAGE_VIEWED, + schema: { + componentName: { + type: 'keyword', + _meta: { + description: 'Name of the parent react component for the clicked asset.', + optional: false, + }, + }, + assetType: { + type: 'keyword', + _meta: { + description: 'Asset type for the clicked asset.', + optional: false, + }, + }, + tabId: { + type: 'keyword', + _meta: { + description: 'Tab id for the clicked asset.', + optional: true, + }, + }, + integrations: { + type: 'pass_through', + _meta: { + description: 'Integrations enabled for the displayed asset.', optional: true, }, }, @@ -141,6 +175,7 @@ const assetDetailsFlyoutViewed: InfraTelemetryEvent = { export const infraTelemetryEvents = [ assetDetailsFlyoutViewed, + assetDetailsPageViewed, hostsViewQuerySubmittedEvent, hostsEntryClickedEvent, hostFlyoutRemoveFilter, diff --git a/x-pack/plugins/infra/public/services/telemetry/telemetry_service.test.ts b/x-pack/plugins/infra/public/services/telemetry/telemetry_service.test.ts index b3c4b02468ca6..ac450df7dd162 100644 --- a/x-pack/plugins/infra/public/services/telemetry/telemetry_service.test.ts +++ b/x-pack/plugins/infra/public/services/telemetry/telemetry_service.test.ts @@ -185,7 +185,7 @@ describe('TelemetryService', () => { }); describe('#reportAssetDetailsFlyoutViewed', () => { - it('should report asset details viewed with properties', async () => { + it('should report asset details viewed in flyout with properties', async () => { const setupParams = getSetupParams(); service.setup(setupParams); const telemetry = service.start(); @@ -207,4 +207,30 @@ describe('TelemetryService', () => { ); }); }); + + describe('#reportAssetDetailsPageViewed', () => { + it('should report asset details viewed in full page with properties', async () => { + const setupParams = getSetupParams(); + service.setup(setupParams); + const telemetry = service.start(); + + telemetry.reportAssetDetailsPageViewed({ + componentName: 'infraAssetDetailsPage', + assetType: 'host', + tabId: 'overview', + integrations: ['nginx'], + }); + + expect(setupParams.analytics.reportEvent).toHaveBeenCalledTimes(1); + expect(setupParams.analytics.reportEvent).toHaveBeenCalledWith( + InfraTelemetryEventTypes.ASSET_DETAILS_PAGE_VIEWED, + { + componentName: 'infraAssetDetailsPage', + assetType: 'host', + tabId: 'overview', + integrations: ['nginx'], + } + ); + }); + }); }); diff --git a/x-pack/plugins/infra/public/services/telemetry/types.ts b/x-pack/plugins/infra/public/services/telemetry/types.ts index 2ecf8115eaa58..3b1665078ee3a 100644 --- a/x-pack/plugins/infra/public/services/telemetry/types.ts +++ b/x-pack/plugins/infra/public/services/telemetry/types.ts @@ -19,6 +19,7 @@ export enum InfraTelemetryEventTypes { HOST_FLYOUT_FILTER_ADDED = 'Host Flyout Filter Added', HOST_VIEW_TOTAL_HOST_COUNT_RETRIEVED = 'Host View Total Host Count Retrieved', ASSET_DETAILS_FLYOUT_VIEWED = 'Asset Details Flyout Viewed', + ASSET_DETAILS_PAGE_VIEWED = 'Asset Details Page Viewed', } export interface HostsViewQuerySubmittedParams { @@ -47,6 +48,9 @@ export interface AssetDetailsFlyoutViewedParams { componentName: string; tabId?: string; } +export interface AssetDetailsPageViewedParams extends AssetDetailsFlyoutViewedParams { + integrations?: string[]; +} export type InfraTelemetryEventParams = | HostsViewQuerySubmittedParams @@ -62,6 +66,7 @@ export interface ITelemetryClient { reportHostsViewTotalHostCountRetrieved(params: HostsViewQueryHostsCountRetrievedParams): void; reportHostsViewQuerySubmitted(params: HostsViewQuerySubmittedParams): void; reportAssetDetailsFlyoutViewed(params: AssetDetailsFlyoutViewedParams): void; + reportAssetDetailsPageViewed(params: AssetDetailsPageViewedParams): void; } export type InfraTelemetryEvent = @@ -88,4 +93,8 @@ export type InfraTelemetryEvent = | { eventType: InfraTelemetryEventTypes.ASSET_DETAILS_FLYOUT_VIEWED; schema: RootSchema; + } + | { + eventType: InfraTelemetryEventTypes.ASSET_DETAILS_PAGE_VIEWED; + schema: RootSchema; }; diff --git a/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/dimension_editor.tsx b/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/dimension_editor.tsx index 6cb2e1c7c8042..e64f951722ae9 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/dimension_editor.tsx +++ b/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/dimension_editor.tsx @@ -66,6 +66,7 @@ import { DimensionEditorButtonGroups, CalloutWarning, DimensionEditorGroupsOptions, + isLayerChangingDueToDecimalsPercentile, } from './dimensions_editor_helpers'; import type { TemporaryState } from './dimensions_editor_helpers'; import { FieldInput } from './field_input'; @@ -124,11 +125,14 @@ export function DimensionEditor(props: DimensionEditorProps) { const [temporaryState, setTemporaryState] = useState('none'); const [isHelpOpen, setIsHelpOpen] = useState(false); + // If a layer has sampling disabled, assume the toast has already fired in the past const [hasRandomSamplingToastFired, setSamplingToastAsFired] = useState( !isSamplingValueEnabled(state.layers[layerId]) ); + const [hasRankingToastFired, setRankingToastAsFired] = useState(false); + const onHelpClick = () => setIsHelpOpen((prevIsHelpOpen) => !prevIsHelpOpen); const closeHelp = () => setIsHelpOpen(false); @@ -163,6 +167,32 @@ export function DimensionEditor(props: DimensionEditorProps) { [hasRandomSamplingToastFired, layerId, props.notifications.toasts, state.layers] ); + const fireOrResetRankingToast = useCallback( + (newLayer: FormBasedLayer) => { + if (isLayerChangingDueToDecimalsPercentile(state.layers[layerId], newLayer)) { + props.notifications.toasts.add({ + title: i18n.translate('xpack.lens.uiInfo.rankingResetTitle', { + defaultMessage: 'Ranking changed to alphabetical', + }), + text: i18n.translate('xpack.lens.uiInfo.rankingResetToAlphabetical', { + defaultMessage: 'To rank by percentile, use whole numbers only.', + }), + }); + } + // reset the flag if the user switches to another supported operation + setRankingToastAsFired(!hasRankingToastFired); + }, + [hasRankingToastFired, layerId, props.notifications.toasts, state.layers] + ); + + const fireOrResetToastChecks = useCallback( + (newLayer: FormBasedLayer) => { + fireOrResetRandomSamplingToast(newLayer); + fireOrResetRankingToast(newLayer); + }, + [fireOrResetRandomSamplingToast, fireOrResetRankingToast] + ); + const setStateWrapper = useCallback( ( setter: @@ -203,7 +233,7 @@ export function DimensionEditor(props: DimensionEditorProps) { } const newLayer = adjustColumnReferencesForChangedColumn(outputLayer, columnId); // Fire an info toast (eventually) on layer update - fireOrResetRandomSamplingToast(newLayer); + fireOrResetToastChecks(newLayer); return mergeLayer({ state: prevState, @@ -217,7 +247,7 @@ export function DimensionEditor(props: DimensionEditorProps) { } ); }, - [columnId, fireOrResetRandomSamplingToast, layerId, setState, state.layers] + [columnId, fireOrResetToastChecks, layerId, setState, state.layers] ); const incompleteInfo = (state.layers[layerId].incompleteColumns ?? {})[columnId]; @@ -811,7 +841,7 @@ export function DimensionEditor(props: DimensionEditorProps) { field, visualizationGroups: dimensionGroups, }); - fireOrResetRandomSamplingToast(newLayer); + fireOrResetToastChecks(newLayer); updateLayer(newLayer); }} onChooseField={(choice: FieldChoiceWithOperationType) => { @@ -846,7 +876,7 @@ export function DimensionEditor(props: DimensionEditorProps) { } else { newLayer = setter; } - fireOrResetRandomSamplingToast(newLayer); + fireOrResetToastChecks(newLayer); return updateLayer(adjustColumnReferencesForChangedColumn(newLayer, referenceId)); }} validation={validation} diff --git a/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/dimensions_editor_helpers.tsx b/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/dimensions_editor_helpers.tsx index dc02232664ef6..9f2958c581688 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/dimensions_editor_helpers.tsx +++ b/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/dimensions_editor_helpers.tsx @@ -16,15 +16,71 @@ import './dimension_editor.scss'; import React from 'react'; import { i18n } from '@kbn/i18n'; import { EuiCallOut, EuiButtonGroup, EuiFormRow } from '@elastic/eui'; -import { operationDefinitionMap } from '../operations'; +import { nonNullable } from '../../../utils'; +import { + operationDefinitionMap, + type PercentileIndexPatternColumn, + type PercentileRanksIndexPatternColumn, + type TermsIndexPatternColumn, +} from '../operations'; +import { isColumnOfType } from '../operations/definitions/helpers'; +import { FormBasedLayer } from '../types'; export const formulaOperationName = 'formula'; export const staticValueOperationName = 'static_value'; export const quickFunctionsName = 'quickFunctions'; +export const termsOperationName = 'terms'; +export const optionallySortableOperationNames = ['percentile', 'percentile_ranks']; export const nonQuickFunctions = new Set([formulaOperationName, staticValueOperationName]); export type TemporaryState = typeof quickFunctionsName | typeof staticValueOperationName | 'none'; +export function isLayerChangingDueToDecimalsPercentile( + prevLayer: FormBasedLayer, + newLayer: FormBasedLayer +) { + // step 1: find the ranking column in prevState and return its value + const termsRiskyColumns = Object.entries(prevLayer.columns) + .map(([id, column]) => { + if ( + isColumnOfType('terms', column) && + column.params?.orderBy.type === 'column' && + column.params.orderBy.columnId != null + ) { + const rankingColumn = prevLayer.columns[column.params.orderBy.columnId]; + if (isColumnOfType('percentile', rankingColumn)) { + if (Number.isInteger(rankingColumn.params.percentile)) { + return { id, rankId: column.params.orderBy.columnId }; + } + } + if (isColumnOfType('percentile_rank', rankingColumn)) { + if (Number.isInteger(rankingColumn.params.value)) { + return { id, rankId: column.params.orderBy.columnId }; + } + } + } + }) + .filter(nonNullable); + // now check again the terms risky column in the new layer and verify that at + // least one changed due to decimals + const hasChangedDueToDecimals = termsRiskyColumns.some(({ id, rankId }) => { + const termsColumn = newLayer.columns[id]; + if (!isColumnOfType('terms', termsColumn)) { + return false; + } + if (termsColumn.params.orderBy.type === 'alphabetical') { + const rankingColumn = newLayer.columns[rankId]; + if (isColumnOfType('percentile', rankingColumn)) { + return !Number.isInteger(rankingColumn.params.percentile); + } + if (isColumnOfType('percentile_rank', rankingColumn)) { + return !Number.isInteger(rankingColumn.params.value); + } + } + }); + return hasChangedDueToDecimals; +} + export function isQuickFunction(operationType: string) { return !nonQuickFunctions.has(operationType); } diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/helpers.test.ts b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/helpers.test.ts index 8424ea92ae931..560c1e26c59ae 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/helpers.test.ts +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/helpers.test.ts @@ -8,7 +8,7 @@ import { createMockedIndexPattern } from '../../mocks'; import type { FormBasedLayer } from '../../types'; import type { GenericIndexPatternColumn } from './column_types'; -import { getInvalidFieldMessage } from './helpers'; +import { getInvalidFieldMessage, isValidNumber } from './helpers'; import type { TermsIndexPatternColumn } from './terms'; describe('helpers', () => { @@ -248,4 +248,77 @@ describe('helpers', () => { expect(messages).toBeUndefined(); }); }); + + describe('isValidNumber', () => { + it('should work for integers', () => { + const number = 99; + for (const value of [number, `${number}`]) { + expect(isValidNumber(value)).toBeTruthy(); + expect(isValidNumber(value, true)).toBeTruthy(); + expect(isValidNumber(value, false)).toBeTruthy(); + expect(isValidNumber(value, true, number, 1)).toBeTruthy(); + expect(isValidNumber(value, true, number + 1, number)).toBeTruthy(); + expect(isValidNumber(value, false, number, 1)).toBeTruthy(); + expect(isValidNumber(value, false, number + 1, number)).toBeTruthy(); + expect(isValidNumber(value, false, number + 1, number, 2)).toBeTruthy(); + expect(isValidNumber(value, false, number - 1, number - 2)).toBeFalsy(); + } + }); + + it('should work correctly for numeric falsy values', () => { + expect(isValidNumber(0)).toBeTruthy(); + expect(isValidNumber(0, true)).toBeTruthy(); + expect(isValidNumber(0, false)).toBeTruthy(); + expect(isValidNumber(0, true, 1, 0)).toBeTruthy(); + }); + + it('should work for decimals', () => { + const number = 99.9; + for (const value of [number, `${number}`]) { + expect(isValidNumber(value)).toBeTruthy(); + expect(isValidNumber(value, true)).toBeFalsy(); + expect(isValidNumber(value, false)).toBeTruthy(); + expect(isValidNumber(value, true, number, 1)).toBeFalsy(); + expect(isValidNumber(value, true, number + 1, number)).toBeFalsy(); + expect(isValidNumber(value, false, number, 1)).toBeTruthy(); + expect(isValidNumber(value, false, number + 1, number)).toBeTruthy(); + expect(isValidNumber(value, false, number + 1, number, 0)).toBeFalsy(); + expect(isValidNumber(value, false, number + 1, number, 1)).toBeTruthy(); + expect(isValidNumber(value, false, number + 1, number, 2)).toBeTruthy(); + expect(isValidNumber(value, false, number - 1, number - 2)).toBeFalsy(); + } + }); + + it('should work for negative values', () => { + const number = -10.1; + for (const value of [number, `${number}`]) { + expect(isValidNumber(value)).toBeTruthy(); + expect(isValidNumber(value, true)).toBeFalsy(); + expect(isValidNumber(value, false)).toBeTruthy(); + expect(isValidNumber(value, true, number, -20)).toBeFalsy(); + expect(isValidNumber(value, true, number + 1, number)).toBeFalsy(); + expect(isValidNumber(value, false, number, -20)).toBeTruthy(); + expect(isValidNumber(value, false, number + 1, number)).toBeTruthy(); + expect(isValidNumber(value, false, number + 1, number, 0)).toBeFalsy(); + expect(isValidNumber(value, false, number + 1, number, 1)).toBeTruthy(); + expect(isValidNumber(value, false, number + 1, number, 2)).toBeTruthy(); + expect(isValidNumber(value, false, number - 1, number - 2)).toBeFalsy(); + } + }); + + it('should spot invalid values', () => { + for (const value of [NaN, ``, undefined, null, Infinity, -Infinity]) { + expect(isValidNumber(value)).toBeFalsy(); + expect(isValidNumber(value, true)).toBeFalsy(); + expect(isValidNumber(value, false)).toBeFalsy(); + expect(isValidNumber(value, true, 99, 1)).toBeFalsy(); + expect(isValidNumber(value, true, 99, 1)).toBeFalsy(); + expect(isValidNumber(value, false, 99, 1)).toBeFalsy(); + expect(isValidNumber(value, false, 99, 1)).toBeFalsy(); + expect(isValidNumber(value, false, 99, 1, 0)).toBeFalsy(); + expect(isValidNumber(value, false, 99, 1, 1)).toBeFalsy(); + expect(isValidNumber(value, false, 99, 1, 2)).toBeFalsy(); + } + }); + }); }); diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/helpers.tsx b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/helpers.tsx index 6dabd0dc07556..11a4e16a39f44 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/helpers.tsx +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/helpers.tsx @@ -138,11 +138,17 @@ export function getSafeName(name: string, indexPattern: IndexPattern | undefined }); } +function areDecimalsValid(inputValue: string | number, digits: number) { + const [, decimals = ''] = `${inputValue}`.split('.'); + return decimals.length <= digits; +} + export function isValidNumber( inputValue: string | number | null | undefined, integer?: boolean, upperBound?: number, - lowerBound?: number + lowerBound?: number, + digits: number = 2 ) { const inputValueAsNumber = Number(inputValue); return ( @@ -152,7 +158,8 @@ export function isValidNumber( Number.isFinite(inputValueAsNumber) && (!integer || Number.isInteger(inputValueAsNumber)) && (upperBound === undefined || inputValueAsNumber <= upperBound) && - (lowerBound === undefined || inputValueAsNumber >= lowerBound) + (lowerBound === undefined || inputValueAsNumber >= lowerBound) && + areDecimalsValid(inputValue, integer ? 0 : digits) ); } 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 71dc142742af2..3e999269c6d82 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 @@ -654,7 +654,7 @@ describe('percentile', () => { }); }); - it('should not update on invalid input, but show invalid value locally', () => { + it('should update on decimals input up to 2 digits', () => { const updateLayerSpy = jest.fn(); const instance = mount( { instance.update(); + expect(updateLayerSpy).toHaveBeenCalled(); + + expect( + instance + .find('[data-test-subj="lns-indexPattern-percentile-input"]') + .find(EuiRange) + .prop('value') + ).toEqual('12.12'); + }); + + it('should not update on invalid input, but show invalid value locally', () => { + const updateLayerSpy = jest.fn(); + const instance = mount( + + ); + + const input = instance + .find('[data-test-subj="lns-indexPattern-percentile-input"]') + .find(EuiRange); + + act(() => { + input.prop('onChange')!( + { currentTarget: { value: '12.1212312312312312' } } as ChangeEvent, + true + ); + }); + + instance.update(); + expect(updateLayerSpy).not.toHaveBeenCalled(); expect( @@ -692,7 +727,7 @@ describe('percentile', () => { .find('[data-test-subj="lns-indexPattern-percentile-input"]') .find(EuiRange) .prop('value') - ).toEqual('12.12'); + ).toEqual('12.1212312312312312'); }); }); }); diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/percentile.tsx b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/percentile.tsx index 1b98b7bc9b2ae..20e3083a8e717 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/percentile.tsx +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/percentile.tsx @@ -67,6 +67,40 @@ function ofName( } const DEFAULT_PERCENTILE_VALUE = 95; +const ALLOWED_DECIMAL_DIGITS = 4; + +function getInvalidErrorMessage( + value: string | undefined, + isInline: boolean | undefined, + max: number, + min: number +) { + if ( + !isInline && + isValidNumber( + value, + false, + max, + min, + 15 // max supported digits in JS + ) + ) { + return i18n.translate('xpack.lens.indexPattern.percentile.errorMessageTooManyDigits', { + defaultMessage: 'Only {digits} numbers allowed after the decimal point.', + values: { + digits: ALLOWED_DECIMAL_DIGITS, + }, + }); + } + + return i18n.translate('xpack.lens.indexPattern.percentile.errorMessage', { + defaultMessage: 'Percentile has to be an integer between {min} and {max}', + values: { + min, + max, + }, + }); +} const supportedFieldTypes = ['number', 'histogram']; @@ -309,10 +343,13 @@ export const percentileOperation: OperationDefinition< i18n.translate('xpack.lens.indexPattern.percentile.percentileValue', { defaultMessage: 'Percentile', }); + + const step = isInline ? 1 : 0.0001; + const upperBound = isInline ? 99 : 99.9999; const onChange = useCallback( (value) => { if ( - !isValidNumber(value, true, 99, 1) || + !isValidNumber(value, isInline, upperBound, step, ALLOWED_DECIMAL_DIGITS) || Number(value) === currentColumn.params.percentile ) { return; @@ -334,7 +371,7 @@ export const percentileOperation: OperationDefinition< }, } as PercentileIndexPatternColumn); }, - [paramEditorUpdater, currentColumn, indexPattern] + [isInline, upperBound, step, currentColumn, paramEditorUpdater, indexPattern] ); const { inputValue, handleInputChange: handleInputChangeWithoutValidation } = useDebouncedValue< string | undefined @@ -342,7 +379,13 @@ export const percentileOperation: OperationDefinition< onChange, value: String(currentColumn.params.percentile), }); - const inputValueIsValid = isValidNumber(inputValue, true, 99, 1); + const inputValueIsValid = isValidNumber( + inputValue, + isInline, + upperBound, + step, + ALLOWED_DECIMAL_DIGITS + ); const handleInputChange = useCallback( (e) => handleInputChangeWithoutValidation(String(e.currentTarget.value)), @@ -357,12 +400,7 @@ export const percentileOperation: OperationDefinition< display="rowCompressed" fullWidth isInvalid={!inputValueIsValid} - error={ - !inputValueIsValid && - i18n.translate('xpack.lens.indexPattern.percentile.errorMessage', { - defaultMessage: 'Percentile has to be an integer between 1 and 99', - }) - } + error={!inputValueIsValid && getInvalidErrorMessage(inputValue, isInline, upperBound, step)} > {isInline ? ( @@ -382,9 +420,9 @@ export const percentileOperation: OperationDefinition< data-test-subj="lns-indexPattern-percentile-input" compressed value={inputValue ?? ''} - min={1} - max={99} - step={1} + min={step} + max={upperBound} + step={step} onChange={handleInputChange} showInput aria-label={percentileLabel} diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/terms/helpers.ts b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/terms/helpers.ts index d51bff3c21a66..4f3e6c2217eb3 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/terms/helpers.ts +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/terms/helpers.ts @@ -22,6 +22,7 @@ import type { FiltersIndexPatternColumn } from '..'; import type { TermsIndexPatternColumn } from './types'; import type { LastValueIndexPatternColumn } from '../last_value'; import type { PercentileRanksIndexPatternColumn } from '../percentile_ranks'; +import type { PercentileIndexPatternColumn } from '../percentile'; import type { FormBasedLayer } from '../../../types'; import { MULTI_KEY_VISUAL_SEPARATOR, supportedTypes } from './constants'; @@ -231,13 +232,21 @@ function checkLastValue(column: GenericIndexPatternColumn) { ); } +// allow the rank by metric only if the percentile rank value is integer +// https://github.com/elastic/elasticsearch/issues/66677 + +export function isPercentileSortable(column: GenericIndexPatternColumn) { + const isPercentileColumn = isColumnOfType('percentile', column); + return !isPercentileColumn || (isPercentileColumn && Number.isInteger(column.params.percentile)); +} + export function isPercentileRankSortable(column: GenericIndexPatternColumn) { - // allow the rank by metric only if the percentile rank value is integer - // https://github.com/elastic/elasticsearch/issues/66677 + const isPercentileRankColumn = isColumnOfType( + 'percentile_rank', + column + ); return ( - column.operationType !== 'percentile_rank' || - (column.operationType === 'percentile_rank' && - Number.isInteger((column as PercentileRanksIndexPatternColumn).params.value)) + !isPercentileRankColumn || (isPercentileRankColumn && Number.isInteger(column.params.value)) ); } @@ -248,6 +257,7 @@ export function isSortableByColumn(layer: FormBasedLayer, columnId: string) { !column.isBucketed && checkLastValue(column) && isPercentileRankSortable(column) && + isPercentileSortable(column) && !('references' in column) && !isReferenced(layer, columnId) ); diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/terms/index.tsx b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/terms/index.tsx index 4aafe38ea39ee..4b8b5c23da6d1 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/terms/index.tsx +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/terms/index.tsx @@ -45,6 +45,7 @@ import { getFieldsByValidationState, isSortableByColumn, isPercentileRankSortable, + isPercentileSortable, } from './helpers'; import { DEFAULT_MAX_DOC_COUNT, @@ -310,7 +311,11 @@ export const termsOperation: OperationDefinition< const orderColumn = layer.columns[column.params.orderBy.columnId]; orderBy = String(orderedColumnIds.indexOf(column.params.orderBy.columnId)); // percentile rank with non integer value should default to alphabetical order - if (!orderColumn || !isPercentileRankSortable(orderColumn)) { + if ( + !orderColumn || + !isPercentileRankSortable(orderColumn) || + !isPercentileSortable(orderColumn) + ) { orderBy = '_key'; } } diff --git a/x-pack/plugins/lens/public/datasources/form_based/to_expression.ts b/x-pack/plugins/lens/public/datasources/form_based/to_expression.ts index 33bec4c23a1bf..6c216e52a2c33 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/to_expression.ts +++ b/x-pack/plugins/lens/public/datasources/form_based/to_expression.ts @@ -47,11 +47,21 @@ declare global { // esAggs column ID manipulation functions export const extractAggId = (id: string) => id.split('.')[0].split('-')[2]; +// Need a more complex logic for decimals percentiles +function getAggIdPostFixForPercentile(percentile: string, decimals?: string) { + if (!percentile && !decimals) { + return ''; + } + if (!decimals) { + return `.${percentile}`; + } + return `['${percentile}.${decimals}']`; +} const updatePositionIndex = (currentId: string, newIndex: number) => { - const [fullId, percentile] = currentId.split('.'); + const [fullId, percentile, percentileDecimals] = currentId.split('.'); const idParts = fullId.split('-'); idParts[1] = String(newIndex); - return idParts.join('-') + (percentile ? `.${percentile}` : ''); + return idParts.join('-') + getAggIdPostFixForPercentile(percentile, percentileDecimals); }; function getExpressionForLayer( diff --git a/x-pack/plugins/lens/public/shared_components/flyout_container.tsx b/x-pack/plugins/lens/public/shared_components/flyout_container.tsx index 6b970a3e55f38..46a5c5ca39706 100644 --- a/x-pack/plugins/lens/public/shared_components/flyout_container.tsx +++ b/x-pack/plugins/lens/public/shared_components/flyout_container.tsx @@ -98,7 +98,7 @@ export function FlyoutContainer({ ref={panelContainerRef} role="dialog" aria-labelledby="lnsDimensionContainerTitle" - className="lnsDimensionContainer euiFlyout" + className="lnsDimensionContainer" onAnimationEnd={() => { if (isOpen) { // EuiFocusTrap interferes with animating elements with absolute position: diff --git a/x-pack/plugins/lens/public/shared_components/ignore_global_filter/data_view_picker_icon.tsx b/x-pack/plugins/lens/public/shared_components/ignore_global_filter/data_view_picker_icon.tsx index f45db2e7bfa9a..8363a2d0f6530 100644 --- a/x-pack/plugins/lens/public/shared_components/ignore_global_filter/data_view_picker_icon.tsx +++ b/x-pack/plugins/lens/public/shared_components/ignore_global_filter/data_view_picker_icon.tsx @@ -28,7 +28,7 @@ export const getIgnoreGlobalFilterIcon = ({ type={'filterIgnore'} color={color} css={css` - margin-top: 15px; + margin-top: 5px; `} /> ), diff --git a/x-pack/plugins/observability/server/services/slo/fixtures/slo.ts b/x-pack/plugins/observability/server/services/slo/fixtures/slo.ts index bebd153690b50..494c54cd65741 100644 --- a/x-pack/plugins/observability/server/services/slo/fixtures/slo.ts +++ b/x-pack/plugins/observability/server/services/slo/fixtures/slo.ts @@ -58,7 +58,7 @@ export const createKQLCustomIndicator = ( ): Indicator => ({ type: 'sli.kql.custom', params: { - index: 'my-index*', + index: 'my-index*,my-other-index*', filter: 'labels.groupId: group-3', good: 'latency < 300', total: '', @@ -72,7 +72,7 @@ export const createMetricCustomIndicator = ( ): MetricCustomIndicator => ({ type: 'sli.metric.custom', params: { - index: 'my-index*', + index: 'my-index*,my-other-index*', filter: 'labels.groupId: group-3', good: { metrics: [ @@ -95,7 +95,7 @@ export const createHistogramIndicator = ( ): HistogramIndicator => ({ type: 'sli.histogram.custom', params: { - index: 'my-index*', + index: 'my-index*,my-other-index*', filter: 'labels.groupId: group-3', good: { field: 'latency', diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/histogram.test.ts.snap b/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/histogram.test.ts.snap index ba7b00be25841..97850346b4d60 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/histogram.test.ts.snap +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/histogram.test.ts.snap @@ -209,7 +209,10 @@ Object { "deduce_mappings": false, }, "source": Object { - "index": "my-index*", + "index": Array [ + "my-index*", + "my-other-index*", + ], "query": Object { "bool": Object { "minimum_should_match": 1, @@ -449,7 +452,10 @@ Object { "deduce_mappings": false, }, "source": Object { - "index": "my-index*", + "index": Array [ + "my-index*", + "my-other-index*", + ], "query": Object { "bool": Object { "minimum_should_match": 1, diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/kql_custom.test.ts.snap b/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/kql_custom.test.ts.snap index c9815496cdf46..20c3a00ea9b28 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/kql_custom.test.ts.snap +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/kql_custom.test.ts.snap @@ -224,7 +224,10 @@ Object { "deduce_mappings": false, }, "source": Object { - "index": "my-index*", + "index": Array [ + "my-index*", + "my-other-index*", + ], "query": Object { "bool": Object { "minimum_should_match": 1, @@ -438,7 +441,10 @@ Object { "deduce_mappings": false, }, "source": Object { - "index": "my-index*", + "index": Array [ + "my-index*", + "my-other-index*", + ], "query": Object { "bool": Object { "minimum_should_match": 1, diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/metric_custom.test.ts.snap b/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/metric_custom.test.ts.snap index 2a4683cd32995..fdd731df983cb 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/metric_custom.test.ts.snap +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/metric_custom.test.ts.snap @@ -233,7 +233,10 @@ Object { "deduce_mappings": false, }, "source": Object { - "index": "my-index*", + "index": Array [ + "my-index*", + "my-other-index*", + ], "query": Object { "bool": Object { "minimum_should_match": 1, @@ -485,7 +488,10 @@ Object { "deduce_mappings": false, }, "source": Object { - "index": "my-index*", + "index": Array [ + "my-index*", + "my-other-index*", + ], "query": Object { "bool": Object { "minimum_should_match": 1, diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/histogram.ts b/x-pack/plugins/observability/server/services/slo/transform_generators/histogram.ts index 7793123ff1595..aef873ed7e973 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/histogram.ts +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/histogram.ts @@ -14,7 +14,7 @@ import { import { InvalidTransformError } from '../../../errors'; import { getSLOTransformTemplate } from '../../../assets/transform_templates/slo_transform_template'; -import { getElastichsearchQueryOrThrow, TransformGenerator } from '.'; +import { getElastichsearchQueryOrThrow, parseIndex, TransformGenerator } from '.'; import { SLO_DESTINATION_INDEX_NAME, SLO_INGEST_PIPELINE_NAME, @@ -47,7 +47,7 @@ export class HistogramTransformGenerator extends TransformGenerator { private buildSource(slo: SLO, indicator: HistogramIndicator) { const filter = getElastichsearchQueryOrThrow(indicator.params.filter); return { - index: indicator.params.index, + index: parseIndex(indicator.params.index), runtime_mappings: this.buildCommonRuntimeMappings(slo), query: filter, }; diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/kql_custom.ts b/x-pack/plugins/observability/server/services/slo/transform_generators/kql_custom.ts index e44bab97e1b78..1dd162d688eb4 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/kql_custom.ts +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/kql_custom.ts @@ -10,7 +10,7 @@ import { kqlCustomIndicatorSchema, timeslicesBudgetingMethodSchema } from '@kbn/ import { InvalidTransformError } from '../../../errors'; import { getSLOTransformTemplate } from '../../../assets/transform_templates/slo_transform_template'; -import { getElastichsearchQueryOrThrow, TransformGenerator } from '.'; +import { getElastichsearchQueryOrThrow, parseIndex, TransformGenerator } from '.'; import { SLO_DESTINATION_INDEX_NAME, SLO_INGEST_PIPELINE_NAME, @@ -42,7 +42,7 @@ export class KQLCustomTransformGenerator extends TransformGenerator { private buildSource(slo: SLO, indicator: KQLCustomIndicator) { const filter = getElastichsearchQueryOrThrow(indicator.params.filter); return { - index: indicator.params.index, + index: parseIndex(indicator.params.index), runtime_mappings: this.buildCommonRuntimeMappings(slo), query: filter, }; diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/metric_custom.ts b/x-pack/plugins/observability/server/services/slo/transform_generators/metric_custom.ts index 8faa996272e46..024f4403d9479 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/metric_custom.ts +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/metric_custom.ts @@ -10,7 +10,7 @@ import { metricCustomIndicatorSchema, timeslicesBudgetingMethodSchema } from '@k import { InvalidTransformError } from '../../../errors'; import { getSLOTransformTemplate } from '../../../assets/transform_templates/slo_transform_template'; -import { getElastichsearchQueryOrThrow, TransformGenerator } from '.'; +import { getElastichsearchQueryOrThrow, parseIndex, TransformGenerator } from '.'; import { SLO_DESTINATION_INDEX_NAME, SLO_INGEST_PIPELINE_NAME, @@ -45,7 +45,7 @@ export class MetricCustomTransformGenerator extends TransformGenerator { private buildSource(slo: SLO, indicator: MetricCustomIndicator) { const filter = getElastichsearchQueryOrThrow(indicator.params.filter); return { - index: indicator.params.index, + index: parseIndex(indicator.params.index), runtime_mappings: this.buildCommonRuntimeMappings(slo), query: filter, }; diff --git a/x-pack/plugins/observability_onboarding/e2e/cypress/e2e/logs/custom_logs/configure.cy.ts b/x-pack/plugins/observability_onboarding/e2e/cypress/e2e/logs/custom_logs/configure.cy.ts index 0178aca04c344..d4f95d0256870 100644 --- a/x-pack/plugins/observability_onboarding/e2e/cypress/e2e/logs/custom_logs/configure.cy.ts +++ b/x-pack/plugins/observability_onboarding/e2e/cypress/e2e/logs/custom_logs/configure.cy.ts @@ -59,11 +59,11 @@ describe('[Logs onboarding] Custom logs - configure step', () => { .type('myLogs.log'); cy.getByTestSubj('obltOnboardingCustomLogsIntegrationsName').should( 'have.value', - 'myLogs' + 'mylogs' ); cy.getByTestSubj('obltOnboardingCustomLogsDatasetName').should( 'have.value', - 'myLogs' + 'mylogs' ); }); @@ -280,7 +280,7 @@ describe('[Logs onboarding] Custom logs - configure step', () => { }); it('installation fails', () => { - cy.getByTestSubj('obltOnboardingCustomIntegrationUnauthorized').should( + cy.getByTestSubj('obltOnboardingCustomIntegrationErrorCallout').should( 'exist' ); }); @@ -304,8 +304,6 @@ describe('[Logs onboarding] Custom logs - configure step', () => { }); it('installation succeed and user is redirected install elastic agent step', () => { - cy.getByTestSubj('obltOnboardingCustomLogsContinue').click(); - cy.url().should( 'include', '/app/observabilityOnboarding/customLogs/installElasticAgent' @@ -349,7 +347,7 @@ describe('[Logs onboarding] Custom logs - configure step', () => { }); it('user should see the error displayed', () => { - cy.getByTestSubj('obltOnboardingCustomIntegrationUnknownError').should( + cy.getByTestSubj('obltOnboardingCustomIntegrationErrorCallout').should( 'exist' ); }); diff --git a/x-pack/plugins/observability_onboarding/kibana.jsonc b/x-pack/plugins/observability_onboarding/kibana.jsonc index 0379aec27b496..5c1615c3a95ba 100644 --- a/x-pack/plugins/observability_onboarding/kibana.jsonc +++ b/x-pack/plugins/observability_onboarding/kibana.jsonc @@ -7,7 +7,7 @@ "server": true, "browser": true, "configPath": ["xpack", "observability_onboarding"], - "requiredPlugins": ["data", "observability", "observabilityShared", "discover", "share"], + "requiredPlugins": ["data", "observability", "observabilityShared", "discover", "share", "fleet"], "optionalPlugins": ["cloud", "usageCollection"], "requiredBundles": ["kibanaReact"], "extraPublicDirs": ["common"] diff --git a/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/wizard/configure_logs.tsx b/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/wizard/configure_logs.tsx index 798614365d6b0..9a6d83a3c84b3 100644 --- a/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/wizard/configure_logs.tsx +++ b/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/wizard/configure_logs.tsx @@ -7,10 +7,8 @@ import { EuiAccordion, - EuiButton, EuiButtonEmpty, EuiButtonIcon, - EuiCallOut, EuiFieldText, EuiFlexGroup, EuiFlexItem, @@ -27,13 +25,15 @@ import { } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; -import { isEmpty } from 'lodash'; import React, { useCallback, useState } from 'react'; import { - IntegrationError, - IntegrationOptions, - useCreateIntegration, -} from '../../../../hooks/use_create_integration'; + ConnectedCustomIntegrationsButton, + ConnectedCustomIntegrationsForm, + useConsumerCustomIntegrations, + CustomIntegrationsProvider, + Callbacks, +} from '@kbn/custom-integrations'; +import { useKibana } from '@kbn/kibana-react-plugin/public'; import { useWizard } from '.'; import { OptionalFormRow } from '../../../shared/optional_form_row'; import { @@ -42,23 +42,78 @@ import { StepPanelFooter, } from '../../../shared/step_panel'; import { BackButton } from './back_button'; -import { getFilename, replaceSpecialChars } from './get_filename'; +import { getFilename } from './get_filename'; + +const customIntegrationsTestSubjects = { + create: { + integrationName: 'obltOnboardingCustomLogsIntegrationsName', + datasetName: 'obltOnboardingCustomLogsDatasetName', + errorCallout: { + callout: 'obltOnboardingCustomIntegrationErrorCallout', + }, + }, + button: 'obltOnboardingCustomLogsContinue', +}; export function ConfigureLogs() { - const [datasetNameTouched, setDatasetNameTouched] = useState(false); + const { + services: { http }, + } = useKibana(); + + const { goToStep, setState, getState } = useWizard(); + const { integrationName, datasetName, lastCreatedIntegrationOptions } = + getState(); + + const onIntegrationCreation: Callbacks['onIntegrationCreation'] = ( + integrationOptions + ) => { + const { + integrationName: createdIntegrationName, + datasets: createdDatasets, + } = integrationOptions; + setState((state) => ({ + ...state, + integrationName: createdIntegrationName, + datasetName: createdDatasets[0].name, + lastCreatedIntegrationOptions: integrationOptions, + })); + goToStep('installElasticAgent'); + }; + + return ( + + + + ); +} + +export function ConfigureLogsContent() { + const { + dispatchableEvents: { updateCreateFields }, + } = useConsumerCustomIntegrations(); const { euiTheme } = useEuiTheme(); const xsFontSize = useEuiFontSize('xs').fontSize; - const { goToStep, goBack, getState, setState } = useWizard(); + const { goBack, getState, setState } = useWizard(); const wizardState = getState(); - const [integrationName, setIntegrationName] = useState( - wizardState.integrationName - ); - const [integrationNameTouched, setIntegrationNameTouched] = useState(false); - const [integrationError, setIntegrationError] = useState< - IntegrationError | undefined - >(); - const [datasetName, setDatasetName] = useState(wizardState.datasetName); const [serviceName, setServiceName] = useState(wizardState.serviceName); const [logFilePaths, setLogFilePaths] = useState(wizardState.logFilePaths); const [namespace, setNamespace] = useState(wizardState.namespace); @@ -67,63 +122,15 @@ export function ConfigureLogs() { ); const logFilePathNotConfigured = logFilePaths.every((filepath) => !filepath); - const onIntegrationCreationSuccess = useCallback( - (integration: IntegrationOptions) => { - setState((state) => ({ - ...state, - lastCreatedIntegration: integration, - })); - goToStep('installElasticAgent'); - }, - [goToStep, setState] - ); - - const onIntegrationCreationFailure = useCallback( - (error: IntegrationError) => { - setIntegrationError(error); - }, - [setIntegrationError] - ); - - const { createIntegration, createIntegrationRequest } = useCreateIntegration({ - onIntegrationCreationSuccess, - onIntegrationCreationFailure, - initialLastCreatedIntegration: wizardState.lastCreatedIntegration, - }); - - const isCreatingIntegration = createIntegrationRequest.state === 'pending'; - const hasFailedCreatingIntegration = - createIntegrationRequest.state === 'rejected'; - const onContinue = useCallback(() => { setState((state) => ({ ...state, - datasetName, - integrationName, serviceName, logFilePaths: logFilePaths.filter((filepath) => !!filepath), namespace, customConfigurations, })); - createIntegration({ - integrationName, - datasets: [ - { - name: datasetName, - type: 'logs' as const, - }, - ], - }); - }, [ - createIntegration, - customConfigurations, - datasetName, - integrationName, - logFilePaths, - namespace, - serviceName, - setState, - ]); + }, [customConfigurations, logFilePaths, namespace, serviceName, setState]); function addLogFilePath() { setLogFilePaths((prev) => [...prev, '']); @@ -143,60 +150,31 @@ export function ConfigureLogs() { ); if (index === 0) { - setIntegrationName(getFilename(filepath)); - setDatasetName(getFilename(filepath)); + if (updateCreateFields) { + updateCreateFields({ + integrationName: getFilename(filepath).toLowerCase(), + datasets: [ + { + name: getFilename(filepath).toLowerCase(), + type: 'logs' as const, + }, + ], + }); + } } } - const hasNamingCollision = - integrationError && integrationError.type === 'NamingCollision'; - - const isIntegrationNameInvalid = - (integrationNameTouched && - (isEmpty(integrationName) || !isLowerCase(integrationName))) || - hasNamingCollision; - - const integrationNameError = getIntegrationNameError( - integrationName, - integrationNameTouched, - integrationError - ); - - const isDatasetNameInvalid = - datasetNameTouched && (isEmpty(datasetName) || !isLowerCase(datasetName)); - - const datasetNameError = getDatasetNameError(datasetName, datasetNameTouched); - return ( , - - {isCreatingIntegration - ? i18n.translate( - 'xpack.observability_onboarding.steps.loading', - { - defaultMessage: 'Creating integration...', - } - ) - : i18n.translate( - 'xpack.observability_onboarding.steps.continue', - { - defaultMessage: 'Continue', - } - )} - , + testSubj={customIntegrationsTestSubjects.button} + />, ]} /> } @@ -478,214 +456,10 @@ export function ConfigureLogs() { - -

    - {i18n.translate( - 'xpack.observability_onboarding.configureLogs.configureIntegrationDescription', - { - defaultMessage: 'Configure integration', - } - )} -

    -
    - - - - - {i18n.translate( - 'xpack.observability_onboarding.configureLogs.integration.name', - { - defaultMessage: 'Integration name', - } - )} - - - - - - } - helpText={i18n.translate( - 'xpack.observability_onboarding.configureLogs.integration.helper', - { - defaultMessage: - "All lowercase, max 100 chars, special characters will be replaced with '_'.", - } - )} - isInvalid={isIntegrationNameInvalid} - error={integrationNameError} - > - - setIntegrationName(replaceSpecialChars(event.target.value)) - } - isInvalid={isIntegrationNameInvalid} - onInput={() => setIntegrationNameTouched(true)} - data-test-subj="obltOnboardingCustomLogsIntegrationsName" - /> - - - - {i18n.translate( - 'xpack.observability_onboarding.configureLogs.dataset.name', - { - defaultMessage: 'Dataset name', - } - )} - - - - - - } - helpText={i18n.translate( - 'xpack.observability_onboarding.configureLogs.dataset.helper', - { - defaultMessage: - "All lowercase, max 100 chars, special characters will be replaced with '_'.", - } - )} - isInvalid={isDatasetNameInvalid} - error={datasetNameError} - > - - setDatasetName(replaceSpecialChars(event.target.value)) - } - isInvalid={isDatasetNameInvalid} - onInput={() => setDatasetNameTouched(true)} - data-test-subj="obltOnboardingCustomLogsDatasetName" - /> - - - {hasFailedCreatingIntegration && integrationError && ( - <> - - {getIntegrationErrorCallout(integrationError)} - - )} + ); } - -const getIntegrationErrorCallout = (integrationError: IntegrationError) => { - const title = i18n.translate( - 'xpack.observability_onboarding.configureLogs.integrationCreation.error.title', - { defaultMessage: 'Sorry, there was an error' } - ); - - switch (integrationError.type) { - case 'AuthorizationError': - const authorizationDescription = i18n.translate( - 'xpack.observability_onboarding.configureLogs.integrationCreation.error.authorization.description', - { - defaultMessage: - 'This user does not have permissions to create an integration.', - } - ); - return ( - -

    {authorizationDescription}

    -
    - ); - case 'UnknownError': - return ( - -

    {integrationError.message}

    -
    - ); - } -}; - -const isLowerCase = (str: string) => str.toLowerCase() === str; - -const getIntegrationNameError = ( - integrationName: string, - touched: boolean, - integrationError?: IntegrationError -) => { - if (touched && isEmpty(integrationName)) { - return i18n.translate( - 'xpack.observability_onboarding.configureLogs.integration.emptyError', - { defaultMessage: 'An integration name is required.' } - ); - } - if (touched && !isLowerCase(integrationName)) { - return i18n.translate( - 'xpack.observability_onboarding.configureLogs.integration.lowercaseError', - { defaultMessage: 'An integration name should be lowercase.' } - ); - } - if (integrationError && integrationError.type === 'NamingCollision') { - return integrationError.message; - } -}; - -const getDatasetNameError = (datasetName: string, touched: boolean) => { - if (touched && isEmpty(datasetName)) { - return i18n.translate( - 'xpack.observability_onboarding.configureLogs.dataset.emptyError', - { defaultMessage: 'A dataset name is required.' } - ); - } - if (touched && !isLowerCase(datasetName)) { - return i18n.translate( - 'xpack.observability_onboarding.configureLogs.dataset.lowercaseError', - { defaultMessage: 'A dataset name should be lowercase.' } - ); - } -}; diff --git a/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/wizard/index.tsx b/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/wizard/index.tsx index fecd9c4de8384..9fb2f2ecf9536 100644 --- a/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/wizard/index.tsx +++ b/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/wizard/index.tsx @@ -5,8 +5,8 @@ * 2.0. */ +import { CustomIntegrationOptions } from '@kbn/custom-integrations'; import { i18n } from '@kbn/i18n'; -import { IntegrationOptions } from '../../../../hooks/use_create_integration'; import { createWizardContext, Step, @@ -18,7 +18,7 @@ import { SelectLogs } from './select_logs'; interface WizardState { integrationName: string; - lastCreatedIntegration?: IntegrationOptions; + lastCreatedIntegrationOptions?: CustomIntegrationOptions; datasetName: string; serviceName: string; logFilePaths: string[]; diff --git a/x-pack/plugins/observability_onboarding/public/hooks/use_create_integration.ts b/x-pack/plugins/observability_onboarding/public/hooks/use_create_integration.ts deleted file mode 100644 index 15d383cb4aa42..0000000000000 --- a/x-pack/plugins/observability_onboarding/public/hooks/use_create_integration.ts +++ /dev/null @@ -1,123 +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 { useCallback, useState } from 'react'; -import deepEqual from 'react-fast-compare'; -import { useKibana } from '@kbn/kibana-react-plugin/public'; -import { useTrackedPromise } from '@kbn/use-tracked-promise'; -import { i18n } from '@kbn/i18n'; - -export interface IntegrationOptions { - integrationName: string; - datasets: Array<{ - name: string; - type: 'logs'; - }>; -} - -// Errors -const GENERIC_ERROR_MESSAGE = i18n.translate( - 'xpack.observability_onboarding.useCreateIntegration.integrationError.genericError', - { - defaultMessage: 'Unable to create an integration', - } -); - -type ErrorType = 'NamingCollision' | 'AuthorizationError' | 'UnknownError'; -export interface IntegrationError { - type: ErrorType; - message: string; -} - -export const useCreateIntegration = ({ - onIntegrationCreationSuccess, - onIntegrationCreationFailure, - initialLastCreatedIntegration, - deletePreviousIntegration = true, -}: { - integrationOptions?: IntegrationOptions; - onIntegrationCreationSuccess: (integration: IntegrationOptions) => void; - onIntegrationCreationFailure: (error: IntegrationError) => void; - initialLastCreatedIntegration?: IntegrationOptions; - deletePreviousIntegration?: boolean; -}) => { - const { - services: { http }, - } = useKibana(); - const [lastCreatedIntegration, setLastCreatedIntegration] = useState< - IntegrationOptions | undefined - >(initialLastCreatedIntegration); - - const [createIntegrationRequest, callCreateIntegration] = useTrackedPromise( - { - cancelPreviousOn: 'creation', - createPromise: async (integrationOptions) => { - if (lastCreatedIntegration && deletePreviousIntegration) { - await http?.delete( - `/api/fleet/epm/packages/${lastCreatedIntegration.integrationName}/1.0.0`, - {} - ); - } - await http?.post('/api/fleet/epm/custom_integrations', { - body: JSON.stringify(integrationOptions), - }); - - return integrationOptions; - }, - onResolve: (integrationOptions: IntegrationOptions) => { - setLastCreatedIntegration(integrationOptions); - onIntegrationCreationSuccess(integrationOptions!); - }, - onReject: (requestError: any) => { - if (requestError?.body?.statusCode === 409) { - onIntegrationCreationFailure({ - type: 'NamingCollision' as const, - message: requestError.body.message, - }); - } else if (requestError?.body?.statusCode === 403) { - onIntegrationCreationFailure({ - type: 'AuthorizationError' as const, - message: requestError?.body?.message, - }); - } else { - onIntegrationCreationFailure({ - type: 'UnknownError' as const, - message: requestError?.body?.message ?? GENERIC_ERROR_MESSAGE, - }); - } - }, - }, - [ - lastCreatedIntegration, - deletePreviousIntegration, - onIntegrationCreationSuccess, - onIntegrationCreationFailure, - setLastCreatedIntegration, - ] - ); - - const createIntegration = useCallback( - (integrationOptions: IntegrationOptions) => { - // Bypass creating the integration again - if (deepEqual(integrationOptions, lastCreatedIntegration)) { - onIntegrationCreationSuccess(integrationOptions); - } else { - callCreateIntegration(integrationOptions); - } - }, - [ - callCreateIntegration, - lastCreatedIntegration, - onIntegrationCreationSuccess, - ] - ); - - return { - createIntegration, - createIntegrationRequest, - }; -}; diff --git a/x-pack/plugins/observability_onboarding/tsconfig.json b/x-pack/plugins/observability_onboarding/tsconfig.json index d2b4d9a223a2b..3188e63982483 100644 --- a/x-pack/plugins/observability_onboarding/tsconfig.json +++ b/x-pack/plugins/observability_onboarding/tsconfig.json @@ -33,6 +33,7 @@ "@kbn/data-views-plugin", "@kbn/es-query", "@kbn/use-tracked-promise", + "@kbn/custom-integrations", "@kbn/share-plugin", "@kbn/utility-types", ], diff --git a/x-pack/plugins/osquery/common/api/packs/create_pack_route.ts b/x-pack/plugins/osquery/common/api/packs/create_pack_route.ts index 9205668d6f73d..b4f89e7701dd8 100644 --- a/x-pack/plugins/osquery/common/api/packs/create_pack_route.ts +++ b/x-pack/plugins/osquery/common/api/packs/create_pack_route.ts @@ -13,7 +13,7 @@ export const createPackRequestBodySchema = t.type({ description: t.union([t.string, t.undefined]), enabled: t.union([t.boolean, t.undefined]), policy_ids: t.union([t.array(t.string), t.undefined]), - shards: t.record(t.string, toNumberRt), + shards: t.union([t.record(t.string, toNumberRt), t.undefined]), queries: t.record( t.string, t.type({ diff --git a/x-pack/plugins/osquery/cypress/e2e/all/alerts_liked_apps.cy.ts b/x-pack/plugins/osquery/cypress/e2e/all/alerts_liked_apps.cy.ts index 9a9448fc790b0..c100f4c0b7de1 100644 --- a/x-pack/plugins/osquery/cypress/e2e/all/alerts_liked_apps.cy.ts +++ b/x-pack/plugins/osquery/cypress/e2e/all/alerts_liked_apps.cy.ts @@ -16,11 +16,10 @@ import { } from '../../tasks/live_query'; import { closeModalIfVisible, closeToastIfVisible } from '../../tasks/integrations'; import { RESULTS_TABLE, RESULTS_TABLE_BUTTON } from '../../screens/live_query'; -import { ServerlessRoleName } from '../../support/roles'; const UUID_REGEX = '[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}'; -describe('Alert Event Details', { browser: 'electron', tags: ['@ess', '@serverless'] }, () => { +describe('Alert Event Details', { tags: ['@ess', '@serverless'] }, () => { let ruleId: string; let ruleName: string; @@ -37,7 +36,7 @@ describe('Alert Event Details', { browser: 'electron', tags: ['@ess', '@serverle }); beforeEach(() => { - cy.login(ServerlessRoleName.SOC_MANAGER); + cy.login('elastic'); cy.visit('/app/security/rules'); clickRuleName(ruleName); }); diff --git a/x-pack/plugins/osquery/cypress/e2e/all/alerts_response_actions_form.cy.ts b/x-pack/plugins/osquery/cypress/e2e/all/alerts_response_actions_form.cy.ts index cac1e827721da..0d83358ca76b1 100644 --- a/x-pack/plugins/osquery/cypress/e2e/all/alerts_response_actions_form.cy.ts +++ b/x-pack/plugins/osquery/cypress/e2e/all/alerts_response_actions_form.cy.ts @@ -26,172 +26,167 @@ import { typeInECSFieldInput, } from '../../tasks/live_query'; import { closeDateTabIfVisible, closeToastIfVisible } from '../../tasks/integrations'; -import { ServerlessRoleName } from '../../support/roles'; -describe( - 'Alert Event Details - Response Actions Form', - { browser: 'electron', tags: ['@ess', '@serverless'] }, - () => { - let multiQueryPackId: string; - let multiQueryPackName: string; - let ruleId: string; - let ruleName: string; - let packId: string; - let packName: string; - const packData = packFixture(); - const multiQueryPackData = multiQueryPackFixture(); +describe('Alert Event Details - Response Actions Form', { tags: ['@ess', '@serverless'] }, () => { + let multiQueryPackId: string; + let multiQueryPackName: string; + let ruleId: string; + let ruleName: string; + let packId: string; + let packName: string; + const packData = packFixture(); + const multiQueryPackData = multiQueryPackFixture(); - beforeEach(() => { - loadPack(packData).then((data) => { - packId = data.saved_object_id; - packName = data.name; - }); - loadPack(multiQueryPackData).then((data) => { - multiQueryPackId = data.saved_object_id; - multiQueryPackName = data.name; - }); - loadRule().then((data) => { - ruleId = data.id; - ruleName = data.name; - }); - cy.login(ServerlessRoleName.SOC_MANAGER); + beforeEach(() => { + loadPack(packData).then((data) => { + packId = data.saved_object_id; + packName = data.name; + }); + loadPack(multiQueryPackData).then((data) => { + multiQueryPackId = data.saved_object_id; + multiQueryPackName = data.name; }); - afterEach(() => { - cleanupPack(packId); - cleanupPack(multiQueryPackId); - cleanupRule(ruleId); + loadRule().then((data) => { + ruleId = data.id; + ruleName = data.name; }); + cy.login('elastic'); + }); + afterEach(() => { + cleanupPack(packId); + cleanupPack(multiQueryPackId); + cleanupRule(ruleId); + }); - it('adds response actions with osquery with proper validation and form values', () => { - cy.visit('/app/security/rules'); - clickRuleName(ruleName); - cy.getBySel('editRuleSettingsLink').click(); - cy.getBySel('globalLoadingIndicator').should('not.exist'); - closeDateTabIfVisible(); - cy.getBySel('edit-rule-actions-tab').click(); - cy.contains('Response actions are run on each rule execution.'); - cy.getBySel(OSQUERY_RESPONSE_ACTION_ADD_BUTTON).click(); - cy.getBySel(RESPONSE_ACTIONS_ITEM_0).within(() => { - cy.contains('Query is a required field'); - inputQuery('select * from uptime1'); - }); - cy.getBySel(OSQUERY_RESPONSE_ACTION_ADD_BUTTON).click(); - cy.getBySel(RESPONSE_ACTIONS_ITEM_1).within(() => { - cy.contains('Run a set of queries in a pack').click(); - }); - cy.contains('Save changes').click(); - cy.getBySel('response-actions-error') - .within(() => { - cy.contains('Pack is a required field'); - }) - .should('exist'); - cy.getBySel(RESPONSE_ACTIONS_ITEM_1).within(() => { + it('adds response actions with osquery with proper validation and form values', () => { + cy.visit('/app/security/rules'); + clickRuleName(ruleName); + cy.getBySel('editRuleSettingsLink').click(); + cy.getBySel('globalLoadingIndicator').should('not.exist'); + closeDateTabIfVisible(); + cy.getBySel('edit-rule-actions-tab').click(); + cy.contains('Response actions are run on each rule execution.'); + cy.getBySel(OSQUERY_RESPONSE_ACTION_ADD_BUTTON).click(); + cy.getBySel(RESPONSE_ACTIONS_ITEM_0).within(() => { + cy.contains('Query is a required field'); + inputQuery('select * from uptime1'); + }); + cy.getBySel(OSQUERY_RESPONSE_ACTION_ADD_BUTTON).click(); + cy.getBySel(RESPONSE_ACTIONS_ITEM_1).within(() => { + cy.contains('Run a set of queries in a pack').click(); + }); + cy.contains('Save changes').click(); + cy.getBySel('response-actions-error') + .within(() => { cy.contains('Pack is a required field'); - cy.getBySel('comboBoxInput').type(`${packName}{downArrow}{enter}`); - }); + }) + .should('exist'); + cy.getBySel(RESPONSE_ACTIONS_ITEM_1).within(() => { + cy.contains('Pack is a required field'); + cy.getBySel('comboBoxInput').type(`${packName}{downArrow}{enter}`); + }); - cy.getBySel(OSQUERY_RESPONSE_ACTION_ADD_BUTTON).click(); + cy.getBySel(OSQUERY_RESPONSE_ACTION_ADD_BUTTON).click(); - cy.getBySel(RESPONSE_ACTIONS_ITEM_2).within(() => { - cy.contains('Query is a required field'); - inputQuery('select * from uptime'); - cy.contains('Advanced').click(); - typeInECSFieldInput('message{downArrow}{enter}'); - cy.getBySel('osqueryColumnValueSelect').type('days{downArrow}{enter}'); - cy.wait(1000); // wait for the validation to trigger - cypress is way faster than users ;) - }); + cy.getBySel(RESPONSE_ACTIONS_ITEM_2).within(() => { + cy.contains('Query is a required field'); + inputQuery('select * from uptime'); + cy.contains('Advanced').click(); + typeInECSFieldInput('message{downArrow}{enter}'); + cy.getBySel('osqueryColumnValueSelect').type('days{downArrow}{enter}'); + cy.wait(1000); // wait for the validation to trigger - cypress is way faster than users ;) + }); - cy.getBySel('ruleEditSubmitButton').click(); - cy.contains(`${ruleName} was saved`).should('exist'); - closeToastIfVisible(); + cy.getBySel('ruleEditSubmitButton').click(); + cy.contains(`${ruleName} was saved`).should('exist'); + closeToastIfVisible(); - cy.getBySel('editRuleSettingsLink').click(); - cy.getBySel('globalLoadingIndicator').should('not.exist'); - cy.getBySel('edit-rule-actions-tab').click(); - cy.getBySel(RESPONSE_ACTIONS_ITEM_0).within(() => { - cy.contains('select * from uptime1'); - }); - cy.getBySel(RESPONSE_ACTIONS_ITEM_2).within(() => { - cy.contains('select * from uptime'); - cy.contains('Log message optimized for viewing in a log viewer'); - cy.contains('Days of uptime'); - }); - cy.getBySel(RESPONSE_ACTIONS_ITEM_1).within(() => { - cy.contains(packName); - cy.getBySel('comboBoxInput').type('{backspace}{enter}'); - }); - cy.getBySel(RESPONSE_ACTIONS_ITEM_0).within(() => { - cy.contains('select * from uptime1'); - cy.getBySel('remove-response-action').click(); - }); - cy.getBySel(RESPONSE_ACTIONS_ITEM_0).within(() => { - cy.contains('Search for a pack to run'); - cy.contains('Pack is a required field'); - cy.getBySel('comboBoxInput').type(`${packName}{downArrow}{enter}`); - }); - cy.getBySel(RESPONSE_ACTIONS_ITEM_1).within(() => { - cy.contains('select * from uptime'); - cy.contains('Log message optimized for viewing in a log viewer'); - cy.contains('Days of uptime'); - }); - cy.intercept('PUT', '/api/detection_engine/rules').as('saveRuleSingleQuery'); - cy.getBySel('ruleEditSubmitButton').click(); - cy.wait('@saveRuleSingleQuery').should(({ request }) => { - const oneQuery = [ - { - interval: 3600, - query: 'select * from uptime;', - id: Object.keys(packData.queries)[0], - }, - ]; - expect(request.body.response_actions[0].params.queries).to.deep.equal(oneQuery); - }); + cy.getBySel('editRuleSettingsLink').click(); + cy.getBySel('globalLoadingIndicator').should('not.exist'); + cy.getBySel('edit-rule-actions-tab').click(); + cy.getBySel(RESPONSE_ACTIONS_ITEM_0).within(() => { + cy.contains('select * from uptime1'); + }); + cy.getBySel(RESPONSE_ACTIONS_ITEM_2).within(() => { + cy.contains('select * from uptime'); + cy.contains('Log message optimized for viewing in a log viewer'); + cy.contains('Days of uptime'); + }); + cy.getBySel(RESPONSE_ACTIONS_ITEM_1).within(() => { + cy.contains(packName); + cy.getBySel('comboBoxInput').type('{backspace}{enter}'); + }); + cy.getBySel(RESPONSE_ACTIONS_ITEM_0).within(() => { + cy.contains('select * from uptime1'); + cy.getBySel('remove-response-action').click(); + }); + cy.getBySel(RESPONSE_ACTIONS_ITEM_0).within(() => { + cy.contains('Search for a pack to run'); + cy.contains('Pack is a required field'); + cy.getBySel('comboBoxInput').type(`${packName}{downArrow}{enter}`); + }); + cy.getBySel(RESPONSE_ACTIONS_ITEM_1).within(() => { + cy.contains('select * from uptime'); + cy.contains('Log message optimized for viewing in a log viewer'); + cy.contains('Days of uptime'); + }); + cy.intercept('PUT', '/api/detection_engine/rules').as('saveRuleSingleQuery'); + cy.getBySel('ruleEditSubmitButton').click(); + cy.wait('@saveRuleSingleQuery').should(({ request }) => { + const oneQuery = [ + { + interval: 3600, + query: 'select * from uptime;', + id: Object.keys(packData.queries)[0], + }, + ]; + expect(request.body.response_actions[0].params.queries).to.deep.equal(oneQuery); + }); - cy.contains(`${ruleName} was saved`).should('exist'); - closeToastIfVisible(); + cy.contains(`${ruleName} was saved`).should('exist'); + closeToastIfVisible(); - cy.getBySel('editRuleSettingsLink').click(); - cy.getBySel('globalLoadingIndicator').should('not.exist'); - cy.getBySel('edit-rule-actions-tab').click(); - cy.getBySel(RESPONSE_ACTIONS_ITEM_0).within(() => { - cy.contains(packName); - cy.getBySel('comboBoxInput').type(`${multiQueryPackName}{downArrow}{enter}`); - checkActionItemsInResults({ - cases: false, - lens: false, - discover: false, - timeline: false, - }); - }); - cy.getBySel(RESPONSE_ACTIONS_ITEM_1).within(() => { - cy.contains('select * from uptime'); - cy.contains('Log message optimized for viewing in a log viewer'); - cy.contains('Days of uptime'); + cy.getBySel('editRuleSettingsLink').click(); + cy.getBySel('globalLoadingIndicator').should('not.exist'); + cy.getBySel('edit-rule-actions-tab').click(); + cy.getBySel(RESPONSE_ACTIONS_ITEM_0).within(() => { + cy.contains(packName); + cy.getBySel('comboBoxInput').type(`${multiQueryPackName}{downArrow}{enter}`); + checkActionItemsInResults({ + cases: false, + lens: false, + discover: false, + timeline: false, }); - cy.intercept('PUT', '/api/detection_engine/rules').as('saveRuleMultiQuery'); + }); + cy.getBySel(RESPONSE_ACTIONS_ITEM_1).within(() => { + cy.contains('select * from uptime'); + cy.contains('Log message optimized for viewing in a log viewer'); + cy.contains('Days of uptime'); + }); + cy.intercept('PUT', '/api/detection_engine/rules').as('saveRuleMultiQuery'); - cy.contains('Save changes').click(); - cy.wait('@saveRuleMultiQuery').should(({ request }) => { - const threeQueries = [ - { - interval: 3600, - query: 'SELECT * FROM memory_info;', - platform: 'linux', - id: Object.keys(multiQueryPackData.queries)[0], - }, - { - interval: 3600, - query: 'SELECT * FROM system_info;', - id: Object.keys(multiQueryPackData.queries)[1], - }, - { - interval: 10, - query: 'select opera_extensions.* from users join opera_extensions using (uid);', - id: Object.keys(multiQueryPackData.queries)[2], - }, - ]; - expect(request.body.response_actions[0].params.queries).to.deep.equal(threeQueries); - }); + cy.contains('Save changes').click(); + cy.wait('@saveRuleMultiQuery').should(({ request }) => { + const threeQueries = [ + { + interval: 3600, + query: 'SELECT * FROM memory_info;', + platform: 'linux', + id: Object.keys(multiQueryPackData.queries)[0], + }, + { + interval: 3600, + query: 'SELECT * FROM system_info;', + id: Object.keys(multiQueryPackData.queries)[1], + }, + { + interval: 10, + query: 'select opera_extensions.* from users join opera_extensions using (uid);', + id: Object.keys(multiQueryPackData.queries)[2], + }, + ]; + expect(request.body.response_actions[0].params.queries).to.deep.equal(threeQueries); }); - } -); + }); +}); diff --git a/x-pack/plugins/osquery/cypress/tasks/inventory.ts b/x-pack/plugins/osquery/cypress/tasks/inventory.ts index 30ffdede7a347..8ba6fc0702d21 100644 --- a/x-pack/plugins/osquery/cypress/tasks/inventory.ts +++ b/x-pack/plugins/osquery/cypress/tasks/inventory.ts @@ -9,7 +9,7 @@ export const triggerLoadData = () => { cy.getBySel('infraWaffleTimeControlsAutoRefreshButton').should('exist'); cy.wait(1000); cy.getBySel('infraWaffleTimeControlsAutoRefreshButton').click(); - cy.getBySel('nodeContainer').eq(2).should('exist'); + cy.getBySel('nodeContainer').last().should('exist'); cy.getBySel('infraWaffleTimeControlsStopRefreshingButton').click(); - cy.getBySel('nodeContainer').eq(2).click(); + cy.getBySel('nodeContainer').last().click(); }; diff --git a/x-pack/plugins/osquery/server/routes/pack/create_pack_route.ts b/x-pack/plugins/osquery/server/routes/pack/create_pack_route.ts index 8429e7a91f68b..ea94b8783bd45 100644 --- a/x-pack/plugins/osquery/server/routes/pack/create_pack_route.ts +++ b/x-pack/plugins/osquery/server/routes/pack/create_pack_route.ts @@ -67,7 +67,7 @@ export const createPackRoute = (router: IRouter, osqueryContext: OsqueryAppConte const currentUser = await osqueryContext.security.authc.getCurrentUser(request)?.username; // eslint-disable-next-line @typescript-eslint/naming-convention - const { name, description, queries, enabled, policy_ids, shards } = request.body; + const { name, description, queries, enabled, policy_ids, shards = {} } = request.body; const conflictingEntries = await savedObjectsClient.find({ type: packSavedObjectType, filter: `${packSavedObjectType}.attributes.name: "${name}"`, diff --git a/x-pack/plugins/reporting/public/share_context_menu/__snapshots__/screen_capture_panel_content.test.tsx.snap b/x-pack/plugins/reporting/public/share_context_menu/__snapshots__/screen_capture_panel_content.test.tsx.snap index b290215981024..9d95afb5852dd 100644 --- a/x-pack/plugins/reporting/public/share_context_menu/__snapshots__/screen_capture_panel_content.test.tsx.snap +++ b/x-pack/plugins/reporting/public/share_context_menu/__snapshots__/screen_capture_panel_content.test.tsx.snap @@ -94,7 +94,7 @@ exports[`ScreenCapturePanelContent properly renders a view with "canvas" layout style="width: auto; margin-left: -16px; margin-right: -16px;" />
    { if (metrics) { - apmTrans?.setLabel('cpu', metrics.cpu, false); - apmTrans?.setLabel('memory', metrics.memory, false); + apmTrans.setLabel('cpu', metrics.cpu, false); + apmTrans.setLabel('memory', metrics.memory, false); } apmScreenshots?.end(); - apmBuffer = apmTrans?.startSpan('get-buffer', 'output') ?? null; + apmBuffer = apmTrans.startSpan('get-buffer', 'output') ?? null; }), map(({ metrics, results }) => ({ metrics, @@ -63,11 +63,11 @@ export function generatePngObservable( })), tap(({ buffer }) => { logger.debug(`PNG buffer byte length: ${buffer.byteLength}`); - apmTrans?.setLabel('byte-length', buffer.byteLength, false); + apmTrans.setLabel('byte-length', buffer.byteLength, false); }), finalize(() => { apmBuffer?.end(); - apmTrans?.end(); + apmTrans.end(); }) ); } diff --git a/x-pack/plugins/reporting/server/export_types/common/pdf_tracker.ts b/x-pack/plugins/reporting/server/export_types/common/pdf_tracker.ts index 4daba9d40a32d..80d1776f994f3 100644 --- a/x-pack/plugins/reporting/server/export_types/common/pdf_tracker.ts +++ b/x-pack/plugins/reporting/server/export_types/common/pdf_tracker.ts @@ -29,16 +29,16 @@ export function getTracker(): PdfTracker { return { startScreenshots() { - apmScreenshots = apmTrans?.startSpan('screenshots-pipeline', SPANTYPE_SETUP) || null; + apmScreenshots = apmTrans.startSpan('screenshots-pipeline', SPANTYPE_SETUP) || null; }, endScreenshots() { if (apmScreenshots) apmScreenshots.end(); }, setCpuUsage(cpu: number) { - apmTrans?.setLabel('cpu', cpu, false); + apmTrans.setLabel('cpu', cpu, false); }, setMemoryUsage(memory: number) { - apmTrans?.setLabel('memory', memory, false); + apmTrans.setLabel('memory', memory, false); }, end() { if (apmTrans) apmTrans.end(); diff --git a/x-pack/plugins/reporting/server/export_types/png_v2/png_v2.ts b/x-pack/plugins/reporting/server/export_types/png_v2/png_v2.ts index c5ae429bca304..ac297cfd8c02b 100644 --- a/x-pack/plugins/reporting/server/export_types/png_v2/png_v2.ts +++ b/x-pack/plugins/reporting/server/export_types/png_v2/png_v2.ts @@ -83,7 +83,7 @@ export class PngExportType extends ExportType ) => { const jobLogger = this.logger.get(`execute-job:${jobId}`); const apmTrans = apm.startTransaction('execute-job-pdf-v2', REPORTING_TRANSACTION_TYPE); - const apmGetAssets = apmTrans?.startSpan('get-assets', 'setup'); + const apmGetAssets = apmTrans.startSpan('get-assets', 'setup'); let apmGeneratePng: { end: () => void } | null | undefined; const { encryptionKey } = this.config; @@ -100,7 +100,7 @@ export class PngExportType extends ExportType const [locatorParams] = payload.locatorParams; apmGetAssets?.end(); - apmGeneratePng = apmTrans?.startSpan('generate-png-pipeline', 'execute'); + apmGeneratePng = apmTrans.startSpan('generate-png-pipeline', 'execute'); return generatePngObservable( () => diff --git a/x-pack/plugins/reporting/server/export_types/printable_pdf/printable_pdf.ts b/x-pack/plugins/reporting/server/export_types/printable_pdf/printable_pdf.ts index d5dce43deac84..495a635370dc2 100644 --- a/x-pack/plugins/reporting/server/export_types/printable_pdf/printable_pdf.ts +++ b/x-pack/plugins/reporting/server/export_types/printable_pdf/printable_pdf.ts @@ -66,7 +66,7 @@ export class PdfV1ExportType extends ExportType { const jobLogger = this.logger.get(`execute-job:${jobId}`); const apmTrans = apm.startTransaction('execute-job-pdf', REPORTING_TRANSACTION_TYPE); - const apmGetAssets = apmTrans?.startSpan('get-assets', 'setup'); + const apmGetAssets = apmTrans.startSpan('get-assets', 'setup'); let apmGeneratePdf: { end: () => void } | null | undefined; const process$: Observable = of(1).pipe( @@ -82,7 +82,7 @@ export class PdfV1ExportType extends ExportType this.startDeps.reporting.getScreenshots({ @@ -123,7 +123,7 @@ export class PdfV1ExportType extends ExportType ) => { const jobLogger = this.logger.get(`execute-job:${jobId}`); const apmTrans = apm.startTransaction('execute-job-pdf-v2', REPORTING_TRANSACTION_TYPE); - const apmGetAssets = apmTrans?.startSpan('get-assets', 'setup'); + const apmGetAssets = apmTrans.startSpan('get-assets', 'setup'); let apmGeneratePdf: { end: () => void } | null | undefined; const { encryptionKey } = this.config; @@ -103,7 +103,7 @@ export class PdfExportType extends ExportType apmGetAssets?.end(); - apmGeneratePdf = apmTrans?.startSpan('generate-pdf-pipeline', 'execute'); + apmGeneratePdf = apmTrans.startSpan('generate-pdf-pipeline', 'execute'); return generatePdfObservable( this.config, this.getServerInfo(), @@ -149,7 +149,7 @@ export class PdfExportType extends ExportType const stop$ = Rx.fromEventPattern(cancellationToken.on); - apmTrans?.end(); + apmTrans.end(); return Rx.firstValueFrom(process$.pipe(takeUntil(stop$))); }; } diff --git a/x-pack/plugins/screenshotting/server/screenshots/event_logger/index.ts b/x-pack/plugins/screenshotting/server/screenshots/event_logger/index.ts index 96fcb092155fb..d067b99750d19 100644 --- a/x-pack/plugins/screenshotting/server/screenshots/event_logger/index.ts +++ b/x-pack/plugins/screenshotting/server/screenshots/event_logger/index.ts @@ -174,8 +174,8 @@ export class EventLogger { public startTransaction( action: Transactions.SCREENSHOTTING | Transactions.PDF ): TransactionEndFn { - this.transactions[action] = apm.startTransaction(action, PLUGIN_ID); - const transaction = this.transactions[action]; + const transaction = apm.startTransaction(action, PLUGIN_ID); + this.transactions[action] = transaction; this.startTiming(action); this.logEvent(action, 'start', { action }); @@ -184,10 +184,10 @@ export class EventLogger { Object.entries(labels).forEach(([label]) => { const labelField = label as keyof SimpleEvent; const labelValue = labels[labelField]; - transaction?.setLabel(label, labelValue, false); + transaction.setLabel(label, labelValue, false); }); - transaction?.end(); + transaction.end(); this.logEvent(action, 'complete', { ...labels, action }, this.timings[action]); }; diff --git a/x-pack/plugins/screenshotting/server/screenshots/index.test.ts b/x-pack/plugins/screenshotting/server/screenshots/index.test.ts index 8208d7e2c451f..f8bbbc081f38f 100644 --- a/x-pack/plugins/screenshotting/server/screenshots/index.test.ts +++ b/x-pack/plugins/screenshotting/server/screenshots/index.test.ts @@ -28,6 +28,7 @@ import { CONTEXT_ELEMENTATTRIBUTES } from './constants'; * Tests */ describe('Screenshot Observable Pipeline', () => { + const originalCreateLayout = Layouts.createLayout; let driver: ReturnType; let driverFactory: jest.Mocked; let http: ReturnType; @@ -82,13 +83,18 @@ describe('Screenshot Observable Pipeline', () => { screenshots = new Screenshots(driverFactory, logger, packageInfo, http, config, cloud); - jest.spyOn(Layouts, 'createLayout').mockReturnValue(layout); - + // Using this patch instead of using `jest.spyOn`. This way we avoid calling + // `jest.restoraAllMocks()` which removes implementations from other mocks not + // explicit in this test (like apm mock object) + // @ts-expect-error + Layouts.createLayout = () => layout; driver.isPageOpen.mockReturnValue(true); }); afterEach(() => { - jest.restoreAllMocks(); + // @ts-expect-error + Layouts.createLayout = originalCreateLayout; + jest.clearAllMocks(); }); it('pipelines a single url into screenshot and timeRange', async () => { @@ -218,10 +224,6 @@ describe('Screenshot Observable Pipeline', () => { cloud.isCloudEnabled = true; }); - afterEach(() => { - jest.resetAllMocks(); - }); - it('throws an error when OS memory is under 1GB on cloud', async () => { await expect( lastValueFrom( diff --git a/x-pack/plugins/security/server/__snapshots__/prompt_page.test.tsx.snap b/x-pack/plugins/security/server/__snapshots__/prompt_page.test.tsx.snap index b5486ba5d649d..ccedfc1b02171 100644 --- a/x-pack/plugins/security/server/__snapshots__/prompt_page.test.tsx.snap +++ b/x-pack/plugins/security/server/__snapshots__/prompt_page.test.tsx.snap @@ -1,5 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`PromptPage renders as expected with additional scripts 1`] = `"ElasticMockedFonts

    Some Title

    Some Body
    Action#1
    Action#2
    "`; +exports[`PromptPage renders as expected with additional scripts 1`] = `"ElasticMockedFonts

    Some Title

    Some Body
    Action#1
    Action#2
    "`; -exports[`PromptPage renders as expected without additional scripts 1`] = `"ElasticMockedFonts

    Some Title

    Some Body
    Action#1
    Action#2
    "`; +exports[`PromptPage renders as expected without additional scripts 1`] = `"ElasticMockedFonts

    Some Title

    Some Body
    Action#1
    Action#2
    "`; diff --git a/x-pack/plugins/security/server/authentication/__snapshots__/unauthenticated_page.test.tsx.snap b/x-pack/plugins/security/server/authentication/__snapshots__/unauthenticated_page.test.tsx.snap index a752facec0213..b16535269e1c9 100644 --- a/x-pack/plugins/security/server/authentication/__snapshots__/unauthenticated_page.test.tsx.snap +++ b/x-pack/plugins/security/server/authentication/__snapshots__/unauthenticated_page.test.tsx.snap @@ -1,5 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`UnauthenticatedPage renders as expected 1`] = `"ElasticMockedFonts

    We hit an authentication error

    Try logging in again, and if the problem persists, contact your system administrator.

    "`; +exports[`UnauthenticatedPage renders as expected 1`] = `"ElasticMockedFonts

    We hit an authentication error

    Try logging in again, and if the problem persists, contact your system administrator.

    "`; -exports[`UnauthenticatedPage renders as expected with custom title 1`] = `"My Company NameMockedFonts

    We hit an authentication error

    Try logging in again, and if the problem persists, contact your system administrator.

    "`; +exports[`UnauthenticatedPage renders as expected with custom title 1`] = `"My Company NameMockedFonts

    We hit an authentication error

    Try logging in again, and if the problem persists, contact your system administrator.

    "`; diff --git a/x-pack/plugins/security/server/authorization/__snapshots__/reset_session_page.test.tsx.snap b/x-pack/plugins/security/server/authorization/__snapshots__/reset_session_page.test.tsx.snap index cc55a03d84555..255cc8b4963a0 100644 --- a/x-pack/plugins/security/server/authorization/__snapshots__/reset_session_page.test.tsx.snap +++ b/x-pack/plugins/security/server/authorization/__snapshots__/reset_session_page.test.tsx.snap @@ -1,5 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`ResetSessionPage renders as expected 1`] = `"ElasticMockedFonts

    You do not have permission to access the requested page

    Either go back to the previous page or log in as a different user.

    "`; +exports[`ResetSessionPage renders as expected 1`] = `"ElasticMockedFonts

    You do not have permission to access the requested page

    Either go back to the previous page or log in as a different user.

    "`; -exports[`ResetSessionPage renders as expected with custom page title 1`] = `"My Company NameMockedFonts

    You do not have permission to access the requested page

    Either go back to the previous page or log in as a different user.

    "`; +exports[`ResetSessionPage renders as expected with custom page title 1`] = `"My Company NameMockedFonts

    You do not have permission to access the requested page

    Either go back to the previous page or log in as a different user.

    "`; diff --git a/x-pack/plugins/security_solution/public/app/404.tsx b/x-pack/plugins/security_solution/public/app/404.tsx index 562a542bb2a06..ce77baa895f12 100644 --- a/x-pack/plugins/security_solution/public/app/404.tsx +++ b/x-pack/plugins/security_solution/public/app/404.tsx @@ -8,13 +8,13 @@ import React from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; -import { EuiEmptyPrompt, EuiPageTemplate_Deprecated as EuiPageTemplate } from '@elastic/eui'; +import { EuiPageTemplate } from '@elastic/eui'; import { SecuritySolutionPageWrapper } from '../common/components/page_wrapper'; export const NotFoundPage = React.memo(() => ( - - + props.theme.eui.euiZHeaderBelowDataGrid}; - // TOP location is declared in src/public/rendering/_base.scss to keep in line with Kibana Chrome + top: var(--euiFixedHeadersOffset, 0); `; export const GlobalKQLHeader = React.memo(() => { diff --git a/x-pack/plugins/security_solution/public/detections/components/rules/accordion_title/index.tsx b/x-pack/plugins/security_solution/public/detections/components/rules/accordion_title/index.tsx index 8e25d444ebd2b..86280bd98d58f 100644 --- a/x-pack/plugins/security_solution/public/detections/components/rules/accordion_title/index.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/rules/accordion_title/index.tsx @@ -21,7 +21,7 @@ const AccordionTitleComponent: React.FC = ({ name, title, t - +
    {title}
    diff --git a/x-pack/plugins/security_solution/public/management/components/administration_list_page.tsx b/x-pack/plugins/security_solution/public/management/components/administration_list_page.tsx index d8d5abbacf94f..a957ca2f93764 100644 --- a/x-pack/plugins/security_solution/public/management/components/administration_list_page.tsx +++ b/x-pack/plugins/security_solution/public/management/components/administration_list_page.tsx @@ -10,8 +10,7 @@ import React, { memo, useMemo } from 'react'; import type { CommonProps } from '@elastic/eui'; import { EuiPageHeader, - EuiPageContent_Deprecated as EuiPageContent, - EuiPageContentBody_Deprecated as EuiPageContentBody, + EuiPageSection, EuiFlexGroup, EuiFlexItem, EuiTitle, @@ -77,16 +76,9 @@ export const AdministrationListPage: FC )} - - - {children} - + + {children} +
    ); } diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_execute_action/execute_action_host_response.test.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_execute_action/execute_action_host_response.test.tsx index ea91afe44afdd..04958e60b4de8 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_execute_action/execute_action_host_response.test.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_execute_action/execute_action_host_response.test.tsx @@ -58,8 +58,8 @@ describe('When using the `ExecuteActionHostResponse` component', () => { it('should show execute context accordion as `closed`', async () => { render(); - expect(renderResult.getByTestId('test-executeResponseOutput-context').className).toEqual( - 'euiAccordion' + expect(renderResult.getByTestId('test-executeResponseOutput-context').className).not.toContain( + 'euiAccordion-isOpen' ); }); diff --git a/x-pack/plugins/security_solution/public/management/components/management_empty_state_wrapper.tsx b/x-pack/plugins/security_solution/public/management/components/management_empty_state_wrapper.tsx index db25aea95f917..162b8a19be6c4 100644 --- a/x-pack/plugins/security_solution/public/management/components/management_empty_state_wrapper.tsx +++ b/x-pack/plugins/security_solution/public/management/components/management_empty_state_wrapper.tsx @@ -6,7 +6,7 @@ */ import React, { memo } from 'react'; -import { EuiFlexGroup, EuiPageTemplate_Deprecated as EuiPageTemplate } from '@elastic/eui'; +import { EuiFlexGroup, EuiPanel, EuiPageTemplate } from '@elastic/eui'; import styled from 'styled-components'; export const StyledEuiFlexGroup = styled(EuiFlexGroup)` @@ -22,8 +22,10 @@ export const ManagementEmptyStateWrapper = memo( 'data-test-subj'?: string; }) => { return ( - - {children} + + + {children} + ); } diff --git a/x-pack/plugins/security_solution/public/management/components/page_overlay/page_overlay.tsx b/x-pack/plugins/security_solution/public/management/components/page_overlay/page_overlay.tsx index 3ea38e5ed2314..e6f8f2b207ea8 100644 --- a/x-pack/plugins/security_solution/public/management/components/page_overlay/page_overlay.tsx +++ b/x-pack/plugins/security_solution/public/management/components/page_overlay/page_overlay.tsx @@ -24,11 +24,11 @@ const OverlayRootContainer = styled.div` position: fixed; overflow: hidden; - top: calc((${({ theme: { eui } }) => eui.euiHeaderHeightCompensation} * 2)); + top: var(--euiFixedHeadersOffset, 0); bottom: 0; right: 0; - height: calc(100% - ${({ theme: { eui } }) => eui.euiHeaderHeightCompensation} * 2); + height: calc(100% - var(--euiFixedHeadersOffset, 0)); width: 100%; z-index: ${({ theme: { eui } }) => eui.euiZFlyout}; @@ -89,17 +89,6 @@ const PageOverlayGlobalStyles = createGlobalStyle<{ theme: EuiTheme }>` body.${PAGE_OVERLAY_DOCUMENT_BODY_FULLSCREEN_CLASSNAME} { ${FULL_SCREEN_CONTENT_OVERRIDES_CSS_STYLESHEET} } - - //------------------------------------------------------------------------------------------- - // Style overrides for when Page Overlay is displayed in serverless project - //------------------------------------------------------------------------------------------- - // With serverless, there is 1 less header displayed, thus the display of the page overlay - // need to be adjusted slightly so that it still display below the header - //------------------------------------------------------------------------------------------- - body.kbnBody.kbnBody--projectLayout:not(.${PAGE_OVERLAY_DOCUMENT_BODY_FULLSCREEN_CLASSNAME}) .${PAGE_OVERLAY_CSS_CLASSNAME} { - top: ${({ theme: { eui } }) => eui.euiHeaderHeightCompensation}; - height: calc(100% - (${({ theme: { eui } }) => eui.euiHeaderHeightCompensation})); - } `; const setDocumentBodyOverlayIsVisible = () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint/automated_response_actions.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint/automated_response_actions.cy.ts index 5bb5021a3229c..77b2164169641 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint/automated_response_actions.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint/automated_response_actions.cy.ts @@ -79,8 +79,7 @@ describe('Automated Response Actions', () => { cleanupRule(ruleId); } }); - - it('should have generated endpoint and rule', () => { + it.skip('should have generated endpoint and rule', () => { loadPage(APP_ENDPOINTS_PATH); cy.contains(createdHost.hostname).should('exist'); diff --git a/x-pack/plugins/security_solution/public/management/cypress/tasks/login.ts b/x-pack/plugins/security_solution/public/management/cypress/tasks/login.ts index 637f6b157875c..58eba62a72f82 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/tasks/login.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/tasks/login.ts @@ -5,13 +5,9 @@ * 2.0. */ -/* eslint-disable import/no-nodejs-modules */ - import * as yaml from 'js-yaml'; -import type { UrlObject } from 'url'; -import Url from 'url'; import type { Role } from '@kbn/security-plugin/common'; -import { isLocalhost } from '../../../../scripts/endpoint/common/is_localhost'; +import type { LoginState } from '@kbn/security-plugin/common/login_state'; import { getWithResponseActionsRole } from '../../../../scripts/endpoint/common/roles_users/with_response_actions_role'; import { getNoResponseActionsRole } from '../../../../scripts/endpoint/common/roles_users/without_response_actions_role'; import { request } from './common'; @@ -90,35 +86,6 @@ const ELASTICSEARCH_PASSWORD = 'ELASTICSEARCH_PASSWORD'; const KIBANA_USERNAME = 'KIBANA_USERNAME'; const KIBANA_PASSWORD = 'KIBANA_PASSWORD'; -/** - * The Kibana server endpoint used for authentication - */ -const LOGIN_API_ENDPOINT = '/internal/security/login'; - -/** - * cy.visit will default to the baseUrl which uses the default kibana test user - * This function will override that functionality in cy.visit by building the baseUrl - * directly from the environment variables set up in x-pack/test/security_solution_cypress/runner.ts - * - * @param role string role/user to log in with - * @param route string route to visit - */ -export const getUrlWithRoute = (role: string, route: string) => { - const url = Cypress.config().baseUrl; - const kibana = new URL(String(url)); - const theUrl = `${Url.format({ - auth: `${role}:changeme`, - username: role, - password: Cypress.env(ELASTICSEARCH_PASSWORD), - protocol: kibana.protocol.replace(':', ''), - hostname: kibana.hostname, - port: kibana.port, - } as UrlObject)}${route.startsWith('/') ? '' : '/'}${route}`; - cy.log(`origin: ${theUrl}`); - - return theUrl; -}; - export const createCustomRoleAndUser = (role: string, rolePrivileges: Omit) => { // post the role request({ @@ -139,31 +106,44 @@ export const createCustomRoleAndUser = (role: string, rolePrivileges: Omit { +const loginWithUsernameAndPassword = (username: string, password: string) => { + const baseUrl = Cypress.config().baseUrl; + if (!baseUrl) { + throw Error(`Cypress config baseUrl not set!`); + } + + // Programmatically authenticate without interacting with the Kibana login page. + const headers = { 'kbn-xsrf': 'cypress-creds' }; + request({ headers, url: `${baseUrl}/internal/security/login_state` }).then( + (loginState) => { + const basicProvider = loginState.body.selector.providers.find( + (provider) => provider.type === 'basic' + ); + return request({ + url: `${baseUrl}/internal/security/login`, + method: 'POST', + headers, + body: { + providerType: basicProvider.type, + providerName: basicProvider.name, + currentURL: '/', + params: { username, password }, + }, + }); + } + ); +}; + +export const loginWithRole = (role: ROLE) => { loginWithCustomRole(role, rolesMapping[role]); }; -export const loginWithCustomRole = async (role: string, rolePrivileges: Omit) => { +export const loginWithCustomRole = (role: string, rolePrivileges: Omit) => { createCustomRoleAndUser(role, rolePrivileges); - const theUrl = new URL(String(Cypress.config().baseUrl)); - theUrl.username = role; - theUrl.password = Cypress.env(ELASTICSEARCH_PASSWORD); - cy.log(`origin: ${theUrl}`); - request({ - body: { - providerType: 'basic', - providerName: 'basic', - currentURL: '/', - params: { - username: role, - password: Cypress.env(ELASTICSEARCH_PASSWORD), - }, - }, - headers: { 'kbn-xsrf': 'cypress-creds-via-config' }, - method: 'POST', - url: getUrlWithRoute(role, LOGIN_API_ENDPOINT), - }); + cy.log(`origin: ${Cypress.config().baseUrl}`); + + loginWithUsernameAndPassword(role, Cypress.env(ELASTICSEARCH_PASSWORD)); }; /** @@ -199,14 +179,6 @@ const credentialsProvidedByEnvironment = (): boolean => * Kibana's `/internal/security/login` endpoint, bypassing the login page (for speed). */ const loginViaEnvironmentCredentials = () => { - const url = Cypress.config().baseUrl; - - if (!url) { - throw Error(`Cypress config baseUrl not set!`); - } - - const urlObj = new URL(url); - let username: string; let password: string; let usernameEnvVar: string; @@ -228,21 +200,7 @@ const loginViaEnvironmentCredentials = () => { `Authenticating user [${username}] retrieved via environment credentials from the \`CYPRESS_${usernameEnvVar}\` and \`CYPRESS_${passwordEnvVar}\` environment variables` ); - // programmatically authenticate without interacting with the Kibana login page - request({ - body: { - providerType: 'basic', - providerName: url && !isLocalhost(urlObj.hostname) ? 'cloud-basic' : 'basic', - currentURL: '/', - params: { - username, - password, - }, - }, - headers: { 'kbn-xsrf': 'cypress-creds-via-env' }, - method: 'POST', - url: `${url}${LOGIN_API_ENDPOINT}`, - }); + loginWithUsernameAndPassword(username, password); }; /** @@ -258,22 +216,10 @@ const loginViaConfig = () => { // read the login details from `kibana.dev.yaml` cy.readFile(KIBANA_DEV_YML_PATH).then((kibanaDevYml) => { const config = yaml.safeLoad(kibanaDevYml); - - // programmatically authenticate without interacting with the Kibana login page - request({ - body: { - providerType: 'basic', - providerName: 'basic', - currentURL: '/', - params: { - username: Cypress.env(ELASTICSEARCH_USERNAME), - password: config.elasticsearch.password, - }, - }, - headers: { 'kbn-xsrf': 'cypress-creds-via-config' }, - method: 'POST', - url: `${Cypress.config().baseUrl}${LOGIN_API_ENDPOINT}`, - }); + loginWithUsernameAndPassword( + Cypress.env(ELASTICSEARCH_USERNAME), + config.elasticsearch.password + ); }); }; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/artifacts/empty/policy_artifacts_empty_unassigned.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/artifacts/empty/policy_artifacts_empty_unassigned.tsx index 98b9d3bd8404d..37d52c27b8d8c 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/artifacts/empty/policy_artifacts_empty_unassigned.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/artifacts/empty/policy_artifacts_empty_unassigned.tsx @@ -6,12 +6,7 @@ */ import React, { memo, useCallback } from 'react'; -import { - EuiButton, - EuiEmptyPrompt, - EuiPageTemplate_Deprecated as EuiPageTemplate, - EuiLink, -} from '@elastic/eui'; +import { EuiButton, EuiLink, EuiPageTemplate } from '@elastic/eui'; import { usePolicyDetailsArtifactsNavigateCallback } from '../../policy_hooks'; import { useGetLinkTo } from './use_policy_artifacts_empty_hooks'; import { useUserPrivileges } from '../../../../../../common/components/user_privileges'; @@ -54,42 +49,41 @@ export const PolicyArtifactsEmptyUnassigned = memo( [navigateCallback] ); return ( - - {labels.emptyUnassignedTitle}

    } - body={ - canWriteArtifact - ? labels.emptyUnassignedMessage(policyName) - : labels.emptyUnassignedNoPrivilegesMessage(policyName) - } - actions={[ - ...(canCreateArtifactsByPolicy && canWriteArtifact - ? [ - - {labels.emptyUnassignedPrimaryActionButtonTitle} - , - ] - : []), - canWriteArtifact ? ( - // eslint-disable-next-line @elastic/eui/href-or-on-click - - {labels.emptyUnassignedSecondaryActionButtonTitle} - - ) : null, - ]} - /> - + {labels.emptyUnassignedTitle}

    } + body={ + canWriteArtifact + ? labels.emptyUnassignedMessage(policyName) + : labels.emptyUnassignedNoPrivilegesMessage(policyName) + } + actions={[ + ...(canCreateArtifactsByPolicy && canWriteArtifact + ? [ + + {labels.emptyUnassignedPrimaryActionButtonTitle} + , + ] + : []), + canWriteArtifact ? ( + // eslint-disable-next-line @elastic/eui/href-or-on-click + + {labels.emptyUnassignedSecondaryActionButtonTitle} + + ) : null, + ]} + /> ); } ); diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/artifacts/empty/policy_artifacts_empty_unexisting.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/artifacts/empty/policy_artifacts_empty_unexisting.tsx index 1b1e52c872465..2ff8a399d3858 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/artifacts/empty/policy_artifacts_empty_unexisting.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/artifacts/empty/policy_artifacts_empty_unexisting.tsx @@ -6,11 +6,7 @@ */ import React, { memo } from 'react'; -import { - EuiEmptyPrompt, - EuiButton, - EuiPageTemplate_Deprecated as EuiPageTemplate, -} from '@elastic/eui'; +import { EuiButton, EuiPageTemplate } from '@elastic/eui'; import { useGetLinkTo } from './use_policy_artifacts_empty_hooks'; import type { POLICY_ARTIFACT_EMPTY_UNEXISTING_LABELS } from './translations'; import type { ArtifactListPageUrlParams } from '../../../../../components/artifact_list_page'; @@ -43,28 +39,27 @@ export const PolicyArtifactsEmptyUnexisting = memo( } ); return ( - - {labels.emptyUnexistingTitle}

    } - body={labels.emptyUnexistingMessage} - actions={ - canWriteArtifact ? ( - // eslint-disable-next-line @elastic/eui/href-or-on-click - - {labels.emptyUnexistingPrimaryActionButtonTitle} - - ) : null - } - /> - + {labels.emptyUnexistingTitle}} + body={labels.emptyUnexistingMessage} + actions={ + canWriteArtifact ? ( + // eslint-disable-next-line @elastic/eui/href-or-on-click + + {labels.emptyUnexistingPrimaryActionButtonTitle} + + ) : null + } + /> ); } ); diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/artifacts/layout/policy_artifacts_layout.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/artifacts/layout/policy_artifacts_layout.tsx index 666bb5534d3ec..70ac3ce16aab7 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/artifacts/layout/policy_artifacts_layout.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/artifacts/layout/policy_artifacts_layout.tsx @@ -15,7 +15,7 @@ import { EuiSpacer, EuiLink, EuiButton, - EuiPageContent_Deprecated as EuiPageContent, + EuiPageSection, } from '@elastic/eui'; import { useAppUrl } from '../../../../../../common/lib/kibana'; import { APP_UI_ID } from '../../../../../../../common/constants'; @@ -218,13 +218,7 @@ export const PolicyArtifactsLayout = React.memo( /> )} - + ( getPolicyArtifactsPath={getPolicyArtifactsPath} getArtifactPath={getArtifactPath} /> - +
    ); } diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_details.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_details.tsx index f1a0976cbf021..7f72a8d475134 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_details.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_details.tsx @@ -8,11 +8,7 @@ import React, { useMemo } from 'react'; import { i18n } from '@kbn/i18n'; import { useLocation } from 'react-router-dom'; -import { - EuiCallOut, - EuiLoadingSpinner, - EuiPageTemplate_Deprecated as EuiPageTemplate, -} from '@elastic/eui'; +import { EuiCallOut, EuiLoadingSpinner, EuiPageTemplate } from '@elastic/eui'; import { usePolicyDetailsSelector } from './policy_hooks'; import { policyDetails, agentStatusSummary, apiError } from '../store/policy_details/selectors'; import { AgentsSummary } from './components/agents_summary'; @@ -78,23 +74,23 @@ export const PolicyDetails = React.memo(() => { const pageBody: React.ReactNode = useMemo(() => { if (policyApiError) { return ( - + {policyApiError?.message} - + ); } if (!policyItem) { return ( - + - + ); } diff --git a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/components/empty_state.tsx b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/components/empty_state.tsx index c4a0d44d19e25..6dc176b1cb52d 100644 --- a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/components/empty_state.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/components/empty_state.tsx @@ -6,7 +6,7 @@ */ import React, { memo } from 'react'; -import { EuiButton, EuiEmptyPrompt } from '@elastic/eui'; +import { EuiButton, EuiPageTemplate } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { ManagementEmptyStateWrapper } from '../../../../components/management_empty_state_wrapper'; @@ -18,7 +18,7 @@ export const EmptyState = memo<{ }>(({ onAdd, isAddDisabled = false, backComponent }) => { return ( - = ({
    => { - const kbnStatus = await kbnClient.status.get(); + const kbnStatus = await fetchKibanaStatus(kbnClient); const agentVersions = await axios .get('https://artifacts-api.elastic.co/v1/versions') .then((response) => map(response.data.versions, (version) => version.split('-SNAPSHOT')[0])); diff --git a/x-pack/plugins/security_solution/scripts/endpoint/common/stack_services.ts b/x-pack/plugins/security_solution/scripts/endpoint/common/stack_services.ts index a3ad237fc3bcb..366b2a81cefcb 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/common/stack_services.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/common/stack_services.ts @@ -7,10 +7,14 @@ import { Client } from '@elastic/elasticsearch'; import { ToolingLog } from '@kbn/tooling-log'; +import type { KbnClientOptions } from '@kbn/test'; import { KbnClient } from '@kbn/test'; import type { StatusResponse } from '@kbn/core-status-common-internal'; import pRetry from 'p-retry'; import nodeFetch from 'node-fetch'; +import type { ReqOptions } from '@kbn/test/src/kbn_client/kbn_client_requester'; +import { type AxiosResponse } from 'axios'; +import type { ClientOptions } from '@elastic/elasticsearch/lib/client'; import { catchAxiosErrorFormatAndThrow } from './format_axios_error'; import { isLocalhost } from './is_localhost'; import { getLocalhostRealIp } from './localhost_services'; @@ -24,6 +28,7 @@ export interface RuntimeServices { username: string; password: string; }>; + apiKey: string; localhostRealIp: string; kibana: { url: string; @@ -51,6 +56,8 @@ interface CreateRuntimeServicesOptions { fleetServerUrl?: string; username: string; password: string; + /** If defined, both `username` and `password` will be ignored */ + apiKey?: string; /** If undefined, ES username defaults to `username` */ esUsername?: string; /** If undefined, ES password defaults to `password` */ @@ -59,12 +66,41 @@ interface CreateRuntimeServicesOptions { asSuperuser?: boolean; } +class KbnClientExtended extends KbnClient { + private readonly apiKey: string | undefined; + + constructor({ apiKey, url, ...options }: KbnClientOptions & { apiKey?: string }) { + super({ + ...options, + url: apiKey ? buildUrlWithCredentials(url, '', '') : url, + }); + + this.apiKey = apiKey; + } + + async request(options: ReqOptions): Promise> { + const headers: ReqOptions['headers'] = { + ...(options.headers ?? {}), + }; + + if (this.apiKey) { + headers.Authorization = `ApiKey ${this.apiKey}`; + } + + return super.request({ + ...options, + headers, + }); + } +} + export const createRuntimeServices = async ({ kibanaUrl, elasticsearchUrl, fleetServerUrl = 'https://localhost:8220', username: _username, password: _password, + apiKey, esUsername, esPassword, log = new ToolingLog({ level: 'info', writeTo: process.stdout }), @@ -97,15 +133,17 @@ export const createRuntimeServices = async ({ const fleetURL = new URL(fleetServerUrl); return { - kbnClient: createKbnClient({ log, url: kibanaUrl, username, password }), + kbnClient: createKbnClient({ log, url: kibanaUrl, username, password, apiKey }), esClient: createEsClient({ log, url: elasticsearchUrl, username: esUsername ?? username, password: esPassword ?? password, + apiKey, }), log, localhostRealIp: await getLocalhostRealIp(), + apiKey: apiKey ?? '', user: { username, password, @@ -148,40 +186,54 @@ export const createEsClient = ({ url, username, password, + apiKey, log, }: { url: string; username: string; password: string; + /** If defined, both `username` and `password` will be ignored */ + apiKey?: string; log?: ToolingLog; }): Client => { - const esUrl = buildUrlWithCredentials(url, username, password); + const clientOptions: ClientOptions = { + node: buildUrlWithCredentials(url, apiKey ? '' : username, apiKey ? '' : password), + }; + + if (apiKey) { + clientOptions.auth = { apiKey }; + } if (log) { - log.verbose(`Creating Elasticsearch client with URL: ${esUrl}`); + log.verbose(`Creating Elasticsearch client options: ${JSON.stringify(clientOptions)}`); } - return new Client({ node: esUrl }); + return new Client(clientOptions); }; export const createKbnClient = ({ url, username, password, + apiKey, log = new ToolingLog(), }: { url: string; username: string; password: string; + /** If defined, both `username` and `password` will be ignored */ + apiKey?: string; log?: ToolingLog; }): KbnClient => { const kbnUrl = buildUrlWithCredentials(url, username, password); if (log) { - log.verbose(`Creating Kibana client with URL: ${kbnUrl}`); + log.verbose( + `Creating Kibana client with URL: ${kbnUrl} ${apiKey ? ` + ApiKey: ${apiKey}` : ''}` + ); } - return new KbnClient({ log, url: kbnUrl }); + return new KbnClientExtended({ log, url: kbnUrl, apiKey }); }; /** @@ -189,14 +241,7 @@ export const createKbnClient = ({ * @param kbnClient */ export const fetchStackVersion = async (kbnClient: KbnClient): Promise => { - const status = ( - await kbnClient - .request({ - method: 'GET', - path: '/api/status', - }) - .catch(catchAxiosErrorFormatAndThrow) - ).data; + const status = await fetchKibanaStatus(kbnClient); if (!status?.version?.number) { throw new Error( @@ -207,6 +252,16 @@ export const fetchStackVersion = async (kbnClient: KbnClient): Promise = return status.version.number; }; +export const fetchKibanaStatus = async (kbnClient: KbnClient): Promise => { + return kbnClient + .request({ + method: 'GET', + path: '/api/status', + }) + .catch(catchAxiosErrorFormatAndThrow) + .then((response) => response.data); +}; + /** * Checks to ensure Kibana is up and running * @param kbnUrl diff --git a/x-pack/plugins/stack_connectors/common/gen_ai/schema.ts b/x-pack/plugins/stack_connectors/common/gen_ai/schema.ts index bae0a9f532d41..860976834076b 100644 --- a/x-pack/plugins/stack_connectors/common/gen_ai/schema.ts +++ b/x-pack/plugins/stack_connectors/common/gen_ai/schema.ts @@ -35,12 +35,13 @@ export const GenAiStreamActionParamsSchema = schema.object({ }); export const GenAiStreamingResponseSchema = schema.any(); + export const GenAiRunActionResponseSchema = schema.object( { - id: schema.string(), - object: schema.string(), - created: schema.number(), - model: schema.string(), + id: schema.maybe(schema.string()), + object: schema.maybe(schema.string()), + created: schema.maybe(schema.number()), + model: schema.maybe(schema.string()), usage: schema.object( { prompt_tokens: schema.number(), diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/browser/browser_test_results.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/browser/browser_test_results.tsx index b82a456877a7e..4c151880ff588 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/browser/browser_test_results.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/browser/browser_test_results.tsx @@ -72,8 +72,8 @@ export const BrowserTestRunResult = ({ expectPings, onDone, testRunId }: Props) key={'accordion-' + checkGroupId} id={'accordion-' + checkGroupId} element="fieldset" - className="euiAccordionForm" - buttonClassName="euiAccordionForm__button" + borders="horizontal" + buttonProps={{ paddingSize: 'm' }} buttonContent={getButtonContent(checkGroupResult)} paddingSize="s" data-test-subj="expandResults" diff --git a/x-pack/plugins/task_manager/server/queries/task_claiming.ts b/x-pack/plugins/task_manager/server/queries/task_claiming.ts index 07042650a37f9..60237338fb09c 100644 --- a/x-pack/plugins/task_manager/server/queries/task_claiming.ts +++ b/x-pack/plugins/task_manager/server/queries/task_claiming.ts @@ -322,10 +322,10 @@ export class TaskClaiming { max_docs: size, } ); - apmTrans?.end('success'); + apmTrans.end('success'); return result; } catch (err) { - apmTrans?.end('failure'); + apmTrans.end('failure'); throw err; } } diff --git a/x-pack/plugins/task_manager/server/task_running/task_runner.ts b/x-pack/plugins/task_manager/server/task_running/task_runner.ts index e8ec5cb0f2d91..cfe41d832f31f 100644 --- a/x-pack/plugins/task_manager/server/task_running/task_runner.ts +++ b/x-pack/plugins/task_manager/server/task_running/task_runner.ts @@ -447,7 +447,7 @@ export class TaskManagerRunner implements TaskRunner { TASK_MANAGER_TRANSACTION_TYPE_MARK_AS_RUNNING, TASK_MANAGER_TRANSACTION_TYPE ); - apmTrans?.addLabels({ entityId: this.taskType }); + apmTrans.addLabels({ entityId: this.taskType }); const now = new Date(); try { diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 2f8a2bad9d57b..65002b4dbb7c8 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -4150,7 +4150,7 @@ "indexPatternEditor.rollupDataView.warning.textParagraphOne": "Kibana propose un support bêta pour les vues de données basées sur les cumuls. Vous pourriez rencontrer des problèmes lors de l'utilisation de ces vues dans les recherches enregistrées, les visualisations et les tableaux de bord. Ils ne sont pas compatibles avec certaines fonctionnalités avancées, telles que Timelion et le Machine Learning.", "indexPatternEditor.rollupDataView.warning.textParagraphTwo": "Vous pouvez mettre une vue de données de cumul en correspondance avec un index de cumul et zéro index régulier ou plus. Une vue de données de cumul dispose d'indicateurs, de champs, d'intervalles et d'agrégations limités. Un index de cumul se limite aux index disposant d'une configuration de tâche ou de plusieurs tâches avec des configurations compatibles.", "indexPatternEditor.rollupIndexPattern.warning.title": "Fonctionnalité bêta", - "indexPatternEditor.saved": "'{indexPatternName}' enregistré", + "indexPatternEditor.saved": "Enregistré", "indexPatternEditor.status.noSystemIndicesLabel": "Aucun flux de données, index ni alias d'index ne correspond à votre modèle d'indexation.", "indexPatternEditor.status.noSystemIndicesWithPromptLabel": "Aucun flux de données, index ni alias d'index ne correspond à votre modèle d'indexation.", "indexPatternEditor.status.notMatchLabel.notMatchNoIndicesDetail": "Le modèle d'indexation spécifié ne correspond à aucun flux de données, index ni alias d'index.", @@ -21050,7 +21050,6 @@ "xpack.lens.indexPattern.percentFormatLabel": "Pourcent", "xpack.lens.indexPattern.percentile": "Centile", "xpack.lens.indexPattern.percentile.documentation.quick": "\n La plus grande valeur qui est inférieure à n pour cent des valeurs présentes dans tous les documents.\n ", - "xpack.lens.indexPattern.percentile.errorMessage": "Le centile doit être un entier compris entre 1 et 99", "xpack.lens.indexPattern.percentile.percentileRanksValue": "Valeur des rangs centiles", "xpack.lens.indexPattern.percentile.percentileValue": "Centile", "xpack.lens.indexPattern.percentile.signature": "champ : chaîne, [percentile] : nombre", @@ -27044,9 +27043,6 @@ "xpack.observability_onboarding.card.systemLogs.title": "Collecter des logs système", "xpack.observability_onboarding.configureLogs.advancedSettings": "Paramètres avancés", "xpack.observability_onboarding.configureLogs.customConfig": "Configurations personnalisées", - "xpack.observability_onboarding.configureLogs.dataset.helper": "Choisissez un nom pour vos logs. Tout en minuscules, 100 caractères maximum, les caractères spéciaux seront remplacés par \"_\".", - "xpack.observability_onboarding.configureLogs.dataset.name": "Nom de l’ensemble de données", - "xpack.observability_onboarding.configureLogs.dataset.placeholder": "Nom de l’ensemble de données", "xpack.observability_onboarding.configureLogs.description": "Remplissez les chemins d’accès aux fichiers log sur vos hôtes.", "xpack.observability_onboarding.configureLogs.learnMore": "En savoir plus", "xpack.observability_onboarding.configureLogs.logFile.addRow": "Ajouter une ligne", @@ -27106,7 +27102,6 @@ "xpack.observability_onboarding.selectLogs.useOwnShipper": "Obtenir une clé d’API", "xpack.observability_onboarding.selectLogs.useOwnShipper.description": "Utilisez votre propre agent de transfert pour collecter des données de logs en générant une clé d’API.", "xpack.observability_onboarding.steps.back": "Retour", - "xpack.observability_onboarding.steps.continue": "Continuer", "xpack.observability_onboarding.steps.exploreLogs": "Explorer les logs", "xpack.observability_onboarding.steps.inspect": "Inspecter", "xpack.observability_onboarding.title.collectCustomLogs": "Collectez des logs personnalisés", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index f9656c1178806..140016969840e 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -4165,7 +4165,7 @@ "indexPatternEditor.rollupDataView.warning.textParagraphOne": "Kibanaではロールアップに基づいてデータビューのデータサポートを提供します。保存された検索、可視化、ダッシュボードでこれらを使用すると問題が発生する場合があります。Timelionや機械学習などの一部の高度な機能ではサポートされていません。", "indexPatternEditor.rollupDataView.warning.textParagraphTwo": "ロールアップデータビューは、1つのロールアップインデックスとゼロ以上の標準インデックスと一致させることができます。ロールアップデータビューでは、メトリック、フィールド、間隔、アグリゲーションが制限されています。ロールアップインデックスは、1つのジョブ構成があるインデックス、または複数のジョブと互換する構成があるインデックスに制限されています。", "indexPatternEditor.rollupIndexPattern.warning.title": "ベータ機能", - "indexPatternEditor.saved": "'{indexPatternName}'が保存されました", + "indexPatternEditor.saved": "が保存されました", "indexPatternEditor.status.noSystemIndicesLabel": "データストリーム、インデックス、またはインデックスエイリアスがインデックスパターンと一致しません。", "indexPatternEditor.status.noSystemIndicesWithPromptLabel": "データストリーム、インデックス、またはインデックスエイリアスがインデックスパターンと一致しません。", "indexPatternEditor.status.notMatchLabel.notMatchNoIndicesDetail": "入力したインデックスパターンはデータストリーム、インデックス、またはインデックスエイリアスと一致しません。", @@ -21065,7 +21065,6 @@ "xpack.lens.indexPattern.percentFormatLabel": "割合(%)", "xpack.lens.indexPattern.percentile": "パーセンタイル", "xpack.lens.indexPattern.percentile.documentation.quick": "\n すべてのドキュメントで発生する値のnパーセントよりも小さい最大値。\n ", - "xpack.lens.indexPattern.percentile.errorMessage": "パーセンタイルは1~99の範囲の整数でなければなりません。", "xpack.lens.indexPattern.percentile.percentileRanksValue": "パーセンタイル順位値", "xpack.lens.indexPattern.percentile.percentileValue": "パーセンタイル", "xpack.lens.indexPattern.percentile.signature": "フィールド:文字列、[percentile]:数値", @@ -27044,9 +27043,6 @@ "xpack.observability_onboarding.card.systemLogs.title": "システムログを収集", "xpack.observability_onboarding.configureLogs.advancedSettings": "高度な設定", "xpack.observability_onboarding.configureLogs.customConfig": "カスタム構成", - "xpack.observability_onboarding.configureLogs.dataset.helper": "ログの名前を設定します。すべて小文字、最大100文字、特殊文字は「_」に置き換えられます。", - "xpack.observability_onboarding.configureLogs.dataset.name": "データセット名", - "xpack.observability_onboarding.configureLogs.dataset.placeholder": "データセット名", "xpack.observability_onboarding.configureLogs.description": "ホスト上のログファイルへのパスを入力します。", "xpack.observability_onboarding.configureLogs.learnMore": "詳細", "xpack.observability_onboarding.configureLogs.logFile.addRow": "行の追加", @@ -27106,7 +27102,6 @@ "xpack.observability_onboarding.selectLogs.useOwnShipper": "APIキーを取得", "xpack.observability_onboarding.selectLogs.useOwnShipper.description": "APIキーを生成し、ログデータを収集するために独自のシッパーを使用します。", "xpack.observability_onboarding.steps.back": "戻る", - "xpack.observability_onboarding.steps.continue": "続行", "xpack.observability_onboarding.steps.exploreLogs": "ログを探索", "xpack.observability_onboarding.steps.inspect": "検査", "xpack.observability_onboarding.title.collectCustomLogs": "カスタムログを収集", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 3d1ae2ad2bcca..11a24a06c36c4 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -4164,7 +4164,7 @@ "indexPatternEditor.rollupDataView.warning.textParagraphOne": "Kibana 基于汇总/打包为数据视图提供公测版支持。将这些视图用于已保存搜索、可视化以及仪表板可能会遇到问题。某些高级功能,如 Timelion 和 Machine Learning,不支持这些模式。", "indexPatternEditor.rollupDataView.warning.textParagraphTwo": "可以根据一个汇总/打包索引和零个或更多常规索引匹配汇总/打包数据视图。汇总/打包数据视图的指标、字段、时间间隔和聚合有限。汇总/打包索引仅限于具有一个作业配置或多个作业配置兼容的索引。", "indexPatternEditor.rollupIndexPattern.warning.title": "公测版功能", - "indexPatternEditor.saved": "已保存“{indexPatternName}”", + "indexPatternEditor.saved": "已保存", "indexPatternEditor.status.noSystemIndicesLabel": "没有数据流、索引或索引别名匹配您的索引模式。", "indexPatternEditor.status.noSystemIndicesWithPromptLabel": "没有数据流、索引或索引别名匹配您的索引模式。", "indexPatternEditor.status.notMatchLabel.notMatchNoIndicesDetail": "输入的索引模式不匹配任何数据流、索引或索引别名。", @@ -21065,7 +21065,6 @@ "xpack.lens.indexPattern.percentFormatLabel": "百分比", "xpack.lens.indexPattern.percentile": "百分位数", "xpack.lens.indexPattern.percentile.documentation.quick": "\n 小于所有文档中出现值的 n% 的最大值。\n ", - "xpack.lens.indexPattern.percentile.errorMessage": "百分位数必须是介于 1 到 99 之间的整数", "xpack.lens.indexPattern.percentile.percentileRanksValue": "百分位等级值", "xpack.lens.indexPattern.percentile.percentileValue": "百分位数", "xpack.lens.indexPattern.percentile.signature": "field: string, [percentile]: number", @@ -27042,9 +27041,6 @@ "xpack.observability_onboarding.card.systemLogs.title": "收集系统日志", "xpack.observability_onboarding.configureLogs.advancedSettings": "高级设置", "xpack.observability_onboarding.configureLogs.customConfig": "定制配置", - "xpack.observability_onboarding.configureLogs.dataset.helper": "选取日志的名称。全部小写,最多 100 个字符,将用“_”替代特殊字符。", - "xpack.observability_onboarding.configureLogs.dataset.name": "数据集名称", - "xpack.observability_onboarding.configureLogs.dataset.placeholder": "数据集名称", "xpack.observability_onboarding.configureLogs.description": "填写日志文件在主机上的路径。", "xpack.observability_onboarding.configureLogs.learnMore": "了解详情", "xpack.observability_onboarding.configureLogs.logFile.addRow": "添加行", @@ -27104,7 +27100,6 @@ "xpack.observability_onboarding.selectLogs.useOwnShipper": "获取 API 密钥", "xpack.observability_onboarding.selectLogs.useOwnShipper.description": "通过生成 API 密钥使用您自己的采集器来收集日志数据。", "xpack.observability_onboarding.steps.back": "返回", - "xpack.observability_onboarding.steps.continue": "继续", "xpack.observability_onboarding.steps.exploreLogs": "浏览日志", "xpack.observability_onboarding.steps.inspect": "检查", "xpack.observability_onboarding.title.collectCustomLogs": "收集定制日志", 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 d672fc3287fcd..6bae4f720c032 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 @@ -14,7 +14,7 @@ import { EuiFlexGroup, EuiFlexItem, EuiBadge, - EuiPageContentBody_Deprecated as EuiPageContentBody, + EuiPageSection, EuiCallOut, EuiSpacer, EuiButtonEmpty, @@ -426,8 +426,7 @@ export const RuleDetails: React.FunctionComponent = ({ , ]} /> - - + {rule.enabled && rule.executionStatus.error?.reason === RuleExecutionStatusErrorReasons.License ? ( @@ -519,7 +518,7 @@ export const RuleDetails: React.FunctionComponent = ({ /> - + ); }; diff --git a/x-pack/plugins/watcher/public/application/sections/watch_edit_page/components/threshold_watch_edit/threshold_watch_action_accordion.tsx b/x-pack/plugins/watcher/public/application/sections/watch_edit_page/components/threshold_watch_edit/threshold_watch_action_accordion.tsx index f162941461ce8..dd564f2b719e2 100644 --- a/x-pack/plugins/watcher/public/application/sections/watch_edit_page/components/threshold_watch_edit/threshold_watch_action_accordion.tsx +++ b/x-pack/plugins/watcher/public/application/sections/watch_edit_page/components/threshold_watch_edit/threshold_watch_action_accordion.tsx @@ -6,6 +6,7 @@ */ import React, { Fragment, useContext, useState } from 'react'; +import { css } from '@emotion/react'; import { EuiAccordion, @@ -20,6 +21,8 @@ import { EuiLink, EuiText, EuiSpacer, + useEuiTheme, + euiCanAnimate, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; @@ -75,6 +78,7 @@ export const WatchActionsAccordion: React.FunctionComponent = ({ settings, actionErrors, }) => { + const { euiTheme } = useEuiTheme(); const { links: { watchActionsConfigurationMap }, toasts, @@ -96,8 +100,15 @@ export const WatchActionsAccordion: React.FunctionComponent = ({ initialIsOpen={action.isNew || hasErrors} // If an action contains errors in edit mode, we want the accordion open so the user is aware key={action.id} id={action.id} - className="euiAccordionForm" - buttonContentClassName="euiAccordionForm__button" + borders="horizontal" + buttonProps={{ + paddingSize: 'm', + css: css` + &:hover { + text-decoration: none; + } + `, + }} data-test-subj="watchActionAccordion" buttonContent={ @@ -105,7 +116,7 @@ export const WatchActionsAccordion: React.FunctionComponent = ({ - +
    {action.typeName}
    @@ -115,7 +126,18 @@ export const WatchActionsAccordion: React.FunctionComponent = ({ { + await supertest + .post(`${getUrlPrefix(space.id)}/internal/alerting/rules/settings/_flapping`) + .set('kbn-xsrf', 'foo') + .auth('superuser', 'superuser') + .send({ + enabled: true, + look_back_window: 6, + status_change_threshold: 4, + }) + .expect(200); + const { body: createdAction } = await supertest + .post(`${getUrlPrefix(space.id)}/api/actions/connector`) + .set('kbn-xsrf', 'foo') + .send({ + name: 'MY action', + connector_type_id: 'test.noop', + config: {}, + secrets: {}, + }) + .expect(200); + + // pattern of when the alert should fire + const instance = [true, false, false, true, false, true, false, true, false].concat( + ...new Array(8).fill(true), + false + ); + const pattern = { + instance, + }; + + const response = await supertest + .post(`${getUrlPrefix(space.id)}/api/alerting/rule`) + .set('kbn-xsrf', 'foo') + .send( + getTestRuleData({ + rule_type_id: 'test.patternFiring', + schedule: { interval: '1s' }, + throttle: null, + notify_when: null, + params: { + pattern, + }, + actions: [ + { + id: createdAction.id, + group: 'default', + params: {}, + frequency: { + summary: false, + throttle: null, + notify_when: RuleNotifyWhen.CHANGE, + }, + }, + { + id: createdAction.id, + group: 'recovered', + params: {}, + frequency: { + summary: false, + throttle: null, + notify_when: RuleNotifyWhen.CHANGE, + }, + }, + ], + }) + ); + + expect(response.status).to.eql(200); + const alertId = response.body.id; + objectRemover.add(space.id, alertId, 'rule', 'alerting'); + + // get the events we're expecting + const events = await retry.try(async () => { + return await getEventLog({ + getService, + spaceId: space.id, + type: 'alert', + id: alertId, + provider: 'alerting', + actions: new Map([ + // make sure the counts of the # of events per type are as expected + ['execute-start', { gte: 6 }], + ['execute', { gte: 6 }], + ['execute-action', { equal: 6 }], + ['new-instance', { equal: 3 }], + ['active-instance', { gte: 6 }], + ['recovered-instance', { equal: 3 }], + ]), + }); + }); + + const flapping = events + .filter( + (event) => + event?.event?.action === 'active-instance' || + event?.event?.action === 'recovered-instance' + ) + .map((event) => event?.kibana?.alert?.flapping); + const result = [false, false, false, false, false].concat( + new Array(9).fill(true), + false, + false, + false + ); + expect(flapping).to.eql(result); + }); + it('should generate expected events for flapping alerts settle on recovered', async () => { await supertest .post(`${getUrlPrefix(space.id)}/internal/alerting/rules/settings/_flapping`) @@ -818,6 +926,109 @@ export default function eventLogTests({ getService }: FtrProviderContext) { ); }); + it('should generate expected events for flapping alerts settle on recovered where the action notifyWhen is set to "on status change"', async () => { + await supertest + .post(`${getUrlPrefix(space.id)}/internal/alerting/rules/settings/_flapping`) + .set('kbn-xsrf', 'foo') + .auth('superuser', 'superuser') + .send({ + enabled: true, + look_back_window: 6, + status_change_threshold: 4, + }) + .expect(200); + const { body: createdAction } = await supertest + .post(`${getUrlPrefix(space.id)}/api/actions/connector`) + .set('kbn-xsrf', 'foo') + .send({ + name: 'MY action', + connector_type_id: 'test.noop', + config: {}, + secrets: {}, + }) + .expect(200); + + // pattern of when the alert should fire + const instance = [true, false, false, true, false, true, false, true, false, true].concat( + new Array(11).fill(false) + ); + const pattern = { + instance, + }; + + const response = await supertest + .post(`${getUrlPrefix(space.id)}/api/alerting/rule`) + .set('kbn-xsrf', 'foo') + .send( + getTestRuleData({ + rule_type_id: 'test.patternFiring', + schedule: { interval: '1s' }, + throttle: null, + notify_when: null, + params: { + pattern, + }, + actions: [ + { + id: createdAction.id, + group: 'default', + params: {}, + frequency: { + summary: false, + throttle: null, + notify_when: RuleNotifyWhen.CHANGE, + }, + }, + { + id: createdAction.id, + group: 'recovered', + params: {}, + frequency: { + summary: false, + throttle: null, + notify_when: RuleNotifyWhen.CHANGE, + }, + }, + ], + }) + ); + + expect(response.status).to.eql(200); + const alertId = response.body.id; + objectRemover.add(space.id, alertId, 'rule', 'alerting'); + + // get the events we're expecting + const events = await retry.try(async () => { + return await getEventLog({ + getService, + spaceId: space.id, + type: 'alert', + id: alertId, + provider: 'alerting', + actions: new Map([ + // make sure the counts of the # of events per type are as expected + ['execute-start', { gte: 6 }], + ['execute', { gte: 6 }], + ['execute-action', { equal: 6 }], + ['new-instance', { equal: 3 }], + ['active-instance', { gte: 3 }], + ['recovered-instance', { equal: 3 }], + ]), + }); + }); + + const flapping = events + .filter( + (event) => + event?.event?.action === 'active-instance' || + event?.event?.action === 'recovered-instance' + ) + .map((event) => event?.kibana?.alert?.flapping); + expect(flapping).to.eql( + [false, false, false, false, false].concat(new Array(8).fill(true)) + ); + }); + it('should generate expected events for flapping alerts over a period of time longer than the look back', async () => { await supertest .post(`${getUrlPrefix(space.id)}/internal/alerting/rules/settings/_flapping`) @@ -917,7 +1128,104 @@ export default function eventLogTests({ getService }: FtrProviderContext) { expect(flapping).to.eql(result); }); - it('should generate expected events for flapping alerts that settle on active where notifyWhen is not set to "on status change"', async () => { + it('should generate expected events for flapping alerts that settle on active where notifyWhen is NOT set to "on status change"', async () => { + await supertest + .post(`${getUrlPrefix(space.id)}/internal/alerting/rules/settings/_flapping`) + .set('kbn-xsrf', 'foo') + .auth('superuser', 'superuser') + .send({ + enabled: true, + look_back_window: 6, + status_change_threshold: 4, + }) + .expect(200); + const { body: createdAction } = await supertest + .post(`${getUrlPrefix(space.id)}/api/actions/connector`) + .set('kbn-xsrf', 'foo') + .send({ + name: 'MY action', + connector_type_id: 'test.noop', + config: {}, + secrets: {}, + }) + .expect(200); + + // pattern of when the alert should fire + const instance = [true, false, false, true, false, true, false, true, false].concat( + ...new Array(8).fill(true), + false + ); + const pattern = { + instance, + }; + + const response = await supertest + .post(`${getUrlPrefix(space.id)}/api/alerting/rule`) + .set('kbn-xsrf', 'foo') + .send( + getTestRuleData({ + rule_type_id: 'test.patternFiring', + schedule: { interval: '1s' }, + throttle: '1s', + params: { + pattern, + }, + actions: [ + { + id: createdAction.id, + group: 'default', + params: {}, + }, + { + id: createdAction.id, + group: 'recovered', + params: {}, + }, + ], + }) + ); + + expect(response.status).to.eql(200); + const alertId = response.body.id; + objectRemover.add(space.id, alertId, 'rule', 'alerting'); + + // get the events we're expecting + const events = await retry.try(async () => { + return await getEventLog({ + getService, + spaceId: space.id, + type: 'alert', + id: alertId, + provider: 'alerting', + actions: new Map([ + // make sure the counts of the # of events per type are as expected + ['execute-start', { gte: 15 }], + ['execute', { gte: 15 }], + ['execute-action', { equal: 15 }], + ['new-instance', { equal: 3 }], + ['active-instance', { gte: 6 }], + ['recovered-instance', { equal: 3 }], + ]), + }); + }); + + const flapping = events + .filter( + (event) => + event?.event?.action === 'active-instance' || + event?.event?.action === 'recovered-instance' + ) + .map((event) => event?.kibana?.alert?.flapping); + const result = [false, false, false, false, false].concat( + new Array(7).fill(true), + false, + false, + false + ); + expect(flapping).to.eql(result); + }); + + it('should generate expected events for flapping alerts that settle on active where the action notifyWhen is NOT set to "on status change"', async () => { await supertest .post(`${getUrlPrefix(space.id)}/internal/alerting/rules/settings/_flapping`) .set('kbn-xsrf', 'foo') @@ -956,6 +1264,7 @@ export default function eventLogTests({ getService }: FtrProviderContext) { rule_type_id: 'test.patternFiring', schedule: { interval: '1s' }, throttle: null, + notify_when: null, params: { pattern, }, @@ -964,11 +1273,21 @@ export default function eventLogTests({ getService }: FtrProviderContext) { id: createdAction.id, group: 'default', params: {}, + frequency: { + summary: false, + throttle: '1s', + notify_when: RuleNotifyWhen.THROTTLE, + }, }, { id: createdAction.id, group: 'recovered', params: {}, + frequency: { + summary: false, + throttle: '1s', + notify_when: RuleNotifyWhen.THROTTLE, + }, }, ], }) @@ -1014,7 +1333,97 @@ export default function eventLogTests({ getService }: FtrProviderContext) { expect(flapping).to.eql(result); }); - it('should generate expected events for flapping alerts that settle on recovered where notifyWhen is not set to "on status change"', async () => { + it('should generate expected events for flapping alerts that settle on recovered where notifyWhen is NOT set to "on status change"', async () => { + await supertest + .post(`${getUrlPrefix(space.id)}/internal/alerting/rules/settings/_flapping`) + .set('kbn-xsrf', 'foo') + .auth('superuser', 'superuser') + .send({ + enabled: true, + look_back_window: 6, + status_change_threshold: 4, + }) + .expect(200); + const { body: createdAction } = await supertest + .post(`${getUrlPrefix(space.id)}/api/actions/connector`) + .set('kbn-xsrf', 'foo') + .send({ + name: 'MY action', + connector_type_id: 'test.noop', + config: {}, + secrets: {}, + }) + .expect(200); + + // pattern of when the alert should fire + const instance = [true, false, false, true, false, true, false, true, false, true].concat( + new Array(11).fill(false) + ); + const pattern = { + instance, + }; + + const response = await supertest + .post(`${getUrlPrefix(space.id)}/api/alerting/rule`) + .set('kbn-xsrf', 'foo') + .send( + getTestRuleData({ + rule_type_id: 'test.patternFiring', + schedule: { interval: '1s' }, + throttle: '1s', + params: { + pattern, + }, + actions: [ + { + id: createdAction.id, + group: 'default', + params: {}, + }, + { + id: createdAction.id, + group: 'recovered', + params: {}, + }, + ], + }) + ); + + expect(response.status).to.eql(200); + const alertId = response.body.id; + objectRemover.add(space.id, alertId, 'rule', 'alerting'); + + // get the events we're expecting + const events = await retry.try(async () => { + return await getEventLog({ + getService, + spaceId: space.id, + type: 'alert', + id: alertId, + provider: 'alerting', + actions: new Map([ + // make sure the counts of the # of events per type are as expected + ['execute-start', { gte: 8 }], + ['execute', { gte: 8 }], + ['execute-action', { equal: 8 }], + ['new-instance', { equal: 3 }], + ['active-instance', { gte: 3 }], + ['recovered-instance', { equal: 3 }], + ]), + }); + }); + + const flapping = events + .filter( + (event) => + event?.event?.action === 'active-instance' || + event?.event?.action === 'recovered-instance' + ) + .map((event) => event?.kibana?.alert?.flapping); + expect(flapping).to.eql([false, false, false, false, false, true, true, true]); + }); + + it('should generate expected events for flapping alerts that settle on recovered where the action notifyWhen is NOT set to "on status change"', async () => { await supertest .post(`${getUrlPrefix(space.id)}/internal/alerting/rules/settings/_flapping`) .set('kbn-xsrf', 'foo') @@ -1052,6 +1461,7 @@ export default function eventLogTests({ getService }: FtrProviderContext) { rule_type_id: 'test.patternFiring', schedule: { interval: '1s' }, throttle: null, + notify_when: null, params: { pattern, }, @@ -1060,11 +1470,21 @@ export default function eventLogTests({ getService }: FtrProviderContext) { id: createdAction.id, group: 'default', params: {}, + frequency: { + summary: false, + throttle: '1s', + notify_when: RuleNotifyWhen.THROTTLE, + }, }, { id: createdAction.id, group: 'recovered', params: {}, + frequency: { + summary: false, + throttle: '1s', + notify_when: RuleNotifyWhen.THROTTLE, + }, }, ], }) diff --git a/x-pack/test/functional/apps/lens/group1/smokescreen.ts b/x-pack/test/functional/apps/lens/group1/smokescreen.ts index 324135ca05a6e..e33e65741bf66 100644 --- a/x-pack/test/functional/apps/lens/group1/smokescreen.ts +++ b/x-pack/test/functional/apps/lens/group1/smokescreen.ts @@ -773,5 +773,36 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await listingTable.searchForItemWithName('Anewfancilenstest'); await listingTable.expectItemsCount('visualize', 1); }); + + it('should correctly optimize multiple percentile metrics', async () => { + await PageObjects.visualize.navigateToNewVisualization(); + await PageObjects.visualize.clickVisType('lens'); + for (const percentileValue of [90, 95.5, 99.9]) { + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', + operation: 'percentile', + field: 'bytes', + keepOpen: true, + }); + + await retry.try(async () => { + const value = `${percentileValue}`; + // Can not use testSubjects because data-test-subj is placed range input and number input + const percentileInput = await PageObjects.lens.getNumericFieldReady( + 'lns-indexPattern-percentile-input' + ); + await percentileInput.type(value); + + const attrValue = await percentileInput.getAttribute('value'); + if (attrValue !== value) { + throw new Error(`layerPanelTopHitsSize not set to ${value}`); + } + }); + + await PageObjects.lens.closeDimensionEditor(); + } + await PageObjects.lens.waitForVisualization('xyVisChart'); + expect(await PageObjects.lens.getWorkspaceErrorCount()).to.eql(0); + }); }); } diff --git a/x-pack/test/functional/apps/lens/group3/terms.ts b/x-pack/test/functional/apps/lens/group3/terms.ts index f93df80d52589..13b8492371405 100644 --- a/x-pack/test/functional/apps/lens/group3/terms.ts +++ b/x-pack/test/functional/apps/lens/group3/terms.ts @@ -96,62 +96,128 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.lens.closeDimensionEditor(); }); }); - describe('sorting by custom metric', () => { - it('should allow sort by custom metric', async () => { - await PageObjects.visualize.navigateToNewVisualization(); - await PageObjects.visualize.clickVisType('lens'); - await elasticChart.setNewChartUiDebugFlag(true); - await PageObjects.lens.goToTimeRange(); - - await PageObjects.lens.configureDimension({ - dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', - operation: 'average', - field: 'bytes', - }); + describe('rank by', () => { + describe('reset rank on metric change', () => { + it('should reset the ranking when using decimals on percentile', async () => { + await PageObjects.visualize.navigateToNewVisualization(); + await PageObjects.visualize.clickVisType('lens'); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', + operation: 'terms', + field: 'geo.src', + }); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', + operation: 'percentile', + field: 'bytes', + keepOpen: true, + }); + + await retry.try(async () => { + const value = '60.5'; + // Can not use testSubjects because data-test-subj is placed range input and number input + const percentileInput = await PageObjects.lens.getNumericFieldReady( + 'lns-indexPattern-percentile-input' + ); + await percentileInput.clearValueWithKeyboard(); + await percentileInput.type(value); + + const percentileValue = await percentileInput.getAttribute('value'); + if (percentileValue !== value) { + throw new Error( + `[date-test-subj="lns-indexPattern-percentile-input"] not set to ${value}` + ); + } + }); + + // close the toast about reset ranking + // note: this has also the side effect to close the dimension editor + await testSubjects.click('toastCloseButton'); + + await PageObjects.lens.openDimensionEditor( + 'lnsXY_yDimensionPanel > lns-dimensionTrigger' + ); - await PageObjects.lens.configureDimension({ - dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', - operation: 'terms', - field: 'geo.src', - keepOpen: true, + await PageObjects.lens.selectOperation('percentile_rank'); + + await retry.try(async () => { + const value = '600.5'; + const percentileRankInput = await testSubjects.find( + 'lns-indexPattern-percentile_ranks-input' + ); + await percentileRankInput.clearValueWithKeyboard(); + await percentileRankInput.type(value); + + const percentileRankValue = await percentileRankInput.getAttribute('value'); + if (percentileRankValue !== value) { + throw new Error( + `[date-test-subj="lns-indexPattern-percentile_ranks-input"] not set to ${value}` + ); + } + }); + // note: this has also the side effect to close the dimension editor + await testSubjects.click('toastCloseButton'); }); - await find.clickByCssSelector( - 'select[data-test-subj="indexPattern-terms-orderBy"] > option[value="custom"]' - ); - - const fnTarget = await testSubjects.find('indexPattern-reference-function'); - await comboBox.openOptionsList(fnTarget); - await comboBox.setElement(fnTarget, 'percentile'); + }); + describe('sorting by custom metric', () => { + it('should allow sort by custom metric', async () => { + await PageObjects.visualize.navigateToNewVisualization(); + await PageObjects.visualize.clickVisType('lens'); + await elasticChart.setNewChartUiDebugFlag(true); + await PageObjects.lens.goToTimeRange(); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', + operation: 'average', + field: 'bytes', + }); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_xDimensionPanel > lns-empty-dimension', + operation: 'terms', + field: 'geo.src', + keepOpen: true, + }); + await find.clickByCssSelector( + 'select[data-test-subj="indexPattern-terms-orderBy"] > option[value="custom"]' + ); - const fieldTarget = await testSubjects.find( - 'indexPattern-reference-field-selection-row>indexPattern-dimension-field' - ); - await comboBox.openOptionsList(fieldTarget); - await comboBox.setElement(fieldTarget, 'bytes'); + const fnTarget = await testSubjects.find('indexPattern-reference-function'); + await comboBox.openOptionsList(fnTarget); + await comboBox.setElement(fnTarget, 'percentile'); - await retry.try(async () => { - // Can not use testSubjects because data-test-subj is placed range input and number input - const percentileInput = await PageObjects.lens.getNumericFieldReady( - 'lns-indexPattern-percentile-input' + const fieldTarget = await testSubjects.find( + 'indexPattern-reference-field-selection-row>indexPattern-dimension-field' + ); + await comboBox.openOptionsList(fieldTarget); + await comboBox.setElement(fieldTarget, 'bytes'); + + await retry.try(async () => { + // Can not use testSubjects because data-test-subj is placed range input and number input + const percentileInput = await PageObjects.lens.getNumericFieldReady( + 'lns-indexPattern-percentile-input' + ); + await percentileInput.type('60'); + + const percentileValue = await percentileInput.getAttribute('value'); + if (percentileValue !== '60') { + throw new Error('layerPanelTopHitsSize not set to 60'); + } + }); + + await PageObjects.lens.waitForVisualization('xyVisChart'); + await PageObjects.lens.closeDimensionEditor(); + + expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_xDimensionPanel', 0)).to.eql( + 'Top 5 values of geo.src' ); - await percentileInput.type('60'); - const percentileValue = await percentileInput.getAttribute('value'); - if (percentileValue !== '60') { - throw new Error('layerPanelTopHitsSize not set to 60'); - } + const data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); + expect(data!.bars![0].bars[0].x).to.eql('BN'); + expect(data!.bars![0].bars[0].y).to.eql(19265); }); - - await PageObjects.lens.waitForVisualization('xyVisChart'); - await PageObjects.lens.closeDimensionEditor(); - - expect(await PageObjects.lens.getDimensionTriggerText('lnsXY_xDimensionPanel', 0)).to.eql( - 'Top 5 values of geo.src' - ); - - const data = await PageObjects.lens.getCurrentChartDebugState('xyVisChart'); - expect(data!.bars![0].bars[0].x).to.eql('BN'); - expect(data!.bars![0].bars[0].y).to.eql(19265); }); }); diff --git a/x-pack/test/functional/apps/lens/open_in_lens/agg_based/xy.ts b/x-pack/test/functional/apps/lens/open_in_lens/agg_based/xy.ts index bc3451a32fb6d..7d912221e2b15 100644 --- a/x-pack/test/functional/apps/lens/open_in_lens/agg_based/xy.ts +++ b/x-pack/test/functional/apps/lens/open_in_lens/agg_based/xy.ts @@ -357,5 +357,17 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); expect(data?.legend?.items.map((item) => item.name)).to.eql(expectedData); }); + + it('should convert correctly percentiles with decimals', async () => { + await visEditor.clickBucket('Y-axis', 'metrics'); + await visEditor.selectAggregation('Percentiles', 'metrics'); + await visEditor.selectField('memory', 'metrics'); + await visEditor.setPercentileValue('99.99', 6); + await visEditor.clickGo(); + await header.waitUntilLoadingHasFinished(); + await visualize.navigateToLensFromAnotherVisulization(); + await lens.waitForVisualization('xyVisChart'); + expect(await lens.getWorkspaceErrorCount()).to.eql(0); + }); }); } diff --git a/x-pack/test/functional/apps/maps/group1/sample_data.js b/x-pack/test/functional/apps/maps/group1/sample_data.js index d9ef08ef712f1..09b29f5e529c3 100644 --- a/x-pack/test/functional/apps/maps/group1/sample_data.js +++ b/x-pack/test/functional/apps/maps/group1/sample_data.js @@ -113,7 +113,7 @@ export default function ({ getPageObjects, getService, updateBaselines }) { 'flights_map', updateBaselines ); - expect(percentDifference).to.be.lessThan(0.02); + expect(percentDifference).to.be.lessThan(0.022); }); }); @@ -138,7 +138,7 @@ export default function ({ getPageObjects, getService, updateBaselines }) { 'web_logs_map', updateBaselines ); - expect(percentDifference).to.be.lessThan(0.02); + expect(percentDifference).to.be.lessThan(0.031); }); }); }); diff --git a/x-pack/test/functional/page_objects/infra_home_page.ts b/x-pack/test/functional/page_objects/infra_home_page.ts index b4e8839ba89e2..d7a2b86b2d5a3 100644 --- a/x-pack/test/functional/page_objects/infra_home_page.ts +++ b/x-pack/test/functional/page_objects/infra_home_page.ts @@ -175,7 +175,7 @@ export function InfraHomePageProvider({ getService, getPageObjects }: FtrProvide await testSubjects.click('openInventorySwitcher'); await testSubjects.find('goToHost'); await testSubjects.click('openInventorySwitcher'); - retry.tryForTime(2 * 1000, async () => { + return retry.tryForTime(2 * 1000, async () => { return testSubjects.missingOrFail('goToHost'); }); }, diff --git a/x-pack/test/functional/page_objects/lens_page.ts b/x-pack/test/functional/page_objects/lens_page.ts index 5d3f316b7a83a..6880a3ab46ff5 100644 --- a/x-pack/test/functional/page_objects/lens_page.ts +++ b/x-pack/test/functional/page_objects/lens_page.ts @@ -691,7 +691,7 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont }, async getNumericFieldReady(testSubj: string) { const numericInput = await find.byCssSelector( - `input[data-test-subj=${testSubj}][type='number']` + `input[data-test-subj="${testSubj}"][type='number']` ); await numericInput.click(); await numericInput.clearValue(); diff --git a/x-pack/test/functional/page_objects/security_page.ts b/x-pack/test/functional/page_objects/security_page.ts index 1db3541da17c8..4498689a428ba 100644 --- a/x-pack/test/functional/page_objects/security_page.ts +++ b/x-pack/test/functional/page_objects/security_page.ts @@ -295,18 +295,37 @@ export class SecurityPageObject extends FtrService { return user as AuthenticatedUser; } - async forceLogout() { + async forceLogout( + { waitForLoginPage }: { waitForLoginPage: boolean } = { waitForLoginPage: true } + ) { this.log.debug('SecurityPage.forceLogout'); if (await this.find.existsByDisplayedByCssSelector('.login-form', 100)) { this.log.debug('Already on the login page, not forcing anything'); return; } - this.log.debug('Redirecting to /logout to force the logout'); + this.log.debug(`Redirecting to ${this.deployment.getHostPort()}/logout to force the logout`); const url = this.deployment.getHostPort() + '/logout'; await this.browser.get(url); - this.log.debug('Waiting on the login form to appear'); - await this.waitForLoginPage(); + + // After logging out, the user can be redirected to various locations depending on the context. By default, we + // expect the user to be redirected to the login page. However, if the login page is not available for some reason, + // we should simply wait until the user is redirected *elsewhere*. + if (waitForLoginPage) { + this.log.debug('Waiting on the login form to appear'); + await this.waitForLoginPage(); + } else { + this.log.debug('Waiting for logout to complete'); + await this.retry.waitFor('Waiting for logout to complete', async () => { + // There are cases when browser/Kibana would like users to confirm that they want to navigate away from the + // current page and lose the state (e.g. unsaved changes) via native alert dialog. + const alert = await this.browser.getAlert(); + if (alert?.accept) { + await alert.accept(); + } + return !(await this.browser.getCurrentUrl()).includes('/logout'); + }); + } } async clickRolesSection() { diff --git a/x-pack/test/functional/services/actions/api.ts b/x-pack/test/functional/services/actions/api.ts index 89eef12cb3370..0506bf451ae84 100644 --- a/x-pack/test/functional/services/actions/api.ts +++ b/x-pack/test/functional/services/actions/api.ts @@ -17,15 +17,17 @@ export function ActionsAPIServiceProvider({ getService }: FtrProviderContext) { config, secrets, connectorTypeId, + additionalRequestHeaders, }: { name: string; config: Record; secrets: Record; connectorTypeId: string; + additionalRequestHeaders?: object; }) { const { body: createdAction } = await kbnSupertest .post(`/api/actions/connector`) - .set('kbn-xsrf', 'foo') + .set({ ...additionalRequestHeaders, 'kbn-xsrf': 'foo' }) .send({ name, config, @@ -37,24 +39,24 @@ export function ActionsAPIServiceProvider({ getService }: FtrProviderContext) { return createdAction; }, - async deleteConnector(id: string) { + async deleteConnector(id: string, additionalRequestHeaders?: object) { log.debug(`Deleting connector with id '${id}'...`); const rsp = kbnSupertest .delete(`/api/actions/connector/${id}`) - .set('kbn-xsrf', 'foo') + .set({ ...additionalRequestHeaders, 'kbn-xsrf': 'foo' }) .expect(204, ''); log.debug('> Connector deleted.'); return rsp; }, - async deleteAllConnectors() { + async deleteAllConnectors(additionalRequestHeaders?: object) { const { body } = await kbnSupertest .get(`/api/actions/connectors`) - .set('kbn-xsrf', 'foo') + .set({ ...additionalRequestHeaders, 'kbn-xsrf': 'foo' }) .expect(200); for (const connector of body) { - await this.deleteConnector(connector.id); + await this.deleteConnector(connector.id, additionalRequestHeaders); } }, }; diff --git a/x-pack/test/functional/services/rules/api.ts b/x-pack/test/functional/services/rules/api.ts index 3697756ef0da4..8ad6e45ee8572 100644 --- a/x-pack/test/functional/services/rules/api.ts +++ b/x-pack/test/functional/services/rules/api.ts @@ -56,11 +56,11 @@ export function RulesAPIServiceProvider({ getService }: FtrProviderContext) { return rsp; }, - async deleteAllRules() { + async deleteAllRules(additionalRequestHeaders?: object) { log.debug(`Deleting all rules...`); const { body } = await kbnSupertest .get(`/api/alerting/rules/_find`) - .set('kbn-xsrf', 'foo') + .set({ ...additionalRequestHeaders, 'kbn-xsrf': 'foo' }) .expect(200); for (const rule of body.data) { diff --git a/x-pack/test/functional/services/sample_data/test_resources.ts b/x-pack/test/functional/services/sample_data/test_resources.ts index bdf1c7ff93e42..5e5b5947464c6 100644 --- a/x-pack/test/functional/services/sample_data/test_resources.ts +++ b/x-pack/test/functional/services/sample_data/test_resources.ts @@ -13,21 +13,30 @@ export function SampleDataTestResourcesServiceProvider({ getService }: FtrProvid const kibanaServer = getService('kibanaServer'); return { - async installKibanaSampleData(sampleDataId: 'ecommerce' | 'flights' | 'logs') { - await supertest.post(`/api/sample_data/${sampleDataId}`).set('kbn-xsrf', 'true').expect(200); + async installKibanaSampleData( + sampleDataId: 'ecommerce' | 'flights' | 'logs', + additionalRequestHeaders?: object + ) { + await supertest + .post(`/api/sample_data/${sampleDataId}`) + .set({ ...additionalRequestHeaders, 'kbn-xsrf': 'true' }) + .expect(200); }, - async removeKibanaSampleData(sampleDataId: 'ecommerce' | 'flights' | 'logs') { + async removeKibanaSampleData( + sampleDataId: 'ecommerce' | 'flights' | 'logs', + additionalRequestHeaders?: object + ) { await supertest .delete(`/api/sample_data/${sampleDataId}`) - .set('kbn-xsrf', 'true') + .set({ ...additionalRequestHeaders, 'kbn-xsrf': 'true' }) .expect(204); }, - async installAllKibanaSampleData() { - await this.installKibanaSampleData('ecommerce'); - await this.installKibanaSampleData('flights'); - await this.installKibanaSampleData('logs'); + async installAllKibanaSampleData(additionalRequestHeaders?: object) { + await this.installKibanaSampleData('ecommerce', additionalRequestHeaders); + await this.installKibanaSampleData('flights', additionalRequestHeaders); + await this.installKibanaSampleData('logs', additionalRequestHeaders); // Sample data is shifted to be relative to current time // This means that a static timerange will return different documents @@ -46,10 +55,10 @@ export function SampleDataTestResourcesServiceProvider({ getService }: FtrProvid }); }, - async removeAllKibanaSampleData() { - await this.removeKibanaSampleData('ecommerce'); - await this.removeKibanaSampleData('flights'); - await this.removeKibanaSampleData('logs'); + async removeAllKibanaSampleData(additionalRequestHeaders?: object) { + await this.removeKibanaSampleData('ecommerce', additionalRequestHeaders); + await this.removeKibanaSampleData('flights', additionalRequestHeaders); + await this.removeKibanaSampleData('logs', additionalRequestHeaders); }, }; } diff --git a/x-pack/test/functional_embedded/tests/iframe_embedded.ts b/x-pack/test/functional_embedded/tests/iframe_embedded.ts index 0e2a461dd15f9..6d0872e8505fd 100644 --- a/x-pack/test/functional_embedded/tests/iframe_embedded.ts +++ b/x-pack/test/functional_embedded/tests/iframe_embedded.ts @@ -6,8 +6,6 @@ */ import Url from 'url'; -import expect from '@kbn/expect'; - import { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { @@ -17,12 +15,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const testSubjects = getService('testSubjects'); const retry = getService('retry'); - // FLAKY https://github.com/elastic/kibana/issues/70928 - describe.skip('in iframe', () => { + describe('in iframe', () => { it('should open Kibana for logged-in user', async () => { - const isChromeHiddenBefore = await PageObjects.common.isChromeHidden(); - expect(isChromeHiddenBefore).to.be(true); - await PageObjects.security.login(); const { protocol, hostname, port } = config.get('servers.kibana'); diff --git a/x-pack/test/functional_with_es_ssl/plugins/cases/public/application.tsx b/x-pack/test/functional_with_es_ssl/plugins/cases/public/application.tsx index afc7860303db5..851134d346d9a 100644 --- a/x-pack/test/functional_with_es_ssl/plugins/cases/public/application.tsx +++ b/x-pack/test/functional_with_es_ssl/plugins/cases/public/application.tsx @@ -8,7 +8,7 @@ import React from 'react'; import ReactDOM from 'react-dom'; import { - EuiPageTemplate_Deprecated as EuiPageTemplate, + EuiPageTemplate, EuiFlexGrid, EuiFlexItem, EuiPanel, diff --git a/x-pack/test/screenshot_creation/apps/response_ops_docs/stack_connectors/opsgenie_connector.ts b/x-pack/test/screenshot_creation/apps/response_ops_docs/stack_connectors/opsgenie_connector.ts index 163bc402b8083..432ececf2ba62 100644 --- a/x-pack/test/screenshot_creation/apps/response_ops_docs/stack_connectors/opsgenie_connector.ts +++ b/x-pack/test/screenshot_creation/apps/response_ops_docs/stack_connectors/opsgenie_connector.ts @@ -29,7 +29,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await commonScreenshots.takeScreenshot('opsgenie-connector', screenshotDirectories); await testSubjects.click('create-connector-flyout-save-test-btn'); await testSubjects.click('toastCloseButton'); - await commonScreenshots.takeScreenshot('opsgenie-params-test', screenshotDirectories); + await commonScreenshots.takeScreenshot('opsgenie-create-alert-test', screenshotDirectories); + await testSubjects.click('opsgenie-subActionSelect-close-alert'); + await testSubjects.click('opsgenie-display-more-options'); + await commonScreenshots.takeScreenshot('opsgenie-close-alert-test', screenshotDirectories); await testSubjects.click('euiFlyoutCloseButton'); }); }); diff --git a/x-pack/test/screenshot_creation/apps/response_ops_docs/stack_connectors/pagerduty_connector.ts b/x-pack/test/screenshot_creation/apps/response_ops_docs/stack_connectors/pagerduty_connector.ts index 49c3eac92b340..ddaa7291acaa8 100644 --- a/x-pack/test/screenshot_creation/apps/response_ops_docs/stack_connectors/pagerduty_connector.ts +++ b/x-pack/test/screenshot_creation/apps/response_ops_docs/stack_connectors/pagerduty_connector.ts @@ -30,7 +30,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await testSubjects.click('create-connector-flyout-save-test-btn'); await testSubjects.click('toastCloseButton'); await testSubjects.setValue('eventActionSelect', 'trigger'); - await commonScreenshots.takeScreenshot('pagerduty-params-test', screenshotDirectories); + await commonScreenshots.takeScreenshot('pagerduty-trigger-test', screenshotDirectories); + await testSubjects.setValue('eventActionSelect', 'resolve'); + await commonScreenshots.takeScreenshot('pagerduty-resolve-test', screenshotDirectories); + await testSubjects.setValue('eventActionSelect', 'acknowledge'); + await commonScreenshots.takeScreenshot('pagerduty-acknowledge-test', screenshotDirectories); await testSubjects.click('euiFlyoutCloseButton'); }); }); diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/login.ts b/x-pack/test/security_solution_cypress/cypress/tasks/login.ts index f0b7832e488c9..1383bcb4e9d71 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/login.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/login.ts @@ -12,6 +12,7 @@ import Url from 'url'; import type { ROLES } from '@kbn/security-solution-plugin/common/test'; import { NEW_FEATURES_TOUR_STORAGE_KEYS } from '@kbn/security-solution-plugin/common/constants'; +import { LoginState } from '@kbn/security-plugin/common/login_state'; import { hostDetailsUrl, LOGOUT_URL, @@ -50,11 +51,6 @@ const ELASTICSEARCH_USERNAME = 'ELASTICSEARCH_USERNAME'; */ const ELASTICSEARCH_PASSWORD = 'ELASTICSEARCH_PASSWORD'; -/** - * The Kibana server endpoint used for authentication - */ -const LOGIN_API_ENDPOINT = '/internal/security/login'; - /** * cy.visit will default to the baseUrl which uses the default kibana test user * This function will override that functionality in cy.visit by building the baseUrl @@ -141,53 +137,46 @@ export const deleteRoleAndUser = (role: ROLES) => { }); }; +const loginWithUsernameAndPassword = (username: string, password: string) => { + const baseUrl = Cypress.config().baseUrl; + if (!baseUrl) { + throw Error(`Cypress config baseUrl not set!`); + } + + const headers = { 'kbn-xsrf': 'cypress-creds', 'x-elastic-internal-origin': 'security-solution' }; + // programmatically authenticate without interacting with the Kibana login page + cy.request({ headers, url: `${baseUrl}/internal/security/login_state` }).then( + (loginState) => { + const basicProvider = loginState.body.selector.providers.find( + (provider) => provider.type === 'basic' + ); + return cy.request({ + url: `${baseUrl}/internal/security/login`, + method: 'POST', + headers, + body: { + providerType: basicProvider.type, + providerName: basicProvider.name, + currentURL: '/', + params: { username, password }, + }, + }); + } + ); +}; + export const loginWithUser = (user: User) => { cy.session(user, () => { - cy.request({ - body: { - providerType: 'basic', - providerName: 'basic', - currentURL: '/', - params: { - username: user.username, - password: user.password, - }, - }, - headers: { - 'kbn-xsrf': 'cypress-creds-via-config', - 'x-elastic-internal-origin': 'security-solution', - }, - method: 'POST', - url: constructUrlWithUser(user, LOGIN_API_ENDPOINT), - }); + loginWithUsernameAndPassword(user.username, user.password); }); }; -const loginWithRole = async (role: ROLES) => { +const loginWithRole = (role: ROLES) => { postRoleAndUser(role); - const theUrl = new URL(String(Cypress.config().baseUrl)); - theUrl.username = role; - theUrl.password = Cypress.env(ELASTICSEARCH_PASSWORD); - cy.log(`origin: ${theUrl}`); + cy.log(`origin: ${Cypress.config().baseUrl}`); cy.session(role, () => { - cy.request({ - body: { - providerType: 'basic', - providerName: 'basic', - currentURL: '/', - params: { - username: role, - password: 'changeme', - }, - }, - headers: { - 'kbn-xsrf': 'cypress-creds-via-config', - 'x-elastic-internal-origin': 'security-solution', - }, - method: 'POST', - url: getUrlWithRoute(role, LOGIN_API_ENDPOINT), - }); + loginWithUsernameAndPassword(role, 'changeme'); }); }; @@ -231,24 +220,7 @@ const loginViaEnvironmentCredentials = () => { const password = Cypress.env(ELASTICSEARCH_PASSWORD); cy.session([username, password], () => { - // programmatically authenticate without interacting with the Kibana login page - cy.request({ - body: { - providerType: 'basic', - providerName: 'basic', - currentURL: '/', - params: { - username, - password, - }, - }, - headers: { - 'kbn-xsrf': 'cypress-creds-via-env', - 'x-elastic-internal-origin': 'security-solution', - }, - method: 'POST', - url: `${Cypress.config().baseUrl}${LOGIN_API_ENDPOINT}`, - }); + loginWithUsernameAndPassword(username, password); }); }; @@ -264,26 +236,8 @@ const loginViaConfig = () => { // read the login details from `kibana.dev.yaml` cy.readFile(KIBANA_DEV_YML_PATH).then((kibanaDevYml) => { - const config = yaml.safeLoad(kibanaDevYml); - - // programmatically authenticate without interacting with the Kibana login page - cy.request({ - body: { - providerType: 'basic', - providerName: 'basic', - currentURL: '/', - params: { - username: config.elasticsearch.username, - password: config.elasticsearch.password, - }, - }, - headers: { - 'kbn-xsrf': 'cypress-creds-via-config', - 'x-elastic-internal-origin': 'security-solution', - }, - method: 'POST', - url: `${Cypress.config().baseUrl}${LOGIN_API_ENDPOINT}`, - }); + const { username, password } = yaml.safeLoad(kibanaDevYml); + loginWithUsernameAndPassword(username, password); }); }; diff --git a/x-pack/test/security_solution_cypress/cypress/tsconfig.json b/x-pack/test/security_solution_cypress/cypress/tsconfig.json index e24946f40a3ff..ec9ce83a98f03 100644 --- a/x-pack/test/security_solution_cypress/cypress/tsconfig.json +++ b/x-pack/test/security_solution_cypress/cypress/tsconfig.json @@ -36,6 +36,7 @@ "@kbn/expandable-flyout", "@kbn/config-schema", "@kbn/lists-plugin", - "@kbn/securitysolution-list-constants" + "@kbn/securitysolution-list-constants", + "@kbn/security-plugin" ] } diff --git a/x-pack/test_serverless/api_integration/services/index.ts b/x-pack/test_serverless/api_integration/services/index.ts index 14ecca6d1f768..6cdf47d857aa0 100644 --- a/x-pack/test_serverless/api_integration/services/index.ts +++ b/x-pack/test_serverless/api_integration/services/index.ts @@ -10,7 +10,6 @@ import { GenericFtrProviderContext } from '@kbn/test'; import { services as xpackApiIntegrationServices } from '../../../test/api_integration/services'; import { services as svlSharedServices } from '../../shared/services'; -import { SvlCommonApiServiceProvider } from './svl_common_api'; import { AlertingApiProvider } from './alerting_api'; import { SamlToolsProvider } from './saml_tools'; import { DataViewApiProvider } from './data_view_api'; @@ -20,7 +19,6 @@ export const services = { ...xpackApiIntegrationServices, ...svlSharedServices, - svlCommonApi: SvlCommonApiServiceProvider, alertingApi: AlertingApiProvider, samlTools: SamlToolsProvider, dataViewApi: DataViewApiProvider, diff --git a/x-pack/test_serverless/api_integration/test_suites/common/alerting/alert_documents.ts b/x-pack/test_serverless/api_integration/test_suites/common/alerting/alert_documents.ts index fbb2b2498d92d..12d23a3c6d78e 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/alerting/alert_documents.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/alerting/alert_documents.ts @@ -48,7 +48,6 @@ export default function ({ getService }: FtrProviderContext) { }, }); ruleId = createdRule.id; - expect(ruleId).not.to.be(undefined); objectRemover.add('default', ruleId, 'rule', 'alerting'); // get the first alert document written @@ -176,7 +175,6 @@ export default function ({ getService }: FtrProviderContext) { }, }); ruleId = createdRule.id; - expect(ruleId).not.to.be(undefined); objectRemover.add('default', ruleId, 'rule', 'alerting'); // get the first alert document written diff --git a/x-pack/test_serverless/api_integration/test_suites/common/alerting/helpers/alerting_api_helper.ts b/x-pack/test_serverless/api_integration/test_suites/common/alerting/helpers/alerting_api_helper.ts index 1ba17b77aca10..cd378ab98035b 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/alerting/helpers/alerting_api_helper.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/alerting/helpers/alerting_api_helper.ts @@ -46,8 +46,9 @@ export async function createIndexConnector({ refresh: true, }, connector_type_id: '.index', - }); - return body.id as string; + }) + .expect(200); + return body; } export async function createSlackConnector({ @@ -68,8 +69,9 @@ export async function createSlackConnector({ webhookUrl: 'http://test', }, connector_type_id: '.slack', - }); - return body.id as string; + }) + .expect(200); + return body; } export async function createEsQueryRule({ @@ -111,7 +113,8 @@ export async function createEsQueryRule({ rule_type_id: ruleTypeId, actions, ...(notifyWhen ? { notify_when: notifyWhen, throttle: '5m' } : {}), - }); + }) + .expect(200); return body; } @@ -125,7 +128,8 @@ export async function disableRule({ const { body } = await supertest .post(`/api/alerting/rule/${ruleId}/_disable`) .set('kbn-xsrf', 'foo') - .set('x-elastic-internal-origin', 'foo'); + .set('x-elastic-internal-origin', 'foo') + .expect(204); return body; } @@ -141,7 +145,8 @@ export async function updateEsQueryRule({ const { body: r } = await supertest .get(`/api/alerting/rule/${ruleId}`) .set('kbn-xsrf', 'foo') - .set('x-elastic-internal-origin', 'foo'); + .set('x-elastic-internal-origin', 'foo') + .expect(200); const body = await supertest .put(`/api/alerting/rule/${ruleId}`) .set('kbn-xsrf', 'foo') @@ -162,7 +167,8 @@ export async function updateEsQueryRule({ })), }, ...updates, - }); + }) + .expect(200); return body; } @@ -176,7 +182,8 @@ export async function runRule({ const response = await supertest .post(`/internal/alerting/rule/${ruleId}/_run_soon`) .set('kbn-xsrf', 'foo') - .set('x-elastic-internal-origin', 'foo'); + .set('x-elastic-internal-origin', 'foo') + .expect(204); return response; } @@ -190,7 +197,8 @@ export async function muteRule({ const { body } = await supertest .post(`/api/alerting/rule/${ruleId}/_mute_all`) .set('kbn-xsrf', 'foo') - .set('x-elastic-internal-origin', 'foo'); + .set('x-elastic-internal-origin', 'foo') + .expect(204); return body; } @@ -204,7 +212,8 @@ export async function enableRule({ const { body } = await supertest .post(`/api/alerting/rule/${ruleId}/_enable`) .set('kbn-xsrf', 'foo') - .set('x-elastic-internal-origin', 'foo'); + .set('x-elastic-internal-origin', 'foo') + .expect(204); return body; } @@ -220,7 +229,8 @@ export async function muteAlert({ const { body } = await supertest .post(`/api/alerting/rule/${ruleId}/alert/${alertId}/_mute`) .set('kbn-xsrf', 'foo') - .set('x-elastic-internal-origin', 'foo'); + .set('x-elastic-internal-origin', 'foo') + .expect(204); return body; } @@ -234,6 +244,7 @@ export async function unmuteRule({ const { body } = await supertest .post(`/api/alerting/rule/${ruleId}/_unmute_all`) .set('kbn-xsrf', 'foo') - .set('x-elastic-internal-origin', 'foo'); + .set('x-elastic-internal-origin', 'foo') + .expect(204); return body; } diff --git a/x-pack/test_serverless/api_integration/test_suites/common/alerting/helpers/alerting_wait_for_helpers.ts b/x-pack/test_serverless/api_integration/test_suites/common/alerting/helpers/alerting_wait_for_helpers.ts index bdca0ee15040a..7b86988e879c3 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/alerting/helpers/alerting_wait_for_helpers.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/alerting/helpers/alerting_wait_for_helpers.ts @@ -344,10 +344,7 @@ export async function waitForNumRuleRuns({ for (let i = 0; i < numOfRuns; i++) { await pRetry( async () => { - const resp = await runRule({ supertest, ruleId }); - if (resp.status !== 204) { - throw new Error(`Expected ${resp.status} to equal 204`); - } + await runRule({ supertest, ruleId }); await waitForExecutionEventLog({ esClient, filter: testStart, diff --git a/x-pack/test_serverless/api_integration/test_suites/common/alerting/index.ts b/x-pack/test_serverless/api_integration/test_suites/common/alerting/index.ts index 3225ecb4f71ce..4367656feae60 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/alerting/index.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/alerting/index.ts @@ -11,5 +11,6 @@ export default function ({ loadTestFile }: FtrProviderContext) { describe('Alerting APIs', function () { loadTestFile(require.resolve('./rules')); loadTestFile(require.resolve('./alert_documents')); + loadTestFile(require.resolve('./summary_actions')); }); } diff --git a/x-pack/test_serverless/api_integration/test_suites/common/alerting/rules.ts b/x-pack/test_serverless/api_integration/test_suites/common/alerting/rules.ts index 64c8fda9d6089..dd6060a397059 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/alerting/rules.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/alerting/rules.ts @@ -61,12 +61,12 @@ export default function ({ getService }: FtrProviderContext) { it('should schedule task, run rule and schedule actions when appropriate', async () => { const testStart = new Date(); - actionId = await createIndexConnector({ + const createdAction = await createIndexConnector({ supertest, name: 'Index Connector: Alerting API test', indexName: ALERT_ACTION_INDEX, }); - expect(actionId).not.to.be(undefined); + actionId = createdAction.id; const createdRule = await createEsQueryRule({ supertest, @@ -111,7 +111,6 @@ export default function ({ getService }: FtrProviderContext) { ], }); ruleId = createdRule.id; - expect(ruleId).not.to.be(undefined); // Wait for the action to index a document before disabling the alert and waiting for tasks to finish const resp = await waitForDocumentInIndex({ @@ -170,12 +169,12 @@ export default function ({ getService }: FtrProviderContext) { it('should pass updated rule params to executor', async () => { const testStart = new Date(); - actionId = await createIndexConnector({ + const createdAction = await createIndexConnector({ supertest, name: 'Index Connector: Alerting API test', indexName: ALERT_ACTION_INDEX, }); - expect(actionId).not.to.be(undefined); + actionId = createdAction.id; const createdRule = await createEsQueryRule({ supertest, @@ -220,7 +219,6 @@ export default function ({ getService }: FtrProviderContext) { ], }); ruleId = createdRule.id; - expect(ruleId).not.to.be(undefined); // Wait for the action to index a document before disabling the alert and waiting for tasks to finish const resp = await waitForDocumentInIndex({ @@ -289,11 +287,11 @@ export default function ({ getService }: FtrProviderContext) { const testStart = new Date(); // Should fail - actionId = await createSlackConnector({ + const createdAction = await createSlackConnector({ supertest, name: 'Slack Connector: Alerting API test', }); - expect(actionId).not.to.be(undefined); + actionId = createdAction.id; const createdRule = await createEsQueryRule({ supertest, @@ -326,7 +324,6 @@ export default function ({ getService }: FtrProviderContext) { ], }); ruleId = createdRule.id; - expect(ruleId).not.to.be(undefined); // Should retry when the the action fails const resp = await waitForAllTasks({ @@ -341,12 +338,12 @@ export default function ({ getService }: FtrProviderContext) { it('should throttle alerts when appropriate', async () => { const testStart = new Date(); - actionId = await createIndexConnector({ + const createdAction = await createIndexConnector({ supertest, name: 'Index Connector: Alerting API test', indexName: ALERT_ACTION_INDEX, }); - expect(actionId).not.to.be(undefined); + actionId = createdAction.id; const createdRule = await createEsQueryRule({ supertest, @@ -388,7 +385,6 @@ export default function ({ getService }: FtrProviderContext) { ], }); ruleId = createdRule.id; - expect(ruleId).not.to.be(undefined); // Wait until alerts ran at least 3 times before disabling the alert and waiting for tasks to finish await waitForNumRuleRuns({ supertest, numOfRuns: 3, ruleId, esClient, testStart }); @@ -415,12 +411,12 @@ export default function ({ getService }: FtrProviderContext) { it('should throttle alerts with throttled action when appropriate', async () => { const testStart = new Date(); - actionId = await createIndexConnector({ + const createdAction = await createIndexConnector({ supertest, name: 'Index Connector: Alerting API test', indexName: ALERT_ACTION_INDEX, }); - expect(actionId).not.to.be(undefined); + actionId = createdAction.id; const createdRule = await createEsQueryRule({ supertest, @@ -466,7 +462,6 @@ export default function ({ getService }: FtrProviderContext) { ], }); ruleId = createdRule.id; - expect(ruleId).not.to.be(undefined); // Wait until alerts ran at least 3 times before disabling the alert and waiting for tasks to finish await waitForNumRuleRuns({ supertest, numOfRuns: 3, ruleId, esClient, testStart }); @@ -493,12 +488,12 @@ export default function ({ getService }: FtrProviderContext) { it('should reset throttle window when not firing and should not throttle when changing groups', async () => { const testStart = new Date(); - actionId = await createIndexConnector({ + const createdAction = await createIndexConnector({ supertest, name: 'Index Connector: Alerting API test', indexName: ALERT_ACTION_INDEX, }); - expect(actionId).not.to.be(undefined); + actionId = createdAction.id; const createdRule = await createEsQueryRule({ supertest, @@ -568,7 +563,6 @@ export default function ({ getService }: FtrProviderContext) { ], }); ruleId = createdRule.id; - expect(ruleId).not.to.be(undefined); // Wait for the action to index a document const resp = await waitForDocumentInIndex({ @@ -638,12 +632,12 @@ export default function ({ getService }: FtrProviderContext) { const testStart = new Date(); await createIndex({ esClient, indexName: ALERT_ACTION_INDEX }); - actionId = await createIndexConnector({ + const createdAction = await createIndexConnector({ supertest, name: 'Index Connector: Alerting API test', indexName: ALERT_ACTION_INDEX, }); - expect(actionId).not.to.be(undefined); + actionId = createdAction.id; const createdRule = await createEsQueryRule({ supertest, @@ -689,7 +683,6 @@ export default function ({ getService }: FtrProviderContext) { ], }); ruleId = createdRule.id; - expect(ruleId).not.to.be(undefined); await muteRule({ supertest, @@ -728,12 +721,12 @@ export default function ({ getService }: FtrProviderContext) { const testStart = new Date(); await createIndex({ esClient, indexName: ALERT_ACTION_INDEX }); - actionId = await createIndexConnector({ + const createdAction = await createIndexConnector({ supertest, name: 'Index Connector: Alerting API test', indexName: ALERT_ACTION_INDEX, }); - expect(actionId).not.to.be(undefined); + actionId = createdAction.id; const createdRule = await createEsQueryRule({ supertest, @@ -779,7 +772,6 @@ export default function ({ getService }: FtrProviderContext) { ], }); ruleId = createdRule.id; - expect(ruleId).not.to.be(undefined); await muteAlert({ supertest, @@ -816,12 +808,12 @@ export default function ({ getService }: FtrProviderContext) { }); it(`should unmute all instances when unmuting an alert`, async () => { - actionId = await createIndexConnector({ + const createdAction = await createIndexConnector({ supertest, name: 'Index Connector: Alerting API test', indexName: ALERT_ACTION_INDEX, }); - expect(actionId).not.to.be(undefined); + actionId = createdAction.id; const createdRule = await createEsQueryRule({ supertest, @@ -867,7 +859,6 @@ export default function ({ getService }: FtrProviderContext) { ], }); ruleId = createdRule.id; - expect(ruleId).not.to.be(undefined); await muteAlert({ supertest, diff --git a/x-pack/test_serverless/api_integration/test_suites/common/alerting/summary_actions.ts b/x-pack/test_serverless/api_integration/test_suites/common/alerting/summary_actions.ts new file mode 100644 index 0000000000000..63e34eefae79d --- /dev/null +++ b/x-pack/test_serverless/api_integration/test_suites/common/alerting/summary_actions.ts @@ -0,0 +1,543 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor 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 { omit, padStart } from 'lodash'; +import { FtrProviderContext } from '../../../ftr_provider_context'; +import { createIndexConnector, createEsQueryRule } from './helpers/alerting_api_helper'; +import { + createIndex, + getDocumentsInIndex, + waitForAlertInIndex, + waitForDocumentInIndex, +} from './helpers/alerting_wait_for_helpers'; + +export default function ({ getService }: FtrProviderContext) { + const supertest = getService('supertest'); + const esClient = getService('es'); + const esDeleteAllIndices = getService('esDeleteAllIndices'); + + describe('Summary actions', () => { + const RULE_TYPE_ID = '.es-query'; + const ALERT_ACTION_INDEX = 'alert-action-es-query'; + const ALERT_INDEX = '.alerts-stack.alerts-default'; + let actionId: string; + let ruleId: string; + const fields = [ + '@timestamp', + 'event.action', + 'kibana.alert.duration.us', + 'kibana.alert.flapping_history', + 'kibana.alert.maintenance_window_ids', + 'kibana.alert.reason', + 'kibana.alert.rule.execution.uuid', + 'kibana.alert.rule.duration', + 'kibana.alert.start', + 'kibana.alert.time_range', + 'kibana.alert.uuid', + 'kibana.alert.url', + 'kibana.version', + ]; + + afterEach(async () => { + await supertest + .delete(`/api/actions/connector/${actionId}`) + .set('kbn-xsrf', 'foo') + .set('x-elastic-internal-origin', 'foo') + .expect(204); + await supertest + .delete(`/api/alerting/rule/${ruleId}`) + .set('kbn-xsrf', 'foo') + .set('x-elastic-internal-origin', 'foo') + .expect(204); + await esDeleteAllIndices([ALERT_ACTION_INDEX]); + }); + + it('should schedule actions for summary of alerts per rule run', async () => { + const testStart = new Date(); + const createdAction = await createIndexConnector({ + supertest, + name: 'Index Connector: Alerting API test', + indexName: ALERT_ACTION_INDEX, + }); + actionId = createdAction.id; + + const createdRule = await createEsQueryRule({ + supertest, + consumer: 'alerts', + name: 'always fire', + ruleTypeId: RULE_TYPE_ID, + params: { + size: 100, + thresholdComparator: '>', + threshold: [-1], + index: ['alert-test-data'], + timeField: 'date', + esQuery: `{\n \"query\":{\n \"match_all\" : {}\n }\n}`, + timeWindowSize: 20, + timeWindowUnit: 's', + }, + actions: [ + { + group: 'query matched', + id: actionId, + params: { + documents: [ + { + all: '{{alerts.all.count}}', + new: '{{alerts.new.count}}', + newIds: '[{{#alerts.new.data}}{{kibana.alert.instance.id}},{{/alerts.new.data}}]', + ongoing: '{{alerts.ongoing.count}}', + ongoingIds: + '[{{#alerts.ongoing.data}}{{kibana.alert.instance.id}},{{/alerts.ongoing.data}}]', + recovered: '{{alerts.recovered.count}}', + recoveredIds: + '[{{#alerts.recovered.data}}{{kibana.alert.instance.id}},{{/alerts.recovered.data}}]', + }, + ], + }, + frequency: { + notify_when: 'onActiveAlert', + throttle: null, + summary: true, + }, + alerts_filter: { + query: { kql: 'kibana.alert.rule.name:always fire', filters: [] }, + }, + }, + ], + }); + ruleId = createdRule.id; + + const resp = await waitForDocumentInIndex({ + esClient, + indexName: ALERT_ACTION_INDEX, + }); + expect(resp.hits.hits.length).to.be(1); + + const resp2 = await waitForAlertInIndex({ + esClient, + filter: testStart, + indexName: ALERT_INDEX, + ruleId, + num: 1, + }); + expect(resp2.hits.hits.length).to.be(1); + + const document = resp.hits.hits[0]; + expect(document._source).to.eql({ + all: '1', + new: '1', + newIds: '[query matched,]', + ongoing: '0', + ongoingIds: '[]', + recovered: '0', + recoveredIds: '[]', + }); + + const alertDocument = resp2.hits.hits[0]._source as Record; + expect(omit(alertDocument, fields)).to.eql({ + event: { + kind: 'signal', + }, + tags: [], + kibana: { + space_ids: ['default'], + alert: { + title: "rule 'always fire' matched query", + evaluation: { + conditions: 'Number of matching documents is greater than -1', + value: 0, + }, + action_group: 'query matched', + flapping: false, + duration: {}, + instance: { id: 'query matched' }, + status: 'active', + workflow_status: 'open', + rule: { + category: 'Elasticsearch query', + consumer: 'alerts', + name: 'always fire', + execution: {}, + parameters: { + size: 100, + thresholdComparator: '>', + threshold: [-1], + index: ['alert-test-data'], + timeField: 'date', + esQuery: '{\n "query":{\n "match_all" : {}\n }\n}', + timeWindowSize: 20, + timeWindowUnit: 's', + excludeHitsFromPreviousRun: true, + aggType: 'count', + groupBy: 'all', + searchType: 'esQuery', + }, + producer: 'stackAlerts', + revision: 0, + rule_type_id: '.es-query', + tags: [], + uuid: ruleId, + }, + }, + }, + }); + }); + + it('should filter alerts by kql', async () => { + const testStart = new Date(); + const createdAction = await createIndexConnector({ + supertest, + name: 'Index Connector: Alerting API test', + indexName: ALERT_ACTION_INDEX, + }); + actionId = createdAction.id; + + const createdRule = await createEsQueryRule({ + supertest, + consumer: 'alerts', + name: 'always fire', + ruleTypeId: RULE_TYPE_ID, + params: { + size: 100, + thresholdComparator: '>', + threshold: [-1], + index: ['alert-test-data'], + timeField: 'date', + esQuery: `{\n \"query\":{\n \"match_all\" : {}\n }\n}`, + timeWindowSize: 20, + timeWindowUnit: 's', + }, + actions: [ + { + group: 'query matched', + id: actionId, + params: { + documents: [ + { + all: '{{alerts.all.count}}', + new: '{{alerts.new.count}}', + newIds: '[{{#alerts.new.data}}{{kibana.alert.instance.id}},{{/alerts.new.data}}]', + ongoing: '{{alerts.ongoing.count}}', + ongoingIds: + '[{{#alerts.ongoing.data}}{{kibana.alert.instance.id}},{{/alerts.ongoing.data}}]', + recovered: '{{alerts.recovered.count}}', + recoveredIds: + '[{{#alerts.recovered.data}}{{kibana.alert.instance.id}},{{/alerts.recovered.data}}]', + }, + ], + }, + frequency: { + notify_when: 'onActiveAlert', + throttle: null, + summary: true, + }, + alerts_filter: { + query: { kql: 'kibana.alert.instance.id:query matched', filters: [] }, + }, + }, + ], + }); + ruleId = createdRule.id; + + const resp = await waitForDocumentInIndex({ + esClient, + indexName: ALERT_ACTION_INDEX, + }); + expect(resp.hits.hits.length).to.be(1); + + const resp2 = await waitForAlertInIndex({ + esClient, + filter: testStart, + indexName: ALERT_INDEX, + ruleId, + num: 1, + }); + expect(resp2.hits.hits.length).to.be(1); + + const document = resp.hits.hits[0]; + expect(document._source).to.eql({ + all: '1', + new: '1', + newIds: '[query matched,]', + ongoing: '0', + ongoingIds: '[]', + recovered: '0', + recoveredIds: '[]', + }); + + const alertDocument = resp2.hits.hits[0]._source as Record; + expect(omit(alertDocument, fields)).to.eql({ + event: { + kind: 'signal', + }, + tags: [], + kibana: { + space_ids: ['default'], + alert: { + title: "rule 'always fire' matched query", + evaluation: { + conditions: 'Number of matching documents is greater than -1', + value: 0, + }, + action_group: 'query matched', + flapping: false, + duration: {}, + instance: { id: 'query matched' }, + status: 'active', + workflow_status: 'open', + rule: { + category: 'Elasticsearch query', + consumer: 'alerts', + name: 'always fire', + execution: {}, + parameters: { + size: 100, + thresholdComparator: '>', + threshold: [-1], + index: ['alert-test-data'], + timeField: 'date', + esQuery: '{\n "query":{\n "match_all" : {}\n }\n}', + timeWindowSize: 20, + timeWindowUnit: 's', + excludeHitsFromPreviousRun: true, + aggType: 'count', + groupBy: 'all', + searchType: 'esQuery', + }, + producer: 'stackAlerts', + revision: 0, + rule_type_id: '.es-query', + tags: [], + uuid: ruleId, + }, + }, + }, + }); + }); + + it('should filter alerts by hours', async () => { + const now = new Date(); + now.setHours(now.getHours() + 1); + const hour = padStart(now.getUTCHours().toString(), 2, '0'); + const minutes = padStart(now.getUTCMinutes().toString(), 2, '0'); + + const start = `${hour}:${minutes}`; + const end = `${hour}:${minutes}`; + + await createIndex({ esClient, indexName: ALERT_ACTION_INDEX }); + + const createdAction = await createIndexConnector({ + supertest, + name: 'Index Connector: Alerting API test', + indexName: ALERT_ACTION_INDEX, + }); + actionId = createdAction.id; + + const createdRule = await createEsQueryRule({ + supertest, + consumer: 'alerts', + name: 'always fire', + ruleTypeId: RULE_TYPE_ID, + schedule: { interval: '1m' }, + params: { + size: 100, + thresholdComparator: '>', + threshold: [-1], + index: ['alert-test-data'], + timeField: 'date', + esQuery: `{\n \"query\":{\n \"match_all\" : {}\n }\n}`, + timeWindowSize: 20, + timeWindowUnit: 's', + }, + actions: [ + { + group: 'query matched', + id: actionId, + params: { + documents: [ + { + all: '{{alerts.all.count}}', + new: '{{alerts.new.count}}', + newIds: '[{{#alerts.new.data}}{{kibana.alert.instance.id}},{{/alerts.new.data}}]', + ongoing: '{{alerts.ongoing.count}}', + ongoingIds: + '[{{#alerts.ongoing.data}}{{kibana.alert.instance.id}},{{/alerts.ongoing.data}}]', + recovered: '{{alerts.recovered.count}}', + recoveredIds: + '[{{#alerts.recovered.data}}{{kibana.alert.instance.id}},{{/alerts.recovered.data}}]', + }, + ], + }, + frequency: { + notify_when: 'onActiveAlert', + throttle: null, + summary: true, + }, + alerts_filter: { + timeframe: { + days: [1, 2, 3, 4, 5, 6, 7], + timezone: 'UTC', + hours: { start, end }, + }, + }, + }, + ], + }); + ruleId = createdRule.id; + + // Should not have executed any action + const resp = await getDocumentsInIndex({ + esClient, + indexName: ALERT_ACTION_INDEX, + }); + expect(resp.hits.hits.length).to.be(0); + }); + + it('should schedule actions for summary of alerts on a custom interval', async () => { + const testStart = new Date(); + const createdAction = await createIndexConnector({ + supertest, + name: 'Index Connector: Alerting API test', + indexName: ALERT_ACTION_INDEX, + }); + actionId = createdAction.id; + + const createdRule = await createEsQueryRule({ + supertest, + consumer: 'alerts', + name: 'always fire', + ruleTypeId: RULE_TYPE_ID, + schedule: { interval: '1m' }, + params: { + size: 100, + thresholdComparator: '>', + threshold: [-1], + index: ['alert-test-data'], + timeField: 'date', + esQuery: `{\n \"query\":{\n \"match_all\" : {}\n }\n}`, + timeWindowSize: 20, + timeWindowUnit: 's', + }, + actions: [ + { + group: 'query matched', + id: actionId, + params: { + documents: [ + { + all: '{{alerts.all.count}}', + new: '{{alerts.new.count}}', + newIds: '[{{#alerts.new.data}}{{kibana.alert.instance.id}},{{/alerts.new.data}}]', + ongoing: '{{alerts.ongoing.count}}', + ongoingIds: + '[{{#alerts.ongoing.data}}{{kibana.alert.instance.id}},{{/alerts.ongoing.data}}]', + recovered: '{{alerts.recovered.count}}', + recoveredIds: + '[{{#alerts.recovered.data}}{{kibana.alert.instance.id}},{{/alerts.recovered.data}}]', + }, + ], + }, + frequency: { + notify_when: 'onThrottleInterval', + throttle: '1m', + summary: true, + }, + }, + ], + }); + ruleId = createdRule.id; + + const resp = await waitForDocumentInIndex({ + esClient, + indexName: ALERT_ACTION_INDEX, + num: 2, + }); + + const resp2 = await waitForAlertInIndex({ + esClient, + filter: testStart, + indexName: ALERT_INDEX, + ruleId, + num: 1, + }); + expect(resp2.hits.hits.length).to.be(1); + + const document = resp.hits.hits[0]; + expect(document._source).to.eql({ + all: '1', + new: '1', + newIds: '[query matched,]', + ongoing: '0', + ongoingIds: '[]', + recovered: '0', + recoveredIds: '[]', + }); + + const document1 = resp.hits.hits[1]; + expect(document1._source).to.eql({ + all: '1', + new: '0', + newIds: '[]', + ongoing: '1', + ongoingIds: '[query matched,]', + recovered: '0', + recoveredIds: '[]', + }); + + const alertDocument = resp2.hits.hits[0]._source as Record; + expect(omit(alertDocument, fields)).to.eql({ + event: { + kind: 'signal', + }, + tags: [], + kibana: { + space_ids: ['default'], + alert: { + title: "rule 'always fire' matched query", + evaluation: { + conditions: 'Number of matching documents is greater than -1', + value: 0, + }, + action_group: 'query matched', + flapping: false, + duration: {}, + instance: { id: 'query matched' }, + status: 'active', + workflow_status: 'open', + rule: { + category: 'Elasticsearch query', + consumer: 'alerts', + name: 'always fire', + execution: {}, + parameters: { + size: 100, + thresholdComparator: '>', + threshold: [-1], + index: ['alert-test-data'], + timeField: 'date', + esQuery: '{\n "query":{\n "match_all" : {}\n }\n}', + timeWindowSize: 20, + timeWindowUnit: 's', + excludeHitsFromPreviousRun: true, + aggType: 'count', + groupBy: 'all', + searchType: 'esQuery', + }, + producer: 'stackAlerts', + revision: 0, + rule_type_id: '.es-query', + tags: [], + uuid: ruleId, + }, + }, + }, + }); + }); + }); +} diff --git a/x-pack/test_serverless/functional/config.base.ts b/x-pack/test_serverless/functional/config.base.ts index 0f1eb73bbe2c7..a570d7a7e72f9 100644 --- a/x-pack/test_serverless/functional/config.base.ts +++ b/x-pack/test_serverless/functional/config.base.ts @@ -62,9 +62,15 @@ export function createTestConfig(options: CreateTestConfigOptions) { indexManagement: { pathname: '/app/management/data/index_management', }, + connectors: { + pathname: '/app/management/insightsAndAlerting/triggersActionsConnectors/', + }, advancedSettings: { pathname: '/app/management/kibana/settings', }, + login: { + pathname: '/login', + }, }, // choose where screenshots should be saved screenshots: { diff --git a/x-pack/test_serverless/functional/page_objects/svl_common_page.ts b/x-pack/test_serverless/functional/page_objects/svl_common_page.ts index e5fefeb546f8a..cf96bfd274eb9 100644 --- a/x-pack/test_serverless/functional/page_objects/svl_common_page.ts +++ b/x-pack/test_serverless/functional/page_objects/svl_common_page.ts @@ -7,10 +7,21 @@ import { FtrProviderContext } from '../ftr_provider_context'; -export function SvlCommonPageProvider({ getService }: FtrProviderContext) { +export function SvlCommonPageProvider({ getService, getPageObjects }: FtrProviderContext) { const testSubjects = getService('testSubjects'); + const config = getService('config'); + const pageObjects = getPageObjects(['security']); return { + async login() { + await pageObjects.security.forceLogout({ waitForLoginPage: false }); + return await pageObjects.security.login(config.get('servers.kibana.username')); + }, + + async forceLogout() { + await pageObjects.security.forceLogout({ waitForLoginPage: false }); + }, + async assertProjectHeaderExists() { await testSubjects.existOrFail('kibanaProjectHeader'); }, diff --git a/x-pack/test_serverless/functional/services/index.ts b/x-pack/test_serverless/functional/services/index.ts index 2c1ace79bc197..238a5ad110069 100644 --- a/x-pack/test_serverless/functional/services/index.ts +++ b/x-pack/test_serverless/functional/services/index.ts @@ -13,6 +13,7 @@ import { SvlCommonNavigationServiceProvider } from './svl_common_navigation'; import { SvlObltNavigationServiceProvider } from './svl_oblt_navigation'; import { SvlSearchNavigationServiceProvider } from './svl_search_navigation'; import { SvlSecNavigationServiceProvider } from './svl_sec_navigation'; +import { SvlCommonScreenshotsProvider } from './svl_common_screenshots'; export const services = { ...xpackFunctionalServices, @@ -22,4 +23,5 @@ export const services = { svlObltNavigation: SvlObltNavigationServiceProvider, svlSearchNavigation: SvlSearchNavigationServiceProvider, svlSecNavigation: SvlSecNavigationServiceProvider, + svlCommonScreenshots: SvlCommonScreenshotsProvider, }; diff --git a/x-pack/test_serverless/functional/services/svl_common_screenshots.ts b/x-pack/test_serverless/functional/services/svl_common_screenshots.ts new file mode 100644 index 0000000000000..20b0c8dba223e --- /dev/null +++ b/x-pack/test_serverless/functional/services/svl_common_screenshots.ts @@ -0,0 +1,46 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor 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 function SvlCommonScreenshotsProvider({ getService }: FtrProviderContext) { + const browser = getService('browser'); + const screenshot = getService('screenshots'); + const testSubjects = getService('testSubjects'); + + const DEFAULT_WIDTH = 1920; + const DEFAULT_HEIGHT = 1080; + + return { + async takeScreenshot(name: string, subDirectories: string[], width?: number, height?: number) { + await browser.setWindowSize(width ?? DEFAULT_WIDTH, height ?? DEFAULT_HEIGHT); + await new Promise((resolve) => setTimeout(resolve, 1000)); // give components time to resize + await screenshot.take(`${name}_new`, undefined, subDirectories); + await browser.setWindowSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); + }, + + async openKibanaNav() { + if (!(await testSubjects.exists('collapsibleNav'))) { + await testSubjects.click('toggleNavButton'); + } + await testSubjects.existOrFail('collapsibleNav'); + }, + + async closeKibanaNav() { + if (await testSubjects.exists('collapsibleNav')) { + await testSubjects.click('toggleNavButton'); + } + await testSubjects.missingOrFail('collapsibleNav'); + }, + + async removeFocusFromElement() { + // open and close the Kibana nav to un-focus the last used element + await this.openKibanaNav(); + await this.closeKibanaNav(); + }, + }; +} diff --git a/x-pack/test_serverless/functional/test_suites/common/security/api_keys.ts b/x-pack/test_serverless/functional/test_suites/common/security/api_keys.ts index 32c12c9b713b4..610ab692a4b0f 100644 --- a/x-pack/test_serverless/functional/test_suites/common/security/api_keys.ts +++ b/x-pack/test_serverless/functional/test_suites/common/security/api_keys.ts @@ -24,15 +24,19 @@ async function clearAllApiKeys(esClient: Client, logger: ToolingLog) { } export default ({ getPageObjects, getService }: FtrProviderContext) => { - const pageObjects = getPageObjects(['common', 'apiKeys']); + const pageObjects = getPageObjects(['common', 'svlCommonPage', 'apiKeys']); const browser = getService('browser'); const es = getService('es'); const log = getService('log'); - // FLAKY: https://github.com/elastic/kibana/issues/165553 - describe.skip('API keys', () => { + describe('API keys', () => { + before(async () => { + await pageObjects.svlCommonPage.login(); + }); + after(async () => { await clearAllApiKeys(es, log); + await pageObjects.svlCommonPage.forceLogout(); }); it('should create and delete API keys correctly', async () => { diff --git a/x-pack/test_serverless/functional/test_suites/observability/cases/attachment_framework.ts b/x-pack/test_serverless/functional/test_suites/observability/cases/attachment_framework.ts index f1e7408ebcf68..bfd2b8700d785 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/cases/attachment_framework.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/cases/attachment_framework.ts @@ -12,6 +12,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { const dashboard = getPageObject('dashboard'); const lens = getPageObject('lens'); const svlCommonNavigation = getPageObject('svlCommonNavigation'); + const svlCommonPage = getPageObject('svlCommonPage'); const svlObltNavigation = getService('svlObltNavigation'); const testSubjects = getService('testSubjects'); const esArchiver = getService('esArchiver'); @@ -22,6 +23,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { describe('Cases persistable attachments', () => { describe('lens visualization', () => { before(async () => { + await svlCommonPage.login(); await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/logstash_functional'); await kibanaServer.importExport.load( 'x-pack/test/functional/fixtures/kbn_archiver/lens/lens_basic.json' @@ -45,6 +47,8 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { await kibanaServer.importExport.unload( 'x-pack/test/functional/fixtures/kbn_archiver/lens/lens_basic.json' ); + + await svlCommonPage.forceLogout(); }); it('adds lens visualization to a new case', async () => { diff --git a/x-pack/test_serverless/functional/test_suites/observability/cases/configure.ts b/x-pack/test_serverless/functional/test_suites/observability/cases/configure.ts index a0d9cd0e96dd3..e0296f26e773e 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/cases/configure.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/cases/configure.ts @@ -11,6 +11,7 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default ({ getPageObject, getService }: FtrProviderContext) => { const common = getPageObject('common'); const svlCommonNavigation = getPageObject('svlCommonNavigation'); + const svlCommonPage = getPageObject('svlCommonPage'); const svlObltNavigation = getService('svlObltNavigation'); const testSubjects = getService('testSubjects'); const cases = getService('cases'); @@ -18,6 +19,8 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { describe('Configure Case', function () { before(async () => { + await svlCommonPage.login(); + await svlObltNavigation.navigateToLandingPage(); await svlCommonNavigation.sidenav.clickLink({ deepLinkId: 'observability-overview:cases' }); @@ -27,6 +30,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { after(async () => { await cases.api.deleteAllCases(); + await svlCommonPage.forceLogout(); }); describe('Closure options', function () { diff --git a/x-pack/test_serverless/functional/test_suites/observability/cases/create_case_form.ts b/x-pack/test_serverless/functional/test_suites/observability/cases/create_case_form.ts index d7934f57dbc36..b6c76f3ab1f49 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/cases/create_case_form.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/cases/create_case_form.ts @@ -19,14 +19,20 @@ export default ({ getService, getPageObject }: FtrProviderContext) => { const find = getService('find'); const cases = getService('cases'); const testSubjects = getService('testSubjects'); + const svlCommonPage = getPageObject('svlCommonPage'); const config = getService('config'); + before(async () => { + await svlCommonPage.login(); + }); + beforeEach(async () => { await navigateToCasesApp(getPageObject, getService, owner); }); after(async () => { await cases.api.deleteAllCases(); + await svlCommonPage.forceLogout(); }); it('creates a case', async () => { diff --git a/x-pack/test_serverless/functional/test_suites/observability/cases/list_view.ts b/x-pack/test_serverless/functional/test_suites/observability/cases/list_view.ts index d4dfdca15e82d..61cbd55f04b66 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/cases/list_view.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/cases/list_view.ts @@ -15,10 +15,12 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { const testSubjects = getService('testSubjects'); const cases = getService('cases'); const svlCommonNavigation = getPageObject('svlCommonNavigation'); + const svlCommonPage = getPageObject('svlCommonPage'); const svlObltNavigation = getService('svlObltNavigation'); describe('Cases list', () => { before(async () => { + await svlCommonPage.login(); await svlObltNavigation.navigateToLandingPage(); await svlCommonNavigation.sidenav.clickLink({ deepLinkId: 'observability-overview:cases' }); }); @@ -26,6 +28,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { after(async () => { await cases.api.deleteAllCases(); await cases.casesTable.waitForCasesToBeDeleted(); + await svlCommonPage.forceLogout(); }); describe('empty state', () => { diff --git a/x-pack/test_serverless/functional/test_suites/observability/cases/view_case.ts b/x-pack/test_serverless/functional/test_suites/observability/cases/view_case.ts index e86ddc9ffd015..be6295903615a 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/cases/view_case.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/cases/view_case.ts @@ -27,8 +27,17 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { const retry = getService('retry'); const comboBox = getService('comboBox'); const svlCommonNavigation = getPageObject('svlCommonNavigation'); + const svlCommonPage = getPageObject('svlCommonPage'); describe('Case View', () => { + before(async () => { + await svlCommonPage.login(); + }); + + after(async () => { + await svlCommonPage.forceLogout(); + }); + describe('page', () => { createOneCaseBeforeDeleteAllAfter(getPageObject, getService, owner); diff --git a/x-pack/test_serverless/functional/test_suites/observability/cypress/support/commands.ts b/x-pack/test_serverless/functional/test_suites/observability/cypress/support/commands.ts index 715e5c9df22fc..42b6801c6ab5b 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/cypress/support/commands.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/cypress/support/commands.ts @@ -7,27 +7,36 @@ import 'cypress-axe'; import 'cypress-real-events/support'; import URL from 'url'; +import { request } from '@kbn/security-solution-plugin/public/management/cypress/tasks/common'; +import { LoginState } from '@kbn/security-plugin/common/login_state'; Cypress.Commands.add('loginAsElasticUser', () => { const username = Cypress.env('username'); const password = Cypress.env('password'); const kibanaUrlWithoutAuth = Cypress.env('kibanaUrlWithoutAuth'); + const headers = { 'kbn-xsrf': 'e2e_test', 'x-elastic-internal-origin': 'kibana' }; cy.log(`Logging in as ${username} on ${kibanaUrlWithoutAuth}`); - cy.visit('/'); - cy.request({ - log: true, - method: 'POST', - url: `${kibanaUrlWithoutAuth}/internal/security/login`, - body: { - providerType: 'basic', - providerName: 'basic', - currentURL: `${kibanaUrlWithoutAuth}/login`, - params: { username, password }, - }, - headers: { - 'kbn-xsrf': 'e2e_test', - 'x-elastic-internal-origin': 'kibana', - }, + cy.visit('/login'); + + cy.request({ + headers, + url: `${kibanaUrlWithoutAuth}/internal/security/login_state`, + }).then((loginState) => { + const basicProvider = loginState.body.selector.providers.find( + (provider) => provider.type === 'basic' + ); + return request({ + headers, + log: true, + method: 'POST', + url: `${kibanaUrlWithoutAuth}/internal/security/login`, + body: { + providerType: basicProvider.type, + providerName: basicProvider.name, + currentURL: `${kibanaUrlWithoutAuth}/login`, + params: { username, password }, + }, + }); }); cy.visit('/'); }); diff --git a/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/dataset_selector.ts b/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/dataset_selector.ts index 622c282e716eb..c646c7ad7c2e3 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/dataset_selector.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/dataset_selector.ts @@ -20,13 +20,18 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const browser = getService('browser'); const esArchiver = getService('esArchiver'); const retry = getService('retry'); - const PageObjects = getPageObjects(['common', 'observabilityLogExplorer']); + const PageObjects = getPageObjects(['common', 'observabilityLogExplorer', 'svlCommonPage']); describe('Dataset Selector', () => { before(async () => { + await PageObjects.svlCommonPage.login(); await PageObjects.observabilityLogExplorer.removeInstalledPackages(); }); + after(async () => { + await PageObjects.svlCommonPage.forceLogout(); + }); + describe('without installed integrations or uncategorized data streams', () => { before(async () => { await PageObjects.observabilityLogExplorer.navigateTo(); diff --git a/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/filter_controls.ts b/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/filter_controls.ts index b5e25744f2c5b..b28c040f56c98 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/filter_controls.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/observability_log_explorer/filter_controls.ts @@ -8,16 +8,18 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['observabilityLogExplorer']); + const PageObjects = getPageObjects(['observabilityLogExplorer', 'svlCommonPage']); const testSubjects = getService('testSubjects'); describe('Filter controls customization', () => { before('initialize tests', async () => { + await PageObjects.svlCommonPage.login(); await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover'); }); after('clean up archives', async () => { await kibanaServer.importExport.unload('test/functional/fixtures/kbn_archiver/discover'); + await PageObjects.svlCommonPage.forceLogout(); }); it('renders a filter controls section as part of the unified search bar', async () => { diff --git a/x-pack/test_serverless/functional/test_suites/search/cases/attachment_framework.ts b/x-pack/test_serverless/functional/test_suites/search/cases/attachment_framework.ts index 4f08611809886..bff6144d44bb2 100644 --- a/x-pack/test_serverless/functional/test_suites/search/cases/attachment_framework.ts +++ b/x-pack/test_serverless/functional/test_suites/search/cases/attachment_framework.ts @@ -15,8 +15,17 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { const lens = getPageObject('lens'); const svlSearchNavigation = getService('svlSearchNavigation'); const svlCommonNavigation = getPageObject('svlCommonNavigation'); + const svlCommonPage = getPageObject('svlCommonPage'); describe('persistable attachment', () => { + before(async () => { + await svlCommonPage.login(); + }); + + after(async () => { + await svlCommonPage.forceLogout(); + }); + describe('lens visualization', () => { before(async () => { await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/logstash_functional'); diff --git a/x-pack/test_serverless/functional/test_suites/search/config.screenshots.ts b/x-pack/test_serverless/functional/test_suites/search/config.screenshots.ts new file mode 100644 index 0000000000000..fd53eda92aa5e --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/search/config.screenshots.ts @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { createTestConfig } from '../../config.base'; + +const enabledActionTypes = ['.index', '.server-log']; + +export default createTestConfig({ + serverlessProject: 'es', + testFiles: [require.resolve('./screenshot_creation')], + kbnServerArgs: [`--xpack.actions.enabledActionTypes=${JSON.stringify(enabledActionTypes)}`], + junit: { + reportName: 'Serverless Search Screenshot Creation', + }, +}); diff --git a/x-pack/test_serverless/functional/test_suites/search/dashboards/build_dashboard.ts b/x-pack/test_serverless/functional/test_suites/search/dashboards/build_dashboard.ts index f8d8db6f06ed4..d91d296c75624 100644 --- a/x-pack/test_serverless/functional/test_suites/search/dashboards/build_dashboard.ts +++ b/x-pack/test_serverless/functional/test_suites/search/dashboards/build_dashboard.ts @@ -16,6 +16,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { 'common', 'header', 'lens', + 'svlCommonPage', ]); const pieChart = getService('pieChart'); @@ -27,6 +28,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { describe('Building a new dashboard', function () { before(async () => { + await PageObjects.svlCommonPage.login(); await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/logstash_functional'); await kibanaServer.importExport.load( 'x-pack/test/functional/fixtures/kbn_archiver/lens/lens_basic.json' @@ -42,6 +44,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await kibanaServer.importExport.unload( 'x-pack/test/functional/fixtures/kbn_archiver/lens/lens_basic.json' ); + await PageObjects.svlCommonPage.forceLogout(); }); it('can add a lens panel by value', async () => { diff --git a/x-pack/test_serverless/functional/test_suites/search/dashboards/import_dashboard.ts b/x-pack/test_serverless/functional/test_suites/search/dashboards/import_dashboard.ts index 2f01a0a67167f..30d99d112e640 100644 --- a/x-pack/test_serverless/functional/test_suites/search/dashboards/import_dashboard.ts +++ b/x-pack/test_serverless/functional/test_suites/search/dashboards/import_dashboard.ts @@ -18,10 +18,18 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects(['common', 'settings', 'header', 'savedObjects', 'dashboard']); + const PageObjects = getPageObjects([ + 'common', + 'settings', + 'header', + 'savedObjects', + 'dashboard', + 'svlCommonPage', + ]); describe('Importing an existing dashboard', () => { before(async () => { + await PageObjects.svlCommonPage.login(); await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/logstash_functional'); await kibanaServer.uiSettings.replace({}); }); @@ -29,6 +37,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { after(async () => { await esArchiver.unload('x-pack/test/functional/es_archives/logstash_functional'); await kibanaServer.savedObjects.cleanStandardList(); + await PageObjects.svlCommonPage.forceLogout(); }); it('should be able to import dashboard created in 8.11', async () => { diff --git a/x-pack/test_serverless/functional/test_suites/search/empty_page.ts b/x-pack/test_serverless/functional/test_suites/search/empty_page.ts index 9808bb69bbeb6..5a7891968cb81 100644 --- a/x-pack/test_serverless/functional/test_suites/search/empty_page.ts +++ b/x-pack/test_serverless/functional/test_suites/search/empty_page.ts @@ -11,12 +11,18 @@ export default function ({ getPageObject, getService }: FtrProviderContext) { const svlSearchNavigation = getService('svlSearchNavigation'); const testSubjects = getService('testSubjects'); const svlCommonNavigation = getPageObject('svlCommonNavigation'); + const svlCommonPage = getPageObject('svlCommonPage'); describe('empty pages', function () { before(async () => { + await svlCommonPage.login(); await svlSearchNavigation.navigateToLandingPage(); }); + after(async () => { + await svlCommonPage.forceLogout(); + }); + it('should show search specific empty page in discover', async () => { await svlCommonNavigation.sidenav.clickLink({ deepLinkId: 'discover' }); await testSubjects.existOrFail('kbnOverviewElasticsearchGettingStarted'); diff --git a/x-pack/test_serverless/functional/test_suites/search/landing_page.ts b/x-pack/test_serverless/functional/test_suites/search/landing_page.ts index f05f4808e309f..9a410a71e0844 100644 --- a/x-pack/test_serverless/functional/test_suites/search/landing_page.ts +++ b/x-pack/test_serverless/functional/test_suites/search/landing_page.ts @@ -7,14 +7,22 @@ import { FtrProviderContext } from '../../ftr_provider_context'; -export default function ({ getPageObject, getService }: FtrProviderContext) { - const svlSearchLandingPage = getPageObject('svlSearchLandingPage'); +export default function ({ getPageObjects, getService }: FtrProviderContext) { + const pageObjects = getPageObjects(['svlSearchLandingPage', 'svlCommonPage']); const svlSearchNavigation = getService('svlSearchNavigation'); describe('landing page', function () { + before(async () => { + await pageObjects.svlCommonPage.login(); + }); + + after(async () => { + await pageObjects.svlCommonPage.forceLogout(); + }); + it('has serverless side nav', async () => { await svlSearchNavigation.navigateToLandingPage(); - await svlSearchLandingPage.assertSvlSearchSideNavExists(); + await pageObjects.svlSearchLandingPage.assertSvlSearchSideNavExists(); }); }); } diff --git a/x-pack/test_serverless/functional/test_suites/search/navigation.ts b/x-pack/test_serverless/functional/test_suites/search/navigation.ts index ba19e7b756073..52369c12c66bb 100644 --- a/x-pack/test_serverless/functional/test_suites/search/navigation.ts +++ b/x-pack/test_serverless/functional/test_suites/search/navigation.ts @@ -12,14 +12,20 @@ export default function ({ getPageObject, getService }: FtrProviderContext) { const svlSearchLandingPage = getPageObject('svlSearchLandingPage'); const svlSearchNavigation = getService('svlSearchNavigation'); const svlCommonNavigation = getPageObject('svlCommonNavigation'); + const svlCommonPage = getPageObject('svlCommonPage'); const testSubjects = getService('testSubjects'); const browser = getService('browser'); describe('navigation', function () { before(async () => { + await svlCommonPage.login(); await svlSearchNavigation.navigateToLandingPage(); }); + after(async () => { + await svlCommonPage.forceLogout(); + }); + it('navigate search sidenav & breadcrumbs', async () => { const expectNoPageReload = await svlCommonNavigation.createNoPageReloadCheck(); diff --git a/x-pack/test_serverless/functional/test_suites/search/screenshot_creation/index.ts b/x-pack/test_serverless/functional/test_suites/search/screenshot_creation/index.ts new file mode 100644 index 0000000000000..90e905735c307 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/search/screenshot_creation/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 function ({ loadTestFile }: FtrProviderContext) { + describe('Screenshots - serverless search UI', function () { + loadTestFile(require.resolve('./response_ops_docs')); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/search/screenshot_creation/response_ops_docs/index.ts b/x-pack/test_serverless/functional/test_suites/search/screenshot_creation/response_ops_docs/index.ts new file mode 100644 index 0000000000000..3df3eaa1939b4 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/search/screenshot_creation/response_ops_docs/index.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 { FtrProviderContext } from '../../../../ftr_provider_context'; + +export const ECOMMERCE_INDEX_PATTERN = 'kibana_sample_data_ecommerce'; +export const FLIGHTS_INDEX_PATTERN = 'kibana_sample_data_flights'; +export const LOGS_INDEX_PATTERN = 'kibana_sample_data_logs'; + +export default function ({ getService, loadTestFile }: FtrProviderContext) { + const browser = getService('browser'); + const ml = getService('ml'); + const sampleData = getService('sampleData'); + const svlCommonApi = getService('svlCommonApi'); + + describe('response ops docs', function () { + this.tags(['responseOps']); + + before(async () => { + await sampleData.testResources.installAllKibanaSampleData( + svlCommonApi.getInternalRequestHeader() + ); + await ml.testResources.setKibanaTimeZoneToUTC(); + await ml.testResources.disableKibanaAnnouncements(); + await browser.setWindowSize(1920, 1080); + }); + + after(async () => { + await sampleData.testResources.removeAllKibanaSampleData( + svlCommonApi.getInternalRequestHeader() + ); + await ml.testResources.resetKibanaTimeZone(); + await ml.testResources.resetKibanaAnnouncements(); + }); + + loadTestFile(require.resolve('./stack_connectors')); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/search/screenshot_creation/response_ops_docs/stack_connectors/connectors.ts b/x-pack/test_serverless/functional/test_suites/search/screenshot_creation/response_ops_docs/stack_connectors/connectors.ts new file mode 100644 index 0000000000000..8bfada9db1044 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/search/screenshot_creation/response_ops_docs/stack_connectors/connectors.ts @@ -0,0 +1,60 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor 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 function ({ getService, getPageObjects }: FtrProviderContext) { + const svlCommonScreenshots = getService('svlCommonScreenshots'); + // const browser = getService('browser'); + // const find = getService('find'); + // const testSubjects = getService('testSubjects'); + const screenshotDirectories = ['response_ops_docs', 'stack_connectors']; + const pageObjects = getPageObjects(['common', 'header', 'svlCommonPage']); + + describe('connectors', function () { + before(async () => { + await pageObjects.svlCommonPage.login(); + }); + + after(async () => { + await pageObjects.svlCommonPage.forceLogout(); + }); + + it('connectors list screenshot', async () => { + await pageObjects.common.navigateToApp('connectors'); + await pageObjects.header.waitUntilLoadingHasFinished(); + await svlCommonScreenshots.takeScreenshot( + 'connector-listing', + screenshotDirectories, + 1400, + 1024 + ); + + // const searchBox = await find.byCssSelector('[data-test-subj="actionsList"] .euiFieldSearch'); + // await searchBox.click(); + // await searchBox.clearValue(); + // await searchBox.type('my actionTypeId:(.index)'); + // await searchBox.pressKeys(browser.keys.ENTER); + // const typeFilter = await find.byCssSelector( + // '[data-test-subj="actionsList"] .euiFilterButton' + // ); + // await typeFilter.click(); + // await commonScreenshots.takeScreenshot( + // 'connector-filter-by-type', + // screenshotDirectories, + // 1400, + // 1024 + // ); + + // const clearSearchButton = await testSubjects.find('clearSearchButton'); + // await clearSearchButton.click(); + // const checkAllButton = await testSubjects.find('checkboxSelectAll'); + // await checkAllButton.click(); + // await commonScreenshots.takeScreenshot('connector-delete', screenshotDirectories, 1400, 1024); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/search/screenshot_creation/response_ops_docs/stack_connectors/index.ts b/x-pack/test_serverless/functional/test_suites/search/screenshot_creation/response_ops_docs/stack_connectors/index.ts new file mode 100644 index 0000000000000..f5f06e36d3ca7 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/search/screenshot_creation/response_ops_docs/stack_connectors/index.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 { FtrProviderContext } from '../../../../../ftr_provider_context'; + +export default function ({ loadTestFile, getService }: FtrProviderContext) { + const actions = getService('actions'); + const browser = getService('browser'); + const es = getService('es'); + const rules = getService('rules'); + const testIndex = `test-index`; + const svlCommonApi = getService('svlCommonApi'); + + describe('stack connectors', function () { + before(async () => { + await browser.setWindowSize(1920, 1080); + await actions.api.createConnector({ + name: 'server-log-connector', + config: {}, + secrets: {}, + connectorTypeId: '.server-log', + additionalRequestHeaders: svlCommonApi.getInternalRequestHeader(), + }); + + await es.indices.create({ + index: testIndex, + body: { + mappings: { + properties: { + date_updated: { + type: 'date', + format: 'epoch_millis', + }, + }, + }, + }, + }); + + await actions.api.createConnector({ + name: 'my-index-connector', + config: { + index: testIndex, + }, + secrets: {}, + connectorTypeId: '.index', + additionalRequestHeaders: svlCommonApi.getInternalRequestHeader(), + }); + }); + + after(async () => { + await rules.api.deleteAllRules(svlCommonApi.getInternalRequestHeader()); + await actions.api.deleteAllConnectors(svlCommonApi.getInternalRequestHeader()); + await es.indices.delete({ index: testIndex }); + }); + + loadTestFile(require.resolve('./connectors')); + // loadTestFile(require.resolve('./connector_types')); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/security/cypress/tasks/login.ts b/x-pack/test_serverless/functional/test_suites/security/cypress/tasks/login.ts index a8cd016ed6159..de79a7a94f275 100644 --- a/x-pack/test_serverless/functional/test_suites/security/cypress/tasks/login.ts +++ b/x-pack/test_serverless/functional/test_suites/security/cypress/tasks/login.ts @@ -6,6 +6,7 @@ */ import { request } from '@kbn/security-solution-plugin/public/management/cypress/tasks/common'; +import { LoginState } from '@kbn/security-plugin/common/login_state'; import type { ServerlessRoleName } from '../../../../../shared/lib'; import { STANDARD_HTTP_HEADERS } from '../../../../../shared/lib/security/default_http_headers'; @@ -20,30 +21,29 @@ const sendApiLoginRequest = ( username: string, password: string ): Cypress.Chainable<{ username: string; password: string }> => { - const url = new URL(Cypress.config().baseUrl ?? ''); - url.pathname = '/internal/security/login'; + const baseUrl = Cypress.config().baseUrl; - cy.log(`Authenticating [${username}] via ${url.toString()}`); + cy.log(`Authenticating [${username}] via ${baseUrl}`); - return request({ - headers: { ...STANDARD_HTTP_HEADERS }, - method: 'POST', - url: url.toString(), - body: { - providerType: 'basic', - providerName: 'basic', - currentURL: '/', - params: { - username, - password, - }, - }, - }).then(() => { - return { - username, - password, - }; - }); + const headers = { ...STANDARD_HTTP_HEADERS }; + return request({ headers, url: `${baseUrl}/internal/security/login_state` }) + .then((loginState) => { + const basicProvider = loginState.body.selector.providers.find( + (provider) => provider.type === 'basic' + ); + return request({ + url: `${baseUrl}/internal/security/login`, + method: 'POST', + headers, + body: { + providerType: basicProvider.type, + providerName: basicProvider.name, + currentURL: '/', + params: { username, password }, + }, + }); + }) + .then(() => ({ username, password })); }; interface CyLoginTask { diff --git a/x-pack/test_serverless/functional/test_suites/security/ftr/cases/configure.ts b/x-pack/test_serverless/functional/test_suites/security/ftr/cases/configure.ts index 564f14e8353c9..f155629558ff8 100644 --- a/x-pack/test_serverless/functional/test_suites/security/ftr/cases/configure.ts +++ b/x-pack/test_serverless/functional/test_suites/security/ftr/cases/configure.ts @@ -10,6 +10,7 @@ import { FtrProviderContext } from '../../../../ftr_provider_context'; export default ({ getPageObject, getService }: FtrProviderContext) => { const common = getPageObject('common'); + const svlCommonPage = getPageObject('svlCommonPage'); const svlSecNavigation = getService('svlSecNavigation'); const testSubjects = getService('testSubjects'); const cases = getService('cases'); @@ -17,6 +18,8 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { describe('Configure Case', function () { before(async () => { + await svlCommonPage.login(); + await svlSecNavigation.navigateToLandingPage(); await testSubjects.click('solutionSideNavItemLink-cases'); @@ -26,6 +29,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { after(async () => { await cases.api.deleteAllCases(); + await svlCommonPage.forceLogout(); }); describe('Closure options', function () { diff --git a/x-pack/test_serverless/functional/test_suites/security/ftr/cases/create_case_form.ts b/x-pack/test_serverless/functional/test_suites/security/ftr/cases/create_case_form.ts index 0e3fb3d57708a..251af239b04e3 100644 --- a/x-pack/test_serverless/functional/test_suites/security/ftr/cases/create_case_form.ts +++ b/x-pack/test_serverless/functional/test_suites/security/ftr/cases/create_case_form.ts @@ -20,13 +20,19 @@ export default ({ getService, getPageObject }: FtrProviderContext) => { const cases = getService('cases'); const testSubjects = getService('testSubjects'); const config = getService('config'); + const svlCommonPage = getPageObject('svlCommonPage'); beforeEach(async () => { await navigateToCasesApp(getPageObject, getService, owner); }); + before(async () => { + await svlCommonPage.login(); + }); + after(async () => { await cases.api.deleteAllCases(); + await svlCommonPage.forceLogout(); }); it('creates a case', async () => { diff --git a/x-pack/test_serverless/functional/test_suites/security/ftr/cases/list_view.ts b/x-pack/test_serverless/functional/test_suites/security/ftr/cases/list_view.ts index e05c16551982b..e3d1d8408beff 100644 --- a/x-pack/test_serverless/functional/test_suites/security/ftr/cases/list_view.ts +++ b/x-pack/test_serverless/functional/test_suites/security/ftr/cases/list_view.ts @@ -15,9 +15,12 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { const testSubjects = getService('testSubjects'); const cases = getService('cases'); const svlSecNavigation = getService('svlSecNavigation'); + const svlCommonPage = getPageObject('svlCommonPage'); describe('Cases List', () => { before(async () => { + await svlCommonPage.login(); + await svlSecNavigation.navigateToLandingPage(); await testSubjects.click('solutionSideNavItemLink-cases'); @@ -26,6 +29,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { after(async () => { await cases.api.deleteAllCases(); await cases.casesTable.waitForCasesToBeDeleted(); + await svlCommonPage.forceLogout(); }); describe('empty state', () => { diff --git a/x-pack/test_serverless/functional/test_suites/security/ftr/cases/view_case.ts b/x-pack/test_serverless/functional/test_suites/security/ftr/cases/view_case.ts index 33fa7d6d25dc0..0b26fc2cf4c3d 100644 --- a/x-pack/test_serverless/functional/test_suites/security/ftr/cases/view_case.ts +++ b/x-pack/test_serverless/functional/test_suites/security/ftr/cases/view_case.ts @@ -27,8 +27,17 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { const retry = getService('retry'); const comboBox = getService('comboBox'); const svlCommonNavigation = getPageObject('svlCommonNavigation'); + const svlCommonPage = getPageObject('svlCommonPage'); describe('Case View', () => { + before(async () => { + await svlCommonPage.login(); + }); + + after(async () => { + await svlCommonPage.forceLogout(); + }); + describe('page', () => { createOneCaseBeforeDeleteAllAfter(getPageObject, getService, owner); diff --git a/x-pack/test_serverless/functional/test_suites/security/ftr/landing_page.ts b/x-pack/test_serverless/functional/test_suites/security/ftr/landing_page.ts index 97d7a62606a80..555730b2910a5 100644 --- a/x-pack/test_serverless/functional/test_suites/security/ftr/landing_page.ts +++ b/x-pack/test_serverless/functional/test_suites/security/ftr/landing_page.ts @@ -10,8 +10,17 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getPageObject, getService }: FtrProviderContext) { const svlSecLandingPage = getPageObject('svlSecLandingPage'); const svlSecNavigation = getService('svlSecNavigation'); + const svlCommonPage = getPageObject('svlCommonPage'); describe('landing page', function () { + before(async () => { + await svlCommonPage.login(); + }); + + after(async () => { + await svlCommonPage.forceLogout(); + }); + it('has serverless side nav', async () => { await svlSecNavigation.navigateToLandingPage(); await svlSecLandingPage.assertSvlSecSideNavExists(); diff --git a/x-pack/test_serverless/functional/test_suites/security/ftr/management.ts b/x-pack/test_serverless/functional/test_suites/security/ftr/management.ts index 98565ffed71fc..ab9d75f4b08c0 100644 --- a/x-pack/test_serverless/functional/test_suites/security/ftr/management.ts +++ b/x-pack/test_serverless/functional/test_suites/security/ftr/management.ts @@ -9,8 +9,17 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getPageObject }: FtrProviderContext) { const PageObject = getPageObject('common'); + const svlCommonPage = getPageObject('svlCommonPage'); describe('Management', function () { + before(async () => { + await svlCommonPage.login(); + }); + + after(async () => { + await svlCommonPage.forceLogout(); + }); + it('redirects from common management url to security specific page', async () => { const SUB_URL = ''; await PageObject.navigateToUrl('management', SUB_URL, { diff --git a/x-pack/test_serverless/shared/config.base.ts b/x-pack/test_serverless/shared/config.base.ts index d842e539ce216..eb193d5ea5487 100644 --- a/x-pack/test_serverless/shared/config.base.ts +++ b/x-pack/test_serverless/shared/config.base.ts @@ -119,13 +119,12 @@ export default async () => { ])}`, // This ensures that we register the Security SAML API endpoints. // In the real world the SAML config is injected by control plane. - // basic: { 'basic': { order: 0 } }, `--plugin-path=${samlIdPPlugin}`, '--xpack.cloud.id=ftr_fake_cloud_id', '--xpack.security.authc.selector.enabled=false', `--xpack.security.authc.providers=${JSON.stringify({ - basic: { basic: { order: 0 } }, - saml: { 'cloud-saml-kibana': { order: 1, realm: 'cloud-saml-kibana' } }, + saml: { 'cloud-saml-kibana': { order: 0, realm: 'cloud-saml-kibana' } }, + basic: { 'cloud-basic': { order: 1 } }, })}`, '--xpack.encryptedSavedObjects.encryptionKey="wuGNaIhoMpk5sO4UBxgr3NyW1sFcLgIf"', `--server.publicBaseUrl=${servers.kibana.protocol}://${servers.kibana.hostname}:${servers.kibana.port}`, diff --git a/x-pack/test_serverless/shared/services/index.ts b/x-pack/test_serverless/shared/services/index.ts index 02a03229b8383..1072bcda09ce4 100644 --- a/x-pack/test_serverless/shared/services/index.ts +++ b/x-pack/test_serverless/shared/services/index.ts @@ -6,7 +6,10 @@ */ import { SupertestProvider, SupertestWithoutAuthProvider } from './supertest'; +import { SvlCommonApiServiceProvider } from './svl_common_api'; + export const services = { supertest: SupertestProvider, supertestWithoutAuth: SupertestWithoutAuthProvider, + svlCommonApi: SvlCommonApiServiceProvider, }; diff --git a/x-pack/test_serverless/api_integration/services/svl_common_api.ts b/x-pack/test_serverless/shared/services/svl_common_api.ts similarity index 94% rename from x-pack/test_serverless/api_integration/services/svl_common_api.ts rename to x-pack/test_serverless/shared/services/svl_common_api.ts index b23c8f70a3092..74a6983913280 100644 --- a/x-pack/test_serverless/api_integration/services/svl_common_api.ts +++ b/x-pack/test_serverless/shared/services/svl_common_api.ts @@ -7,7 +7,7 @@ import expect from '@kbn/expect'; -import { FtrProviderContext } from '../ftr_provider_context'; +import { FtrProviderContext } from '../../functional/ftr_provider_context'; const COMMON_REQUEST_HEADERS = { 'kbn-xsrf': 'some-xsrf-token', diff --git a/yarn.lock b/yarn.lock index 09c5a75781f14..14c9d60a29e6c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -23,9 +23,9 @@ tunnel "^0.0.6" "@adobe/css-tools@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.0.1.tgz#b38b444ad3aa5fedbb15f2f746dcd934226a12dd" - integrity sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g== + version "4.3.1" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.3.1.tgz#abfccb8ca78075a2b6187345c26243c1a0842f28" + integrity sha512-/62yikz7NLScCGAAST5SHdnjaDJQBDq0M2muyRTpf2VQhw6StBg2ALiu73zSJQ4fMVLA+0uBhBHAle7Wg+2kSg== "@ampproject/remapping@^2.2.0": version "2.2.0" @@ -1596,10 +1596,10 @@ resolved "https://registry.yarnpkg.com/@elastic/eslint-plugin-eui/-/eslint-plugin-eui-0.0.2.tgz#56b9ef03984a05cc213772ae3713ea8ef47b0314" integrity sha512-IoxURM5zraoQ7C8f+mJb9HYSENiZGgRVcG4tLQxE61yHNNRDXtGDWTZh8N1KIHcsqN1CEPETjuzBXkJYF/fDiQ== -"@elastic/eui@88.1.0": - version "88.1.0" - resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-88.1.0.tgz#0c10173fecd5812b035c349cc8a836fa198d1f59" - integrity sha512-0irae9LLl9j2fc11FZePhioPAyus7YGpm0yoiKOnD5JqSskqRlmlmwPCYSIEYfxbwyibA4qrbt7kenJ7PTOt5g== +"@elastic/eui@88.2.0": + version "88.2.0" + resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-88.2.0.tgz#ba29775ceaca27b6c44300bcd58783acf720b420" + integrity sha512-h756c4vB6lcyrf5bVZhLeaACWYh2t5Y8rxIX1/0BTQ4kJugBoSwSbSdGgW4G1tUa6hdYEsCzqvAQ2mI6LPSbbw== dependencies: "@hello-pangea/dnd" "^16.2.0" "@types/lodash" "^4.14.194" @@ -4122,6 +4122,10 @@ version "0.0.0" uid "" +"@kbn/custom-integrations@link:packages/kbn-custom-integrations": + version "0.0.0" + uid "" + "@kbn/cypress-config@link:packages/kbn-cypress-config": version "0.0.0" uid "" @@ -6154,6 +6158,10 @@ version "0.0.0" uid "" +"@kbn/xstate-utils@link:packages/kbn-xstate-utils": + version "0.0.0" + uid "" + "@kbn/yarn-lock-validator@link:packages/kbn-yarn-lock-validator": version "0.0.0" uid "" @@ -15167,10 +15175,10 @@ elastic-apm-node@3.46.0: traverse "^0.6.6" unicode-byte-truncate "^1.0.0" -elastic-apm-node@^3.49.1: - version "3.49.1" - resolved "https://registry.yarnpkg.com/elastic-apm-node/-/elastic-apm-node-3.49.1.tgz#c000936a1b7f062e4dd502cd3617ebe97d4d9786" - integrity sha512-k1kQ/exFqodZOoZSRJ3Csbdo7dtRs/uORBlRTyV2takYa1OIN7o9dvZwd8+eEPOUz4qaeRyVY8X9X2krk9GO/g== +elastic-apm-node@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/elastic-apm-node/-/elastic-apm-node-4.0.0.tgz#14963e5bc8cdd073400a708bd09517e198c4c605" + integrity sha512-0rf5k4UL+oNc6Xr57PKDDGDVuvW9nsLPOEI0YLqPSMBDaMdN1iW0n6MEsa4TPFtXgT1aWCdTSDUVjlgvIWKmFQ== dependencies: "@elastic/ecs-pino-format" "^1.2.0" "@opentelemetry/api" "^1.4.1" @@ -15178,7 +15186,6 @@ elastic-apm-node@^3.49.1: "@opentelemetry/sdk-metrics" "^1.12.0" after-all-results "^2.0.0" agentkeepalive "^4.2.1" - async-cache "^1.1.0" async-value-promise "^1.1.1" basic-auth "^2.0.1" breadth-filter "^2.0.0" @@ -15192,19 +15199,18 @@ elastic-apm-node@^3.49.1: fast-stream-to-buffer "^1.0.0" http-headers "^3.0.2" import-in-the-middle "1.4.2" - is-native "^1.0.1" - lru-cache "^6.0.0" + lru-cache "^10.0.1" measured-reporting "^1.51.1" module-details-from-path "^1.0.3" monitor-event-loop-delay "^1.0.0" object-filter-sequence "^1.0.0" object-identity-map "^1.0.2" original-url "^1.2.3" - pino "^6.11.2" - readable-stream "^3.4.0" + pino "^8.15.0" + readable-stream "^3.6.2" relative-microtime "^2.0.0" require-in-the-middle "^7.1.1" - semver "^6.3.1" + semver "^7.5.4" shallow-clone-shim "^2.0.0" source-map "^0.8.0-beta.0" sql-summary "^1.0.1" @@ -16126,7 +16132,7 @@ events@^1.0.2: resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= -events@^3.0.0, events@^3.2.0: +events@^3.0.0, events@^3.2.0, events@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== @@ -16477,6 +16483,11 @@ fast-redact@^3.0.0: resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.0.0.tgz#ac2f9e36c9f4976f5db9fb18c6ffbaf308cf316d" integrity sha512-a/S/Hp6aoIjx7EmugtzLqXmcNsyFszqbt6qQ99BdG61QjBZF6shNis0BYR6TsZOQ1twYc0FN2Xdhwwbv6+KD0w== +fast-redact@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.1.2.tgz#d58e69e9084ce9fa4c1a6fa98a3e1ecf5d7839aa" + integrity sha512-+0em+Iya9fKGfEQGcd62Yv6onjBmmhV1uh86XVfOU8VwAe6kaFdQCWI9s0/Nnugx5Vd9tdbZ7e6gE2tR9dzXdw== + fast-safe-stringify@^2.0.7: version "2.0.8" resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.8.tgz#dc2af48c46cf712b683e849b2bbd446b32de936f" @@ -21293,6 +21304,11 @@ lowlight@^1.14.0: fault "^1.0.0" highlight.js "~10.4.0" +lru-cache@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.1.tgz#0a3be479df549cca0e5d693ac402ff19537a6b7a" + integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g== + lru-cache@^4.0.0, lru-cache@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -23289,6 +23305,11 @@ octokit-pagination-methods@^1.1.0: resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4" integrity sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ== +on-exit-leak-free@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.0.tgz#5c703c968f7e7f851885f6459bf8a8a57edc9cc4" + integrity sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w== + on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -24002,11 +24023,24 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= +pino-abstract-transport@v1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz#083d98f966262164504afb989bccd05f665937a8" + integrity sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA== + dependencies: + readable-stream "^4.0.0" + split2 "^4.0.0" + pino-std-serializers@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz#b56487c402d882eb96cd67c257868016b61ad671" integrity sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg== +pino-std-serializers@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-6.1.0.tgz#307490fd426eefc95e06067e85d8558603e8e844" + integrity sha512-KO0m2f1HkrPe9S0ldjx7za9BJjeHqBku5Ch8JyxETxT8dEFGz1PwgrHaOQupVYitpzbFSYm7nnljxD8dik2c+g== + pino@^6.11.2: version "6.11.3" resolved "https://registry.yarnpkg.com/pino/-/pino-6.11.3.tgz#0c02eec6029d25e6794fdb6bbea367247d74bc29" @@ -24019,6 +24053,23 @@ pino@^6.11.2: quick-format-unescaped "^4.0.3" sonic-boom "^1.0.2" +pino@^8.15.0: + version "8.15.1" + resolved "https://registry.yarnpkg.com/pino/-/pino-8.15.1.tgz#04b815ff7aa4e46b1bbab88d8010aaa2b17eaba4" + integrity sha512-Cp4QzUQrvWCRJaQ8Lzv0mJzXVk4z2jlq8JNKMGaixC2Pz5L4l2p95TkuRvYbrEbe85NQsDKrAd4zalf7Ml6WiA== + dependencies: + atomic-sleep "^1.0.0" + fast-redact "^3.1.1" + on-exit-leak-free "^2.1.0" + pino-abstract-transport v1.1.0 + pino-std-serializers "^6.0.0" + process-warning "^2.0.0" + quick-format-unescaped "^4.0.3" + real-require "^0.2.0" + safe-stable-stringify "^2.3.1" + sonic-boom "^3.1.0" + thread-stream "^2.0.0" + pirates@^4.0.1, pirates@^4.0.4, pirates@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" @@ -24676,6 +24727,11 @@ process-on-spawn@^1.0.0: dependencies: fromentries "^1.2.0" +process-warning@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-2.1.0.tgz#1e60e3bfe8183033bbc1e702c2da74f099422d1a" + integrity sha512-9C20RLxrZU/rFnxWncDkuF6O999NdIf3E1ws4B0ZeY3sRVPzWBMsYDE2lxjxhiXxg464cQTgKUGm8/i6y2YGXg== + process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" @@ -25831,6 +25887,25 @@ read-pkg@^5.2.0: isarray "0.0.1" string_decoder "~0.10.x" +readable-stream@^3.6.2: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.3.0.tgz#0914d0c72db03b316c9733bb3461d64a3cc50cba" + integrity sha512-MuEnA0lbSi7JS8XM+WNJlWZkHAAdm7gETHdFK//Q/mChGyj2akEFtdLZh32jSdkWGbRwCW9pn6g3LWDdDeZnBQ== + dependencies: + abort-controller "^3.0.0" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" + readdir-glob@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.1.tgz#f0e10bb7bf7bfa7e0add8baffdc54c3f7dbee6c4" @@ -25855,6 +25930,11 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +real-require@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.2.0.tgz#209632dea1810be2ae063a6ac084fee7e33fba78" + integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== + rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" @@ -26939,6 +27019,13 @@ semver@^7.3.0, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semve dependencies: lru-cache "^6.0.0" +semver@^7.5.4: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + send@0.17.2: version "0.17.2" resolved "https://registry.yarnpkg.com/send/-/send-0.17.2.tgz#926622f76601c41808012c8bf1688fe3906f7820" @@ -27389,7 +27476,7 @@ sonic-boom@^1.0.2: atomic-sleep "^1.0.0" flatstr "^1.0.12" -sonic-boom@^3.3.0: +sonic-boom@^3.1.0, sonic-boom@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-3.3.0.tgz#cffab6dafee3b2bcb88d08d589394198bee1838c" integrity sha512-LYxp34KlZ1a2Jb8ZQgFCK3niIHzibdwtwNUWKg0qQRzsDoJ3Gfgkf8KdBTFU3SkejDEIlWwnSnpVdOZIhFMl/g== @@ -27658,6 +27745,11 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" +split2@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-4.1.0.tgz#101907a24370f85bb782f08adaabe4e281ecf809" + integrity sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -28630,6 +28722,13 @@ textarea-caret@^3.1.0: resolved "https://registry.yarnpkg.com/textarea-caret/-/textarea-caret-3.1.0.tgz#5d5a35bb035fd06b2ff0e25d5359e97f2655087f" integrity sha512-cXAvzO9pP5CGa6NKx0WYHl+8CHKZs8byMkt3PCJBCmq2a34YA9pO1NrQET5pzeqnBjBdToF5No4rrmkDUgQC2Q== +thread-stream@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-2.3.0.tgz#4fc07fb39eff32ae7bad803cb7dd9598349fed33" + integrity sha512-kaDqm1DET9pp3NXwR8382WHbnpXnRkN9xGN9dQt3B2+dmXiW8X1SOwmFOxAErEQ47ObhZ96J6yhZNXuyCOL7KA== + dependencies: + real-require "^0.2.0" + throttle-debounce@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-2.1.0.tgz#257e648f0a56bd9e54fe0f132c4ab8611df4e1d5"